From b41fb4fe7591a11d9c94ebf4730a9cf4333a59a6 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Thu, 23 Jul 2026 02:18:04 +0200 Subject: [PATCH] fix(ui): harden settings focus and semantics --- lib/data/ducet_order.dart | 530 ++++++- lib/data/hid_key_labels.dart | 2 +- lib/data/iso_639_data.dart | 2 +- lib/focus/focusable_action_bar.dart | 36 +- lib/focus/focusable_button.dart | 4 +- lib/focus/focusable_text_field.dart | 73 +- lib/focus/focusable_wrapper.dart | 20 +- lib/focus/input_mode_tracker.dart | 30 +- lib/focus/key_event_utils.dart | 22 + lib/focus/locked_hub_controller.dart | 22 +- lib/i18n/bg.i18n.json | 33 +- lib/i18n/da.i18n.json | 33 +- lib/i18n/de.i18n.json | 33 +- lib/i18n/en.i18n.json | 17 +- lib/i18n/es.i18n.json | 33 +- lib/i18n/fr.i18n.json | 33 +- lib/i18n/it.i18n.json | 33 +- lib/i18n/ja.i18n.json | 33 +- lib/i18n/ko.i18n.json | 33 +- lib/i18n/nb.i18n.json | 33 +- lib/i18n/nl.i18n.json | 33 +- lib/i18n/pl.i18n.json | 33 +- lib/i18n/pt.i18n.json | 33 +- lib/i18n/ru.i18n.json | 33 +- lib/i18n/strings.g.dart | 2 +- lib/i18n/strings_bg.g.dart | 76 +- lib/i18n/strings_da.g.dart | 76 +- lib/i18n/strings_de.g.dart | 72 +- lib/i18n/strings_en.g.dart | 72 +- lib/i18n/strings_es.g.dart | 76 +- lib/i18n/strings_fr.g.dart | 76 +- lib/i18n/strings_it.g.dart | 76 +- lib/i18n/strings_ja.g.dart | 76 +- lib/i18n/strings_ko.g.dart | 76 +- lib/i18n/strings_nb.g.dart | 76 +- lib/i18n/strings_nl.g.dart | 76 +- lib/i18n/strings_pl.g.dart | 76 +- lib/i18n/strings_pt.g.dart | 76 +- lib/i18n/strings_ru.g.dart | 76 +- lib/i18n/strings_sv.g.dart | 76 +- lib/i18n/strings_zh.g.dart | 76 +- lib/i18n/sv.i18n.json | 33 +- lib/i18n/zh.i18n.json | 33 +- lib/mixins/grid_focus_node_mixin.dart | 10 +- lib/models/shader_preset.dart | 60 +- lib/providers/shader_provider.dart | 28 +- lib/screens/catalog_item_detail_screen.dart | 9 +- lib/screens/discover_screen.dart | 5 + lib/screens/explore_screen.dart | 4 + .../focusable_detail_screen_mixin.dart | 29 +- lib/screens/libraries/alpha_jump_bar.dart | 135 +- .../libraries/alpha_scroll_handle.dart | 170 ++- .../tabs/library_recommended_tab.dart | 12 + lib/screens/livetv/tabs/whats_on_tab.dart | 3 + lib/screens/media_detail_screen.dart | 30 +- .../profile/borrow_connection_screen.dart | 108 +- lib/screens/profile/pin_entry_dialog.dart | 7 +- .../settings/hotkey_recorder_widget.dart | 208 +-- .../settings/keyboard_shortcuts_screen.dart | 47 +- lib/screens/settings/mpv_config_screen.dart | 182 ++- .../settings/services_settings_screen.dart | 4 +- lib/screens/settings/settings_screen.dart | 173 ++- lib/screens/settings/settings_utils.dart | 40 +- lib/services/keyboard_shortcuts_service.dart | 42 +- lib/services/plex_client.dart | 61 +- lib/services/settings_export_service.dart | 105 +- lib/services/settings_service.dart | 31 +- lib/services/shader_asset_loader.dart | 156 +- lib/utils/initials_palette.dart | 3 +- lib/utils/search_relevance.dart | 142 +- lib/widgets/app_bar_back_button.dart | 72 +- lib/widgets/cycling_media_backdrop.dart | 78 +- lib/widgets/desktop_app_bar.dart | 6 +- lib/widgets/focus_builders.dart | 27 +- lib/widgets/focusable_filter_chip.dart | 1 + lib/widgets/focusable_media_card.dart | 5 + lib/widgets/focusable_tab_chip.dart | 2 + lib/widgets/hotkey_recorder.dart | 1 + lib/widgets/hub_section.dart | 12 +- lib/widgets/media_card.dart | 426 +++--- lib/widgets/optimized_media_image.dart | 131 +- lib/widgets/server_activities_button.dart | 99 +- lib/widgets/setting_tile.dart | 24 +- lib/widgets/settings_section.dart | 16 +- lib/widgets/tv_browse_rail.dart | 8 +- lib/widgets/tv_virtual_keyboard.dart | 41 +- .../models/track_controls_state.dart | 4 +- .../video_controls/parts/track_controls.dart | 25 +- .../video_controls/parts/visibility.dart | 14 + .../video_controls/sheets/track_sheet.dart | 63 +- .../video_controls/video_control_button.dart | 28 +- .../video_controls/video_controls.dart | 27 +- .../widgets/circular_control_button.dart | 2 + .../video_controls/widgets/content_strip.dart | 12 + .../widgets/sync_offset_control.dart | 30 +- .../widgets/track_chapter_controls.dart | 118 +- .../widgets/video_controls_header.dart | 6 +- .../widgets/volume_control.dart | 2 + pubspec.lock | 8 + pubspec.yaml | 1 + scripts/check_codegen.py | 9 +- scripts/codegen.sh | 3 + ...ecf9ccf1541a49306993e8210fa2209aa0b.txt.gz | Bin 0 -> 590413 bytes scripts/data/allkeys-13.0.0.txt.gz | Bin 0 -> 313505 bytes scripts/data/hid_key_labels.json | 1331 +++++++++++++++++ scripts/data/iso_639_codes.json | 1110 ++++++++++++++ scripts/generate_ducet_ranks.dart | 597 +++++--- scripts/generate_hid_key_labels.dart | 208 +++ scripts/generate_iso_639_data.dart | 239 +++ scripts/test_check_codegen.py | 27 + slang.yaml | 10 +- test/data/ducet_order_test.dart | 42 + test/data/hid_key_labels_test.dart | 31 + test/data/iso_639_data_test.dart | 54 + .../focus/focusable_chip_long_press_test.dart | 20 + test/focus/grid_focus_node_mixin_test.dart | 64 + test/focus/input_mode_tracker_test.dart | 62 + test/focus/key_event_utils_test.dart | 121 ++ test/focus/locked_hub_controller_test.dart | 27 + test/i18n/empty_string_fallback_test.dart | 73 + test/i18n/locale_fallback_source_test.dart | 47 + test/models/shader_preset_test.dart | 91 +- test/providers/shader_provider_test.dart | 119 ++ .../catalog_item_detail_screen_test.dart | 59 +- .../collection_detail_screen_test.dart | 37 + .../libraries/alpha_jump_bar_test.dart | 40 + .../libraries/alpha_scroll_handle_test.dart | 78 + .../add_local_profile_screen_test.dart | 4 + .../borrow_connection_screen_test.dart | 103 ++ .../keyboard_shortcuts_screen_test.dart | 167 +++ .../settings/mpv_config_screen_test.dart | 330 ++++ .../settings/settings_screen_test.dart | 164 +- .../screens/settings/settings_utils_test.dart | 106 ++ test/scripts/generate_ducet_ranks_test.dart | 329 ++++ .../scripts/generate_hid_key_labels_test.dart | 91 ++ test/scripts/generate_iso_639_data_test.dart | 98 ++ .../data_aggregation_bridge_test.dart | 10 +- .../keyboard_shortcuts_service_test.dart | 134 ++ .../plex_client_http_contract_test.dart | 24 + .../settings_export_service_test.dart | 222 ++- test/services/shader_asset_loader_test.dart | 193 +++ test/services/shader_service_test.dart | 62 + test/utils/initials_palette_test.dart | 19 + test/utils/search_relevance_test.dart | 132 ++ test/widgets/app_bar_back_button_test.dart | 58 + test/widgets/cycling_media_backdrop_test.dart | 165 +- test/widgets/dialog_action_button_test.dart | 10 +- test/widgets/focusable_text_field_test.dart | 122 ++ test/widgets/hotkey_recorder_test.dart | 132 +- test/widgets/hub_section_test.dart | 67 + test/widgets/media_card_full_card_test.dart | 148 ++ test/widgets/optimized_media_image_test.dart | 97 ++ test/widgets/pin_entry_dialog_test.dart | 46 + test/widgets/player_queue_spoilers_test.dart | 143 +- .../server_activities_button_test.dart | 236 +++ test/widgets/track_sheet_test.dart | 87 +- test/widgets/tv_browse_rail_test.dart | 165 +- test/widgets/tv_virtual_keyboard_test.dart | 97 ++ test/widgets/video_controls_test.dart | 288 +++- 159 files changed, 12054 insertions(+), 2050 deletions(-) create mode 100644 scripts/data/FractionalUCA-651afecf9ccf1541a49306993e8210fa2209aa0b.txt.gz create mode 100644 scripts/data/allkeys-13.0.0.txt.gz create mode 100644 scripts/data/hid_key_labels.json create mode 100644 scripts/data/iso_639_codes.json create mode 100644 scripts/generate_hid_key_labels.dart create mode 100644 scripts/generate_iso_639_data.dart create mode 100644 test/data/ducet_order_test.dart create mode 100644 test/data/hid_key_labels_test.dart create mode 100644 test/data/iso_639_data_test.dart create mode 100644 test/focus/grid_focus_node_mixin_test.dart create mode 100644 test/focus/locked_hub_controller_test.dart create mode 100644 test/i18n/empty_string_fallback_test.dart create mode 100644 test/i18n/locale_fallback_source_test.dart create mode 100644 test/screens/libraries/alpha_scroll_handle_test.dart create mode 100644 test/screens/profile/borrow_connection_screen_test.dart create mode 100644 test/screens/settings/keyboard_shortcuts_screen_test.dart create mode 100644 test/screens/settings/mpv_config_screen_test.dart create mode 100644 test/scripts/generate_ducet_ranks_test.dart create mode 100644 test/scripts/generate_hid_key_labels_test.dart create mode 100644 test/scripts/generate_iso_639_data_test.dart create mode 100644 test/services/shader_asset_loader_test.dart create mode 100644 test/services/shader_service_test.dart create mode 100644 test/utils/initials_palette_test.dart create mode 100644 test/utils/search_relevance_test.dart create mode 100644 test/widgets/app_bar_back_button_test.dart diff --git a/lib/data/ducet_order.dart b/lib/data/ducet_order.dart index 755720f60..e4e8ca7ca 100644 --- a/lib/data/ducet_order.dart +++ b/lib/data/ducet_order.dart @@ -1,10 +1,522 @@ -/// Sorted BMP codepoints per DUCET (Unicode 13.0) + CLDR 39 CJK radical-stroke. +/// Dense BMP ranks per DUCET (Unicode 13.0) + pinned CLDR CJK radical-stroke. +/// Each code unit stores rank + 1; zero means absent. /// Katakana sorts before hiragana (CLDR root tailoring). /// Generated by scripts/generate_ducet_ranks.dart โ€” do not edit. library; -const String _ducetOrder = - '\u0332\u0313\u0343\u0486\u2cf1\u0314\u0485\u2cf0\u0301\u0341\u0954\u0300\u0340\u0953\u0306\u0302\u030c\u030a\u0342\u0308\u030b\u0303\u0307\u0338\u0327\u0328\u0304\u030d\u030e\u0312\u0315\u031a\u033d\u033e\u033f\u0346\u034a\u034b\u034c\u0350\u0351\u0352\u0357\u035b\u035d\u035e\u0484\u0487\u0741\u0745\u0b55\u17cb\u17cc\u17cd\u17ce\u17cf\u17d0\u17d1\u17dd\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1abb\u1abc\u1dc0\u1dc1\u1dc3\u1dc4\u1dc5\u1dc6\u1dc7\u1dc8\u1dc9\u1dcb\u1dcc\u1dcd\u1dce\u1dd1\u1df5\u1df6\u1df7\u1df8\u1dfb\u1dfe\u20f0\u2cef\ua67c\ua67d\u0316\u0317\u0318\u0319\u031c\u031d\u031e\u031f\u0320\u0329\u032a\u032b\u032c\u032f\u0333\u033a\u033b\u033c\u0347\u0348\u0349\u034d\u034e\u0353\u0354\u0355\u0356\u0359\u035a\u035c\u035f\u0362\u0742\u0746\u07fd\u0859\u085a\u085b\u1ab5\u1ab6\u1ab7\u1ab8\u1ab9\u1aba\u1abd\u1dc2\u1dcf\u1dd0\u1df9\u1dfc\u1dfd\u1dff\u20ec\u20ed\u20ee\u20ef\ufe27\u0336\u0337\u20d8\u20d9\u20da\u20e5\u20ea\u20eb\u1abe\u20dd\u20de\u20df\u20e0\u20e2\u20e3\u20e4\u3099\uff9e\u309a\uff9f\u0335\u0305\u0309\u030f\u0310\u0311\u031b\u0321\u0322\u0323\u0324\u0325\u0326\u032d\u032e\u0330\u0331\u0334\u0339\u0345\u0358\u0360\ufe22\ufe29\u0361\ufe20\u0483\ufe2e\ua66f\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05c7\u05b9\u05ba\u05bb\u05c2\u05c1\u05bc\u05bf\ufb1e\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u0818\u0819\u082d\u064b\ufe71\ufe70\u08f0\u08e7\u064c\ufe72\u08f1\u08e8\u064d\ufe74\u08f2\u08e9\u064e\ufe77\ufe76\u08e4\u08f4\u08f5\u064f\ufe79\ufe78\u08e5\u08fe\u0650\ufe7b\ufe7a\u08e6\u08f6\u0651\u0afb\ufe7d\ufe7c\u0652\u0afa\ufe7f\ufe7e\u0653\u0afc\u0654\u0655\u065f\u0656\u0657\u0658\u08ff\u0659\u065a\u065b\u065c\u065d\u065e\u08e3\u08f7\u08f8\u08fd\u08fb\u08fc\u08f9\u08fa\u0670\u0711\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073a\u073b\u073c\u073d\u073e\u073f\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u135f\u135e\u135d\ua6f0\ua6f1\u093c\u09bc\u0a3c\u0abc\u0afd\u0afe\u0aff\u0b3c\u0cbc\u1b34\u1be6\u1c37\ua9b3\u0900\u0901\u0981\u0a01\u0a81\u0b01\u0c00\u0c01\u0c81\u0d01\u0d81\u1b00\u1b01\ua8c5\ua980\u0902\u0982\u0a02\u0a82\u0b02\u0b82\u0c02\u0c04\u0c82\u0d00\u0d02\u0d82\u0f7e\u1036\u17c6\u1a74\u1b02\u1b80\u1ced\ua80b\ua880\ua981\u0903\u0983\u0a03\u0a83\u0b03\u0c03\u0c83\u0d03\u0d83\u0f7f\u1038\u17c7\u1b04\u1b82\u1cf2\u1cf3\ua881\ua983\u09fe\u0a70\u0a71\u1b03\ua982\u1b81\uabec\u0e4e\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\uaabf\uaac1\u0f39\ua92b\ua92c\ua92d\u1037\u17c8\u17c9\u17ca\u1a75\u1a76\u1a77\u1a78\u1a79\u1a7a\u1a7b\u1a7c\u1939\u193a\u193b\u302a\u302b\u302c\u302d\u302e\u302f\u20d0\u20d1\u20d2\u20d3\u20d4\u20d5\u20d6\u20d7\u20db\u20dc\u20e1\u20e6\u20e7\u20e8\u20e9\u0344\ufc5e\ufc5f\ufcf2\ufc60\ufcf3\ufc61\ufcf4\ufc62\ufc63\u0009\u000a\u000b\u000c\u000d\u0085\u2028\u2029\u0020\u3000\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2008\u2009\u200a\u205f\u00a0\u2007\u202f\u203e\ufe49\ufe4a\ufe4b\ufe4c\u005f\uff3f\ufe4d\ufe4e\ufe4f\ufe33\ufe34\u2017\u002d\uff0d\ufe63\u058a\u1400\u1b60\u1806\u1807\u2010\u2011\u2012\u2013\ufe32\u2014\ufe58\ufe31\u2015\u2e3a\u2e3b\u2053\u2e43\u2e17\u2e40\u301c\u3030\u30a0\u30fb\uff65\u002c\uff0c\ufe50\ufe10\u2e34\u2e32\u2e41\u2e4c\u2e4e\u2e4f\u055d\u060c\u060d\u066b\u066c\u07f8\u1802\u1808\ua4fe\ua60d\ua6f5\u3001\ufe51\uff64\ufe11\ufe45\ufe46\u003b\u037e\uff1b\ufe54\ufe14\u061b\u204f\u2e35\ua6f6\u2e49\u003a\uff1a\ufe55\ufe13\u2a74\u0589\u061e\u0703\u0704\u0705\u0706\u0707\u0708\u0830\u0831\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839\u083a\u083b\u083c\u083d\u083e\u1361\u1363\u1364\u1365\u1366\u1804\u1805\u0f14\u17d6\u1b5d\ua9c7\u16eb\u16ec\u16ed\ua6f4\u0021\uff01\ufe57\ufe15\u203c\u2049\u00a1\u055c\u07f9\u1944\u003f\uff1f\ufe56\ufe16\u2048\u2047\u00bf\u2e2e\u055e\u061f\u0709\u1367\u1945\u2cfa\u2cfb\ua60f\ua6f7\uaaf1\u203d\u2e18\u002e\uff0e\u2024\ufe52\u2025\ufe30\u2026\ufe19\u1801\u06d4\u0701\u0702\u1362\u1803\u1809\u166e\u1b5c\u2cf9\u2cfe\u2e30\u2e3c\ua4ff\ua60e\ua6f3\u3002\uff61\ufe12\u00b7\u0387\u2e31\u2e33\u0964\u0965\ua8ce\ua8cf\u1c3b\u1c3c\ua876\ua877\u1735\u1736\ua92f\u104a\u104b\u17d4\u17d5\u1aa8\u1aa9\u1aaa\u1aab\u1b5e\u1b5f\ua9c8\ua9c9\uaa5d\uaa5e\uaa5f\uaaf0\uabeb\u1c7e\u1c7f\u0700\u07f7\u10fb\u1360\u1368\u1a1e\u1a1f\u1b5a\u1b5b\ua9c1\ua9c2\ua9c3\ua9c4\ua9c5\ua9c6\ua9ca\ua9cb\ua9cc\ua9cd\ua6f2\ua95f\u2055\u2056\u2058\u2059\u205a\u205b\u205c\u205d\u205e\u2e2a\u2e2b\u2e2c\u2e2d\u2e3d\u2cfc\u2cff\u2e19\'\uff07\u2018\u2019\u201a\u201b\u2039\u203a\u0022\uff02\u201c\u201d\u201e\u201f\u2e42\u301d\u301e\u301f\u00ab\u00bb\u0028\uff08\ufe59\u207d\u208d\ufe35\u2474\u247d\u247e\u247f\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2475\u2487\u2476\u2477\u2478\u2479\u247a\u247b\u247c\u249c\u249d\u249e\u249f\u24a0\u24a1\u24a2\u24a3\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ac\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24b5\u3200\u320e\u3201\u320f\u3202\u3210\u3203\u3211\u3204\u3212\u3205\u3213\u3206\u3214\u3207\u3215\u321d\u321e\u3208\u3216\u321c\u3209\u3217\u320a\u3218\u320b\u3219\u320c\u321a\u320d\u321b\u3220\u3226\u3222\u3228\u3221\u3224\u3239\u323d\u3241\u3227\u3225\u3238\u3229\u323f\u3234\u323a\u3223\u322f\u323b\u3230\u322a\u3232\u322d\u3231\u322c\u322b\u3235\u323c\u3233\u3237\u3240\u3242\u3243\u3236\u323e\u322e\u0029\uff09\ufe5a\u207e\u208e\ufe36\u005b\uff3b\ufe47\u005d\uff3d\ufe48\u007b\uff5b\ufe5b\ufe37\u007d\uff5d\ufe5c\ufe38\u0f3a\u0f3b\u0f3c\u0f3d\u169b\u169c\u2045\u2046\u2308\u2309\u230a\u230b\u29fc\u29fd\u2983\u2984\u2985\uff5f\u2986\uff60\u2987\u2988\u2989\u298a\u298b\u298c\u298d\u298e\u298f\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997\u2998\u27c5\u27c6\u27e6\u27e7\u27e8\u27e9\u27ea\u27eb\u27ec\u27ed\u27ee\u27ef\u2768\u2769\u276a\u276b\u276c\u276d\u276e\u276f\u2770\u2771\u2772\u2773\u2774\u2775\u2e02\u2e03\u2e04\u2e05\u2e09\u2e0a\u2e0c\u2e0d\u2e1c\u2e1d\u2e20\u2e21\u2e22\u2e23\u2e24\u2e25\u2e26\u2e27\u2e28\u2e29\u2329\u3008\ufe3f\u232a\u3009\ufe40\u300a\ufe3d\u300b\ufe3e\u300c\uff62\ufe41\u300d\uff63\ufe42\u300e\ufe43\u300f\ufe44\u3010\ufe3b\u3011\ufe3c\u3014\ufe5d\ufe39\u3015\ufe5e\ufe3a\u3016\ufe17\u3017\ufe18\u3018\u3019\u301a\u301b\ufd3e\ufd3f\u2016\u2e3e\u29d8\u29d9\u29da\u29db\u00a7\u2e39\u00b6\u204b\u2e4d\u2e3f\u0040\uff20\ufe6b\u002a\uff0a\ufe61\u204e\u2051\u066d\ua673\u002f\uff0f\\\uff3c\ufe68\u2e4a\u0026\uff06\ufe60\u204a\u2e52\u0023\uff03\ufe5f\u0025\uff05\ufe6a\u066a\u2030\u0609\u2031\u060a\u2020\u2021\u2e36\u2e37\u2e38\u2e4b\u2022\u2023\u2027\u2043\u204c\u204d\u2032\u2033\u2034\u2057\u2035\u2036\u2037\u3003\u303d\u2038\u203b\u203f\u2054\u2040\u2050\u2041\u2042\u2e00\u2e01\u2e06\u2e07\u2e08\u2e0b\u2e0e\u2e0f\u2e10\u2e11\u2e12\u2e13\u2e14\u2e15\u2e16\u2e1a\u2e1b\u2e1e\u2e1f\u2e44\u2e45\u2e46\u2e47\u2e48\ua67e\u055a\u055b\u055f\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u070a\u070b\u070c\u070d\u085e\u1800\u0970\ua8f8\ua8f9\ua8fa\ua8fc\u09fd\u0a76\u0af0\u0c77\u0c84\u0df4\u0e4f\u0e5a\u0e5b\uaade\uaadf\u0f04\u0f05\u0f06\u0f07\u0f08\u0f09\u0f0a\u0fd0\u0fd1\u0f0b\u0f0c\u0f0d\u0f0e\u0f0f\u0f10\u0f11\u0f12\u0f85\u0fd2\u0fd3\u0fd4\u0fd9\u0fda\u1c3d\u1c3e\u1c3f\u104c\u104d\u104e\u104f\u17d8\u17d9\u17da\u1aa0\u1aa1\u1aa2\u1aa3\u1aa4\u1aa5\u1aa6\u1aac\u1aad\u1cc0\u1cc1\u1cc2\u1cc3\u1cc4\u1cc5\u1cc6\u1cc7\u2d70\ua874\ua875\u1bfc\u1bfd\u1bfe\u1bff\ua92e\ua9de\ua9df\uaa5c\u0060\u1fef\uff40\u00b4\u0384\u1ffd\u02dc\u005e\uff3e\u00af\uffe3\u02d8\u02d9\u00a8\u0385\u1fee\u1fed\u1fc1\u02da\u02dd\u00b8\u02db\u1fbd\u1fbf\u1fce\u1fcd\u1fcf\u1ffe\u1fde\u1fdd\u1fdf\u1fc0\u309b\u309c\u02b9\u0374\u0375\u02ba\u02c2\u02c3\u02c4\u02c5\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d2\u02d3\u02d4\u02d5\uab6a\uab6b\u02d6\u02d7\u02de\u02df\u02e5\u02e6\u02e7\u02e8\u02e9\u02ea\u02eb\u02ec\u02ed\u02ef\u02f0\u02f1\u02f2\u02f3\u02f4\u02f5\u02f6\u02f7\u02f8\u02f9\u02fa\u02fb\u02fc\u02fd\u02fe\u02ff\u1390\u1391\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399\ua700\ua701\ua702\ua703\ua704\ua705\ua706\ua707\ua708\ua709\ua70a\ua70b\ua70c\ua70d\ua70e\ua70f\ua710\ua711\ua712\ua713\ua714\ua715\ua716\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua720\ua721\ua788\ua789\ua78a\uab5b\u00b0\u2103\u2109\u0482\u058d\u058e\u0608\u060e\u060f\u06de\u06e9\ufdfd\ufbb2\ufbb3\ufbb4\ufbb5\ufbb6\ufbb7\ufbb8\ufbb9\ufbba\ufbbb\ufbbc\ufbbd\ufbbe\ufbbf\ufbc0\ufbc1\u07f6\u09fa\u0b70\u0bf3\u0bf4\u0bf5\u0bf6\u0bf7\u0bf8\u0bfa\u0c7f\u0d4f\u0d79\ua828\ua829\ua82a\ua82b\ua836\ua837\ua839\u0f01\u0f02\u0f03\u0f13\u0f15\u0f16\u0f17\u0f1a\u0f1b\u0f1c\u0f1d\u0f1e\u0f1f\u0f34\u0f36\u0f38\u0fbe\u0fbf\u0fc0\u0fc1\u0fc2\u0fc3\u0fc4\u0fc5\u0fc7\u0fc8\u0fc9\u0fca\u0fcb\u0fcc\u0fce\u0fcf\u0fd5\u0fd6\u0fd7\u0fd8\u166d\u1940\u109e\u109f\uaa77\uaa78\uaa79\u19e0\u19e1\u19e2\u19e3\u19e4\u19e5\u19e6\u19e7\u19e8\u19e9\u19ea\u19eb\u19ec\u19ed\u19ee\u19ef\u19f0\u19f1\u19f2\u19f3\u19f4\u19f5\u19f6\u19f7\u19f8\u19f9\u19fa\u19fb\u19fc\u19fd\u19fe\u19ff\u1b61\u1b62\u1b63\u1b64\u1b65\u1b66\u1b67\u1b68\u1b69\u1b6a\u1b74\u1b75\u1b76\u1b77\u1b78\u1b79\u1b7a\u1b7b\u1b7c\u00a9\u00ae\u2104\u2108\u2114\u2117\u2118\u211e\u211f\u2123\u2125\u2127\u2129\u212e\u213a\u2141\u2142\u2143\u2144\u214a\u214c\u214f\u218a\u218b\u2190\uffe9\u219a\u2192\uffeb\u219b\u2191\uffea\u2193\uffec\u2194\u21ae\u2195\u2196\u2197\u2198\u2199\u219c\u219d\u219e\u219f\u21a0\u21a1\u21a2\u21a3\u21a4\u21a5\u21a6\u21a7\u21a8\u21a9\u21aa\u21ab\u21ac\u21ad\u21af\u21b0\u21b1\u21b2\u21b3\u21b4\u21b5\u21b6\u21b7\u21b8\u21b9\u21ba\u21bb\u21bc\u21bd\u21be\u21bf\u21c0\u21c1\u21c2\u21c3\u21c4\u21c5\u21c6\u21c7\u21c8\u21c9\u21ca\u21cb\u21cc\u21d0\u21cd\u21d1\u21d2\u21cf\u21d3\u21d4\u21ce\u21d5\u21d6\u21d7\u21d8\u21d9\u21da\u21db\u21dc\u21dd\u21de\u21df\u21e0\u21e1\u21e2\u21e3\u21e4\u21e5\u21e6\u21e7\u21e8\u21e9\u21ea\u21eb\u21ec\u21ed\u21ee\u21ef\u21f0\u21f1\u21f2\u21f3\u21f4\u21f5\u21f6\u21f7\u21f8\u21f9\u21fa\u21fb\u21fc\u21fd\u21fe\u21ff\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207\u2208\u2209\u220a\u220b\u220c\u220d\u03f6\u220e\u220f\u2210\u2211\u2140\u002b\uff0b\ufb29\ufe62\u207a\u208a\u00b1\u00f7\u00d7\u003c\uff1c\ufe64\u226e\u003d\uff1d\ufe66\u207c\u208c\u2260\u2a75\u2a76\u003e\uff1e\ufe65\u226f\u00ac\uffe2\u007c\uff5c\u00a6\uffe4\u007e\uff5e\u2212\u207b\u208b\u2052\u2213\u2214\u2215\u2044\u2216\u2217\u2218\u2219\u221a\u221b\u0606\u221c\u0607\u221d\u221e\u221f\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227\u2228\u2229\u222a\u222b\u222c\u222d\u2a0c\u222e\u222f\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237\u2238\u2239\u223a\u223b\u223c\u2241\u223d\u223e\u223f\u2240\u2242\u2243\u2244\u2245\u2247\u2246\u2248\u2249\u224a\u224b\u224c\u224d\u226d\u224e\u224f\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257\u2258\u2259\u225a\u225b\u225c\u225d\u225e\u225f\u2261\u2262\u2263\u2264\u2270\u2265\u2271\u2266\u2267\u2268\u2269\u226a\u226b\u226c\u2272\u2274\u2273\u2275\u2276\u2278\u2277\u2279\u227a\u2280\u227b\u2281\u227c\u22e0\u227d\u22e1\u227e\u227f\u2282\u2284\u2283\u2285\u2286\u2288\u2287\u2289\u228a\u228b\u228c\u228d\u228e\u228f\u2290\u2291\u22e2\u2292\u22e3\u2293\u2294\u2295\u2296\u2297\u2298\u2299\u229a\u229b\u229c\u229d\u229e\u229f\u22a0\u22a1\u22a2\u22ac\u22a3\u22a4\u22a5\u22a6\u22a7\u22a8\u22ad\u22a9\u22ae\u22aa\u22ab\u22af\u22b0\u22b1\u22b2\u22ea\u22b3\u22eb\u22b4\u22ec\u22b5\u22ed\u22b6\u22b7\u22b8\u22b9\u22ba\u22bb\u22bc\u214b\u22bd\u22be\u22bf\u22c0\u22c1\u22c2\u22c3\u22c4\u22c5\u22c6\u22c7\u22c8\u22c9\u22ca\u22cb\u22cc\u22cd\u22ce\u22cf\u22d0\u22d1\u22d2\u22d3\u22d4\u22d5\u22d6\u22d7\u22d8\u22d9\u22da\u22db\u22dc\u22dd\u22de\u22df\u22e4\u22e5\u22e6\u22e7\u22e8\u22e9\u22ee\u22ef\u22f0\u22f1\u22f2\u22f3\u22f4\u22f5\u22f6\u22f7\u22f8\u22f9\u22fa\u22fb\u22fc\u22fd\u22fe\u22ff\u2300\u2301\u2302\u2303\u2304\u2305\u2306\u2307\u230c\u230d\u230e\u230f\u2310\u2311\u2312\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231a\u231b\u231c\u231d\u231e\u231f\u2320\u2321\u2322\u2323\u2324\u2325\u2326\u2327\u2328\u232b\u232c\u232d\u232e\u232f\u2330\u2331\u2332\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233a\u233b\u233c\u233d\u233e\u233f\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234a\u234b\u234c\u234d\u234e\u234f\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357\u2358\u2359\u235a\u235b\u235c\u235d\u235e\u235f\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236a\u236b\u236c\u236d\u236e\u236f\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237a\u237b\u237c\u237d\u237e\u237f\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238a\u238b\u238c\u238d\u238e\u238f\u2390\u2391\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239a\u239b\u239c\u239d\u239e\u239f\u23a0\u23a1\u23a2\u23a3\u23a4\u23a5\u23a6\u23a7\u23a8\u23a9\u23aa\u23ab\u23ac\u23ad\u23ae\u23af\u23b0\u23b1\u23b2\u23b3\u23b4\u23b5\u23b6\u23b7\u23b8\u23b9\u23ba\u23bb\u23bc\u23bd\u23be\u23bf\u23c0\u23c1\u23c2\u23c3\u23c4\u23c5\u23c6\u23c7\u23c8\u23c9\u23ca\u23cb\u23cc\u23cd\u23ce\u23cf\u23d0\u23d1\u23d2\u23d3\u23d4\u23d5\u23d6\u23d7\u23d8\u23d9\u23da\u23db\u23dc\u23dd\u23de\u23df\u23e0\u23e1\u23e2\u23e3\u23e4\u23e5\u23e6\u23e7\u23e8\u23e9\u23ea\u23eb\u23ec\u23ed\u23ee\u23ef\u23f0\u23f1\u23f2\u23f3\u23f4\u23f5\u23f6\u23f7\u23f8\u23f9\u23fa\u23fb\u23fc\u23fd\u23fe\u23ff\u2400\u2401\u2402\u2403\u2404\u2405\u2406\u2407\u2408\u2409\u240a\u240b\u240c\u240d\u240e\u240f\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u2419\u241a\u241b\u241c\u241d\u241e\u241f\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244a\u2500\u2501\u2502\uffe8\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250a\u250b\u250c\u250d\u250e\u250f\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251a\u251b\u251c\u251d\u251e\u251f\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252a\u252b\u252c\u252d\u252e\u252f\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253a\u253b\u253c\u253d\u253e\u253f\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254a\u254b\u254c\u254d\u254e\u254f\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255a\u255b\u255c\u255d\u255e\u255f\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256a\u256b\u256c\u256d\u256e\u256f\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577\u2578\u2579\u257a\u257b\u257c\u257d\u257e\u257f\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u2589\u258a\u258b\u258c\u258d\u258e\u258f\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597\u2598\u2599\u259a\u259b\u259c\u259d\u259e\u259f\u25a0\uffed\u25a1\u25a2\u25a3\u25a4\u25a5\u25a6\u25a7\u25a8\u25a9\u25aa\u25ab\u25ac\u25ad\u25ae\u25af\u25b0\u25b1\u25b2\u25b3\u25b4\u25b5\u25b6\u25b7\u25b8\u25b9\u25ba\u25bb\u25bc\u25bd\u25be\u25bf\u25c0\u25c1\u25c2\u25c3\u25c4\u25c5\u25c6\u25c7\u25c8\u25c9\u25ca\u25cb\uffee\u25cc\u25cd\u25ce\u25cf\u25d0\u25d1\u25d2\u25d3\u25d4\u25d5\u25d6\u25d7\u25d8\u25d9\u25da\u25db\u25dc\u25dd\u25de\u25df\u25e0\u25e1\u25e2\u25e3\u25e4\u25e5\u25e6\u25e7\u25e8\u25e9\u25ea\u25eb\u25ec\u25ed\u25ee\u25ef\u25f0\u25f1\u25f2\u25f3\u25f4\u25f5\u25f6\u25f7\u25f8\u25f9\u25fa\u25fb\u25fc\u25fd\u25fe\u25ff\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607\u2608\u2609\u260a\u260b\u260c\u260d\u260e\u260f\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u261d\u261e\u261f\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627\u2628\u2629\u262a\u262b\u262c\u262d\u262e\u262f\u2638\u2639\u263a\u263b\u263c\u263d\u263e\u263f\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264a\u264b\u264c\u264d\u264e\u264f\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659\u265a\u265b\u265c\u265d\u265e\u265f\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667\u2668\u2669\u266a\u266b\u266c\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677\u2678\u2679\u267a\u267b\u267c\u267d\u267e\u267f\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687\u2688\u2689\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697\u2698\u2699\u269a\u269b\u269c\u269d\u269e\u269f\u26a0\u26a1\u26a2\u26a3\u26a4\u26a5\u26a6\u26a7\u26a8\u26a9\u26aa\u26ab\u26ac\u26ad\u26ae\u26af\u26b0\u26b1\u26b2\u26b3\u26b4\u26b5\u26b6\u26b7\u26b8\u26b9\u26ba\u26bb\u26bc\u26bd\u26be\u26bf\u26c0\u26c1\u26c2\u26c3\u26c4\u26c5\u26c6\u26c7\u26c8\u26c9\u26ca\u26cb\u26cc\u26cd\u26ce\u26cf\u26d0\u26d1\u26d2\u26d3\u26d4\u26d5\u26d6\u26d7\u26d8\u26d9\u26da\u26db\u26dc\u26dd\u26de\u26df\u26e0\u26e1\u26e2\u26e3\u26e4\u26e5\u26e6\u26e7\u26e8\u26e9\u26ea\u26eb\u26ec\u26ed\u26ee\u26ef\u26f0\u26f1\u26f2\u26f3\u26f4\u26f5\u26f6\u26f7\u26f8\u26f9\u26fa\u26fb\u26fc\u26fd\u26fe\u26ff\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707\u2708\u2709\u270a\u270b\u270c\u270d\u270e\u270f\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717\u2718\u2719\u271a\u271b\u271c\u271d\u271e\u271f\u2720\u2e50\u2e51\u2721\u2722\u2723\u2724\u2725\u2726\u2727\u2728\u2729\u272a\u272b\u272c\u272d\u272e\u272f\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737\u2738\u2739\u273a\u273b\u273c\u273d\u273e\u273f\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747\u2748\u2749\u274a\u274b\u274c\u274d\u274e\u274f\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757\u2758\u2759\u275a\u275b\u275c\u275d\u275e\u275f\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767\u2794\u2795\u2796\u2797\u2798\u2799\u279a\u279b\u279c\u279d\u279e\u279f\u27a0\u27a1\u27a2\u27a3\u27a4\u27a5\u27a6\u27a7\u27a8\u27a9\u27aa\u27ab\u27ac\u27ad\u27ae\u27af\u27b0\u27b1\u27b2\u27b3\u27b4\u27b5\u27b6\u27b7\u27b8\u27b9\u27ba\u27bb\u27bc\u27bd\u27be\u27bf\u27c0\u27c1\u27c2\u27c3\u27c4\u27c7\u27c8\u27c9\u27ca\u27cb\u27cc\u27cd\u27ce\u27cf\u27d0\u27d1\u27d2\u27d3\u27d4\u27d5\u27d6\u27d7\u27d8\u27d9\u27da\u27db\u27dc\u27dd\u27de\u27df\u27e0\u27e1\u27e2\u27e3\u27e4\u27e5\u27f0\u27f1\u27f2\u27f3\u27f4\u27f5\u27f6\u27f7\u27f8\u27f9\u27fa\u27fb\u27fc\u27fd\u27fe\u27ff\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907\u2908\u2909\u290a\u290b\u290c\u290d\u290e\u290f\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919\u291a\u291b\u291c\u291d\u291e\u291f\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929\u292a\u292b\u292c\u292d\u292e\u292f\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939\u293a\u293b\u293c\u293d\u293e\u293f\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947\u2948\u2949\u294a\u294b\u294c\u294d\u294e\u294f\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959\u295a\u295b\u295c\u295d\u295e\u295f\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967\u2968\u2969\u296a\u296b\u296c\u296d\u296e\u296f\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979\u297a\u297b\u297c\u297d\u297e\u297f\u2980\u2981\u2982\u2999\u299a\u299b\u299c\u299d\u299e\u299f\u29a0\u29a1\u29a2\u29a3\u29a4\u29a5\u29a6\u29a7\u29a8\u29a9\u29aa\u29ab\u29ac\u29ad\u29ae\u29af\u29b0\u29b1\u29b2\u29b3\u29b4\u29b5\u29b6\u29b7\u29b8\u29b9\u29ba\u29bb\u29bc\u29bd\u29be\u29bf\u29c0\u29c1\u29c2\u29c3\u29c4\u29c5\u29c6\u29c7\u29c8\u29c9\u29ca\u29cb\u29cc\u29cd\u29ce\u29cf\u29d0\u29d1\u29d2\u29d3\u29d4\u29d5\u29d6\u29d7\u29dc\u29dd\u29de\u29df\u29e0\u29e1\u29e2\u29e3\u29e4\u29e5\u29e6\u29e7\u29e8\u29e9\u29ea\u29eb\u29ec\u29ed\u29ee\u29ef\u29f0\u29f1\u29f2\u29f3\u29f4\u29f5\u29f6\u29f7\u29f8\u29f9\u29fa\u29fb\u29fe\u29ff\u2a00\u2a01\u2a02\u2a03\u2a04\u2a05\u2a06\u2a07\u2a08\u2a09\u2a0a\u2a0b\u2a0d\u2a0e\u2a0f\u2a10\u2a11\u2a12\u2a13\u2a14\u2a15\u2a16\u2a17\u2a18\u2a19\u2a1a\u2a1b\u2a1c\u2a1d\u2a1e\u2a1f\u2a20\u2a21\u2a22\u2a23\u2a24\u2a25\u2a26\u2a27\u2a28\u2a29\u2a2a\u2a2b\u2a2c\u2a2d\u2a2e\u2a2f\u2a30\u2a31\u2a32\u2a33\u2a34\u2a35\u2a36\u2a37\u2a38\u2a39\u2a3a\u2a3b\u2a3c\u2a3d\u2a3e\u2a3f\u2a40\u2a41\u2a42\u2a43\u2a44\u2a45\u2a46\u2a47\u2a48\u2a49\u2a4a\u2a4b\u2a4c\u2a4d\u2a4e\u2a4f\u2a50\u2a51\u2a52\u2a53\u2a54\u2a55\u2a56\u2a57\u2a58\u2a59\u2a5a\u2a5b\u2a5c\u2a5d\u2a5e\u2a5f\u2a60\u2a61\u2a62\u2a63\u2a64\u2a65\u2a66\u2a67\u2a68\u2a69\u2a6a\u2a6b\u2a6c\u2a6d\u2a6e\u2a6f\u2a70\u2a71\u2a72\u2a73\u2a77\u2a78\u2a79\u2a7a\u2a7b\u2a7c\u2a7d\u2a7e\u2a7f\u2a80\u2a81\u2a82\u2a83\u2a84\u2a85\u2a86\u2a87\u2a88\u2a89\u2a8a\u2a8b\u2a8c\u2a8d\u2a8e\u2a8f\u2a90\u2a91\u2a92\u2a93\u2a94\u2a95\u2a96\u2a97\u2a98\u2a99\u2a9a\u2a9b\u2a9c\u2a9d\u2a9e\u2a9f\u2aa0\u2aa1\u2aa2\u2aa3\u2aa4\u2aa5\u2aa6\u2aa7\u2aa8\u2aa9\u2aaa\u2aab\u2aac\u2aad\u2aae\u2aaf\u2ab0\u2ab1\u2ab2\u2ab3\u2ab4\u2ab5\u2ab6\u2ab7\u2ab8\u2ab9\u2aba\u2abb\u2abc\u2abd\u2abe\u2abf\u2ac0\u2ac1\u2ac2\u2ac3\u2ac4\u2ac5\u2ac6\u2ac7\u2ac8\u2ac9\u2aca\u2acb\u2acc\u2acd\u2ace\u2acf\u2ad0\u2ad1\u2ad2\u2ad3\u2ad4\u2ad5\u2ad6\u2ad7\u2ad8\u2ad9\u2ada\u2adb\u2add\u2adc\u2ade\u2adf\u2ae0\u2ae1\u2ae2\u2ae3\u2ae4\u2ae5\u2ae6\u2ae7\u2ae8\u2ae9\u2aea\u2aeb\u2aec\u2aed\u2aee\u2aef\u2af0\u2af1\u2af2\u2af3\u2af4\u2af5\u2af6\u2af7\u2af8\u2af9\u2afa\u2afb\u2afc\u2afd\u2afe\u2aff\u2b00\u2b01\u2b02\u2b03\u2b04\u2b05\u2b06\u2b07\u2b08\u2b09\u2b0a\u2b0b\u2b0c\u2b0d\u2b0e\u2b0f\u2b10\u2b11\u2b12\u2b13\u2b14\u2b15\u2b16\u2b17\u2b18\u2b19\u2b1a\u2b1b\u2b1c\u2b1d\u2b1e\u2b1f\u2b20\u2b21\u2b22\u2b23\u2b24\u2b25\u2b26\u2b27\u2b28\u2b29\u2b2a\u2b2b\u2b2c\u2b2d\u2b2e\u2b2f\u2b30\u2b31\u2b32\u2b33\u2b34\u2b35\u2b36\u2b37\u2b38\u2b39\u2b3a\u2b3b\u2b3c\u2b3d\u2b3e\u2b3f\u2b40\u2b41\u2b42\u2b43\u2b44\u2b45\u2b46\u2b47\u2b48\u2b49\u2b4a\u2b4b\u2b4c\u2b4d\u2b4e\u2b4f\u2b50\u2b51\u2b52\u2b53\u2b54\u2b55\u2b56\u2b57\u2b58\u2b59\u2b5a\u2b5b\u2b5c\u2b5d\u2b5e\u2b5f\u2b60\u2b61\u2b62\u2b63\u2b64\u2b65\u2b66\u2b67\u2b68\u2b69\u2b6a\u2b6b\u2b6c\u2b6d\u2b6e\u2b6f\u2b70\u2b71\u2b72\u2b73\u2b76\u2b77\u2b78\u2b79\u2b7a\u2b7b\u2b7c\u2b7d\u2b7e\u2b7f\u2b80\u2b81\u2b82\u2b83\u2b84\u2b85\u2b86\u2b87\u2b88\u2b89\u2b8a\u2b8b\u2b8c\u2b8d\u2b8e\u2b8f\u2b90\u2b91\u2b92\u2b93\u2b94\u2b95\u2b97\u2b98\u2b99\u2b9a\u2b9b\u2b9c\u2b9d\u2b9e\u2b9f\u2ba0\u2ba1\u2ba2\u2ba3\u2ba4\u2ba5\u2ba6\u2ba7\u2ba8\u2ba9\u2baa\u2bab\u2bac\u2bad\u2bae\u2baf\u2bb0\u2bb1\u2bb2\u2bb3\u2bb4\u2bb5\u2bb6\u2bb7\u2bb8\u2bb9\u2bba\u2bbb\u2bbc\u2bbd\u2bbe\u2bbf\u2bc0\u2bc1\u2bc2\u2bc3\u2bc4\u2bc5\u2bc6\u2bc7\u2bc8\u2bc9\u2bca\u2bcb\u2bcc\u2bcd\u2bce\u2bcf\u2bd0\u2bd1\u2bd2\u2bd3\u2bd4\u2bd5\u2bd6\u2bd7\u2bd8\u2bd9\u2bda\u2bdb\u2bdc\u2bdd\u2bde\u2bdf\u2be0\u2be1\u2be2\u2be3\u2be4\u2be5\u2be6\u2be7\u2be8\u2be9\u2bea\u2beb\u2bec\u2bed\u2bee\u2bef\u2bf0\u2bf1\u2bf2\u2bf3\u2bf4\u2bf5\u2bf6\u2bf7\u2bf8\u2bf9\u2bfa\u2bfb\u2bfc\u2bfd\u2bfe\u2bff\u2ce5\u2ce6\u2ce7\u2ce8\u2ce9\u2cea\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u280d\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817\u2818\u2819\u281a\u281b\u281c\u281d\u281e\u281f\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857\u2858\u2859\u285a\u285b\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286d\u286e\u286f\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u28d1\u28d2\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28da\u28db\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28ea\u28eb\u28ec\u28ed\u28ee\u28ef\u28f0\u28f1\u28f2\u28f3\u28f4\u28f5\u28f6\u28f7\u28f8\u28f9\u28fa\u28fb\u28fc\u28fd\u28fe\u28ff\u268a\u268b\u268c\u268d\u268e\u268f\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637\u4dc0\u4dc1\u4dc2\u4dc3\u4dc4\u4dc5\u4dc6\u4dc7\u4dc8\u4dc9\u4dca\u4dcb\u4dcc\u4dcd\u4dce\u4dcf\u4dd0\u4dd1\u4dd2\u4dd3\u4dd4\u4dd5\u4dd6\u4dd7\u4dd8\u4dd9\u4dda\u4ddb\u4ddc\u4ddd\u4dde\u4ddf\u4de0\u4de1\u4de2\u4de3\u4de4\u4de5\u4de6\u4de7\u4de8\u4de9\u4dea\u4deb\u4dec\u4ded\u4dee\u4def\u4df0\u4df1\u4df2\u4df3\u4df4\u4df5\u4df6\u4df7\u4df8\u4df9\u4dfa\u4dfb\u4dfc\u4dfd\u4dfe\u4dff\ua490\ua491\ua492\ua493\ua494\ua495\ua496\ua497\ua498\ua499\ua49a\ua49b\ua49c\ua49d\ua49e\ua49f\ua4a0\ua4a1\ua4a2\ua4a3\ua4a4\ua4a5\ua4a6\ua4a7\ua4a8\ua4a9\ua4aa\ua4ab\ua4ac\ua4ad\ua4ae\ua4af\ua4b0\ua4b1\ua4b2\ua4b3\ua4b4\ua4b5\ua4b6\ua4b7\ua4b8\ua4b9\ua4ba\ua4bb\ua4bc\ua4bd\ua4be\ua4bf\ua4c0\ua4c1\ua4c2\ua4c3\ua4c4\ua4c5\ua4c6\u266d\u266e\u266f\u2ff0\u2ff1\u2ff2\u2ff3\u2ff4\u2ff5\u2ff6\u2ff7\u2ff8\u2ff9\u2ffa\u2ffb\u31c0\u31c1\u31c2\u31c3\u31c4\u31c5\u31c6\u31c7\u31c8\u31c9\u31ca\u31cb\u31cc\u31cd\u31ce\u31cf\u31d0\u31d1\u31d2\u31d3\u31d4\u31d5\u31d6\u31d7\u31d8\u31d9\u31da\u31db\u31dc\u31dd\u31de\u31df\u31e0\u31e1\u31e2\u31e3\u3004\u3012\u3036\u3013\u3020\u3037\u303e\u303f\u3190\u3191\u327f\ufffc\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u0b72\u0b73\u0b74\u0b75\u0b76\u0b77\ua830\ua831\ua832\ua833\ua834\ua835\u0bf0\u0bf1\u0bf2\u0d58\u0d59\u0d5a\u0d5b\u0d5c\u0d5d\u0d5e\u0d70\u0d71\u0d72\u0d73\u0d74\u0d75\u0d76\u0d77\u0d78\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379\u137a\u137b\u137c\u2180\u2181\u2182\u2186\u2187\u2188\u2cfd\u02d0\u02d1\u0971\u0e46\u0ec6\u17d7\u1aa7\ua9cf\ua9e6\uaa70\uaadd\uaaf3\uaaf4\u3005\u303b\u3031\u3032\u3033\u3034\u3035\u309d\u309e\u30fc\uff70\u30fd\u30fe\u00a4\u00a2\uffe0\$\uff04\ufe69\u00a3\uffe1\u00a5\uffe5\u058f\u060b\u07fe\u07ff\u09f2\u09f3\u09fb\u0af1\ua838\u0bf9\u0e3f\u17db\u20a0\u20a1\u20a2\u20a3\u20a4\u20a5\u20a6\u20a7\u20a9\uffe6\u20aa\u20ab\u20ac\u20ad\u20ae\u20af\u20b0\u20b1\u20b2\u20b3\u20b4\u20b5\u20b6\u20b7\u20b8\u20b9\u20ba\u20bb\u20bc\u20bd\u20be\u20bf\u0030\u0660\u06f0\u07c0\u0966\u09e6\u0a66\u0ae6\u0b66\u0be6\u0c66\u0c78\u0ce6\u0d66\u0de6\u0e50\u0ed0\u0f20\u1040\u1090\u17e0\u17f0\u1810\u1946\u19d0\u1a80\u1a90\u1b50\u1bb0\u1c40\u1c50\u3007\ua620\ua8d0\ua900\ua9d0\ua9f0\uaa50\uabf0\uff10\u0f33\u24ea\u24ff\u2070\u2080\u2189\u3358\u0031\u0661\u06f1\u07c1\u0967\u09e7\u0a67\u0ae7\u0b67\u0be7\u0c67\u0c79\u0c7c\u0ce7\u0d67\u0de7\u0e51\u0ed1\u0f21\u1041\u1091\u1369\u17e1\u17f1\u1811\u1947\u19d1\u19da\u1a81\u1a91\u1b51\u1bb1\u1c41\u1c51\u3021\ua621\ua8d1\ua901\ua9d1\ua9f1\uaa51\uabf1\uff11\u0f2a\u2460\u24f5\u2776\u2780\u278a\u00b9\u2081\u2488\u215f\u2152\u00bd\u2153\u00bc\u2155\u2159\u2150\u215b\u2151\u2469\u24fe\u277f\u2789\u2793\u3248\u2491\u33e9\u32c9\u3362\u246a\u24eb\u2492\u33ea\u32ca\u3363\u246b\u24ec\u2493\u33eb\u32cb\u3364\u246c\u24ed\u2494\u33ec\u3365\u246d\u24ee\u2495\u33ed\u3366\u246e\u24ef\u2496\u33ee\u3367\u246f\u24f0\u2497\u33ef\u3368\u2470\u24f1\u2498\u33f0\u3369\u2471\u24f2\u2499\u33f1\u336a\u2472\u24f3\u249a\u33f2\u336b\u33e0\u32c0\u3359\u0032\u0662\u06f2\u07c2\u0968\u09e8\u0a68\u0ae8\u0b68\u0be8\u0c68\u0c7a\u0c7d\u0ce8\u0d68\u0de8\u0e52\u0ed2\u0f22\u1042\u1092\u136a\u17e2\u17f2\u1812\u1948\u19d2\u1a82\u1a92\u1b52\u1bb2\u1c42\u1c52\u3022\ua622\ua8d2\ua902\ua9d2\ua9f2\uaa52\uabf2\uff12\u0f2b\u2461\u24f6\u2777\u2781\u278b\u00b2\u2082\u2489\u2154\u2156\u2473\u24f4\u3249\u249b\u33f3\u336c\u3251\u33f4\u336d\u3252\u33f5\u336e\u3253\u33f6\u336f\u3254\u33f7\u3370\u3255\u33f8\u3256\u33f9\u3257\u33fa\u3258\u33fb\u3259\u33fc\u33e1\u32c1\u335a\u0033\u0663\u06f3\u07c3\u0969\u09e9\u0a69\u0ae9\u0b69\u0be9\u0c69\u0c7b\u0c7e\u0ce9\u0d69\u0de9\u0e53\u0ed3\u0f23\u1043\u1093\u136b\u17e3\u17f3\u1813\u1949\u19d3\u1a83\u1a93\u1b53\u1bb3\u1c43\u1c53\u3023\ua623\ua8d3\ua903\ua9d3\ua9f3\uaa53\uabf3\uff13\u0f2c\u2462\u24f7\u2778\u2782\u278c\u00b3\u2083\u248a\u00be\u2157\u215c\u324a\u325a\u33fd\u325b\u33fe\u325c\u325d\u325e\u325f\u32b1\u32b2\u32b3\u32b4\u33e2\u32c2\u335b\u0034\u0664\u06f4\u07c4\u096a\u09ea\u0a6a\u0aea\u0b6a\u0bea\u0c6a\u0cea\u0d6a\u0dea\u0e54\u0ed4\u0f24\u1044\u1094\u136c\u17e4\u17f4\u1814\u194a\u19d4\u1a84\u1a94\u1b54\u1bb4\u1c44\u1c54\u3024\ua624\ua8d4\ua904\ua9d4\ua9f4\uaa54\uabf4\uff14\u0f2d\u2463\u24f8\u2779\u2783\u278d\u2074\u2084\u248b\u2158\u324b\u32b5\u32b6\u32b7\u32b8\u32b9\u32ba\u32bb\u32bc\u32bd\u32be\u33e3\u32c3\u335c\u0035\u0665\u06f5\u07c5\u096b\u09eb\u0a6b\u0aeb\u0b6b\u0beb\u0c6b\u0ceb\u0d6b\u0deb\u0e55\u0ed5\u0f25\u1045\u1095\u136d\u17e5\u17f5\u1815\u194b\u19d5\u1a85\u1a95\u1b55\u1bb5\u1c45\u1c55\u3025\ua625\ua8d5\ua905\ua9d5\ua9f5\uaa55\uabf5\uff15\u0f2e\u2464\u24f9\u277a\u2784\u278e\u2075\u2085\u248c\u215a\u215d\u324c\u32bf\u33e4\u32c4\u335d\u0036\u0666\u06f6\u07c6\u096c\u09ec\u0a6c\u0aec\u0b6c\u0bec\u0c6c\u0cec\u0d6c\u0dec\u0e56\u0ed6\u0f26\u1046\u1096\u136e\u17e6\u17f6\u1816\u194c\u19d6\u1a86\u1a96\u1b56\u1bb6\u1c46\u1c56\u2185\u3026\ua626\ua8d6\ua906\ua9d6\ua9f6\uaa56\uabf6\uff16\u0f2f\u2465\u24fa\u277b\u2785\u278f\u2076\u2086\u248d\u324d\u33e5\u32c5\u335e\u0037\u0667\u06f7\u07c7\u096d\u09ed\u0a6d\u0aed\u0b6d\u0bed\u0c6d\u0ced\u0d6d\u0ded\u0e57\u0ed7\u0f27\u1047\u1097\u136f\u17e7\u17f7\u1817\u194d\u19d7\u1a87\u1a97\u1b57\u1bb7\u1c47\u1c57\u3027\ua627\ua8d7\ua907\ua9d7\ua9f7\uaa57\uabf7\uff17\u0f30\u2466\u24fb\u277c\u2786\u2790\u2077\u2087\u248e\u215e\u324e\u33e6\u32c6\u335f\u0038\u0668\u06f8\u07c8\u096e\u09ee\u0a6e\u0aee\u0b6e\u0bee\u0c6e\u0cee\u0d6e\u0dee\u0e58\u0ed8\u0f28\u1048\u1098\u1370\u17e8\u17f8\u1818\u194e\u19d8\u1a88\u1a98\u1b58\u1bb8\u1c48\u1c58\u3028\ua628\ua8d8\ua908\ua9d8\ua9f8\uaa58\uabf8\uff18\u0f31\u2467\u24fc\u277d\u2787\u2791\u2078\u2088\u248f\u324f\u33e7\u32c7\u3360\u0039\u0669\u06f9\u07c9\u096f\u09ef\u0a6f\u0aef\u0b6f\u0bef\u0c6f\u0cef\u0d6f\u0def\u0e59\u0ed9\u0f29\u1049\u1099\u1371\u17e9\u17f9\u1819\u194f\u19d9\u1a89\u1a99\u1b59\u1bb9\u1c49\u1c59\u3029\ua629\ua8d9\ua909\ua9d9\ua9f9\uaa59\uabf9\uff19\u0f32\u2468\u24fd\u277e\u2788\u2792\u2079\u2089\u2490\u33e8\u32c8\u3361\u0061\uff41\u0363\u24d0\u0041\uff21\u24b6\u00aa\u1d43\u2090\u1d2c\u00e1\u00c1\u00e0\u00c0\u0103\u0102\u00e2\u00c2\u01ce\u01cd\u00e5\u00c5\u212b\u00e4\u1df2\ua79b\u00c4\ua79a\u00e3\u00c3\u0227\u0226\u0105\u0104\u0101\u0100\u1ea3\u1ea2\u0201\u0200\u0203\u0202\u1ea1\u1ea0\u1e01\u1e00\u1dd3\u1eaf\u1eae\u1eb1\u1eb0\u1eb5\u1eb4\u1eb3\u1eb2\u1ea5\u1ea4\u1ea7\u1ea6\u1eab\u1eaa\u1ea9\u1ea8\u01fb\u01fa\u01df\u01de\u01e1\u01e0\u1eb7\u1eb6\u1ead\u1eac\u00e6\u1dd4\u00c6\u1d2d\u01fd\u01fc\u01e3\u01e2\ua73b\ua73a\u33c2\u2100\u2101\u214d\u33df\ua733\ua732\u1dd5\ua735\ua734\ua737\ua736\u3373\u1dd6\ua739\ua738\ua73d\ua73c\u1e9a\u1d00\u2c65\u023a\u1d8f\ua7bb\ua7ba\u1d01\u1d02\u1d46\uab31\u0250\u2c6f\u1d44\u0251\u1de7\u2c6d\u1d45\uab30\u1d90\u0252\u2c70\u1d9b\uab64\u0062\uff42\u1de8\u24d1\u0042\uff22\u212c\u24b7\u1d47\u1d2e\u1e03\u1e02\u1e05\u1e04\u1e07\u1e06\u3374\u33c3\u0299\u0180\u0243\u1d2f\u1d03\u1d6c\ua797\ua796\u1d80\u0253\u0181\u0183\u0182\ua7b5\u1de9\ua7b4\u0063\uff43\u0368\u217d\u24d2\u0043\uff23\u216d\u2102\u212d\u24b8\u1d9c\u0107\u0106\u0109\u0108\u010d\u010c\u010b\u010a\u00e7\u1dd7\u00c7\u1e09\u1e08\u2105\u2106\u33c6\u3388\u33c4\u33c5\u339d\u33a0\u33a4\u33c7\u1d04\u023c\u023b\ua793\ua792\ua794\ua7c4\u0188\u0187\u0255\u1d9d\u2184\u2183\ua73f\ua73e\u0064\uff44\u0369\u217e\u2146\u24d3\u0044\uff24\u216e\u2145\u24b9\u1d48\u1d30\u010f\u010e\u1e0b\u1e0a\u1e11\u1e10\u0111\u0110\u1e0d\u1e0c\u1e13\u1e12\u1e0f\u1e0e\u00f0\u1dd9\u00d0\u1d9e\u1dd8\ua77a\ua779\u3372\u0238\u33c8\u3397\u3377\u3378\u3379\u01f3\u02a3\u01f2\u01f1\u01c6\u01c5\u01c4\uab66\u02a5\u02a4\u1d05\u1d06\ua7c8\ua7c7\u1d6d\u1d81\u0256\u0189\u0257\u018a\u1d91\u018c\u018b\u0221\ua771\u1e9f\u0065\uff45\u0364\u212f\u2147\u24d4\u0045\uff25\u2130\u24ba\u1d49\u2091\u1d31\u00e9\u00c9\u00e8\u00c8\u0115\u0114\u00ea\u00ca\u011b\u011a\u00eb\u00cb\u1ebd\u1ebc\u0117\u0116\u0229\u0228\u0119\u0118\u0113\u0112\u1ebb\u1eba\u0205\u0204\u0207\u0206\u1eb9\u1eb8\u1e19\u1e18\u1e1b\u1e1a\u1ebf\u1ebe\u1ec1\u1ec0\u1ec5\u1ec4\u1ec3\u1ec2\u1e1d\u1e1c\u1e17\u1e16\u1e15\u1e14\u1ec7\u1ec6\u32cd\u32ce\u1d07\uab32\uab33\u0247\u0246\u1d92\uab34\u2c78\u01dd\u018e\u1d32\u2c7b\u0259\u1dea\u018f\u1d4a\u2094\u1d95\u025b\u0190\u2107\u1d4b\u1d93\u0258\u025a\u025c\ua7ab\u1d9f\u1d94\u1d08\u1d4c\u025d\u025e\u029a\u0264\u0066\uff46\u1deb\u24d5\u0046\uff26\u2131\u24bb\u1da0\u1e1f\u1e1e\ua77c\ua77b\u213b\ufb00\ufb03\ufb04\ufb01\ufb02\u3399\u02a9\ua730\uab35\ua799\ua798\u1d6e\u1d82\u0192\u0191\u214e\u2132\ua7fb\u0067\uff47\u1dda\u210a\u24d6\u0047\uff27\u24bc\u1d4d\u1d33\u01f5\u01f4\u011f\u011e\u011d\u011c\u01e7\u01e6\u0121\u0120\u0123\u0122\u1e21\u1e20\ua7a1\ua7a0\u1d79\ua77d\u33ff\u3387\u3393\u33ac\u33c9\u0261\ua7ac\u1da2\uab36\u0262\u1ddb\u01e5\u01e4\u1d83\u0260\u0193\u029b\u1d77\ua77f\ua77e\u0263\u0194\u02e0\u01a3\u01a2\u0068\uff48\u036a\u210e\u24d7\u0048\uff28\u210b\u210c\u210d\u24bd\u02b0\u2095\u1d34\u0125\u0124\u021f\u021e\u1e27\u1e26\u1e23\u1e22\u1e29\u1e28\u0127\u210f\u0126\ua7f8\u1e25\u1e24\u1e2b\u1e2a\u1e96\u33ca\u32cc\u33cb\u3371\u3390\u029c\u0195\u01f6\ua795\u0266\ua7aa\u02b1\u2c68\u2c67\u2c76\u2c75\ua7f6\ua7f5\ua727\ua726\uab5c\u0267\u02bb\u02bd\u0069\uff49\u0365\u2170\u2139\u2148\u24d8\u0049\uff29\u2160\u2110\u2111\u24be\u2071\u1d62\u1d35\u00ed\u00cd\u00ec\u00cc\u012d\u012c\u00ee\u00ce\u01d0\u01cf\u00ef\u00cf\u0129\u0128\u0130\u012f\u012e\u012b\u012a\u1ec9\u1ec8\u0209\u0208\u020b\u020a\u1ecb\u1eca\u1e2d\u1e2c\u1e2f\u1e2e\u2171\u2161\u2172\u2162\u0133\u0132\u33cc\u337a\u2173\u2163\u2178\u2168\u0131\u026a\ua7ae\u1da6\ua7fe\ua7f7\u1d09\u1d4e\u0268\u0197\u1da4\u1d7b\u1da7\u1d96\ua7bd\ua7bc\u0269\u0196\u1da5\u1d7c\u006a\uff4a\u2149\u24d9\u004a\uff2a\u24bf\u02b2\u2c7c\u1d36\u0135\u0134\u01f0\u0237\u1d0a\u0249\u0248\u029d\ua7b2\u1da8\u025f\u1da1\u0284\u006b\uff4b\u1ddc\u24da\u004b\u212a\uff2b\u24c0\u1d4f\u2096\u1d37\u1e31\u1e30\u01e9\u01e8\u0137\u0136\ua7a3\ua7a2\u1e33\u1e32\u1e35\u1e34\u3384\u3385\u3389\u338f\u3391\u33cd\u3398\u339e\u33ce\u33a2\u33a6\u33aa\u33cf\u33b8\u33be\u33c0\u1d0b\u1d84\u0199\u0198\u2c6a\u2c69\ua741\ua740\ua743\ua742\ua745\ua744\u029e\ua7b0\u006c\uff4c\u1ddd\u217c\u2113\u24db\u004c\uff2c\u216c\u2112\u24c1\u02e1\u2097\u1d38\u013a\u0139\u013e\u013d\u013c\u013b\u0142\u0141\u1e37\u1e36\u1e3d\u1e3c\u1e3b\u1e3a\u0140\u013f\u1e39\u1e38\u01c9\u01c8\u01c7\u1efb\u1efa\u33d0\u33d1\u33d2\u02aa\u32cf\u33d3\u02ab\u029f\u1dde\u1dab\ua747\ua746\u1d0c\ua749\ua748\u019a\u023d\u2c61\u2c60\u026b\u2c62\uab5e\uab38\u1dec\uab39\u026c\ua7ad\uab37\uab5d\u1d85\u1daa\u026d\u1da9\ua78e\u0234\ua772\u026e\ua781\ua780\u019b\u028e\u006d\uff4d\u036b\u217f\u24dc\u004d\uff2d\u216f\u2133\u24c2\u1d50\u2098\u1d39\u1e3f\u1e3e\u1e41\u1e40\u1e43\u1e42\u33a7\u33a8\u33a1\u33a5\u3383\u33d4\u3386\u338e\u3392\u33d5\u3396\u339c\u339f\u33a3\u33d6\u33ab\u33b3\u33b7\u33b9\u33bd\u33bf\u33c1\u1d0d\u1ddf\u1d6f\u1d86\u0271\u2c6e\u1dac\uab3a\ua7fd\ua7ff\ua773\u006e\uff4e\u1de0\u24dd\u004e\uff2e\u2115\u24c3\u207f\u2099\u1d3a\u0144\u0143\u01f9\u01f8\u0148\u0147\u00f1\u00d1\u1e45\u1e44\u0146\u0145\ua7a5\ua7a4\u1e47\u1e46\u1e4b\u1e4a\u1e49\u1e48\u3381\u338b\u01cc\u01cb\u01ca\u339a\u2116\u33b1\u33b5\u33bb\u0274\u1de1\u1db0\u1d3b\u1d0e\u1d70\u0272\u019d\u1dae\u019e\u0220\ua791\ua790\u1d87\u0273\u1daf\u0235\uab3b\ua774\u014b\u014a\u1d51\uab3c\u006f\uff4f\u0366\u2134\u24de\u004f\uff2f\u24c4\u00ba\u1d52\u2092\u1d3c\u00f3\u00d3\u00f2\u00d2\u014f\u014e\u00f4\u00d4\u01d2\u01d1\u00f6\u1df3\ua79d\u00d6\ua79c\u0151\u0150\u00f5\u00d5\u022f\u022e\u00f8\u00d8\u01eb\u01ea\u014d\u014c\u1ded\u1ecf\u1ece\u020d\u020c\u020f\u020e\u01a1\u01a0\u1ecd\u1ecc\u1ed1\u1ed0\u1ed3\u1ed2\u1ed7\u1ed6\u1ed5\u1ed4\u022b\u022a\u1e4d\u1e4c\u1e4f\u1e4e\u022d\u022c\u0231\u0230\u01ff\u01fe\u01ed\u01ec\u1e53\u1e52\u1e51\u1e50\u1edb\u1eda\u1edd\u1edc\u1ee1\u1ee0\u1edf\u1ede\u1ee3\u1ee2\u1ed9\u1ed8\u0153\u0152\ua7f9\ua74f\ua74e\u3375\u1d0f\u1d11\uab3d\u0276\u1d14\uab41\uab42\uab40\uab43\uab44\u1d13\uab3e\u0254\u0186\u1d53\u1d10\u1d12\uab3f\u1d97\uab62\ua74d\ua74c\u1d16\u1d54\u1d17\u1d55\u2c7a\u0275\u019f\u1db1\ua74b\ua74a\u0277\ua7b7\ua7b6\u0223\u0222\u1d3d\u1d15\u0070\uff50\u1dee\u24df\u0050\uff30\u2119\u24c5\u1d56\u209a\u1d3e\u1e55\u1e54\u1e57\u1e56\u33d8\u3380\u33a9\u3376\u338a\u33d7\u33d9\u33da\u33b0\u3250\u33b4\u33ba\u1d18\u1d7d\u2c63\ua751\ua750\u1d71\u1d88\u01a5\u01a4\ua753\ua752\ua755\ua754\ua7fc\u0278\u1db2\u2c77\u0071\uff51\u24e0\u0051\uff31\u211a\u24c6\u0239\ua7af\ua757\ua756\ua759\ua758\u02a0\u024b\u024a\u0138\u0072\uff52\u036c\u1dca\u24e1\u0052\uff32\u211b\u211c\u211d\u24c7\u02b3\u1d63\u1d3f\u0155\u0154\u0159\u0158\u1e59\u1e58\u0157\u0156\ua7a7\ua7a6\u0211\u0210\u0213\u0212\u1e5b\u1e5a\u1e5f\u1e5e\ua783\ua782\u1e5d\u1e5c\u33ad\u33ae\u33af\u20a8\uab45\u0280\u1de2\u01a6\uab46\ua75b\u1de3\ua75a\u1d19\u024d\u024c\u1d72\u0279\u02b4\u1d1a\u027a\u1d89\u027b\u02b5\u2c79\u027c\u027d\u2c64\uab49\u027e\u1d73\u027f\uab47\uab48\uab4a\uab4b\uab4c\u0281\u02b6\uab68\ua775\ua776\ua75d\ua75c\u0073\uff53\u1de4\u24e2\u0053\uff33\u24c8\u02e2\u209b\u015b\u015a\u015d\u015c\u0161\u0160\u1e61\u1e60\u015f\u015e\ua7a9\ua7a8\u1e63\u1e62\u0219\u0218\u017f\u1de5\ua785\ua784\u1e65\u1e64\u1e67\u1e66\u1e69\u1e68\u1e9b\u00df\u1e9e\ufb05\u2120\u33db\ufb06\u33dc\ua731\ua7ca\ua7c9\u1d74\u1d8a\u0282\ua7c5\u1db3\u023f\u2c7e\u1e9c\u1e9d\u0283\u1def\u01a9\u1db4\uab4d\u1d8b\u01aa\u0285\u1d98\u0286\u0074\uff54\u036d\u24e3\u0054\uff34\u24c9\u1d57\u209c\u1d40\u0165\u0164\u1e97\u1e6b\u1e6a\u0163\u0162\u1e6d\u1e6c\u021b\u021a\u1e71\u1e70\u1e6f\u1e6e\ua787\ua786\u1d7a\u02a8\u2121\u3394\u2122\u01be\u02a6\uab67\u02a7\ua729\ua728\u1d1b\u0167\u0166\u2c66\u023e\u1d75\u01ab\u1db5\u01ad\u01ac\u0288\u01ae\u0236\ua777\u0287\ua7b1\u0075\uff55\u0367\u24e4\u0055\uff35\u24ca\u1d58\u1d64\u1d41\u00fa\u00da\u00f9\u00d9\u016d\u016c\u00fb\u00db\u01d4\u01d3\u016f\u016e\u00fc\u1df4\ua79f\u00dc\ua79e\u0171\u0170\u0169\u0168\u0173\u0172\u016b\u016a\u1df0\u1ee7\u1ee6\u0215\u0214\u0217\u0216\u01b0\u01af\u1ee5\u1ee4\u1e73\u1e72\u1e77\u1e76\u1e75\u1e74\u01d8\u01d7\u01dc\u01db\u01da\u01d9\u01d6\u01d5\u1e79\u1e78\u1e7b\u1e7a\u1ee9\u1ee8\u1eeb\u1eea\u1eef\u1eee\u1eed\u1eec\u1ef1\u1ef0\u1d1c\u1db8\uab4e\u1d1d\u1d59\u1d1e\u1d6b\uab50\uab51\u0289\u0244\u1db6\uab4f\ua7b9\ua7b8\u1d7e\u1d99\uab52\uab5f\ua7bf\ua7be\u0265\ua78d\u1da3\u02ae\u02af\u026f\u019c\u1d5a\ua7fa\u1d1f\u0270\u1dad\u028a\u01b1\u1db7\u1d7f\u0076\uff56\u036e\u2174\u24e5\u0056\uff36\u2164\u24cb\u1d5b\u1d65\u2c7d\u1e7d\u1e7c\u1e7f\u1e7e\u33de\u2175\u2165\u2176\u2166\u2177\u2167\ua761\ua760\u1d20\ua75f\ua75e\u1d8c\u028b\u01b2\u1db9\u2c71\u2c74\u1efd\u1efc\u028c\u0245\u1dba\u0077\uff57\u1abf\u1df1\u24e6\u0057\uff37\u24cc\u02b7\u1d42\u1e83\u1e82\u1e81\u1e80\u0175\u0174\u1e98\u1e85\u1e84\u1e87\u1e86\u1e89\u1e88\u33dd\u1d21\ua7c3\ua7c2\u2c73\u2c72\u028d\u1ac0\uab69\u0078\uff58\u036f\u2179\u24e7\u0058\uff38\u2169\u24cd\u02e3\u2093\u1e8d\u1e8c\u1e8b\u1e8a\u217a\u216a\u217b\u216b\u1d8d\uab56\uab57\uab58\uab59\uab53\ua7b3\uab54\uab55\u0079\uff59\u24e8\u0059\uff39\u24ce\u02b8\u00fd\u00dd\u1ef3\u1ef2\u0177\u0176\u1e99\u00ff\u0178\u1ef9\u1ef8\u1e8f\u1e8e\u0233\u0232\u1ef7\u1ef6\u1ef5\u1ef4\u028f\u024f\u024e\u01b4\u01b3\u1eff\u1efe\uab5a\u021d\u021c\u007a\uff5a\u1de6\u24e9\u005a\uff3a\u2124\u2128\u24cf\u1dbb\u017a\u0179\u1e91\u1e90\u017e\u017d\u017c\u017b\u1e93\u1e92\u1e95\u1e94\u018d\u1d22\u01b6\u01b5\u1d76\u1d8e\ua7c6\u0225\u0224\u0290\u1dbc\u0291\u1dbd\u0240\u2c7f\u2c6c\u2c6b\ua763\ua762\u0292\u01b7\u1dbe\u01ef\u01ee\u1d23\u01b9\u01b8\u1d9a\u01ba\u0293\u00fe\u00de\ua765\ua764\ua767\ua766\u01bf\u01f7\ua769\ua768\uab60\uab61\uab63\ua76b\ua76a\ua76d\ua76c\ua76f\u1dd2\ua76e\ua770\ua778\u01bb\ua72b\ua72a\ua72d\ua72c\ua72f\ua72e\u01a8\u01a7\u01bd\u01bc\u0185\u0184\u0294\u0242\u0241\u02c0\u02bc\u0149\u02ee\u02be\ua723\ua722\ua78c\ua78b\ua78f\u0295\u02e4\u02bf\u02c1\u1d24\u1d25\u1d5c\ua725\ua724\u02a1\u02a2\u0296\u01c0\u01c1\u01c2\u01c3\u0297\u0298\u02ac\u02ad\u03b1\u0391\u1f00\u1f08\u1f01\u1f09\u03ac\u1f71\u0386\u1fbb\u1f70\u1fba\u1fb0\u1fb8\u1fb6\u1fb1\u1fb9\u1fb3\u1fbc\u1f04\u1f0c\u1f02\u1f0a\u1f06\u1f0e\u1f80\u1f88\u1f05\u1f0d\u1f03\u1f0b\u1f07\u1f0f\u1f81\u1f89\u1fb4\u1fb2\u1fb7\u1f84\u1f8c\u1f82\u1f8a\u1f86\u1f8e\u1f85\u1f8d\u1f83\u1f8b\u1f87\u1f8f\u03b2\u03d0\u0392\u1d5d\u1d66\u03b3\u213d\u0393\u213e\u1d5e\u1d67\u1d26\u03b4\u0394\u1d5f\u03b5\u03f5\u0395\u1f10\u1f18\u1f11\u1f19\u03ad\u1f73\u0388\u1fc9\u1f72\u1fc8\u1f14\u1f1c\u1f12\u1f1a\u1f15\u1f1d\u1f13\u1f1b\u03dd\u03dc\u0377\u0376\u03db\u03da\u03b6\u0396\u0371\u0370\u03b7\u0397\u1f20\u1f28\u1f21\u1f29\u03ae\u1f75\u0389\u1fcb\u1f74\u1fca\u1fc6\u1fc3\u1fcc\u1f24\u1f2c\u1f22\u1f2a\u1f26\u1f2e\u1f90\u1f98\u1f25\u1f2d\u1f23\u1f2b\u1f27\u1f2f\u1f91\u1f99\u1fc4\u1fc2\u1fc7\u1f94\u1f9c\u1f92\u1f9a\u1f96\u1f9e\u1f95\u1f9d\u1f93\u1f9b\u1f97\u1f9f\u03b8\u03d1\u0398\u03f4\u1dbf\u03b9\u1fbe\u037a\u0399\u1f30\u1f38\u1f31\u1f39\u03af\u1f77\u038a\u1fdb\u1f76\u1fda\u1fd0\u1fd8\u1fd6\u03ca\u03aa\u1fd1\u1fd9\u1f34\u1f3c\u1f32\u1f3a\u1f36\u1f3e\u1f35\u1f3d\u1f33\u1f3b\u1f37\u1f3f\u0390\u1fd3\u1fd2\u1fd7\u03f3\u037f\u03ba\u03f0\u039a\u03d7\u03cf\u03bb\u039b\u1d27\u03bc\u00b5\u039c\u3382\u338c\u338d\u3395\u339b\u33b2\u33b6\u33bc\u03bd\u039d\u03be\u039e\u03bf\u039f\u1f40\u1f48\u1f41\u1f49\u03cc\u1f79\u038c\u1ff9\u1f78\u1ff8\u1f44\u1f4c\u1f42\u1f4a\u1f45\u1f4d\u1f43\u1f4b\u03c0\u03d6\u213c\u03a0\u213f\u1d28\u03fb\u03fa\u03df\u03de\u03d9\u03d8\u03c1\u03f1\u03a1\u1d68\u1fe4\u1fe5\u1fec\u1d29\u03fc\u03c3\u03f2\u03a3\u03f9\u03c2\u037c\u03fe\u037b\u03fd\u037d\u03ff\u03c4\u03a4\u03c5\u03a5\u03d2\u1f50\u1f51\u1f59\u03cd\u1f7b\u038e\u1feb\u03d3\u1f7a\u1fea\u1fe0\u1fe8\u1fe6\u03cb\u03ab\u03d4\u1fe1\u1fe9\u1f54\u1f52\u1f56\u1f55\u1f5d\u1f53\u1f5b\u1f57\u1f5f\u03b0\u1fe3\u1fe2\u1fe7\u03c6\u03d5\u03a6\u1d60\u1d69\u03c7\u03a7\u1d61\u1d6a\u03c8\u03a8\u1d2a\u03c9\u03a9\u2126\u1f60\u1f68\u1f61\u1f69\u03ce\u1f7d\u038f\u1ffb\u1f7c\u1ffa\u1ff6\u1ff3\u1ffc\u1f64\u1f6c\u1f62\u1f6a\u1f66\u1f6e\u1fa0\u1fa8\u1f65\u1f6d\u1f63\u1f6b\u1f67\u1f6f\u1fa1\u1fa9\u1ff4\u1ff2\u1ff7\u1fa4\u1fac\u1fa2\u1faa\u1fa6\u1fae\u1fa5\u1fad\u1fa3\u1fab\u1fa7\u1faf\uab65\u03e1\u03e0\u0373\u0372\u03f8\u03f7\u2c81\u2c80\u2c83\u2c82\u2c85\u2c84\u2c87\u2c86\u2c89\u2c88\u2cb7\u2cb6\u2c8b\u2c8a\u2c8d\u2c8c\u2c8f\u2c8e\u2c91\u2c90\u2c93\u2c92\u2c95\u2c94\u2ce4\u2cb9\u2cb8\u2c97\u2c96\u2c99\u2c98\u2c9b\u2c9a\u2cbb\u2cba\u2cbd\u2cbc\u2c9d\u2c9c\u2c9f\u2c9e\u2ca1\u2ca0\u2ca3\u2ca2\u2ca5\u2ca4\u2ca7\u2ca6\u2ca9\u2ca8\u2cab\u2caa\u2cad\u2cac\u2caf\u2cae\u2cb1\u2cb0\u2cbf\u2cbe\u2cc1\u2cc0\u03e3\u03e2\u2cec\u2ceb\u2cc3\u2cc2\u2cc5\u2cc4\u2cc7\u2cc6\u03e5\u03e4\u03e7\u03e6\u2cf3\u2cf2\u2cc9\u2cc8\u03e9\u03e8\u2ccb\u2cca\u2ccd\u2ccc\u2ccf\u2cce\u2cd1\u2cd0\u2cd3\u2cd2\u2cd5\u2cd4\u03eb\u03ea\u2cee\u2ced\u2cd7\u2cd6\u03ed\u03ec\u2cd9\u2cd8\u2cdb\u2cda\u2cdd\u2cdc\u03ef\u03ee\u2cb3\u2cb2\u2cb5\u2cb4\u2cdf\u2cde\u2ce1\u2ce0\u2ce3\u2ce2\u0430\u2df6\u0410\u04d1\u04d0\u04d3\u04d2\u04d9\u04d8\u04db\u04da\u04d5\u04d4\u0431\u2de0\u0411\u0432\u1c80\u2de1\u0412\u0433\u2de2\u0413\u0453\u0403\u0491\u0490\u0493\u0492\u04fb\u04fa\u0495\u0494\u04f7\u04f6\u0434\u1c81\u2de3\u0414\u0501\u0500\ua681\ua680\u0452\u0402\ua663\ua662\u0503\u0502\u0499\u0498\u0435\u2df7\u0415\u0450\u0400\u04d7\u04d6\u0451\u0401\u0454\ua674\u0404\u0436\u2de4\u0416\u04c2\u04c1\u04dd\u04dc\u052b\u052a\ua685\ua684\u0497\u0496\u0437\u2de5\u0417\u04df\u04de\ua641\ua640\u0505\u0504\u0511\u0510\ua643\ua642\u0455\u0405\ua645\ua644\u04e1\u04e0\ua689\ua688\u0507\u0506\ua683\ua682\u0438\ua675\u0418\u045d\u040d\u04e5\u04e4\u04e3\u04e2\u048b\u048a\u0456\u0406\u0457\ua676\u0407\ua647\ua646\u0439\u0419\u0458\u0408\ua649\u2df8\ua648\u043a\u2de6\u041a\u045c\u040c\u049b\u049a\u04c4\u04c3\u04a1\u04a0\u049f\u049e\u049d\u049c\u051f\u051e\u051b\u051a\u043b\u2de7\u041b\u1d2b\u04c6\u04c5\u052f\u052e\u0513\u0512\u0521\u0520\u0459\u0409\ua665\ua664\u0509\u0508\u0515\u0514\u043c\u2de8\u041c\u04ce\u04cd\ua667\ua666\u043d\u2de9\u041d\u1d78\u0529\u0528\u04ca\u04c9\u04a3\u04a2\u04c8\u04c7\u0523\u0522\u04a5\u04a4\u045a\u040a\u050b\u050a\u043e\u1c82\u2dea\ua669\ua66b\ua66d\ua66e\ua699\ua69b\u041e\ua668\ua66a\ua66c\ua698\ua69a\u04e7\u04e6\u04e9\u04e8\u04eb\u04ea\u043f\u2deb\u041f\u0525\u0524\u04a7\u04a6\u0481\u0480\u0440\u2dec\u0420\u048f\u048e\u0517\u0516\u0441\u1c83\u2ded\u0421\u2df5\u050d\u050c\u04ab\u04aa\u0442\u1c84\u1c85\u2dee\u0422\ua68d\ua68c\u050f\u050e\u04ad\u04ac\ua68b\ua68a\u045b\u040b\u0443\ua677\u0423\u045e\u040e\u04f1\u04f0\u04f3\u04f2\u04ef\u04ee\u04af\u04ae\u04b1\u04b0\ua64b\u1c88\u2df9\ua64a\u0479\u0478\u0444\ua69e\u0424\u0445\u2def\u0425\u04fd\u04fc\u04ff\u04fe\u04b3\u04b2\u04bb\u04ba\u0527\u0526\ua695\ua694\u0461\ua67b\u0460\u047f\u047e\ua64d\ua64c\u047d\u047c\u047b\u047a\u0446\u2df0\u0426\ua661\ua660\ua68f\ua68e\u04b5\u04b4\ua691\ua690\u0447\u2df1\u0427\u04f5\u04f4\u052d\u052c\ua693\ua692\u04b7\u04b6\u04cc\u04cb\u04b9\u04b8\ua687\ua686\u04bd\u04bc\u04bf\u04be\u045f\u040f\u0448\u2df2\u0428\ua697\ua696\u0449\u2df3\u0429\ua64f\ua64e\u2e2f\ua67f\u044a\u1c86\ua678\u042a\ua69c\ua651\ua650\u044b\ua679\u042b\u04f9\u04f8\u044c\ua67a\u042c\ua69d\u048d\u048c\u0463\u1c87\u2dfa\u0462\ua653\ua652\u044d\u042d\u04ed\u04ec\u044e\u2dfb\u042e\ua655\ua654\ua657\u2dfc\ua656\u044f\u042f\u0519\u0518\u0465\ua69f\u0464\u0467\u2dfd\u0466\ua659\ua658\u046b\u2dfe\u046a\ua65b\ua65a\u0469\u0468\ua65d\ua65c\u046d\u2dff\u046c\u046f\u046e\u0471\u0470\u0473\u2df4\u0472\u0475\u0474\u0477\u0476\ua65f\ua65e\u04a9\u04a8\u051d\u051c\u04cf\u04c0\u2c30\u2c00\u2c31\u2c01\u2c32\u2c02\u2c33\u2c03\u2c34\u2c04\u2c35\u2c05\u2c36\u2c06\u2c37\u2c07\u2c38\u2c08\u2c39\u2c09\u2c3a\u2c0a\u2c3b\u2c0b\u2c3c\u2c0c\u2c3d\u2c0d\u2c3e\u2c0e\u2c3f\u2c0f\u2c40\u2c10\u2c41\u2c11\u2c42\u2c12\u2c43\u2c13\u2c44\u2c14\u2c45\u2c15\u2c46\u2c16\u2c47\u2c17\u2c48\u2c18\u2c49\u2c19\u2c4a\u2c1a\u2c4b\u2c1b\u2c4c\u2c1c\u2c4d\u2c1d\u2c4e\u2c1e\u2c4f\u2c1f\u2c50\u2c20\u2c51\u2c21\u2c52\u2c22\u2c53\u2c23\u2c54\u2c24\u2c55\u2c25\u2c56\u2c26\u2c57\u2c27\u2c58\u2c28\u2c59\u2c29\u2c5a\u2c2a\u2c5b\u2c2b\u2c5c\u2c2c\u2c5d\u2c2d\u2c5e\u2c2e\u10d0\u1c90\u2d00\u10a0\u10d1\u1c91\u2d01\u10a1\u10d2\u1c92\u2d02\u10a2\u10d3\u1c93\u2d03\u10a3\u10d4\u1c94\u2d04\u10a4\u10d5\u1c95\u2d05\u10a5\u10d6\u1c96\u2d06\u10a6\u10f1\u1cb1\u2d21\u10c1\u10d7\u1c97\u2d07\u10a7\u10d8\u1c98\u2d08\u10a8\u10d9\u1c99\u2d09\u10a9\u10da\u1c9a\u2d0a\u10aa\u10db\u1c9b\u2d0b\u10ab\u10dc\u1c9c\u10fc\u2d0c\u10ac\u10f2\u1cb2\u2d22\u10c2\u10dd\u1c9d\u2d0d\u10ad\u10de\u1c9e\u2d0e\u10ae\u10df\u1c9f\u2d0f\u10af\u10e0\u1ca0\u2d10\u10b0\u10e1\u1ca1\u2d11\u10b1\u10e2\u1ca2\u2d12\u10b2\u10f3\u1cb3\u2d23\u10c3\u10e3\u1ca3\u2d13\u10b3\u10e4\u1ca4\u2d14\u10b4\u10e5\u1ca5\u2d15\u10b5\u10e6\u1ca6\u2d16\u10b6\u10e7\u1ca7\u2d17\u10b7\u10e8\u1ca8\u2d18\u10b8\u10e9\u1ca9\u2d19\u10b9\u10ea\u1caa\u2d1a\u10ba\u10eb\u1cab\u2d1b\u10bb\u10ec\u1cac\u2d1c\u10bc\u10ed\u1cad\u2d1d\u10bd\u10ee\u1cae\u2d1e\u10be\u10f4\u1cb4\u2d24\u10c4\u10ef\u1caf\u2d1f\u10bf\u10f0\u1cb0\u2d20\u10c0\u10f5\u1cb5\u2d25\u10c5\u10f6\u1cb6\u10f7\u1cb7\u2d27\u10c7\u10f8\u1cb8\u10f9\u1cb9\u10fa\u1cba\u10fd\u1cbd\u2d2d\u10cd\u10fe\u1cbe\u10ff\u1cbf\u0561\u0531\u0560\u0562\u0532\u0563\u0533\u0564\u0534\u0565\u0535\u0587\u0566\u0536\u0567\u0537\u0568\u0538\u0569\u0539\u056a\u053a\u056b\u053b\u056c\u053c\u056d\u053d\u056e\u053e\u056f\u053f\u0570\u0540\u0571\u0541\u0572\u0542\u0573\u0543\u0574\u0544\ufb14\ufb15\ufb17\ufb13\u0575\u0545\u0588\u0576\u0546\u0577\u0547\u0578\u0548\u0579\u0549\u057a\u054a\u057b\u054b\u057c\u054c\u057d\u054d\u057e\u054e\ufb16\u057f\u054f\u0580\u0550\u0581\u0551\u0582\u0552\u0583\u0553\u0584\u0554\u0585\u0555\u0586\u0556\u0559\u05d0\u2135\ufb21\ufb2e\ufb2f\ufb30\ufb4f\u05d1\u2136\ufb31\ufb4c\u05d2\u2137\ufb32\u05d3\u2138\ufb22\ufb33\u05d4\ufb23\ufb34\u05d5\ufb4b\ufb35\u05f0\u05f1\u05d6\ufb36\u05d7\u05d8\ufb38\u05d9\ufb1d\ufb39\u05ef\u05f2\ufb1f\u05db\ufb24\u05da\ufb3b\ufb3a\ufb4d\u05dc\ufb25\ufb3c\u05de\ufb26\u05dd\ufb3e\u05e0\u05df\ufb40\u05e1\ufb41\u05e2\ufb20\u05e4\u05e3\ufb44\ufb43\ufb4e\u05e6\u05e5\ufb46\u05e7\ufb47\u05e8\ufb27\ufb48\u05e9\ufb2b\ufb2a\ufb49\ufb2d\ufb2c\u05ea\ufb28\ufb4a\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u081a\u081b\u0621\u0674\ufe80\u06fd\u0622\ufe82\ufe81\u0623\ufe84\ufe83\u0672\u0671\ufb51\ufb50\u0624\ufe86\ufe85\u0625\ufe88\ufe87\u0673\u0773\u0774\u0626\ufe8b\ufe8c\ufe8a\ufe89\ufbeb\ufbea\ufc97\ufc00\ufc98\ufc01\ufc99\ufc64\ufc65\ufc9a\ufcdf\ufc66\ufc02\ufc67\ufc9b\ufce0\ufbed\ufbec\ufbef\ufbee\ufbf3\ufbf2\ufbf1\ufbf0\ufbf5\ufbf4\ufbfb\ufbfa\ufc68\ufbf9\ufc03\ufc69\ufc04\ufbf8\ufbf7\ufbf6\u08a8\u08a9\u08ac\u0627\u08ad\ufe8e\ufe8d\ufd3c\ufd3d\u0675\ufdf3\ufdf2\u066e\u0628\ufe91\ufe92\ufe90\ufe8f\ufc9c\ufc05\ufc9d\ufc06\ufdc2\ufc9e\ufc07\ufd9e\ufc6a\ufc6b\ufc9f\ufce1\ufc6c\ufc08\ufc6d\ufca0\ufce2\ufc6e\ufc09\ufc6f\ufc0a\u067b\ufb54\ufb55\ufb53\ufb52\u067e\ufb58\ufb59\ufb57\ufb56\u0680\ufb5c\ufb5d\ufb5b\ufb5a\u0750\u0751\u0752\u0753\u0754\u0755\u08a0\u0756\u08be\u08a1\u08b6\u08b7\u0629\ufe94\ufe93\u062a\ufe97\ufe98\ufe96\ufe95\ufca1\ufc0b\ufd50\ufda0\ufd9f\ufca2\ufc0c\ufd52\ufd51\ufd53\ufca3\ufc0d\ufd54\ufda2\ufda1\ufc70\ufc71\ufca4\ufce3\ufc72\ufc0e\ufd55\ufd56\ufd57\ufda4\ufda3\ufc73\ufca5\ufce4\ufc74\ufc0f\ufc75\ufc10\u062b\ufe9b\ufe9c\ufe9a\ufe99\ufc11\ufc76\ufc77\ufca6\ufce5\ufc78\ufc12\ufc79\ufce6\ufc7a\ufc13\ufc7b\ufc14\u0679\ufb68\ufb69\ufb67\ufb66\u067a\ufb60\ufb61\ufb5f\ufb5e\u067c\u067d\u067f\ufb64\ufb65\ufb63\ufb62\u08b8\u08bf\u08c0\u062c\ufe9f\ufea0\ufe9e\ufe9d\ufca7\ufc15\ufda6\ufdbe\ufdfb\ufca8\ufc16\ufd59\ufd58\ufda7\ufda5\ufd1d\ufd01\ufd1e\ufd02\u0683\ufb78\ufb79\ufb77\ufb76\u0684\ufb74\ufb75\ufb73\ufb72\u0686\ufb7c\ufb7d\ufb7b\ufb7a\u06bf\u0687\ufb80\ufb81\ufb7f\ufb7e\u08a2\u08c1\u08c5\u08c6\u062d\ufea3\ufea4\ufea2\ufea1\ufca9\ufc17\ufdbf\ufcaa\ufc18\ufd5b\ufd5a\ufd1b\ufcff\ufd1c\ufd00\u062e\ufea7\ufea8\ufea6\ufea5\ufcab\ufc19\ufc1a\ufcac\ufc1b\ufd1f\ufd03\ufd20\ufd04\u0681\u0682\u0685\u0757\u0758\u076e\u076f\u0772\u077c\u062f\ufeaa\ufea9\u0630\ufeac\ufeab\ufc5b\u0688\ufb89\ufb88\u0689\u068a\u068b\u068c\ufb85\ufb84\u068d\ufb83\ufb82\u08ae\u068e\ufb87\ufb86\u068f\u0690\u06ee\u0759\u075a\u0631\ufeae\ufead\ufc5c\ufdf6\ufdfc\u0632\ufeb0\ufeaf\u0691\ufb8d\ufb8c\u0692\u0693\u0694\u0695\u0696\u0697\u0698\ufb8b\ufb8a\u0699\u06ef\u075b\u076b\u076c\u0771\u08aa\u08b2\u08b9\u0633\ufeb3\ufeb4\ufeb2\ufeb1\ufcad\ufd34\ufc1c\ufd5d\ufd5e\ufcae\ufd35\ufc1d\ufd5c\ufcaf\ufd36\ufc1e\ufda8\ufdc6\ufd2a\ufd0e\ufcb0\ufce7\ufc1f\ufd61\ufd60\ufd5f\ufd63\ufd62\ufd31\ufce8\ufd17\ufcfb\ufd18\ufcfc\u0634\ufeb7\ufeb8\ufeb6\ufeb5\ufd2d\ufd37\ufd25\ufd09\ufd69\ufd2e\ufd38\ufd26\ufd0a\ufd68\ufd67\ufdaa\ufd2f\ufd39\ufd27\ufd0b\ufd29\ufd0d\ufd30\ufce9\ufd28\ufd0c\ufd6b\ufd6a\ufd6d\ufd6c\ufd32\ufcea\ufd19\ufcfd\ufd1a\ufcfe\u069a\u069b\u069c\u06fa\u075c\u076d\u0770\u077d\u077e\u0635\ufebb\ufebc\ufeba\ufeb9\ufcb1\ufc20\ufd65\ufd64\ufda9\ufcb2\ufd2b\ufd0f\ufdf5\ufdf9\ufdfa\ufdf0\ufcb3\ufc21\ufdc5\ufd66\ufd21\ufd05\ufd22\ufd06\u0636\ufebf\ufec0\ufebe\ufebd\ufcb4\ufc22\ufcb5\ufc23\ufd6e\ufdab\ufcb6\ufc24\ufd70\ufd6f\ufd2c\ufd10\ufcb7\ufc25\ufd23\ufd07\ufd24\ufd08\u069d\u08af\u069e\u06fb\u0637\ufec3\ufec4\ufec2\ufec1\ufcb8\ufc26\ufd33\ufd3a\ufc27\ufd72\ufd71\ufd73\ufd74\ufd11\ufcf5\ufd12\ufcf6\u0638\ufec7\ufec8\ufec6\ufec5\ufcb9\ufd3b\ufc28\u069f\u08a3\u0639\ufecb\ufecc\ufeca\ufec9\ufcba\ufc29\ufdc4\ufd75\ufdf7\ufcbb\ufc2a\ufd77\ufd76\ufd78\ufdb6\ufd13\ufcf7\ufd14\ufcf8\u063a\ufecf\ufed0\ufece\ufecd\ufcbc\ufc2b\ufcbd\ufc2c\ufd79\ufd7b\ufd7a\ufd15\ufcf9\ufd16\ufcfa\u06a0\u08c3\u06fc\u075d\u075e\u075f\u08b3\u0641\ufed3\ufed4\ufed2\ufed1\ufcbe\ufc2d\ufcbf\ufc2e\ufcc0\ufc2f\ufd7d\ufd7c\ufcc1\ufc30\ufdc1\ufc7c\ufc31\ufc7d\ufc32\u06a1\u06a2\u08bb\u06a3\u06a4\ufb6c\ufb6d\ufb6b\ufb6a\u08a4\u06a5\u06a6\ufb70\ufb71\ufb6f\ufb6e\u0760\u0761\u066f\u0642\ufed7\ufed8\ufed6\ufed5\ufcc2\ufc33\ufdf1\ufcc3\ufc34\ufdb4\ufd7e\ufd7f\ufdb2\ufc7e\ufc35\ufc7f\ufc36\u06a7\u08bc\u06a8\u08c4\u08a5\u0643\ufedb\ufedc\ufeda\ufed9\ufc80\ufc37\ufcc4\ufc38\ufcc5\ufc39\ufcc6\ufc3a\ufcc7\ufceb\ufc81\ufc3b\ufcc8\ufcec\ufc82\ufc3c\ufdc3\ufdbb\ufdb7\ufc83\ufc3d\ufc84\ufc3e\u06a9\ufb90\ufb91\ufb8f\ufb8e\u06aa\u06ab\u06ac\u077f\u06ad\ufbd5\ufbd6\ufbd4\ufbd3\u06ae\u08b4\u06af\ufb94\ufb95\ufb93\ufb92\u08b0\u06b0\u06b1\ufb9c\ufb9d\ufb9b\ufb9a\u06b2\u06b3\ufb98\ufb99\ufb97\ufb96\u06b4\u0762\u063b\u063c\u0763\u0764\u08c2\u0644\ufedf\ufee0\ufede\ufedd\ufef6\ufef5\ufef8\ufef7\ufefa\ufef9\ufefc\ufefb\ufcc9\ufc3f\ufd83\ufd84\ufdba\ufdbc\ufdac\ufcca\ufc40\ufdb5\ufd80\ufd82\ufd81\ufccb\ufc41\ufd86\ufd85\ufccc\ufced\ufc85\ufc42\ufd88\ufd87\ufdad\ufccd\ufc86\ufc43\ufc87\ufc44\u06b5\u06b6\u06b7\u06b8\u076a\u08a6\u08c7\u0645\ufee3\ufee4\ufee2\ufee1\u06fe\ufc88\ufcce\ufc45\ufd8c\ufd92\ufd8d\ufdc0\ufccf\ufc46\ufd89\ufd8a\ufdf4\ufd8b\ufcd0\ufc47\ufd8e\ufd8f\ufdb9\ufcd1\ufc89\ufc48\ufdb1\ufc49\ufc4a\u0765\u0766\u08a7\u0646\ufee7\ufee8\ufee6\ufee5\ufcd2\ufc4b\ufdb8\ufdbd\ufd98\ufd97\ufd99\ufdc7\ufcd3\ufc4c\ufd95\ufd96\ufdb3\ufcd4\ufc4d\ufc8a\ufc8b\ufcd5\ufcee\ufc8c\ufc4e\ufd9b\ufd9a\ufc8d\ufcd6\ufcef\ufc8e\ufc4f\ufc8f\ufc50\u06ba\ufb9f\ufb9e\u08bd\u06bb\ufba2\ufba3\ufba1\ufba0\u06bc\u06bd\u06b9\u0767\u0768\u0769\u0647\ufeeb\ufeec\ufeea\ufee9\ufcd9\ufcd7\ufc51\ufcd8\ufc52\ufd93\ufd94\ufc53\ufc54\u06be\ufbac\ufbad\ufbab\ufbaa\u06c1\ufba8\ufba9\ufba7\ufba6\u06c2\u06c3\u06ff\u06d5\u06c0\ufba5\ufba4\u0648\u06e5\ufeee\ufeed\u0676\ufdf8\u06c4\u06c5\ufbe1\ufbe0\u06c6\ufbda\ufbd9\u06c7\ufbd8\ufbd7\u0677\ufbdd\u06c8\ufbdc\ufbdb\u06c9\ufbe3\ufbe2\u06ca\u06cb\ufbdf\ufbde\u08b1\u06cf\u0778\u0779\u08ab\u0649\ufbe8\ufbe9\ufef0\ufeef\ufc90\ufc5d\u064a\u06e6\ufef3\ufef4\ufef2\ufef1\u0678\ufcda\ufc55\ufdaf\ufcdb\ufc56\ufdae\ufcdc\ufc57\ufc91\ufc92\ufcdd\ufcf0\ufc93\ufc58\ufd9d\ufd9c\ufdb0\ufc94\ufcde\ufcf1\ufc95\ufc59\ufc96\ufc5a\u06cc\ufbfe\ufbff\ufbfd\ufbfc\u06cd\u06ce\u06d0\ufbe6\ufbe7\ufbe5\ufbe4\u06d1\u063d\u063e\u063f\u0620\u0775\u0776\u0777\u08ba\u06d2\ufbaf\ufbae\u06d3\ufbb1\ufbb0\u077a\u077b\u0710\u0712\u072d\u0713\u0714\u072e\u0716\u0715\u072f\u0717\u0718\u0719\u074d\u071a\u071b\u071c\u071d\u071e\u071f\u074e\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u074f\u0728\u0729\u072a\u072b\u072c\u0860\u0861\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869\u086a\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0780\u0799\u079a\u0781\u0782\u0783\u079c\u0784\u0785\u0786\u0787\u07a2\u07a3\u0788\u07a5\u0789\u078a\u078b\u079b\u078c\u0798\u07a0\u07a1\u078d\u078e\u07a4\u078f\u0790\u079d\u079e\u079f\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u07b1\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u07af\u07b0\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07e8\u07d7\u07e9\u07d8\u07d9\u07ea\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07f4\u07f5\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d66\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d67\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d6f\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u2d80\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1380\u1381\u1382\u1383\u2d81\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u2d82\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u2d83\uab01\uab02\uab03\uab04\uab05\uab06\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u2d84\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1384\u1385\u1386\u1387\u2d85\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u2d86\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u2d87\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u2d88\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u2d89\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u2d8a\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u2d8b\uab11\uab12\uab13\uab14\uab15\uab16\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u2d8c\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u2d8d\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u2d8e\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u2d93\u2d94\u2d95\u2d96\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u2d8f\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u2d90\uab20\uab21\uab22\uab23\uab24\uab25\uab26\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u2d91\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1388\u1389\u138a\u138b\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u138c\u138d\u138e\u138f\u2d92\u1358\u1359\u135a\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u0950\ua8fd\u0972\u0904\u0905\u0906\u0973\u0974\u0975\u0976\u0977\u0907\u0908\u0909\u090a\u090b\u0960\u090c\u0961\u090d\u090e\u090f\u0910\ua8fe\u0911\u0912\u0913\u0914\u0915\u0958\u0916\u0959\u0917\u095a\u097b\u0918\u0919\u091a\u091b\u091c\u095b\u0979\u097c\u091d\u091e\u091f\u0920\u0978\u0921\u095c\u097e\u0922\u095d\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u095e\u092c\u097f\u092d\u092e\u092f\u095f\u097a\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u097d\u1ce9\u1cea\u1ceb\u1cec\u1cee\u1cef\u1cf0\u1cf1\u1cfa\u1cf5\u1cf6\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8fb\u093e\u093a\u093b\u094f\u0956\u0957\u093f\u0940\u0941\u0942\u0943\u0944\u0962\u0963\u0945\u0955\u0946\u0947\u094e\u0948\ua8ff\u0949\u094a\u094b\u094c\u094d\u0980\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u09e0\u098c\u09e1\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09dc\u09a2\u09dd\u09a3\u09a4\u09ce\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09df\u09b0\u09f0\u09b2\u09f1\u09b6\u09b7\u09b8\u09b9\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09e2\u09e3\u09c7\u09c8\u09cb\u09cc\u09cd\u09d7\u09fc\u0a74\u0a73\u0a09\u0a0a\u0a13\u0a05\u0a06\u0a10\u0a14\u0a72\u0a07\u0a08\u0a0f\u0a38\u0a36\u0a39\u0a51\u0a15\u0a16\u0a59\u0a17\u0a5a\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a5b\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a5e\u0a2c\u0a2d\u0a2e\u0a2f\u0a75\u0a30\u0a32\u0a33\u0a35\u0a5c\u0a3e\u0a3f\u0a40\u0a41\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a4d\u0ad0\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0ae0\u0a8c\u0ae1\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0af9\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0ab3\u0abd\u0abe\u0abf\u0ac0\u0ac1\u0ac2\u0ac3\u0ac4\u0ae2\u0ae3\u0ac5\u0ac7\u0ac8\u0ac9\u0acb\u0acc\u0acd\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b60\u0b0c\u0b61\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b5c\u0b22\u0b5d\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b5f\u0b30\u0b32\u0b33\u0b35\u0b71\u0b36\u0b37\u0b38\u0b39\u0b3d\u0b3e\u0b3f\u0b40\u0b41\u0b42\u0b43\u0b44\u0b62\u0b63\u0b47\u0b48\u0b4b\u0b4c\u0b4d\u0b56\u0b57\u0bd0\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b83\u0b95\u0b99\u0b9a\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0baa\u0bae\u0baf\u0bb0\u0bb2\u0bb5\u0bb4\u0bb3\u0bb1\u0ba9\u0b9c\u0bb6\u0bb7\u0bb8\u0bb9\u0bbe\u0bbf\u0bc0\u0bc1\u0bc2\u0bc6\u0bc7\u0bc8\u0bca\u0bcb\u0bcc\u0bcd\u0bd7\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c60\u0c0c\u0c61\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c58\u0c1b\u0c1c\u0c59\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c35\u0c36\u0c37\u0c38\u0c39\u0c33\u0c34\u0c5a\u0c3d\u0c3e\u0c3f\u0c40\u0c41\u0c42\u0c43\u0c44\u0c62\u0c63\u0c46\u0c47\u0c48\u0c4a\u0c4b\u0c4c\u0c4d\u0c55\u0c56\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0ce0\u0c8c\u0ce1\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cb3\u0cde\u0cbd\u0cf1\u0cf2\u0c80\u0cbe\u0cbf\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0ce2\u0ce3\u0cc6\u0cc7\u0cc8\u0cca\u0ccb\u0ccc\u0ccd\u0cd5\u0cd6\u0d05\u0d06\u0d07\u0d08\u0d5f\u0d09\u0d0a\u0d0b\u0d60\u0d0c\u0d61\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d7f\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d7a\u0d24\u0d25\u0d26\u0d27\u0d28\u0d7b\u0d29\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d54\u0d2f\u0d55\u0d30\u0d4e\u0d7c\u0d32\u0d7d\u0d35\u0d36\u0d37\u0d38\u0d39\u0d33\u0d7e\u0d34\u0d56\u0d31\u0d3a\u0d3d\u0d04\u0d3e\u0d3f\u0d40\u0d41\u0d42\u0d43\u0d44\u0d62\u0d63\u0d46\u0d47\u0d48\u0d4a\u0d4b\u0d4c\u0d57\u0d4d\u0d3b\u0d3c\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0dcf\u0dd0\u0dd1\u0dd2\u0dd3\u0dd4\u0dd6\u0dd8\u0df2\u0ddf\u0df3\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0dca\uaaf2\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uabe3\uabe4\uabe5\uabe6\uabe7\uabe8\uabe9\uabea\uaaeb\uaaec\uaaed\uaaee\uaaef\uaaf5\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uabed\uaaf6\ua800\ua801\ua802\ua803\ua804\ua805\ua806\ua82c\ua807\ua808\ua809\ua80a\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\ua823\ua824\ua825\ua826\ua827\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8b4\ua8b5\ua8b6\ua8b7\ua8b8\ua8b9\ua8ba\ua8bb\ua8bc\ua8bd\ua8be\ua8bf\ua8c0\ua8c1\ua8c2\ua8c3\ua8c4\u1b83\u1bba\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1bbe\u1bae\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1bbd\u1b99\u1bbf\u1bac\u1b9a\u1ba1\u1b9b\u1ba2\u1bbb\u1b9c\u1ba3\u1bbc\u1b9d\u1bad\u1b9e\u1b9f\u1baf\u1ba0\u1ba4\u1ba5\u1ba6\u1ba7\u1ba8\u1ba9\u1baa\u1bab\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0ede\u0e81\u0e82\u0e84\u0e86\u0e87\u0e88\u0e89\u0eaa\u0e8a\u0e8c\u0e8e\u0edf\u0e8d\u0e8f\u0e90\u0e91\u0e92\u0e93\u0e94\u0e95\u0e96\u0e97\u0e98\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea0\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0ea8\u0ea9\u0eab\u0edc\u0edd\u0eac\u0ead\u0eae\u0eaf\u0eb0\u0eb1\u0eb2\u0eb3\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0eba\u0ebb\u0ebc\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab0\uaab1\uaab2\uaab3\uaab4\uaab5\uaab6\uaab7\uaab8\uaab9\uaaba\uaabb\uaabc\uaabd\uaabe\uaac0\uaac2\uaadb\uaadc\u0f40\u0f69\u0f90\u0fb9\u0f6b\u0f41\u0f91\u0f42\u0f43\u0f92\u0f93\u0f44\u0f94\u0f45\u0f95\u0f46\u0f96\u0f47\u0f97\u0f49\u0f99\u0f4a\u0f9a\u0f4b\u0f9b\u0f4c\u0f4d\u0f9c\u0f9d\u0f4e\u0f9e\u0f4f\u0f9f\u0f50\u0fa0\u0f51\u0f52\u0fa1\u0fa2\u0f53\u0fa3\u0f54\u0fa4\u0f55\u0fa5\u0f56\u0f57\u0fa6\u0fa7\u0f58\u0fa8\u0f59\u0fa9\u0f5a\u0faa\u0f5b\u0f5c\u0fab\u0fac\u0f5d\u0fad\u0fba\u0f5e\u0fae\u0f5f\u0faf\u0f60\u0fb0\u0f61\u0fb1\u0fbb\u0f62\u0f6a\u0fb2\u0fbc\u0f6c\u0f63\u0fb3\u0f64\u0fb4\u0f65\u0fb5\u0f66\u0fb6\u0f67\u0fb7\u0f68\u0f00\u0fb8\u0f88\u0f8d\u0f89\u0f8e\u0f8c\u0f8f\u0f8a\u0f8b\u0f71\u0f72\u0f73\u0f80\u0f81\u0f74\u0f75\u0f76\u0f77\u0f78\u0f79\u0f7a\u0f7b\u0f7c\u0f7d\u0f84\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c4d\u1c4e\u1c4f\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c24\u1c1b\u1c25\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c36\u1c26\u1c27\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u1c2d\u1c2e\u1c2f\u1c30\u1c31\u1c32\u1c33\u1c34\u1c35\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua869\ua86a\ua86b\ua86c\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua867\ua854\ua855\ua856\ua857\ua868\ua86d\ua858\ua871\ua872\ua859\ua85a\ua86e\ua85b\ua85c\ua86f\ua870\ua85d\ua862\ua863\ua864\ua865\ua85e\ua85f\ua860\ua861\ua866\ua873\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u191d\u1909\u190a\u190b\u191e\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u1920\u1921\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929\u192a\u192b\u1930\u1931\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1712\u1713\u1714\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1732\u1733\u1734\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1752\u1753\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1772\u1773\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u1a17\u1a18\u1a19\u1a1a\u1a1b\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua947\ua948\ua949\ua94a\ua94b\ua94c\ua94d\ua94e\ua94f\ua950\ua951\ua952\ua953\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua926\ua927\ua928\ua929\ua92a\u1000\u1075\u1001\u1076\u1002\u1077\uaa60\ua9e9\u1003\ua9e0\ua9ea\u1004\u105a\u1005\u1078\uaa61\u1006\ua9e1\uaa62\uaa7e\u1007\uaa63\ua9eb\u1079\uaa72\u1008\u105b\ua9e2\uaa64\ua9ec\u1061\uaa7f\u1009\u107a\uaa65\ua9e7\u100a\u100b\uaa66\u100c\uaa67\u100d\uaa68\ua9ed\u100e\uaa69\ua9ee\u100f\u106e\ua9e3\ua9ef\u1010\u1011\u1012\u107b\ua9fb\u1013\uaa6a\ua9fc\u1014\u107c\uaa6b\u105e\u1015\u1016\u107d\u107e\uaa6f\u108e\ua9e8\u1017\u107f\ua9fd\u1018\ua9e4\ua9fe\u1019\u105f\u101a\u103b\u101b\uaa73\uaa7a\u103c\u101c\u1060\u101d\u103d\u1082\u1080\u1050\u1051\u1065\u101e\u103f\uaa6c\u101f\u1081\uaa6d\u103e\uaa6e\uaa71\u1020\ua9fa\u105c\u105d\u106f\u1070\u1066\u1021\u1022\u1023\u1024\u1025\u1026\u1052\u1053\u1054\u1055\u1027\u1028\u1029\u102a\u102c\u102b\u1083\u1072\u109c\u102d\u1071\u102e\u1033\u102f\u1073\u1074\u1030\u1056\u1057\u1058\u1059\u1031\u1084\u1035\u1085\u1032\u109d\u1034\u1062\u1067\u1068\ua9e5\u1086\u1039\u103a\u1063\u1064\u1069\u106a\u106b\u106c\u106d\u1087\u108b\u1088\u108c\u108d\u1089\u108a\u108f\u109a\u109b\uaa7b\uaa7c\uaa7d\uaa74\uaa75\uaa76\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17dc\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17b6\u17b7\u17b8\u17b9\u17ba\u17bb\u17bc\u17bd\u17be\u17bf\u17c0\u17c1\u17c2\u17c3\u17c4\u17c5\u17d2\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u19de\u19df\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19aa\u19ab\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u19c8\u19c9\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a58\u1a59\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a5a\u1a5b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a54\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a53\u1a6b\u1a55\u1a56\u1a57\u1a5c\u1a5d\u1a5e\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a61\u1a6c\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6e\u1a6f\u1a73\u1a70\u1a71\u1a72\u1a6d\u1a60\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa33\uaa34\uaa35\uaa36\uaa29\uaa2a\uaa2b\uaa2c\uaa2d\uaa2e\uaa2f\uaa30\uaa31\uaa32\uaa40\uaa41\uaa42\uaa43\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa4c\uaa4d\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b45\u1b46\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b47\u1b23\u1b24\u1b25\u1b26\u1b27\u1b48\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b49\u1b30\u1b31\u1b32\u1b4a\u1b4b\u1b33\u1b35\u1b36\u1b37\u1b38\u1b39\u1b3a\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b40\u1b41\u1b42\u1b43\u1b44\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9be\ua9ab\ua9ac\ua9bf\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9b4\ua9b5\ua9bc\ua9b6\ua9b7\ua9b8\ua9b9\ua9bd\ua9ba\ua9bb\ua9c0\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1843\u1820\u1887\u1821\u1844\u185d\u1822\u1845\u185e\u1873\u1888\u185f\u1823\u1846\u1824\u1847\u1861\u1825\u1848\u1826\u1849\u1860\u1827\u1828\u1829\u184a\u1862\u188a\u189b\u182a\u184b\u182b\u184c\u1866\u182c\u184d\u182d\u184e\u1864\u189a\u1865\u182e\u184f\u182f\u1830\u1831\u1867\u189c\u189d\u18a2\u18a4\u18a5\u1832\u1850\u1868\u1833\u1851\u1869\u1834\u1852\u1871\u1878\u185c\u188b\u1835\u1853\u186a\u1877\u1836\u1855\u1872\u1837\u1875\u1838\u1856\u1839\u186b\u1876\u183a\u1857\u1863\u1874\u1889\u183b\u183c\u1854\u186e\u183d\u186f\u1858\u186c\u183e\u1859\u186d\u183f\u1840\u1841\u1842\u185a\u185b\u1870\u188c\u189e\u188d\u188e\u189f\u188f\u1890\u1898\u18a0\u1891\u18a1\u1892\u1893\u18a8\u1894\u18a3\u1895\u1899\u1896\u1897\u18a6\u18a7\u18aa\u18a9\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\uab70\u13a0\uab71\u13a1\uab72\u13a2\uab73\u13a3\uab74\u13a4\uab75\u13a5\uab76\u13a6\uab77\u13a7\uab78\u13a8\uab79\u13a9\uab7a\u13aa\uab7b\u13ab\uab7c\u13ac\uab7d\u13ad\uab7e\u13ae\uab7f\u13af\uab80\u13b0\uab81\u13b1\uab82\u13b2\uab83\u13b3\uab84\u13b4\uab85\u13b5\uab86\u13b6\uab87\u13b7\uab88\u13b8\uab89\u13b9\uab8a\u13ba\uab8b\u13bb\uab8c\u13bc\uab8d\u13bd\uab8e\u13be\uab8f\u13bf\uab90\u13c0\uab91\u13c1\uab92\u13c2\uab93\u13c3\uab94\u13c4\uab95\u13c5\uab96\u13c6\uab97\u13c7\uab98\u13c8\uab99\u13c9\uab9a\u13ca\uab9b\u13cb\uab9c\u13cc\uab9d\u13cd\uab9e\u13ce\uab9f\u13cf\uaba0\u13d0\uaba1\u13d1\uaba2\u13d2\uaba3\u13d3\uaba4\u13d4\uaba5\u13d5\uaba6\u13d6\uaba7\u13d7\uaba8\u13d8\uaba9\u13d9\uabaa\u13da\uabab\u13db\uabac\u13dc\uabad\u13dd\uabae\u13de\uabaf\u13df\uabb0\u13e0\uabb1\u13e1\uabb2\u13e2\uabb3\u13e3\uabb4\u13e4\uabb5\u13e5\uabb6\u13e6\uabb7\u13e7\uabb8\u13e8\uabb9\u13e9\uabba\u13ea\uabbb\u13eb\uabbc\u13ec\uabbd\u13ed\uabbe\u13ee\uabbf\u13ef\u13f8\u13f0\u13f9\u13f1\u13fa\u13f2\u13fb\u13f3\u13fc\u13f4\u13fd\u13f5\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157d\u166f\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u1670\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u157c\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a4\u16a5\u16a6\u16a7\u16f0\u16a8\u16a9\u16ac\u16ad\u16ae\u16f4\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16f1\u16b7\u16b9\u16e9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16f5\u16c3\u16c4\u16c5\u16c6\u16ee\u16c7\u16c8\u16d5\u16c9\u16ca\u16cb\u16ea\u16cc\u16cd\u16ce\u16f2\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d6\u16f6\u16d7\u16d8\u16d9\u16ef\u16da\u16db\u16dc\u16dd\u16de\u16df\u16f3\u16aa\u16f7\u16ab\u16f8\u16a3\u16e0\u16e3\u16b8\u16e4\u16e1\u16e2\u16e5\u16e6\u16e7\u16e8\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua613\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua614\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua615\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua616\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua617\ua553\ua554\ua555\ua556\ua557\ua558\ua610\ua618\ua559\ua55a\ua619\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua61a\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua611\ua56b\ua56c\ua56d\ua56e\ua62a\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua61b\ua586\ua587\ua612\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua61c\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua61d\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua62b\ua61e\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua61f\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\u1100\u3131\u3260\uffa1\u326e\u1101\u3132\uffa2\u1102\u3134\u3261\uffa4\u326f\u1103\u3137\u3262\uffa7\u3270\u1104\u3138\uffa8\u1105\u3139\u3263\uffa9\u3271\u1106\u3141\u3264\uffb1\u3272\u1107\u3142\u3265\uffb2\u3273\u1108\u3143\uffb3\u1109\u3145\u3266\uffb5\u3274\u110a\u3146\uffb6\u110b\u3147\u3267\uffb7\u3275\u327e\u110c\u3148\u3268\uffb8\u3276\u327d\u110d\u3149\uffb9\u110e\u314a\u3269\uffba\u3277\u327c\u110f\u314b\u326a\uffbb\u3278\u1110\u314c\u326b\uffbc\u3279\u1111\u314d\u326c\uffbd\u327a\u1112\u314e\u326d\uffbe\u327b\u1113\u1114\u3165\u1115\u3166\u1116\u1117\u1118\u1119\u111a\u3140\uffb0\u111b\u111c\u316e\u111d\u3171\u111e\u3172\u111f\u1120\u3173\u1121\u3144\uffb4\u1122\u3174\u1123\u3175\u1124\u1125\u1126\u1127\u3176\u1128\u1129\u3177\u112a\u112b\u3178\u112c\u3179\u112d\u317a\u112e\u317b\u112f\u317c\u1130\u1131\u1132\u317d\u1133\u1134\u1135\u1136\u317e\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u317f\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u3180\u1148\u1149\u114a\u114b\u114c\u3181\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u3184\u1158\u3185\u1159\u3186\u115a\u115b\u115c\u115d\u115e\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\u115f\u1160\u3164\uffa0\u1161\u314f\uffc2\u1162\u3150\uffc3\u1163\u3151\uffc4\u1164\u3152\uffc5\u1165\u3153\uffc6\u1166\u3154\uffc7\u1167\u3155\uffca\u1168\u3156\uffcb\u1169\u3157\uffcc\u116a\u3158\uffcd\u116b\u3159\uffce\u116c\u315a\uffcf\u116d\u315b\uffd2\u116e\u315c\uffd3\u116f\u315d\uffd4\u1170\u315e\uffd5\u1171\u315f\uffd6\u1172\u3160\uffd7\u1173\u3161\uffda\u1174\u3162\uffdb\u1175\u3163\uffdc\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u3187\u1185\u3188\u1186\u1187\u1188\u3189\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u318a\u1192\u318b\u1193\u1194\u318c\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u318d\u119f\u11a0\u11a1\u318e\u11a2\u11a3\u11a4\u11a5\u11a6\u11a7\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\u11a8\u11a9\u11aa\u3133\uffa3\u11ab\u11ac\u3135\uffa5\u11ad\u3136\uffa6\u11ae\u11af\u11b0\u313a\uffaa\u11b1\u313b\uffab\u11b2\u313c\uffac\u11b3\u313d\uffad\u11b4\u313e\uffae\u11b5\u313f\uffaf\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u3167\u11c8\u3168\u11c9\u11ca\u11cb\u11cc\u3169\u11cd\u11ce\u316a\u11cf\u11d0\u11d1\u11d2\u11d3\u316b\u11d4\u11d5\u11d6\u11d7\u316c\u11d8\u11d9\u316d\u11da\u11db\u11dc\u11dd\u316f\u11de\u11df\u3170\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u3182\u11f2\u3183\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\u30a1\uff67\u30a2\uff71\u3041\u3042\u32d0\u3303\u3300\u3301\u3302\u30a3\uff68\u30a4\uff72\u3043\u3044\u32d1\u3304\u3305\u30a5\uff69\u30a6\uff73\u3045\u3046\u32d2\u30f4\u3094\u3306\u30a7\uff6a\u30a8\uff74\u3047\u3048\u32d3\u3308\u3307\u30a9\uff6b\u30aa\uff75\u3049\u304a\u32d4\u330a\u3309\u30f5\u30ab\uff76\u3095\u304b\u32d5\u30ac\u304c\u330e\u330f\u330b\u330c\u330d\u30ad\uff77\u304d\u32d6\u30ae\u304e\u3310\u3311\u3313\u3312\u3314\u3315\u3316\u3317\u31f0\u30af\uff78\u304f\u32d7\u30b0\u3050\u3318\u3319\u331a\u331b\u30f6\u30b1\uff79\u3096\u3051\u32d8\u30b2\u3052\u331c\u30b3\uff7a\u3053\u32d9\u30b4\u3054\u331e\u30ff\u331d\u30b5\uff7b\u3055\u32da\u30b6\u3056\u331f\u3320\u31f1\u30b7\uff7c\u3057\u32db\u30b8\u3058\u3006\u3321\u31f2\u30b9\uff7d\u3059\u32dc\u30ba\u305a\u30bb\uff7e\u305b\u32dd\u30bc\u305c\u3322\u3323\u30bd\uff7f\u305d\u32de\u30be\u305e\u30bf\uff80\u305f\u32df\u30c0\u3060\u3324\u30c1\uff81\u3061\u32e0\u30c2\u3062\u30c3\uff6f\u30c4\uff82\u3063\u3064\u32e1\u30c5\u3065\u30c6\uff83\u3066\u32e2\u30c7\u3067\u3325\u31f3\u30c8\uff84\u3068\u32e3\u30c9\u3069\u3326\u3327\u30ca\uff85\u306a\u32e4\u3328\u30cb\uff86\u306b\u32e5\u31f4\u30cc\uff87\u306c\u32e6\u30cd\uff88\u306d\u32e7\u30ce\uff89\u306e\u32e8\u3329\u31f5\u30cf\uff8a\u306f\u32e9\u30d0\u3070\u30d1\u3071\u332b\u332c\u332d\u332a\u31f6\u30d2\uff8b\u3072\u32ea\u30d3\u3073\u30d4\u3074\u332e\u332f\u3330\u3331\u31f7\u30d5\uff8c\u3075\u32eb\u30d6\u3076\u30d7\u3077\u3334\u3332\u3333\u3335\u31f8\u30d8\uff8d\u3078\u32ec\u30d9\u3079\u30da\u307a\u333b\u333c\u3337\u3338\u333a\u3336\u3339\u31f9\u30db\uff8e\u307b\u32ed\u30dc\u307c\u30dd\u307d\u333d\u333e\u3340\u3341\u3342\u333f\u30de\uff8f\u307e\u32ee\u3343\u3344\u303c\u3345\u3346\u3347\u30df\uff90\u307f\u32ef\u3348\u3349\u334a\u31fa\u30e0\uff91\u3080\u32f0\u30e1\uff92\u3081\u32f1\u334d\u334b\u334c\u30e2\uff93\u3082\u32f2\u30e3\uff6c\u30e4\uff94\u3083\u3084\u32f3\u334e\u334f\u30e5\uff6d\u30e6\uff95\u3085\u3086\u32f4\u3350\u30e7\uff6e\u30e8\uff96\u3087\u3088\u32f5\u309f\u31fb\u30e9\uff97\u3089\u32f6\u31fc\u30ea\uff98\u308a\u32f7\u3351\u3352\u31fd\u30eb\uff99\u308b\u32f8\u3354\u3353\u31fe\u30ec\uff9a\u308c\u32f9\u3355\u3356\u31ff\u30ed\uff9b\u308d\u32fa\u30ee\u30ef\uff9c\u308e\u308f\u32fb\u30f7\u3357\u30f0\u3090\u32fc\u30f8\u30f1\u3091\u32fd\u30f9\u30f2\uff66\u3092\u32fe\u30fa\u30f3\uff9d\u3093\u3105\u31a0\u3106\u31b4\u3107\u31ac\u3108\u312a\u3109\u310a\u31b5\u310b\u312f\u310c\u310d\u31bb\u31a3\u310e\u31b6\u312b\u31ad\u310f\u31b7\u3110\u31a2\u3111\u3112\u312c\u31bc\u31bd\u3113\u3114\u3115\u3116\u3117\u31a1\u3118\u3119\u31b8\u31b9\u31ba\u311a\u31a9\u311b\u31a7\u31a6\u311c\u312e\u311d\u31a4\u31a5\u311e\u31ae\u311f\u3120\u31af\u3121\u3122\u3123\u3124\u31b2\u3125\u31b0\u31b1\u3126\u3127\u31aa\u31b3\u3128\u31ab\u31a8\u3129\u312d\u31be\u31bf\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua015\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua4f8\ua4f9\ua4fa\ua4fb\ua4fd\ua4fc\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4eb\ua4ed\ua4ea\ua4ec\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e90\u5344\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e17\u4e14\u4e15\u4e16\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u3400\u4e1e\u4e1f\u4e20\u4e21\u4e22\u3401\u3402\u4e23\u4e24\u4e25\u4e3d\u9fd6\u4e26\u4e27\u9fd7\u4db6\u4e28\u4e29\u4e2a\u4e2b\u3403\u3404\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e49\u4e39\u4e3a\u4e3b\u4e3c\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u3405\u4e45\u4e46\u4e47\u4e48\u4e4a\u4e4b\u4e4c\u5c39\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u3406\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u9fb4\u4e5e\u4e5f\u4e60\u3407\u3408\u3409\u4e63\u4e64\u4e65\u4e66\u340a\u340b\u4e67\u340c\u340d\u340e\u340f\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u3410\u3411\u3412\u3413\u3414\u3415\u4e71\u4e72\u3416\u3417\u3418\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u3419\u341a\u341b\u4e79\u4e7a\u4e7b\u4e7c\u341c\u341d\u341e\u341f\u3420\u4e7d\u4e7e\u4e7f\u4e80\u3421\u3422\u3423\u4e81\u3424\u4e82\u4e83\u4e84\u3425\u3426\u4e85\u4e86\u4e87\u4e88\u3427\u4e89\u4e8a\u4e8b\u3428\u4e8c\u4e8d\u4e8e\u4e8f\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u3429\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u342a\u342b\u4ea8\u4ea9\u4eaa\u342c\u4eab\u4eac\u342d\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u342e\u4eb8\u342f\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f64\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f65\u4f66\u4f67\u4f68\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u9fc7\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u3463\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u3464\u346e\u346f\u3470\u3471\u3472\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u9fd8\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u9fd9\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f3\u50f4\u50f7\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u50f2\u50f5\u50f6\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u512b\u9fda\u3499\u349a\u349b\u349c\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512c\u349d\u349e\u512d\u512e\u512f\u5130\u5131\u5132\u349f\u34a0\u5133\u5134\u5135\u34a1\u34a2\u34a3\u5136\u34a4\u34a5\u34a6\u5137\u5138\u5139\u513a\u34a7\u34a8\u513b\u513c\u513d\u34a9\u513e\u34aa\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u34ab\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u34ac\u5157\u5158\u5159\u515a\u515b\u34ad\u515c\u515d\u515e\u34ae\u515f\u5160\u5161\u5162\u5163\u34af\u5164\u5165\u5166\u5167\u34b0\u34b1\u5168\u6c3d\u34b2\u34b3\u34b4\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u9fb9\u5175\u34b5\u34b6\u34b7\u5176\u5177\u5178\u5179\u517b\u34b8\u517a\u517c\u517d\u517e\u517f\u5180\u5181\u34b9\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u34ba\u5191\u5192\u5193\u5194\u5195\u34bb\u34bc\u6700\u34bd\u34be\u34bf\u5196\u5197\u5198\u34c0\u34c1\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u34c2\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u34c3\u51a9\u34c4\u51aa\u51ab\u34c5\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u34c6\u34c7\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u9fd1\u34c8\u51bc\u51bd\u51be\u51bf\u51c0\u34c9\u34ca\u34cb\u34cc\u34cd\u51c1\u51c2\u51c3\u34ce\u34cf\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u34d0\u34d1\u34d2\u51cf\u51d0\u51d1\u34d3\u51d2\u51d3\u51d4\u51d5\u51d6\u34d4\u34d5\u51d7\u34d6\u51d8\u34d7\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u9fdb\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u34d8\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u34d9\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u34da\u34db\u34dc\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u34dd\u34de\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u34df\u34e0\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u34e7\u34e8\u34e9\u34ea\u34eb\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u34ec\u34ed\u34ee\u34ef\u34f0\u5268\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5276\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u5269\u5272\u5273\u5274\u5275\u34f7\u34f8\u34f9\u34fa\u34fb\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u34fc\u34fd\u5280\u5281\u5282\u5283\u5284\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u350a\u5290\u5291\u5292\u5293\u5294\u350b\u350c\u350d\u5295\u350e\u350f\u3510\u5296\u3511\u3512\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u3513\u361e\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u3514\u3515\u3516\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u3517\u3518\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u3519\u351a\u351b\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u351c\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u351d\u351e\u351f\u52d2\u52d3\u52d4\u52d5\u52d6\u52d8\u52d9\u52da\u3520\u52db\u52dc\u52dd\u52de\u3521\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u3522\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u3523\u3524\u3525\u3526\u3527\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u3528\u5311\u5312\u3529\u5313\u352a\u5314\u5315\u5316\u352b\u5317\u352c\u5318\u5319\u352d\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u352f\u3530\u5326\u5327\u5328\u5329\u532a\u532b\u9fa8\u532c\u532d\u532e\u3531\u532f\u3532\u3533\u3534\u5330\u5331\u5332\u3535\u5333\u5334\u5335\u5336\u5337\u3536\u5338\u5339\u533a\u533b\u3537\u533c\u533d\u533e\u533f\u5340\u3538\u5341\u5342\u5343\u5345\u5346\u5347\u5348\u3539\u5349\u534a\u534c\u534b\u534d\u534e\u534f\u5350\u353a\u353b\u5351\u5352\u5353\u5354\u5355\u5356\u9fba\u5357\u5358\u5359\u535a\u353c\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u353d\u5368\u5369\u536a\u536b\u353e\u353f\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u3540\u5376\u5377\u5378\u5379\u537a\u3541\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u3542\u3543\u3544\u538e\u538f\u5390\u5391\u3545\u3546\u3547\u5392\u5393\u5394\u5395\u3548\u3549\u5396\u5397\u5398\u5399\u539a\u539b\u354a\u539c\u539d\u539e\u539f\u8652\u354b\u354c\u354d\u53a0\u53a1\u53a2\u53a3\u53a9\u53a4\u53a5\u53a6\u53a7\u53a8\u354e\u53aa\u53ab\u354f\u53ac\u53ad\u53ae\u53af\u53b0\u3550\u3551\u53b1\u53b2\u3552\u53b3\u3553\u53b4\u3554\u53b5\u53b6\u53b7\u53b8\u53b9\u3555\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u3556\u53c3\u53c4\u3557\u3558\u53c5\u53c6\u53c7\u3559\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u355a\u355b\u53cf\u53d0\u53d1\u53d2\u355c\u53d3\u355d\u53d4\u53d5\u53d6\u53d7\u53d8\u355e\u53d9\u53da\u53db\u53dc\u53dd\u355f\u53de\u53df\u3560\u53e0\ufa0e\u3561\u53e1\u53e2\u58e1\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u3563\u3564\u3565\u4db7\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u3566\u3567\u3568\u4db8\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u555a\u555b\u555c\u555d\u555e\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u5559\u556b\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u5645\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u558d\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5651\u5653\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u561f\u5620\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5652\u5654\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u5674\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u56ba\u3605\u3606\u3607\u3608\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u3610\u3611\u3612\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u3613\u3614\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56cd\u3615\u3616\u3617\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56ce\u3618\u56cc\u56cf\u56d0\u3619\u361a\u56d1\u56d2\u56d3\u56d4\u56d5\u361b\u361c\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u9fb1\u361d\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u361f\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u3620\u3621\u56ff\u5700\u3622\u5701\u5702\u5703\u5704\u5705\u5706\u3623\u5707\u5708\u5709\u570a\u570b\u570f\u570c\u570d\u570e\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u3624\u571a\u571b\u571c\u3625\u571d\u571e\u571f\u5720\u5721\u9fb6\u5722\u5723\u5724\u5725\u5726\u5727\u3626\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u3631\u3632\u3633\u3634\u3635\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57ce\u9fcd\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\ufa0f\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u57ea\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583e\u583f\u5840\u5841\u5842\u5844\u5845\u5846\u5847\u5848\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u583d\u5843\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u9fb3\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u9fbc\u3677\u3678\u3679\u367a\u58d8\u58d9\u367b\u367c\u367d\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e2\u367e\u367f\u58e3\u58e4\u58e5\u3680\u58e6\u58e7\u58e8\u58e9\u3681\u58ea\u3682\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u3683\u58fc\u58fd\u58fe\u58ff\u5900\u3684\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u3685\u590a\u590b\u590c\u5909\u590d\u3686\u3687\u590e\u590f\u5910\u5911\u5913\u5912\u5914\u5915\u5916\u5917\u5918\u3688\u5919\u591a\u591b\u591c\u591d\u3689\u591e\u591f\u5920\u5921\u368a\u5922\u5923\u5924\u5925\u368b\u368c\u5926\u368d\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u368e\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u368f\u3690\u3691\u593d\u593e\u593f\u5940\u5941\u5942\u3692\u3693\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594b\u594c\u594d\u3694\u3695\u3696\u3697\u3698\u3699\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u369a\u369b\u594a\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u369c\u369d\u369e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u369f\u5966\u5967\u5968\u36a0\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u36a1\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u36a2\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u5989\u598a\u598b\u598c\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36e0\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u598d\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a05\u5a06\u5a07\u5a08\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u59ec\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a3d\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e1\u36e2\u36e3\u36e4\u5a2c\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5acf\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u5a90\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u3723\u3724\u3725\u3726\u3727\u3728\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b34\u3729\u372a\u372b\u372c\u372d\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b35\u5b36\u5b37\u372e\u372f\u5b38\u5b3a\u5b3b\u5b3c\u5b3d\u3730\u3731\u5b39\u5b3e\u5b3f\u3732\u3733\u3734\u3735\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u3736\u3737\u3738\u5b47\u5b48\u5b49\u3739\u5b4a\u5b4b\u5b4c\u373a\u5b4d\u5b4e\u5b4f\u373b\u373c\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u373d\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u373e\u373f\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u3740\u5b68\u5b69\u5b6a\u3741\u5b6b\u5b6c\u5b6d\u3742\u3743\u5b6e\u5b6f\u5b70\u5b72\u5b71\u3744\u5b73\u5b74\u3745\u5b75\u5b76\u5b77\u3746\u5b78\u5b79\u3747\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u3748\u5b80\u3749\u5b81\u5b82\u5b83\u5b84\u374a\u374b\u5b85\u5b86\u5b87\u5b88\u5b89\u374c\u374d\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u374e\u374f\u3750\u3751\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u3752\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba8\u5ba9\u5baa\u5bab\u3753\u3754\u3755\u3756\u5ba7\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u3757\u3758\u3759\u375a\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bea\u3762\u3763\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u3764\u3765\u3766\u3767\u3768\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u3769\u376a\u376b\u376c\u5be9\u5beb\u5bec\u5bed\u5bee\u376d\u376e\u376f\u5bef\u5bf0\u5bf1\u5bf2\u3770\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u3771\u3772\u5bf8\u5bf9\u3773\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u3774\u5c00\u3775\u5c01\u5c02\u5c06\u5c03\u5c04\u5c05\u3776\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u3777\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u9fb8\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u3778\u5c1e\u3779\u5c1f\u5c20\u5c21\u377a\u377b\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u377c\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u377d\u5c2d\u377e\u377f\u5c2e\u5c2f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u5c30\u5c31\u3787\u3788\u5c32\u5c33\u5c34\u3789\u378a\u5c35\u5c36\u5c37\u5c38\u5c3a\u5c3b\u5c3c\u378b\u5c3d\u378c\u378d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u378e\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u378f\u3790\u3791\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u3792\u3793\u3794\u3795\u3796\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u3797\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u3798\u3799\u5c5e\u5c5f\u5c60\u5c61\u379a\u379b\u5c62\u5c63\u379c\u379d\u379e\u5c64\u5c65\u5c66\u5c67\u379f\u37a0\u5c68\u5c69\u5c6a\u5c6b\u37a1\u5c6c\u5c6d\u5c6e\u4db9\u5c6f\u37a2\u5c70\u37a3\u37b7\u5c71\u4e62\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u37a4\u37a5\u37a6\u37a7\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b8\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u5c8d\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u37c4\u37c5\u37c6\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\ufa11\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u5d4a\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u5db7\u5db8\u5db9\u5dba\u5dbc\u5dbd\u5dbe\u5dbf\u3818\u3819\u381a\u381b\u381c\u5dc0\u5dc1\u5dc2\u381d\u381e\u381f\u5dbb\u5dc3\u5dc4\u5dc5\u3820\u3821\u3822\u3823\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u3824\u5dcd\u5dcf\u5dd0\u3825\u3826\u5dce\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd7\u3827\u5dd6\u5dd8\u5dd9\u5dda\u3828\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u3829\u5de0\u5de2\u5de3\u5de4\u5de5\u382a\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u382b\u382c\u5def\u382d\u5df0\u382e\u5df1\u5df2\u5df3\u5df4\u382f\u5df5\u5df6\u3830\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u3831\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u3832\u3833\u5e06\u5e07\u5e08\u3834\u3835\u3836\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u3837\u3838\u3839\u383a\u383b\u383c\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u383d\u383e\u383f\u3840\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u3841\u3842\u3843\u3844\u3845\u3846\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u3847\u3848\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u3849\u384a\u384b\u384c\u384d\u384e\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e49\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u3857\u3858\u3859\u385a\u385b\u5e48\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5b\u385c\u385d\u385e\u385f\u5e5a\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u3860\u3861\u5e66\u5e67\u5e68\u5e69\u3862\u3863\u3864\u5e6a\u5e6b\u5e6c\u3865\u3866\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u3867\u3868\u3869\u386a\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u4e61\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u386b\u386c\u386d\u386e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u386f\u3870\u3871\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e98\u3872\u3873\u5e95\u5e96\u5e97\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u3883\u3884\u3885\u3886\u3887\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u3888\u3889\u388a\u388b\u388c\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5eca\u388d\u388e\u388f\u3890\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5ecb\u5ecc\u9fee\u3891\u5ec4\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u3892\u3893\u3894\u3895\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u3896\u3897\u3898\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u3899\u389a\u389b\u389c\u5eeb\u5eec\u5eed\u9f90\u389d\u5eee\u5eef\u5ef0\u389e\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u389f\u5ef6\u5ef7\u5ef8\u5ef9\u38a0\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u38a1\u5f0a\u38a2\u38a3\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u38a4\u38a5\u5f11\u5f12\u38a6\u5f13\u5f14\u5f15\u5f16\u38a7\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u38a8\u38a9\u38aa\u38ab\u5f1d\u5f1e\u5f1f\u5f20\u38ac\u38ad\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u38ae\u38af\u38b0\u38b1\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u5f30\u5f31\u5f32\u5f33\u38b8\u38b9\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u38ba\u38bb\u38bc\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u38bd\u38be\u38bf\u5f3f\u5f40\u5f41\u5f42\u38c0\u38c1\u38c2\u5f43\u5f44\u5f45\u38c3\u5f46\u5f47\u5f48\u5f49\u38c4\u38c5\u5f4a\u5f4b\u5f4c\u5f4d\u38c6\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u38c7\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u38c8\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u38c9\u5f62\u5f63\u5f64\u38ca\u38cb\u38cc\u38cd\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6b\u5f6c\u38ce\u5f6d\u38cf\u38d0\u5f6e\u5f6f\u5f70\u38d1\u5f71\u38d2\u38d3\u5f72\u5f73\u38d4\u5f74\u5f75\u38d5\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u9fc8\u9fc9\u38d6\u38d7\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u38d8\u38d9\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f94\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f95\u38e2\u38e3\u5f96\u5f97\u5f98\u5f99\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u5f9a\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u38ea\u38eb\u38ec\u38ed\u38ee\u5fac\u5fad\u5fae\u5faf\u5fb0\u38ef\u5fb1\u5fb3\u5fb4\u38f0\u38f1\u38f2\u5fb2\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u38f3\u38f4\u5fbb\u5fbc\u38f5\u38f6\u5fbd\u5fbe\u38f7\u5fbf\u38f8\u5fc0\u5fc1\u38f9\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u38fa\u5fc7\u5fc8\u5fc9\u5fca\u38fb\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u38fc\u38fd\u38fe\u38ff\u3900\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u393a\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393b\u393c\u393d\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6168\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6169\u616a\u616b\u616c\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u616d\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u3997\u3998\u3999\u61bb\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u39a1\u39a2\u61f5\u61f6\u61f7\u61f8\u39a3\u39a4\u39a5\u39a6\u39a7\u61f9\u61fa\u61fb\u39a8\u39a9\u39aa\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u39ab\u39ac\u6203\u6204\u6205\u6206\u6207\u39ad\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u39ae\u39af\u6214\u6215\u6216\u6217\u39b0\u39b1\u39b2\u6218\u39b3\u6219\u39b4\u39b5\u39b6\u621a\u621b\u621c\u621d\u39b7\u621e\u621f\u6226\u39b8\u6220\u6221\u6222\u6223\u6224\u6225\u39b9\u6227\u6228\u6229\u622a\u622b\u622c\u39ba\u622d\u622e\u622f\u6231\u39bb\u39bc\u6230\u6232\u6234\u39bd\u6233\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u39be\u623d\u623e\u623f\u6240\u39bf\u39c0\u6241\u6242\u6243\u39c1\u39c2\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u9fb5\u624e\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u39c3\u39c4\u39c5\u624f\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u39c6\u39c7\u39c8\u625f\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u6278\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u63b2\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6452\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a17\u3a18\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u3a16\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u63c5\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6453\u6454\u6455\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6487\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u6431\u6456\u6485\u6486\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64c6\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u64e5\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6512\u3a6c\u3a6d\u6511\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u3a6e\u3a6f\u3a70\u651b\u651c\u651d\u3a71\u3a72\u3a73\u3a74\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6526\u6527\u9fdc\u6525\u6528\u6529\u652a\u652b\u3a75\u3a76\u3a77\u652c\u652d\u652e\u3a78\u3a79\u652f\u6530\u3a7a\u6531\u3a7b\u3a7c\u3a7d\u6532\u3a7e\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u3a7f\u3a80\u653d\u653e\u653f\u3a81\u3a82\u6540\u6541\u6542\u6543\u6544\u6545\u3a83\u3a84\u3a85\u3a86\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u3a87\u3a88\u3a89\u555f\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656d\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u656b\u656c\u656e\u656f\u6570\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u6571\u6572\u6573\u3aa0\u3aa1\u3aa2\u3aa3\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u3aa4\u3aa5\u3aa6\u657c\u657d\u657e\u657f\u3aa7\u3aa8\u3aa9\u3aaa\u6580\u6581\u6582\u6583\u8d01\u3aab\u3aac\u6584\u6585\u6586\u3aad\u3aae\u6587\u6588\u3aaf\u6589\u658a\u658b\u3ab0\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u3ab1\u6593\u6594\u6595\u6596\u6597\u3ab2\u3ab3\u6598\u3ab4\u3ab5\u6599\u659a\u3ab6\u659b\u659c\u3ab7\u659d\u3ab8\u659e\u659f\u65a0\u65a1\u3ab9\u65a2\u65a3\u3aba\u3abb\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u3abc\u3abd\u3abe\u3abf\u65ac\u65ad\u65ae\u65af\u3ac0\u65b0\u65b1\u65b2\u3ac1\u65b3\u3ac2\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u3ac3\u65ba\u65bb\u65bc\u3ac4\u65bd\u65be\u65bf\u65c0\u3ac6\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65ca\u3ac5\u3ac7\u3ac8\u3ac9\u65c7\u65c8\u65c9\u65cb\u65cc\u65cd\u65ce\u65cf\u3aca\u3acb\u3acc\u65d0\u65d1\u3acd\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u3ace\u3acf\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u3ad0\u3ad1\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u3ad8\u3ad9\u3ada\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u52d7\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u66fd\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6691\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u3b0d\u3b0e\u3b0f\u3b10\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u9fa7\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66da\u3b20\u3b21\u3b22\u66d8\u66d9\u66db\u66dc\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u3b29\u3b2a\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u3b2b\u66e9\u3b2c\u3b2d\u66ea\u66eb\u66ec\u3b2e\u66ed\u66ee\u66ef\u3b2f\u66f0\u66f1\u66f2\u66f3\u3b30\u66f4\u66f5\u66f6\u66f7\u66f8\u66fa\u66f9\u66fb\u66fc\u66fe\u66ff\u6701\u6702\u6703\u6704\u6705\u6706\u3b31\u3b32\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u3b33\u4dba\u4dbb\u670e\u670f\u6710\u6712\u6713\u6714\u6715\u3b34\u3b35\u6716\u6717\u6718\u6719\u671a\u671b\u3b36\u3b37\u671c\u671d\u671e\u671f\u3b38\u4dbc\u6720\u4dbd\u6722\u3b3a\u3b3b\u81a4\u3b3c\u3b3d\u3b3e\u6723\u6724\u3b3f\u3b40\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u3b41\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u6781\u3b42\u3b43\u3b44\u3b45\u3b46\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u9fc4\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b77\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u3b76\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698b\u698c\u6994\u6998\ufa13\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba2\u3ba3\u698a\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6995\u6996\u6997\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e9\u6a2e\ufa14\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2f\u6a30\u6a31\u6a65\u6a74\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd1\u3bd2\u3be0\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u3bd0\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6aeb\u6aed\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u6ae7\u6ae8\u6ae9\u6aea\u6aec\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c16\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b0c\u3c14\u3c15\u6af7\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0d\u6b0e\u3c17\u3c18\u6b0f\u6b10\u6b11\u6b12\u3c19\u3c1a\u3c1b\u3c1c\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u9fdd\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b24\u3c1d\u3c1e\u6b23\u6b25\u6b26\u6b27\u3c1f\u3c20\u3c21\u3c22\u6b28\u6b29\u6b2a\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u4dbe\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u3c2e\u3c2f\u3c30\u3c31\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u3c32\u3c33\u3c34\u3c35\u3c36\u3c38\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u3c3f\u3c40\u3c41\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u3c42\u3c43\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u3c44\u3c45\u6b5b\u6b5c\u6b5d\u3c46\u3c47\u3c48\u3c49\u6b5e\u6b5f\u6b60\u3c4a\u3c4b\u6b61\u3c4c\u3c4d\u3c4e\u6b62\u9fb0\u6b63\u6b64\u3c4f\u6b65\u3c50\u3c51\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u3c52\u3c53\u3c54\u6b6c\u6b6d\u6b6e\u6b6f\u3c55\u3c56\u6b70\u6b71\u6b72\u6b73\u6b74\u3c57\u6b75\u6b76\u6b77\u6b78\u3c58\u6b79\u6b7a\u6b7b\u3c59\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u3c5a\u3c5b\u3c5c\u3c5d\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u3c5e\u3c5f\u3c60\u6b88\u6b89\u6b8a\u6b8b\u3c37\u3c61\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u3c62\u3c63\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u6b9b\u6b9c\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u3c6f\u3c70\u3c71\u3c72\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u3c73\u3c74\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u3c75\u3c76\u3c77\u6bac\u6bad\u6bae\u3c78\u6baf\u6bb0\u6bb1\u9fde\u3c79\u3c7a\u6bb2\u3c7b\u6bb3\u3c7c\u6bb4\u3c7d\u6bb5\u6bb6\u6bb7\u3c7e\u3c7f\u6bb8\u6bb9\u6bba\u6bbb\u3c80\u6bbc\u6bbd\u3c81\u3c82\u3c83\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u3c84\u6bc3\u6bc4\u3c85\u6bc5\u6bc6\u6bc7\u6bc8\u3c86\u3c87\u3c88\u3c89\u3c8a\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u3c8b\u6bd9\u6bda\u6bdb\u3c8c\u6bdc\u6bdd\u6bde\u6bdf\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u6be0\u6be1\u3c92\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u3c93\u6beb\u6bec\u6bed\u6bee\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u3c9b\u3c9c\u3c9d\u3c9e\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u6bfe\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u3caa\u3cab\u3cac\u3cad\u3cae\u6c08\u6c09\u6c0a\u6c0b\u3caf\u3cb0\u6c0c\u3cb1\u6c0d\u6c0e\u3cb2\u6c0f\u6c10\u6c11\u6c12\u6c13\u3cb3\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u3cb4\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u3cb5\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u3cb6\u3cb7\u9feb\u6c34\u6c35\u6c3a\u6c36\u6c37\u6c38\u6c39\u3cb8\u6c3b\u6c3c\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u3cb9\u3cba\u3cbb\u3cbc\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u3cbd\u3cbe\u3cbf\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u6cda\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u6d0d\u6d16\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u6d99\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e1a\u6e74\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u6e03\u6e18\u6e19\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6ecb\u6ede\u9fcc\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6edb\u6edc\u6edd\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6f13\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u6ecc\u6eda\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u6f0b\u6f3d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f9a\u6f9b\u6f9c\u6f9d\u6fd0\u9ff0\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u6f99\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd1\u6fd2\u6fd3\u6fd6\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u6f80\u6fd4\u6fd5\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u6ff3\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704f\u7050\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u3d99\u3d9a\u7059\u705a\u705b\u705c\u3d9b\u3d9c\u3d9d\u705d\u705e\u705f\u7060\u7061\u3d9e\u3d9f\u7062\u7063\u704e\u7064\u7065\u7066\u3da0\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7087\u3da1\u3da2\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u3da3\u3da4\u3da5\u7081\u7082\u7083\u7084\u7085\u7086\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u3da6\u3da7\u3da8\u3da9\u3daa\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7115\u7116\u7117\u7118\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u7114\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u716e\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u717a\u3ba1\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u7179\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u71a6\u84b8\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u9ed9\u9fa6\u9fbd\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u9fea\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u3e04\u3e05\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720c\u720d\u720e\u7215\u3e06\u3e07\u3e09\u720b\u720f\u7210\u7211\u7212\u7213\u7214\u7216\u7217\u7218\u3e08\u3e0a\u3e0b\u3e0c\u7219\u721a\u721b\u3e0d\u721c\u721d\u721e\u721f\u7220\u3e0e\u7221\u7222\u3e0f\u3e10\u7223\u7224\u7225\u7226\u3e11\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u3e12\u3e13\u722e\u722f\u7230\u7231\u3e14\u7232\u7233\u3e15\u5655\u7234\u7235\u7236\u7237\u7238\u3e16\u7239\u3e17\u3e18\u723a\u3e19\u723b\u3e1a\u723c\u723d\u723e\u4e2c\u723f\u7240\u7241\u3e1b\u7242\u3e1c\u7243\u7244\u7245\u7246\u7247\u7248\u3e1d\u3e1e\u7249\u724a\u3e1f\u3e20\u3e21\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u3e22\u7255\u7256\u7257\u3e23\u3e24\u7258\u3e25\u7259\u3e26\u3e27\u725a\u725b\u725c\u725d\u725e\u725f\u3e28\u7260\u7261\u7262\u7263\u7264\u3e29\u3e2a\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u3e30\u3e31\u3e32\u3e33\u3e34\u7276\u7277\u7278\u7279\u727a\u3e35\u3e36\u3e37\u3e38\u727b\u727c\u727d\u727e\u727f\u7281\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u7280\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u3e41\u3e42\u3e43\u728c\u728d\u728e\u728f\u7290\u7291\u3e45\u3e46\u3e47\u3e48\u7292\u7293\u7294\u7295\u7296\u7297\u3e44\u3e49\u3e4a\u3e4b\u7298\u7299\u729a\u729b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u729c\u729d\u729e\u729f\u3e51\u3e52\u3e53\u72a0\u3e54\u3e55\u3e56\u3e57\u3e58\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u3e59\u72a7\u72a8\u3e5a\u72a9\u3e5b\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u732a\u732b\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u7341\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7342\u7343\u7345\u7346\u7347\u7348\u7349\u734a\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u7344\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u734b\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u3e9a\u3e9b\u3e9c\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u3e9d\u3e9e\u3e9f\u7375\u7376\u7377\u7378\u3ea0\u7379\u737a\u737b\u3ea1\u3ea2\u737c\u737d\u3ea3\u3ea4\u3ea5\u3ea6\u737e\u737f\u7380\u7381\u7382\u7383\u3ea7\u7384\u7385\u7386\u7387\u7388\u7389\u738b\u738a\u738c\u738d\u738e\u738f\u7390\u7391\u3ea8\u3ea9\u3eaa\u3eab\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u3eac\u3ead\u3eae\u3eaf\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u9ff1\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u7409\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u73f3\u73f4\u73f5\u73f6\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u73f7\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u741e\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u3ee7\u3ee8\u3ee9\u3eea\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748e\u7493\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u748d\u748f\u7490\u7491\u7492\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a3\u74a4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u74a2\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u3f03\u3f04\u3f05\u3f06\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u3f07\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u3f08\u74db\u74dc\u74dd\u3f09\u3f0a\u74de\u74df\u3f0b\u3f0c\u74e0\u3f0d\u3f0e\u3f0f\u74e1\u3f10\u3f11\u3f12\u3f13\u3f14\u74e2\u3f15\u74e3\u74e4\u74e5\u3f16\u74e6\u74e7\u3f17\u74e8\u74e9\u3f18\u3f19\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u3f1a\u3f1b\u74f3\u74f4\u74f5\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u74f6\u74f7\u74f8\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u74f9\u74fa\u74fb\u74fc\u3f27\u3f28\u3f29\u3f2a\u74fd\u74fe\u74ff\u7500\u7501\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u7502\u7503\u7504\u7505\u7506\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u7507\u7508\u7509\u3f38\u3f39\u3f3a\u750a\u750b\u750c\u750d\u750e\u3f3b\u3f3c\u3f3d\u3f3e\u750f\u7510\u7511\u7512\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u7513\u7514\u7515\u3f46\u3f47\u7516\u3f48\u3f49\u7517\u3f4a\u3f4b\u3f4c\u7518\u7519\u751a\u3f4d\u751b\u751c\u751d\u751e\u3f4e\u3f4f\u3f50\u3f51\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u3f52\u7527\u3f53\u3f54\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753c\u3f55\u3f56\u3f57\u753b\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u3f58\u3f59\u3f5a\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u3f5b\u3f5c\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7569\u7570\u3f5d\u3f5e\u756a\u756b\u756c\u756d\u756e\u756f\u7572\u7573\u7574\u3f5f\u3f60\u7575\u7576\u7577\u7578\u7579\u757a\u3f61\u3f62\u3f63\u3f64\u7571\u757b\u757c\u757d\u3f65\u757e\u757f\u3f66\u3f67\u3f68\u7580\u7581\u7582\u3f69\u7583\u7584\u3f6a\u7585\u3f6b\u3f6c\u7586\u7587\u3f6d\u7588\u3f6e\u7589\u758a\u3f6f\u758b\u758c\u758d\u758e\u758f\u3f70\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u3f71\u3f72\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u3f73\u3f74\u3f75\u3f76\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75ba\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u761f\u7627\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u7619\u761a\u761b\u761c\u761d\u761e\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7628\u7629\u762a\u762b\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u764a\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764b\u764c\u764d\u764e\u3fc9\u3fca\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u765f\u7660\u7661\u7663\u3fd1\u3fd2\u3fd3\u7662\u7664\u7665\u7666\u3fd4\u7667\u7668\u7669\u766a\u766b\u3fd5\u3fd6\u3fd7\u766c\u766d\u766e\u3fd8\u766f\u7670\u3fd9\u7671\u7672\u3fda\u3fdb\u7673\u7674\u3fdc\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u3fdd\u7684\u7685\u7686\u7687\u7688\u3fde\u7560\u7689\u768a\u768b\u768c\u768d\u3fdf\u768e\u768f\u7690\u7691\u3fe0\u3fe1\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u3fe2\u3fe3\u3fe4\u769a\u769b\u769c\u769d\u769e\u3fe5\u769f\u76a0\u76a1\u3fe6\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u3fe7\u76aa\u76ab\u76ac\u3fe8\u76ad\u3fe9\u76ae\u76af\u3fea\u3feb\u3fec\u76b0\u76b1\u3fed\u3fee\u76b2\u3fef\u3ff0\u76b3\u76b4\u3ff1\u76b5\u9fbe\u3ff2\u3ff3\u76b6\u76b7\u76b8\u76b9\u3ff4\u3ff5\u76ba\u3ff6\u3ff7\u76bb\u3ff8\u76bc\u76bd\u3ff9\u76be\u3ffa\u76bf\u76c0\u76c1\u76c2\u3ffb\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u3ffc\u3ffd\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u3ffe\u3fff\u4000\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76db\u4001\u4002\u76d9\u76da\u76dc\u4003\u76dd\u76de\u76df\u4004\u4005\u76e0\u76e1\u76e2\u76e3\u4006\u76e4\u76e5\u76e6\u76e7\u4007\u4008\u76e8\u76e9\u76ea\u4009\u76eb\u76ec\u400a\u76ed\u400b\u400c\u400d\u76ee\u76ef\u400e\u400f\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u4010\u4011\u4012\u4013\u4014\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u773f\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u7741\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u7740\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u9fc3\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u7761\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u407b\u407c\u407d\u407e\u77d0\u77d1\u77d2\u77d3\u407f\u4080\u4081\u77d4\u4082\u4083\u77d5\u77d7\u77d8\u77d9\u4084\u77d6\u77da\u4085\u77db\u4086\u77dc\u4087\u77dd\u4088\u77de\u77df\u77e0\u4089\u408a\u408b\u408c\u408d\u408e\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u408f\u4090\u77ea\u77eb\u4091\u4092\u77ec\u77ed\u4093\u77ee\u4094\u4095\u77ef\u77f0\u77f1\u77f2\u77f3\u4096\u77f4\u77f5\u77f6\u4097\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u4098\u4099\u6cf5\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u409a\u409b\u409c\u409d\u409e\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u9fec\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u9fce\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u7878\u7879\u787a\u787b\u787c\u787d\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u78b0\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u787e\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78c1\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78dc\u78e4\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u78da\u78db\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40e0\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u40df\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u40f0\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u40f1\u40f2\u40f3\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u40f4\u40f5\u40f6\u40f7\u7935\u40f8\u40f9\u7936\u7937\u7938\u40fa\u7939\u40fb\u793a\u793b\u793c\u793d\u40fc\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u89c6\u9fc6\u40fd\u40fe\u40ff\u4100\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u4101\u4102\u4103\u7963\u7964\u7965\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u4104\u4105\u4106\u7966\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7984\u8996\u4107\u4108\u4109\u410a\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7985\u7986\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u4113\u4114\u4115\u4116\u4117\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u4118\u4119\u79a4\u79a5\u79a6\u411a\u411b\u411c\u411d\u411e\u79a7\u79a8\u79a9\u79aa\u79ab\u411f\u79ac\u79ad\u79ae\u79af\u9fc5\u4120\u4121\u79b0\u79b1\u4122\u79b2\u4123\u4124\u79b3\u79b4\u79b5\u79b6\u79b7\u4125\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u842c\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u4126\u4127\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u4128\u4129\u412a\u412b\u412c\u412d\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u4136\u4137\u4138\u4139\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u7a06\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u9fdf\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a4a\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u7a44\u7a45\u7a46\u7a47\u7a48\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u7a49\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u417e\u417f\u4180\u7a5f\u7a60\u7a61\u7a62\u7a63\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u4188\u4189\u9fe0\u418a\u418b\u418c\u418d\u7a70\u7a73\u418e\u418f\u7a71\u7a72\u4190\u7a74\u7a75\u7a76\u7a77\u4191\u7a78\u7a79\u7a7a\u7a7b\u4192\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u4193\u4194\u4195\u4196\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u4197\u4198\u4199\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u41a1\u41a2\u41a3\u41a4\u41a5\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u41a6\u41a7\u41a8\u41a9\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u41aa\u41ab\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u41ac\u41ad\u41ae\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u7ac4\u7ac5\u41bc\u41bd\u7ac6\u41be\u41bf\u7ac7\u41c0\u7ac8\u7ac9\u7aca\u41c1\u7acb\u41c2\u7acc\u7acd\u7ace\u7acf\u41c3\u41c4\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u41c5\u41c6\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u41c7\u41c8\u41c9\u41ca\u7ae1\u41cb\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u41cc\u41cd\u7ae8\u7ae9\u7aea\u7aeb\u41ce\u41cf\u41d0\u41d1\u7aec\u7aed\u7aef\u7af0\u7aee\u7af1\u41d2\u7af2\u7af3\u7af4\u41d3\u7af5\u41d4\u41d5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u41d6\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u7b04\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7bc0\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u7bc9\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7c11\u7c15\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c12\u7c13\u7c14\u7c16\u7c17\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u4263\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u424f\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4264\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c55\u7c56\u4265\u7c50\u7c51\u7c52\u7c53\u7c54\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u426e\u426f\u4270\u4271\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u4272\u4273\u4274\u7c6a\u4276\u7c69\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u4277\u4278\u7c71\u4279\u7c72\u7c73\u7c74\u7c75\u7c76\u5a04\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u427a\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u427b\u427c\u7568\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7ca3\u427d\u427e\u427f\u4280\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u4281\u4282\u4283\u4284\u4285\u4286\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cc0\u4287\u4288\u4289\u428a\u428b\u428c\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc1\u428d\u428e\u428f\u4290\u4291\u4292\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u9fef\u429a\u429b\u4a00\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce8\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u7ce9\u7cea\u7ceb\u7cec\u7ced\u42aa\u42ab\u42ac\u7cee\u7cef\u7cf0\u42ad\u42ae\u7cf2\u42af\u7cf1\u7cf3\u7cf4\u42b0\u7cf5\u42b1\u42b2\u7cf6\u42b3\u42b4\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u42b5\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u42b6\u42b7\u42b8\u42b9\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u7d5b\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7dd0\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd1\u7dd2\u7dd4\u7dd5\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u7dd3\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e49\u7e4a\u7e4c\u7e4d\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u7e48\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e67\u7e71\u4316\u4317\u4318\u4319\u431a\u431b\u7e4b\u7e66\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u4323\u4324\u4325\u4326\u4327\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u4328\u4329\u7e91\u7e92\u432a\u432b\u432c\u432d\u7e93\u7e94\u7e95\u7e96\u432e\u7e97\u432f\u4330\u4331\u4332\u7e98\u7e99\u7e9a\u7e9b\u4333\u4334\u7e9c\u7e9d\u4335\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eb6\u4336\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u4338\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u4337\u4339\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u433a\u433b\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u433c\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u433d\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u433e\u433f\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u4340\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u4341\u7f35\u7f36\u7f37\u7f38\u4342\u7f39\u7f3a\u7f3c\u4343\u7f3b\u7f3d\u4344\u4345\u4346\u4347\u4348\u4349\u7f3e\u7f3f\u7f40\u434a\u7f41\u7f42\u434b\u434c\u7f43\u434d\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u434e\u7f50\u7f51\u7f52\u7f53\u434f\u7f54\u7f55\u7f56\u7f57\u4350\u4351\u7f58\u7f59\u7f5a\u4352\u4353\u4354\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u4355\u4356\u4357\u7f63\u4358\u7f64\u7f65\u7f66\u4359\u435a\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f72\u435b\u435c\u435d\u435e\u7f6f\u7f70\u7f71\u7f73\u7f74\u435f\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u4360\u4361\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u4362\u7f82\u4363\u7f83\u7f84\u7f85\u7f86\u4364\u4365\u7f87\u7f88\u7f89\u4366\u9fe1\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f96\u7f97\u7f98\u7f99\u4367\u4368\u4369\u7f95\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u436a\u436b\u436c\u436d\u7fa0\u7fa1\u7fa2\u436e\u436f\u4370\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u4371\u7fab\u4372\u4373\u4374\u4375\u4376\u7fac\u7fad\u7fae\u7faf\u7fb0\u4377\u7fb1\u7fb2\u4378\u4379\u437a\u7fb3\u7fb4\u7fb5\u437b\u437c\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u437d\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u437e\u437f\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u4387\u4388\u4389\u438a\u7fdb\u7fdc\u7fdd\u438b\u438c\u438d\u438e\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u438f\u4390\u4391\u4392\u4393\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u4394\u4395\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ffc\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u4396\u4397\u4398\u7ffd\u7ffe\u7fff\u8000\u4399\u439a\u8001\u8002\u8003\u439b\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u439c\u439d\u439e\u800c\u800d\u800e\u800f\u8010\u8011\u439f\u43a0\u43a1\u8012\u8013\u8014\u43a2\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u43a3\u8020\u8021\u8022\u43a4\u43a5\u8023\u8024\u8025\u43a6\u43a7\u43a8\u43a9\u43aa\u8026\u8027\u43ab\u43ac\u8028\u8029\u802a\u802b\u802c\u43ad\u43ae\u43af\u802d\u802e\u43b0\u802f\u8030\u43b1\u8031\u8032\u8033\u8034\u43b2\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u43b3\u43b4\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u43b5\u43b6\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8060\u43b7\u8055\u8056\u8057\u8058\u43b8\u43b9\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8061\u8062\u8063\u9fe2\u43ba\u43bb\u43bc\u43bd\u43be\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u9fe3\u43bf\u43c0\u806c\u806d\u43c1\u43c2\u43c3\u806f\u8070\u8071\u8072\u8073\u43c4\u43c5\u43c6\u43c7\u806e\u8074\u8075\u8076\u8077\u9fe4\u43c8\u8078\u8079\u807a\u807b\u807c\u43c9\u807d\u807e\u43ca\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u43cb\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u43cc\u43cd\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u43ce\u43cf\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u6711\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u8109\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u3b39\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u5e50\u6721\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u6725\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u443e\u443f\u4440\u4441\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u4442\u4443\u4444\u4445\u81d4\u81d5\u81d7\u81d8\u4446\u4447\u4448\u81d6\u81d9\u81da\u81db\u81dc\u4449\u444a\u81dd\u352e\u444b\u444c\u444d\u444e\u81de\u81df\u444f\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u4450\u81e6\u81e7\u81e8\u81e9\u4451\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u4452\u81f5\u81f6\u81f7\u81f8\u81f9\u4453\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u4454\u8202\u4455\u8203\u8204\u8205\u8207\u4456\u8208\u4457\u8206\u8209\u4458\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u4459\u445a\u8211\u445b\u8212\u8213\u8214\u8215\u8216\u8217\u445c\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u445d\u445e\u445f\u821f\u8220\u4460\u8221\u8222\u8223\u8224\u4461\u4462\u4463\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u4464\u4465\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u4466\u4467\u4468\u4469\u823c\u823d\u823e\u823f\u446a\u446b\u446c\u446d\u446e\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u446f\u4470\u824a\u824b\u824c\u824d\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u4479\u447a\u447b\u8255\u8256\u8257\u8258\u8259\u447c\u447d\u447e\u825a\u825b\u825c\u825d\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u825e\u825f\u8260\u4486\u4487\u4488\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u4489\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u9fe5\u8272\u448a\u8273\u8274\u448b\u8275\u448c\u448d\u448e\u448f\u8276\u4490\u8277\u8278\u8279\u4491\u827a\u9fb7\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u4492\u4493\u4494\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u4495\u4496\u4497\u4498\u4499\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u833e\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u82bf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8313\u8314\u8315\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u8312\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831e\u831f\u8320\u8321\u8322\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u9fd2\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u831d\u8323\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u9fca\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d6\u8353\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8457\u9fbf\u44d5\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u83ad\u8429\u842a\u842b\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u9fd3\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e6\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u84e5\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85aa\u85ab\u85ac\u85ae\u9fa9\ufa1f\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u85a9\u85ad\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u8624\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u85ee\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8613\u8614\u8622\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u8612\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8623\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u4573\u4574\u4575\u4576\u4577\u8632\u8633\u8634\u8635\u8636\u8637\u9fc0\u9fe6\u4578\u4579\u457a\u8631\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u457b\u457c\u457d\u8642\u8643\u8644\u8645\u457e\u8646\u8647\u8648\u8649\u457f\u4580\u4581\u864a\u4582\u4583\u4584\u4585\u4586\u864b\u864c\u4587\u864d\u864e\u864f\u4588\u5f6a\u8650\u4589\u8651\u8653\u8654\u458a\u458b\u458c\u458d\u8655\u8656\u8657\u8658\u8659\u865a\u458e\u458f\u865b\u865c\u865d\u4590\u4591\u865e\u865f\u4592\u4593\u4594\u4595\u4596\u8660\u8661\u8662\u8663\u4597\u8664\u8665\u8666\u4598\u8667\u8668\u4599\u8669\u459a\u459b\u459c\u866a\u866b\u866c\u459d\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u459e\u459f\u45a0\u8684\u8685\u8686\u8687\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ac\u45a1\u45a2\u45a3\u86ab\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\ufa21\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u8688\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u86d6\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u872b\u8746\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8747\u8748\u8749\u874a\u874b\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45d5\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u87e1\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d6\u8779\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87d7\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u8801\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u87d3\u87d4\u87d5\u87d6\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u880e\u45ef\u45f0\u45f1\u45f2\u45f3\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880f\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8834\u4602\u4603\u4604\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u4605\u4606\u4607\u4608\u4609\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u460a\u460b\u460c\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u460d\u883c\u883d\u883e\u883f\u460e\u8840\u8841\u8842\u460f\u8843\u8844\u4610\u8845\u4611\u8846\u8847\u8848\u8849\u4612\u4613\u4614\u884a\u884b\u884c\u884d\u884e\u884f\u4615\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u4616\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u4617\u4618\u4619\u8862\u8863\u8864\u8865\u461a\u461b\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u461c\u461d\u461e\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u461f\u4620\u4621\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88b0\u4622\u4623\u4624\u4625\u4626\u4627\u88af\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u462f\u4630\u4631\u4632\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u88e6\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8934\u464e\u464f\u4650\u4651\u4652\u4653\u8933\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8954\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8955\u9fcb\u465e\u465f\u4660\u4661\u4662\u4663\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u4664\u4665\u8963\u8964\u8965\u8966\u8967\u8968\u4666\u4667\u4668\u4669\u8969\u896a\u896b\u896c\u896d\u896e\u466a\u896f\u8970\u8971\u8972\u466b\u8973\u8974\u897d\u466c\u466d\u8975\u8976\u8977\u466e\u466f\u8978\u8979\u897a\u897b\u897c\u4670\u4671\u897e\u897f\u8980\u8981\u4672\u4673\u8982\u4674\u8983\u8984\u4675\u4676\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u8999\u898d\u898e\u4677\u4678\u898f\u8990\u8991\u8992\u8993\u8994\u4679\u467a\u467b\u8995\u8997\u8998\u899a\u467c\u467d\u467e\u467f\u899b\u899c\u4680\u4681\u899d\u899e\u899f\u89a0\u89a1\u4682\u4683\u89a2\u89a3\u89a4\u89a5\u4684\u4685\u89a6\u89a7\u89a8\u89a9\u89aa\u4686\u4687\u4688\u4689\u89ab\u89ac\u89ad\u89ae\u89af\u468a\u468b\u468c\u89b0\u89b1\u89b2\u89b3\u468d\u468e\u89b4\u89b5\u89b6\u89b7\u89b8\u468f\u4690\u4691\u4692\u4693\u89b9\u89ba\u89bb\u89bc\u89bd\u4694\u89be\u89bf\u89c0\u4695\u4696\u89c1\u89c2\u89c3\u89c4\u89c5\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u4697\u89da\u89db\u89dd\u89de\u89dc\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u4698\u4699\u469a\u89e8\u89e9\u89ea\u89eb\u469b\u89ec\u89ed\u89ee\u89ef\u469c\u469d\u469e\u469f\u46a0\u89f0\u89f1\u46a1\u46a2\u46a3\u46a4\u89f2\u89f3\u46a5\u46a6\u89f4\u9d64\u46a7\u89f5\u89f6\u46a8\u46a9\u46ac\u89f7\u89f8\u89f9\u46aa\u46ab\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u46ad\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u46ae\u46af\u46b0\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u46b1\u46b2\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8aa0\u9fc1\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8ae9\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u46f9\u46fa\u46fb\u46fc\u46fd\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u46fe\u46ff\u4700\u4701\u4702\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u9fbb\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u8b4d\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u4719\u471a\u471b\u471c\u471d\u471e\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u471f\u4720\u4721\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u4722\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u4723\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u4724\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u4725\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u4726\u4727\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u4728\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u4729\u8c36\u8c37\u472a\u8c38\u472b\u8c39\u8c3a\u8c3b\u472c\u472d\u8c3c\u8c3d\u472e\u8c3e\u472f\u8c3f\u8c40\u8c41\u4730\u8c42\u4731\u8c43\u8c44\u4732\u8c45\u8c46\u4733\u8c47\u8c48\u8c49\u4734\u4735\u8c4a\u8c4b\u4736\u9ff2\u4737\u4738\u4739\u8c4c\u8c4d\u8c4e\u473a\u473b\u473c\u473d\u473e\u473f\u8c4f\u4740\u4741\u4742\u8c50\u8c51\u4743\u8c52\u4744\u8c53\u8c54\u8c55\u8c56\u8c57\u4745\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u4746\u4747\u8c5e\u8c5f\u8c60\u8c61\u4748\u8c62\u8c63\u8c64\u8c65\u8c66\u4749\u8c67\u8c68\u8c69\u8c6a\u474a\u474b\u474c\u8c6b\u8c6c\u8c6d\u8c6e\u474d\u474e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u474f\u8c77\u4750\u4751\u8c76\u4752\u4753\u4754\u4755\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u4756\u4757\u4758\u4759\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u475a\u475b\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u475c\u8c8e\u8c8f\u475d\u475e\u8c90\u8c91\u8c92\u8c93\u475f\u8c94\u8c95\u8c96\u4760\u8c97\u8c98\u8c99\u4761\u4762\u8c9a\u4763\u4764\u4765\u4766\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u4767\u4768\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u4770\u4771\u4772\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u3562\u4773\u4774\u4775\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u4780\u4781\u4782\u4783\u4784\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u4785\u4786\u8cfe\u8cff\u8d00\u8d02\u8d03\u8d04\u8d05\u4787\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u4788\u8d0d\u8d0e\u8d0f\u4789\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u478a\u8d19\u8d1a\u478b\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u478c\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u478d\u478e\u8d56\u8d57\u478f\u4790\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u4791\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u4792\u8d6b\u4793\u4794\u8d6c\u8d6d\u8d6e\u8d6f\u4795\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u9faa\u8d76\u8d77\u8d78\u4796\u4797\u4798\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\ufa23\u4799\u479a\u479b\u479c\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u8da5\u8da6\u8da7\u47b9\u47ba\u47bb\u47bc\u8da8\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u8da9\u8daa\u8dab\u8dac\u8dad\u47c7\u8dae\u47c8\u47c9\u47ca\u47cb\u8daf\u8db0\u47cc\u47cd\u47ce\u47cf\u8db1\u47d0\u47d1\u47d2\u8db2\u8db3\u8db4\u47d3\u47d4\u8db5\u8db6\u8db7\u8db8\u47d5\u47d6\u8db9\u8dba\u8dbb\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8df5\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u8dbc\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fd\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2c\u8e2d\u8e2e\u8e2f\u8e3a\u47fc\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u8e2b\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e6e\u8e80\u481e\u481f\u4820\u4821\u4822\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u4823\u4824\u4825\u4826\u4827\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u4828\u4829\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u482a\u482b\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u482c\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u482d\u482e\u8e9d\u8e9e\u8e9f\u8ea0\u482f\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u4830\u8ea6\u8ea7\u8ea9\u8eaa\u8ea8\u4831\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u4832\u4833\u4834\u4835\u4836\u8eb1\u8eb2\u4837\u4838\u4839\u483a\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u483b\u8ebd\u8ebe\u483c\u8ebf\u483d\u483e\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u483f\u8ec6\u4840\u8ec7\u4841\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u4842\u4843\u4844\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u4845\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u9fab\u484f\u4850\u4851\u4852\u8eed\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u4853\u4854\u4855\u4856\u4857\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u4858\u4859\u485a\u485b\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u485c\u485d\u485e\u485f\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u4860\u4861\u4862\u4863\u4864\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u4865\u4866\u4867\u4868\u4869\u486a\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u9fc2\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u4872\u4873\u4874\u4875\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u4876\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u4877\u4878\u4879\u8f60\u8f61\u8f62\u487a\u487b\u8f63\u8f64\u487c\u487d\u8f65\u487e\u487f\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u4880\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u4881\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u4882\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u4883\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u4884\u8faf\u8fb0\u8fb1\u8fb2\u4885\u4886\u8fb3\u4887\u8fb4\u4888\u4889\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u5de1\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u488a\u488b\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fec\ufa24\u488c\u488d\u488e\u488f\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u4890\u4891\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u4899\u489a\u489b\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u489c\u489d\u489e\u489f\u48a0\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u48a1\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u48a2\u48a3\u48a4\u48a5\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9073\u48a6\u48a7\u48a8\u48a9\u9072\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u9086\u48aa\u48ab\u48ac\u48ad\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9089\u48ae\u9087\u9088\u48af\u48b0\u908a\u908b\u908c\u48b1\u908d\u908e\u908f\u9090\u48b2\u9091\u9092\u9093\u48b3\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u48b4\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u48b5\u48b6\u48b7\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u48b8\u48b9\u48ba\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d3\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u90d2\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u48d0\u48d1\u48d2\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u48d3\u48d4\u48d5\u48d6\u48d7\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u48d8\u48d9\u48da\u48db\u48dc\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u48dd\u48de\u48df\u48e0\u9133\u9134\u9135\u9136\u9137\u48e1\u9138\u9139\u48e2\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9142\u9141\u9143\u9144\u9145\u9146\u9147\u9148\u48e3\u48e4\u9149\u914a\u914b\u48e5\u48e6\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u48e7\u48e8\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u48e9\u48ea\u48eb\u48ec\u48ed\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u48fa\u48fb\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u48fc\u48fd\u48fe\u48ff\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u4909\u490a\u490b\u490c\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u490d\u91ad\u91ae\u91af\u91b0\u91b1\u490e\u490f\u4910\u4911\u4912\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u4913\u4914\u4915\u4916\u91bc\u91bd\u91be\u91bf\u91c0\u4917\u4918\u91c1\u91c2\u91c3\u91c4\u91c5\u4919\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u491a\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u491b\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u491c\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u491d\u491e\u491f\u4920\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u928f\u9faf\u4921\u4922\u4923\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\ufa27\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u927c\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9348\u9fac\ufa28\u4933\u4934\u4935\u4936\u9328\u9347\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u4937\u4938\u4939\u493a\u493b\u493c\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u9fb2\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u93a9\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f9\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u93f3\u93f5\u93f6\u93f7\u93f8\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u93f4\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9467\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u496f\u4970\u4971\u4972\u4973\u4974\u9468\u9469\u946a\u946b\u946c\u4975\u4976\u4977\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u4978\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u4979\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u497a\u497b\u497c\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u9fed\u497d\u497e\u497f\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u4980\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9fcf\u4981\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9fd4\u4982\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u4983\u4984\u4985\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u4986\u9577\u9578\u9579\u4987\u957a\u957b\u4988\u4989\u498a\u957c\u498b\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u498c\u498d\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u498e\u498f\u4990\u4991\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u4992\u4993\u4994\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u499c\u499d\u499e\u499f\u95b5\u95b6\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u95b7\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u49b0\u95de\u95df\u95e0\u95e1\u49b1\u95e2\u95e3\u95e4\u95e5\u95e6\u49b2\u49b3\u49b4\u95e7\u49b5\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u49b6\u9603\u9604\u9605\u9606\u49b7\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u49b8\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u49b9\u49ba\u9620\u9621\u9622\u9623\u9624\u49bb\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u49bc\u49bd\u49be\u49bf\u49c0\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u49c1\u49c2\u49c3\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u49c4\u49c5\u49c6\u49c7\u49c8\u9656\u9657\u9658\u9659\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u965a\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u49d7\u49d8\u49d9\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\ufa29\u49da\u49db\u49dc\u49dd\u49de\u49df\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u49e0\u49e1\u49e2\u49e3\u96a2\u96a3\u96a4\u96a5\u49e4\u49e5\u49e6\u49e9\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u49e7\u49e8\u49ea\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u49eb\u49ec\u49ed\u96b3\u96b4\u49ee\u96b5\u49ef\u49f0\u9fe7\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u49f1\u96bf\u96c0\u49f2\u49f3\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u49f4\u49f5\u49f6\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u49f7\u49f8\u49f9\u49fa\u96d0\u96d1\u96d2\u49fb\u96d3\u49fc\u49fd\u96d4\u96d5\u49fe\u49ff\u96d6\u4a01\u4a02\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u4a03\u96e1\u96e2\u96e3\u4a04\u4a05\u4a06\u4a07\u96e4\u4a08\u96e5\u96e6\u4a09\u96e7\u4a0a\u96e8\u96e9\u96ea\u96eb\u4a0b\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u4a0c\u4a0d\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u4a0e\u96ff\u9700\u9701\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u4a17\u4a18\u4a19\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u4a1a\u4a1b\u4a1c\u4a1d\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u9721\u9722\u9723\u9724\u9725\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u4a30\u4a31\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u4a32\u4a33\u4a34\u9741\u4a35\u4a36\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u4a37\u9749\u4a38\u974a\u974b\u974c\u974d\u974e\u9fe8\u4a39\u974f\u4a3a\u9750\u4a3b\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u4a3c\u975e\u4a3d\u4a3e\u975f\u4a3f\u9760\u4a40\u9761\u4a41\u9762\u9763\u4a42\u4a43\u4a44\u9764\u4a45\u4a46\u4a47\u9765\u9766\u4a48\u4a49\u4a4a\u4a4b\u9767\u4a4c\u4a4d\u4a4e\u9768\u4a4f\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u4a50\u4a51\u4a52\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u4a5f\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u97b8\u97b9\u97ba\u97bb\u4a7c\u4a7d\u4a7e\u97bc\u97bd\u97be\u97bf\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u97c0\u97c1\u97c2\u97c3\u4a85\u4a86\u97c4\u97c5\u4a87\u4a88\u97c6\u97c7\u97c8\u4a89\u4a8a\u4a8b\u97c9\u4a8c\u4a8d\u4a8e\u97ca\u97cb\u97cc\u4a8f\u97cd\u97ce\u4a90\u4a91\u4a92\u4a93\u97cf\u97d0\u97d1\u97d2\u4a94\u97d3\u97d4\u97d5\u4a95\u97d6\u97d7\u97d8\u97d9\u97da\u4a96\u4a97\u4a98\u97dc\u97dd\u97de\u97df\u4a99\u4a9a\u97db\u97e0\u97e1\u97e2\u4a9b\u97e3\u4a9c\u4a9d\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u4a9e\u97ef\u4a9f\u97f0\u97f1\u4aa0\u97f2\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u97f3\u7adf\u7ae0\u4aa6\u4aa7\u4aa8\u97f4\u97f5\u4aa9\u97f6\u97f7\u4aaa\u97f8\u4aab\u4aac\u97f9\u97fa\u4aad\u97fb\u97fc\u4aae\u4aaf\u97fd\u97fe\u97ff\u4ab0\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u4ab1\u4ab2\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9819\u4ab3\u4ab4\u4ab5\u9814\u9815\u9816\u9817\u9818\u981a\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u4abf\u4ac0\u4ac1\u4ac2\u9824\u9825\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u983e\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u985f\u9860\u9861\u9862\u9863\u4ae8\u4ae9\u4aea\u4aeb\u9864\u9865\u9866\u9867\u9868\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u9869\u986a\u986b\u4af2\u4af3\u4af4\u986c\u986d\u986e\u986f\u9870\u4af5\u4af6\u9871\u9872\u4af7\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u4af8\u98a9\u98aa\u4af9\u98ab\u98ac\u4afa\u4afb\u4afc\u4afd\u98ad\u98ae\u98af\u98b0\u98b1\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u98b2\u98b3\u4b04\u4b05\u98b4\u98b5\u4b06\u4b07\u4b08\u4b09\u4b0a\u98b6\u98b7\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u98b8\u98b9\u98ba\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u4b18\u4b19\u4b1a\u98c1\u98c2\u98c3\u98c4\u4b1b\u4b1c\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u4b1d\u98cb\u4b1e\u4b1f\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d6\u98d5\u98d7\u98d8\u98d9\u98da\u98db\u4b20\u4b21\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u4b22\u4dbf\u98e5\u98e6\u98e7\u98e8\u4b23\u4b24\u4b25\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u4b26\u4b27\u4b28\u4b29\u4b2a\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fb\u98fc\u98fd\u98fe\u98ff\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u98fa\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991d\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u991a\u991b\u991c\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u4b43\u4b44\u4b45\u4b46\u4b47\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9937\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u9936\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u4b50\u4b51\u4b52\u4b53\u4b54\u9944\u9945\u9946\u9947\u9948\u9949\u4b55\u4b56\u4b57\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u9954\u9955\u9956\u9957\u9958\u9959\u4b5d\u4b5e\u4b5f\u4b60\u995a\u995b\u995c\u4275\u4b61\u4b62\u4b63\u4b64\u4b65\u995d\u995e\u995f\u4b66\u4b67\u4b68\u9960\u9961\u4b69\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u998a\u998b\u9989\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u4b6a\u9995\u9996\u9997\u4b6b\u4b6c\u9998\u4b6d\u4b6e\u9999\u999a\u999b\u999c\u999d\u4b6f\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u4b70\u4b71\u4b72\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u4b73\u99ac\u99ad\u99ae\u4b74\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u4b75\u4b76\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u4b8e\u4b8f\u4b90\u4b91\u4b92\u99f3\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9fad\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u4bb7\u4bb8\u4bb9\u9a5d\u9a5e\u9a5f\u4bba\u4bbb\u4bbc\u4bbd\u9a60\u9a61\u9a62\u9a63\u4bbe\u9a64\u9a65\u9a66\u9a67\u9fae\u4bbf\u9a68\u9a69\u4bc0\u9a6a\u4bc1\u9a6b\u4bc2\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u4bc3\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u4bc4\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u4bc5\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u4bc6\u9aa9\u4bc7\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u4bc8\u4bc9\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u9ab8\u9ab9\u9aba\u9abb\u9abc\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u9abd\u9abe\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u9abf\u9ac0\u9ac1\u4bdb\u4bdc\u9ac2\u9ac3\u9ac4\u9ac5\u4bdd\u4bde\u4bdf\u4be0\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u4be1\u9acd\u9ace\u9acf\u4be2\u9ad0\u4be3\u9ad1\u9ad2\u9ad3\u9ad4\u4be4\u9ad5\u4be5\u9ad6\u4be6\u9ad7\u9ad8\u9ad9\u4be7\u4be8\u9ada\u4be9\u9adb\u9adc\u4bea\u9add\u4beb\u9ade\u4bec\u9adf\u9ae0\u4bed\u4bee\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u4bf5\u4bf6\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9b07\u4bf7\u4bf8\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u4bf9\u4bfa\u4bfb\u4bfc\u9b03\u9b04\u9b05\u9b06\u9b08\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u4c04\u4c05\u4c06\u4c07\u9b10\u9b11\u9b12\u9b13\u4c08\u4c09\u4c0a\u4c0b\u9b14\u9b15\u9b16\u9b17\u9b18\u9b1d\u4c0c\u4c0d\u9b19\u9b1a\u9b1b\u9b1c\u4c0e\u9b1e\u9b1f\u9b20\u9b21\u9b22\u4c0f\u4c10\u4c11\u4c12\u9b23\u4c13\u4c14\u4c15\u9b24\u4c16\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u4c17\u4c18\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u4c19\u4c1a\u4c1b\u9b33\u4c1c\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u4c1d\u4c1e\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u4c1f\u9b43\u9b44\u9b45\u9b46\u4c20\u4c21\u9b47\u4c22\u4c23\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u9b50\u4c2a\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u4c2b\u4c2c\u4c2d\u4c2e\u9b57\u9b58\u9b59\u4c2f\u4c30\u4c31\u9b5a\u4c32\u9b5b\u9b5c\u9b5d\u9b5e\u4c33\u9b5f\u9b60\u9b61\u9b62\u4c34\u4c35\u4c36\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9ba3\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bba\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bfd\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bfb\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfc\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c20\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u9c1c\u9c1d\u9c1e\u9c1f\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9fd0\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9de0\u9ff3\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c69\u9c6a\u9c6b\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u9c68\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u4c96\u4c97\u4c98\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u4c99\u9c77\u9c78\u4c9a\u4c9b\u9c79\u9fe9\u9c7a\u9c7b\u4c9c\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9fd5\u4c9d\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9ff4\u4c9e\u4c9f\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9ff5\u9ff6\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ff7\u4ca0\u4ca1\u9cbe\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u4ca2\u4ca3\u4ca4\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9ff8\u9ff9\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u4ca5\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0b\u9d0c\u9d0d\u9d0e\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u9d0a\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d65\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d91\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u9d90\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcc\u9dcd\u9dce\u9dcf\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u9dcb\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9dfa\u9dfb\u9dfc\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u9df9\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u4d07\u4d08\u4d09\u4d0a\u4d0b\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u4d0c\u4d0d\u9e13\u9e14\u4d0e\u9e15\u9e16\u9e17\u4d0f\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u4d10\u4d11\u4d12\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u4d13\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u4d14\u4d15\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9ffa\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u4d16\u9e55\u9e56\u9e57\u9e59\u9e5a\u9e5b\u9e5c\u4d17\u9e58\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u4d18\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u4d19\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u4d1a\u9e77\u4d1b\u9e78\u9e79\u9e7a\u9e7b\u4d1c\u4d1d\u9e7c\u9e7d\u4d1e\u9e7e\u9e7f\u9e80\u9e81\u9e82\u4d1f\u9e83\u9e84\u4d20\u4d21\u4d22\u9e85\u9e86\u9e87\u9e88\u4d23\u4d24\u4d25\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u4d26\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u4d27\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u4d28\u9e9e\u4d29\u9e9f\u9ea0\u4d2a\u4d2b\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea7\u4d2c\u4d2d\u4d2e\u9ea8\u9ea9\u9eaa\u9eab\u4d2f\u4d30\u9eac\u9ead\u9eae\u4d31\u4d32\u4d33\u4d34\u9eaf\u9eb0\u4d35\u9eb1\u9eb2\u4d36\u4d37\u4d38\u9eb3\u9eb4\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u9eb5\u4d3e\u4d3f\u4d40\u9eb6\u4d41\u4d42\u4d45\u4d43\u4d44\u4d46\u9eb7\u9ea6\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u4d47\u9ebf\u9ec0\u9ec1\u4d48\u4d49\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u4d4a\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u9ecc\u9ecd\u9ece\u4d51\u4d52\u4d53\u9ecf\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u9ed0\u4d5a\u4d5b\u4d5c\u9ed1\u9ed2\u4d5d\u4d5e\u58a8\u9ed3\u4d5f\u4d60\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u4d61\u9eda\u9edb\u9edc\u9edd\u9ede\u4d62\u4d63\u9edf\u9ee0\u9ee1\u4d64\u4d65\u4d66\u4d67\u9ee2\u9ee3\u4d68\u4d69\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u4d6a\u4d6b\u4d6c\u9eeb\u9eec\u9eed\u9eee\u9eef\u4d6d\u4d6e\u4d6f\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u4d70\u4d71\u9ef5\u4d72\u4d73\u4d74\u9ef6\u4d75\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9eff\u9f00\u9f01\u9f02\u4d76\u9f03\u9f04\u4d77\u9f05\u4d78\u9f06\u9f07\u4d79\u9f08\u9f09\u9f0a\u9efe\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u4d7a\u4d7b\u4d7c\u9f13\u9f14\u9f15\u9f16\u4d7d\u4d7e\u4d7f\u9f17\u4d80\u9f18\u9f19\u9f1a\u9f1b\u4d81\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u4d82\u9f22\u9f23\u9f24\u4d83\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9ffb\u9ffc\u4d84\u9f2d\u4d85\u9f2e\u9f2f\u9f30\u9f31\u4d86\u9f32\u9f33\u9f34\u9f35\u4d87\u9f36\u9f37\u9f38\u9f39\u4d88\u4d89\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u4d8a\u4d8b\u9f40\u9f41\u4d8c\u4d8d\u4d8e\u4d8f\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u4d90\u4d91\u9f49\u9f4a\u9f4b\u4d92\u4d93\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u4d94\u9f56\u9f57\u9f58\u4d95\u4d96\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u4d97\u4d98\u4d99\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u4d9a\u4d9b\u9f6a\u9f6b\u9f6c\u4d9c\u4d9d\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u4d9e\u4d9f\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u4da0\u4da1\u4da2\u9f78\u9f79\u9f7a\u9f7b\u4da3\u4da4\u4da5\u4da6\u4da7\u9f7c\u9f7d\u4da8\u4da9\u4daa\u9f7e\u4dab\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f91\u9f92\u9f93\u9f94\u9f95\u4dac\u9f96\u9f97\u9f98\u9f99\u4dad\u4dae\u9f9a\u9f9b\u9f9c\u4daf\u4db0\u9f9d\u4db1\u4db2\u9f9e\u9f9f\u9fa0\u9fa1\u4db3\u9fa2\u9fa3\u4db4\u9fa4\u9fa5\u4db5\u2f00\u3280\u3192\u319c\u3286\u3282\u3194\u32a4\u3196\u32a6\u3198\uf967\u319b\ufa70\u2f01\u2ea6\u32a5\u3197\uf905\u2f02\u2e80\uf95e\u2f03\u2f04\u319a\u2e84\u2e83\u2e82\u3288\uf91b\u2f05\uf9ba\u2f06\u3281\u3193\u3284\u2f07\uf977\u2f08\u319f\u2e85\uf9fd\uf9a8\u32ff\u32ad\u32a1\ufa73\uf92d\uf9b5\ufa30\uf965\uf9d4\uf9bb\ufa31\u329d\u2f09\ufa0c\ufa74\ufa32\u2f0a\ufa72\uf978\u2f0b\u3287\uf9d1\u3285\ufa75\u2f0c\u2e86\u2f0d\u32a2\u2f0e\ufa71\uf92e\uf979\uf955\uf954\ufa15\u2f0f\u2e87\u2f10\u2f11\u2e88\u2e89\ufa00\uf99c\uf9dd\uf9ff\uf9c7\uf98a\u2f12\uf99d\u3298\ufa76\ufa33\uf952\uf92f\ufa34\uf97f\u2f13\ufa77\u2f14\uf963\u2f15\u2f16\u32a9\uf9eb\u2f17\u3038\u3289\u3039\u303a\ufa35\u32af\u2f18\u2e8a\u2f19\u2e8b\u329e\uf91c\u2f1a\u2e81\u2f1b\uf96b\u2f1c\u2f1d\uf906\u32a8\u3294\uf9de\uf9ed\uf980\uf99e\u3244\ufa79\uf90b\ufa7a\ufa36\ufa78\ufa0d\ufa7b\ufa37\ufa38\u2f1e\u3283\u3195\uf9a9\u2f1f\u328f\u319e\ufa39\ufa10\ufa7c\uf96c\ufa3a\ufa7d\uf94a\uf942\u2f20\u2f21\u2f22\u2f23\u32b0\u2f24\u337d\u319d\ufa7e\uf90c\uf909\ufa7f\uf981\u2f25\u329b\ufa80\ufa81\u2f26\u32ab\u2f27\ufa04\u32aa\uf95f\uf9aa\uf9bc\u2f28\u2f29\u2e8c\u2e8d\u2e90\u2f2a\u2e8e\u2e8f\u2e91\u2f2b\uf9bd\uf94b\ufa3b\uf9df\ufa3c\u2f2c\u2f2d\uf9d5\uf921\uf9ab\u2f2e\u2f2f\u32a7\u2f30\u2e92\u2f31\u2f32\u337b\uf98e\u2e93\u2f33\u3245\u2f34\ufa01\uf9a2\uf928\ufa82\ufa0b\ufa83\uf982\u2f35\u2f36\uf943\u2f37\u2f38\u2f39\u2e95\u2e94\u2f3a\ufa84\u2f3b\uf9d8\uf966\ufa85\u2f3c\u2e97\u2e96\uf9a3\uf960\uf9ac\ufa6b\ufa3d\ufa86\uf9b9\ufa88\uf9d9\ufa87\ufa8a\ufa3e\ufa3f\ufa89\uf98f\ufa40\ufa8b\uf90d\uf990\u2f3d\uf9d2\ufa8c\u2f3e\u2f3f\u2e98\uf925\uf95b\ufa02\uf973\uf9a4\uf975\ufa8d\ufa8e\ufa8f\uf991\uf930\u2f40\u2f41\u2e99\ufa41\ufa90\uf969\u2f42\u3246\u2f43\uf9be\u2f44\u2f45\uf983\u2f46\u2e9b\ufa42\u2f47\u3290\u2e9c\u337e\uf9e0\u337c\ufa12\ufa91\uf9c5\ufa43\ufa06\uf98b\u2f48\uf901\u2f49\u328a\u2e9d\u3292\uf929\ufa92\ufa93\u2f4a\u328d\uf9e1\ufa94\uf9c8\uf9f4\uf9c9\uf9da\u3291\u337f\uf97a\ufa44\uf9e2\uf914\uf95c\uf9bf\uf94c\uf931\uf91d\u2f4b\u2f4c\u32a3\uf98c\ufa95\u2f4d\u2e9e\uf9a5\u2f4e\uf970\ufa96\u2f4f\u2e9f\u2f50\u2f51\u2f52\u2ea0\u2f53\u2f54\u328c\u2ea1\u2ea2\uf972\uf968\uf9e3\u329f\uf915\ufa05\uf9ca\ufa97\uf92a\ufa45\uf9f5\uf94d\uf9d6\ufa46\uf9cb\uf9ec\ufa99\uf904\ufa98\uf94e\ufa47\ufa9a\uf992\uf922\uf984\ufa9b\u2f55\u328b\u2ea3\uf9fb\uf99f\uf916\uf993\ufa48\ufa9c\uf9c0\uf9ee\uf932\uf91e\u2f56\ufa49\u2ea4\u2ea5\ufa9e\u2f57\u2f58\u2f59\u2f5a\u2f5b\u2f5c\u2ea7\uf946\u3295\u2f5d\u2ea8\ufa9f\uf9fa\uf92b\ufa16\ufaa0\uf9a7\u2f5e\uf961\uf9db\u2f5f\u2ea9\uf9ad\uf917\uf9e4\uf9cc\ufa4a\uf9ae\ufaa1\uf994\uf9ef\u2f60\u2f61\ufaa2\u2f62\u2f63\u2f64\u2f65\u3199\u329a\ufaa3\uf9cd\uf976\uf962\u2f66\u2eaa\u2f67\uf9e5\ufaa4\ufaa5\uf9c1\uf90e\u2f68\u2f69\u2f6a\u2f6b\ufa17\ufaa6\ufaa7\u32ac\uf933\u2f6c\u2eab\ufaa8\uf96d\ufaaa\ufaa9\ufa9d\u2f6d\u2f6e\u2f6f\uf9ce\uf93b\ufa4b\uf947\ufaab\uf964\uf985\u2f70\u2eac\u2ead\ufa18\ufa4c\u3293\ufa4e\ufa4d\ufa4f\ufa50\ufa51\u3297\ufa19\ufa1a\uf93c\ufa52\ufa53\ufa1b\uf9b6\u2f71\u2f72\uf995\u3299\uf956\ufa54\u2f73\ufa55\ufaac\uf9f7\u2f74\u2f75\u2eae\uf9f8\u3247\ufa56\ufaad\uf9a6\uf944\u2f76\ufaae\uf9f9\ufa1d\ufa03\uf97b\u2f77\u2eaf\uf9cf\uf96a\uf94f\ufaaf\uf93d\uf957\uf996\ufa57\ufab0\ufa58\uf950\ufa59\u2eb0\u2f78\ufab1\u2f79\u2eb2\u2eb5\u2eb1\u2eb3\u2eb4\ufa5a\uf9e6\uf90f\u2f7a\u2eb6\u2eb7\u2eb8\uf9af\ufa1e\u2f7b\uf934\u2f7c\u2eb9\ufa5b\ufab2\u2f7d\u2f7e\u2f7f\uf9b0\uf997\uf945\u2f80\u2ebb\u2eba\u2f81\u2ebc\uf953\uf926\u2f82\uf9f6\u2f83\ufa5c\u2f84\u2f85\u2ebd\u2f86\ufa6d\u2f87\u2f88\u2f89\uf97c\u2f8a\u2f8b\ufa5d\ufa5e\u2ebe\u2ebf\u2ec0\uf974\uf9fe\ufab3\uf93e\ufab4\uf958\uf918\uf96e\ufa5f\uf999\uf9c2\uf923\uf9f0\uf935\ufa20\uf91f\uf910\u2f8c\u2ec1\uf936\u2f8d\ufab5\uf911\uf927\u2f8e\ufa08\u2f8f\u2f90\u2ec2\uf9a0\uf9e7\uf9e8\uf912\ufa60\ufab6\uf924\u2f91\u2ec4\u2ec3\ufab7\ufa0a\u2f92\ufa61\ufab8\u2ec5\u2ec6\u2f93\u2ec7\u2f94\uf96f\uf9a1\ufab9\ufabb\uf97d\uf941\ufabe\ufa22\ufaba\uf95d\ufabd\ufa62\ufabc\ufa63\ufabf\uf9fc\uf95a\ufac0\u2ec8\u2f95\u2f96\uf900\u2f97\u2f98\u2f99\u3296\uf948\u32ae\uf903\ufa64\ufa65\ufac1\u2ec9\u2f9a\u2f9b\u2f9c\u2eca\uf937\u2f9d\uf902\u2f9e\uf998\uf9d7\ufac2\ufa07\uf98d\u2ecb\u2f9f\uf971\u2fa0\u2fa1\ufa66\u2ecc\u2ecd\u2ece\uf99a\ufa25\ufa67\u329c\ufac3\uf9c3\uf913\u2fa2\u2ecf\uf92c\ufa2e\ufa26\u2fa3\uf919\ufac4\uf9b7\u2fa4\uf9e9\u2fa5\uf97e\uf90a\u2fa6\u328e\uf9b1\ufac5\uf93f\uf99b\u2ed0\u2ed1\u2fa7\u2ed2\u2ed3\u2fa8\uf986\u2ed4\u2fa9\u2ed5\u2ed6\uf9c6\uf951\ufa09\uf959\uf9d3\ufac6\uf9dc\uf9f1\u2faa\ufa2f\uf9b8\u2fab\uf9ea\ufa68\ufac7\u2fac\u2ed7\uf9b2\uf949\uf938\uf9b3\u2fad\u2ed8\ufa1c\ufac8\u2fae\u2faf\u2fb0\u2fb1\ufac9\u2ed9\u2fb2\u2fb3\ufa69\ufaca\u2fb4\u32a0\ufacb\uf9b4\ufa6a\ufacc\uf9d0\u2eda\u2fb5\u2edb\u2fb6\u2edc\u2edd\u2fb7\u2edf\u2ede\ufa2a\ufa2b\ufa2c\u2ee0\u2fb8\u2ee1\u2fb9\u2fba\uf91a\uf987\u2ee2\u2fbb\u2ee3\u2fbc\u2fbd\ufacd\u2fbe\u2fbf\u2fc0\u2fc1\u2ee4\u2fc2\uf939\uf9f2\u2ee5\u2fc3\ufa2d\uf93a\uf920\u2ee6\u2fc4\u2ee7\uf940\u2fc5\uf988\uf9f3\u2fc6\u2ee8\u2fc7\u2fc8\u2ee9\u2fc9\uf989\u2fca\u2fcb\u2fcc\u2eea\u2fcd\u2fce\u2fcf\u2fd0\ufad8\u2fd1\u2eeb\u2eec\u2fd2\u2eed\u2eee\uf9c4\u2fd3\u2eef\ufad9\u2ef0\uf907\uf908\uface\u2fd4\u2ef1\u2ef2\u2ef3\u2fd5\ufad2\ufad3\ufad4\ufad0\ufacf\ufad1\ufa6c\ufad5\ufad6\ufad7\ufffd'; +const String _ducetRanks = + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u01d4\u01d5\u01d6\u01d7\u01d8\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u01dc\u0266\u02ef\u0423\u106d\u0426\u041e\u02e7\u02fb\u0372\u0411\u0676\u0216\u01fa\u0284\u0418\u10a0\u10cf\u1149\u119d\u11e3\u1223\u125b\u1291\u12c7\u12fc\u023b\u0231\u067f\u0683\u068b\u0270\u040e\u1334\u13b2\u13d5\u1408\u144b\u14ad\u14ce\u1503\u153e\u158a\u15a1\u15d8\u1625\u1658\u1699\u171d\u1748\u175b\u17a9\u17ea\u1820\u1890\u18b7\u18d7\u18f1\u1916\u0378\u041a\u037b\u04c7\u01f2\u04c0\u1330\u13ae\u13d0\u1402\u1445\u14a9\u14c9\u14fe\u1537\u1586\u159d\u15d2\u1620\u1654\u1694\u1719\u1745\u1756\u17a5\u17e6\u181c\u188b\u18b2\u18d2\u18ee\u1912\u037e\u0691\u0382\u0695\u0000' + '\u0000\u0000\u0000\u0000\u0000\u01d9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u01ea\u026c\u106b\u1070\u106a\u1072\u0693\u0408\u04cd\u05d6\u1337\u02f9\u068f\u0000\u05d7\u04c9\u0548\u067c\u1179\u11cd\u04c3\u1a4d\u040a\u029f\u04d4\u1100\u169c\u02fa\u1107\u1105\u11d0\u0276\u133e\u133c\u1342\u134e\u134b\u1346\u137c\u13e6\u1455\u1453\u1459\u145d\u154a\u1548\u154e\u1552\u141f\u1666\u16a3\u16a1\u16a7\u16b2\u16ad\u067e\u16b6\u1829\u1827\u182d\u1835\u18f6\u1947\u17c9\u133d\u133b\u1341\u134d\u1348\u1345\u137a\u13e4\u1454\u1452\u1458\u145c\u1549\u1547\u154d\u1551\u141d\u1665\u16a2\u16a0\u16a6\u16b1\u16aa\u067d\u16b5\u1828\u1826\u182c\u1832\u18f5\u1946\u18fc' + '\u1354\u1353\u1340\u133f\u1352\u1351\u13dd\u13dc\u13df\u13de\u13e3\u13e2\u13e1\u13e0\u1410\u140f\u1416\u1415\u1467\u1466\u1457\u1456\u1461\u1460\u1465\u1464\u145b\u145a\u14d8\u14d7\u14d6\u14d5\u14dc\u14db\u14de\u14dd\u150d\u150c\u1518\u1516\u1554\u1553\u1559\u1558\u154c\u154b\u1557\u1556\u1555\u1572\u156b\u156a\u1591\u1590\u15ad\u15ac\u1755\u15e1\u15e0\u15e5\u15e4\u15e3\u15e2\u15ef\u15ee\u15e7\u15e6\u1660\u165f\u166a\u1669\u1664\u1663\u196e\u1691\u1690\u16ba\u16b9\u16a5\u16a4\u16b0\u16af\u16ed\u16ec\u1765\u1764\u176b\u176a\u1767\u1766\u17af\u17ae\u17b1\u17b0\u17b7\u17b6\u17b3\u17b2\u17f6\u17f5\u17f1\u17f0\u180e\u180d\u183a\u1839\u183e\u183d\u182b\u182a\u1831\u1830\u1838\u1837\u183c\u183b\u18c1\u18c0\u18fa\u18f9\u18fd\u191d\u191c\u1923\u1922\u1921\u1920\u17be' + '\u13c1\u13ca\u13cc\u13cb\u1968\u1967\u16ff\u13fb\u13fa\u143c\u143e\u1441\u1440\u1928\u148f\u1494\u1499\u14c5\u14c4\u14f4\u14fa\u1525\u1583\u157b\u15c7\u15c6\u1606\u161e\u1881\u1684\u1686\u170e\u16c3\u16c2\u14fd\u14fc\u173c\u173b\u1781\u1964\u1963\u17de\u17e2\u1812\u1815\u1814\u1817\u1847\u1846\u1888\u18a9\u190c\u190b\u192b\u192a\u193c\u1942\u1941\u1944\u195c\u1966\u1965\u1806\u194c\u1982\u1983\u1984\u1985\u1431\u1430\u142f\u15f4\u15f3\u15f2\u1677\u1676\u1675\u1344\u1343\u1550\u154f\u16a9\u16a8\u182f\u182e\u1857\u1856\u1851\u1850\u1855\u1854\u1853\u1852\u148e\u1373\u1372\u1375\u1374\u1381\u1380\u14f1\u14f0\u14da\u14d9\u15ab\u15aa\u16b8\u16b7\u16db\u16da\u193f\u193e\u1592\u142e\u142d\u142b\u14d4\u14d3\u1526\u194d\u1662\u1661\u1371\u1370\u137f\u137e\u16d9\u16d8' + '\u1358\u1357\u135a\u1359\u146b\u146a\u146d\u146c\u155d\u155c\u155f\u155e\u16bf\u16be\u16c1\u16c0\u176f\u176e\u1771\u1770\u1843\u1842\u1845\u1844\u17bd\u17bc\u17fa\u17f9\u1911\u1910\u150f\u150e\u1687\u1442\u1716\u1715\u1930\u192f\u1350\u134f\u1463\u1462\u16cf\u16ce\u16d5\u16d4\u16b4\u16b3\u16d7\u16d6\u1903\u1902\u1619\u168d\u1818\u1593\u1425\u174c\u1399\u13f5\u13f4\u1607\u1810\u17d8\u1935\u196b\u196a\u13c2\u1870\u18b0\u148a\u1489\u1596\u1595\u1754\u1753\u1788\u1787\u190a\u1909\u13a1\u13a4\u13aa\u13c9\u16fe\u13fc\u143b\u143d\u149d\u1492\u149e\u1498\u149f\u14a5\u14a6\u159a\u14f3\u14ea\u14ee\u14f9\u14a8\u187b\u1528\u1534\u157a\u1582\u1573\u160a\u1610\u1616\u161b\u1880\u1885\u164d\u1683\u168b\u167d\u170d\u16f5\u1712\u1742\u178a\u178d\u178f\u1792\u1793\u1796\u1798' + '\u177f\u179e\u17d5\u17dc\u159c\u17e3\u17e5\u181a\u1816\u186f\u1887\u18a8\u18af\u18cf\u161f\u1908\u1931\u1933\u193b\u1945\u1969\u1976\u1981\u1986\u1987\u13c0\u14a7\u14f5\u1524\u1597\u15d0\u15fe\u1752\u197f\u1980\u142c\u1434\u1433\u1807\u1809\u1802\u14bd\u15fa\u15fd\u1988\u1989\u187e\u187f\u1509\u152a\u158d\u1761\u178b\u1790\u179f\u18ba\u18f4\u04e2\u04e5\u1535\u196d\u1536\u1970\u1978\u196c\u1979\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u1050\u1051\u04f4\u04f5\u04f6\u04f7\u04fa\u04fb\u04cb\u04cc\u04d2\u04d5\u04c6\u04d3\u04fc\u04fd\u14fb\u15dd\u17ac\u18db\u1977\u04fe\u04ff\u0500\u0501\u0502\u0503\u0504\u0505\u0506\u196f\u0507\u0508\u0509\u050a\u050b\u050c\u050d\u050e\u050f\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517' + '\u000c\u0009\u0010\u0016\u001b\u00a9\u000f\u0017\u0014\u00aa\u0012\u0015\u0011\u001c\u001d\u00ab\u00ac\u00ad\u001e\u0002\u0006\u001f\u005b\\\u005d\u005e\u0020\u00ae\u005f\u0060\u0061\u0062\u0063\u00af\u00b0\u00b1\u00b2\u00b3\u00b4\u0019\u001a\u0064\u0065\u0066\u0067\u00b5\u00b6\u0068\u00b7\u00b8\u0001\u0069\u00b9\u00a8\u0094\u0095\u0018\u00ba\u006a\u006b\u006c\u0021\u0022\u0023\u000d\u000a\u0013\u0003\u01ca\u00bb\$\u006d\u006e\u006f\u0025\u0026\'\u0070\u0071\u0000\u0028\u0029\u002a\u0072\u0073\u0074\u0075\u002b\u00bc\u0076\u0077\u002c\u0078\u002d\u002e\u0079\u00bd\u00c0\u007a\u1332\u1447\u1539\u1696\u181e\u13d2\u1404\u1500\u1622\u1758\u17e8\u188d\u18d4\u19e9\u19e8\u1af2\u1af1\u04e3\u04e4\u19e3\u19e2\u0000\u0000\u1a1f\u1a8b\u1a89\u1a8d\u0232\u1a43' + '\u0000\u0000\u0000\u0000\u04c4\u04ce\u1992\u02a0\u19d4\u19f2\u1a27\u0000\u1a63\u0000\u1a99\u1ac8\u1a3e\u198b\u19be\u19c3\u19c9\u19cd\u19e7\u19eb\u1a1a\u1a20\u1a46\u1a4a\u1a4e\u1a58\u1a5a\u1a5c\u1a72\u1a7d\u0000\u1a86\u1a90\u1a92\u1ab5\u1ab9\u1abd\u1ac0\u1a2f\u1aa2\u1990\u19d2\u19f0\u1a25\u1aaf\u198a\u19bc\u19c1\u19c8\u19cb\u19e6\u19ea\u1a18\u1a1d\u1a44\u1a49\u1a4c\u1a57\u1a59\u1a5b\u1a6f\u1a7b\u1a88\u1a84\u1a8f\u1a91\u1ab3\u1ab8\u1abc\u1abf\u1a2e\u1aa1\u1a61\u1a97\u1ac6\u1a48\u19bd\u1a19\u1a93\u1a9b\u1aa3\u1ab4\u1a70\u1a47\u1a7a\u1a79\u19e5\u19e4\u19e1\u19e0\u1a78\u1a77\u1af0\u1aef\u1b35\u1b34\u1b3f\u1b3e\u1b41\u1b40\u1b47\u1b46\u1b55\u1b54\u1b5b\u1b5a\u1b63\u1b62\u1a45\u1a7c\u1a85\u1a42\u1a1b\u19cc\u0670\u1af4\u1af3\u1a87\u1a76\u1a75\u1a83\u1a8c\u1a8a\u1a8e' + '\u1ba5\u1ba9\u1b9a\u1b86\u1bac\u1bc8\u1bdf\u1be2\u1be8\u1c0c\u1c2b\u1c6a\u1bf0\u1bd7\u1c6f\u1cbe\u1b70\u1b7d\u1b81\u1b84\u1b94\u1ba3\u1baf\u1bbc\u1bd5\u1be6\u1bee\u1c01\u1c15\u1c1c\u1c37\u1c45\u1c4e\u1c56\u1c60\u1c6d\u1c82\u1c85\u1c9f\u1caa\u1cc1\u1cc6\u1cce\u1cd4\u1cd9\u1ce4\u1ce9\u1cf0\u1b6e\u1b7b\u1b7e\u1b82\u1b91\u1ba1\u1bad\u1bba\u1bd3\u1be5\u1bec\u1bff\u1c13\u1c1a\u1c2e\u1c43\u1c4c\u1c53\u1c5c\u1c6b\u1c80\u1c83\u1c9d\u1ca8\u1cbf\u1cc4\u1ccb\u1cd2\u1cd7\u1ce3\u1ce7\u1cef\u1ba4\u1ba8\u1b99\u1b85\u1baa\u1bc7\u1bde\u1be0\u1be7\u1c0b\u1c2a\u1c69\u1bef\u1bd6\u1c6e\u1cbd\u1c94\u1c92\u1ce0\u1cdd\u1cf5\u1cf3\u1cf8\u1cf6\u1d01\u1d00\u1cfd\u1cfb\u1d06\u1d04\u1d08\u1d07\u1d0a\u1d09\u1d0d\u1d0b\u1d0f\u1d0e\u1d11\u1d10\u1c7f\u1c7e\u1c9c\u1c9b\u1c9a\u1c99\u1c96\u1c95' + '\u1c4b\u1c4a\u054b\u00c2\u002f\u0007\u0004\u0030\u0000\u0000\u1bdd\u1bdc\u1cdc\u1cdb\u1c50\u1c4f\u1b88\u1b87\u1b8a\u1b89\u1b8e\u1b8d\u1bb9\u1bb8\u1ba0\u1b9f\u1bf2\u1bf1\u1bfa\u1bf9\u1bf8\u1bf7\u1bf6\u1bf5\u1c23\u1c22\u1c29\u1c28\u1c49\u1c48\u1d15\u1d14\u1c5b\u1c5a\u1c66\u1c65\u1c77\u1c76\u1c79\u1c78\u1c8b\u1c8a\u1ca5\u1ca4\u1cb2\u1cb1\u1cb6\u1cb5\u1c8d\u1c8c\u1cba\u1cb9\u1cbc\u1cbb\u1d19\u1bb1\u1bb0\u1bf4\u1bf3\u1c04\u1c03\u1c25\u1c24\u1c21\u1c20\u1cb4\u1cb3\u1c17\u1c16\u1d18\u1b72\u1b71\u1b74\u1b73\u1b7a\u1b79\u1ba7\u1ba6\u1b76\u1b75\u1b78\u1b77\u1bb3\u1bb2\u1bbe\u1bbd\u1bcc\u1bcb\u1bdb\u1bda\u1bd9\u1bd8\u1c3e\u1c3d\u1c40\u1c3f\u1c42\u1c41\u1ce6\u1ce5\u1c75\u1c74\u1c71\u1c70\u1c73\u1c72\u1cac\u1cab\u1b90\u1b8f\u1cd6\u1cd5\u1b8c\u1b8b\u1c87\u1c86\u1c89\u1c88' + '\u1b96\u1b95\u1b9e\u1b9d\u1bc2\u1bc1\u1bd0\u1bcf\u1c10\u1c0f\u1c2d\u1c2c\u1c59\u1c58\u1c64\u1c63\u1bc4\u1bc3\u1c08\u1c07\u1c12\u1c11\u1c52\u1c51\u1cf2\u1cf1\u1bfe\u1bfd\u1d17\u1d16\u1bfc\u1bfb\u1c0a\u1c09\u1c27\u1c26\u1c47\u1c46\u1c8f\u1c8e\u1c1f\u1c1e\u1bb5\u1bb4\u1cae\u1cad\u1c06\u1c05\u0000\u1e26\u1e29\u1e2b\u1e2d\u1e2f\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e54\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u0000\u0000\u1e79\u0464\u0465\u026d\u0220\u0278\u0466\u1e27\u1e25\u1e28\u1e2a\u1e2c\u1e2e\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e53\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e69' + '\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e30\u1e55\u0240\u01fd\u0000\u0000\u054c\u054d\u1074\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00c5\u00c6\u00c7\u00c8\u00c9\u00ca\u00cb\u00cc\u00cd\u00cf\u00d0\u00d1\u00d4\u0000\u0467\u00d5\u0468\u00d3\u00d2\u0469\u0000\u0000\u046a\u00ce\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1e7a\u1e81\u1e85\u1e88\u1e8c\u1e8f\u1e94\u1e96\u1e97\u1e99\u1ea1\u1e9f\u1ea5\u1eaa\u1ea8\u1ead\u1eac\u1eaf\u1eb1\u1eb4\u1eb3\u1eb9\u1eb8\u1ebb\u1ebd\u1ec0\u1ec6\u0000\u0000\u0000\u0000\u1e9c\u1e92\u1e93\u1e9d\u046b\u046c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u06a5\u06a7\u054e\u042b\u042d\u1075\u0221\u0222\u054f\u0550\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0236\u0000\u0000\u0241\u0279\u228b\u1ee3\u1ee7\u1eea\u1ef1\u1ef4\u1efa\u1f26\u1f30\u1f65\u1f68\u1f8e\u1fb4\u1fe1\u1ff1\u2008\u200b\u2024\u202a\u2042\u2065\u2093\u20ac\u20c7\u20d9\u20e3\u20f7\u218c\u218d\u2288\u2289\u228a\u0000\u210e\u2135\u214c\u2191\u21c2\u21e3\u2215\u2234\u2255\u225c\u00eb\u00f0\u00f4\u00f8\u00fe\u0103\u0108\u010c\u0110\u0112\u0113\u0115\u0116\u0117\u0119\u011a\u011b\u011c\u011d\u011e\u0114\u10a1\u10d0\u114a\u119e\u11e4\u1224\u125c\u1292\u12c8\u12fd\u0429\u0223\u0224\u0416\u1f2f\u2134\u0127\u1eee\u1eed\u1ef7\u1ee4\u1f2c\u2238\u2244\u2262\u1fa0\u1fa5\u1f4a\u1faa\u1fab\u1f4f\u1fac' + '\u1f54\u1fff\u2000\u1fc8\u1fcd\u2001\u1fd2\u1fd8\u200f\u2012\u2013\u2014\u2015\u2018\u201c\u201f\u2020\u202d\u2030\u2031\u2032\u2033\u2034\u2035\u2036\u2039\u208a\u208b\u208c\u20c3\u20c5\u20e1\u2107\u2122\u2123\u2125\u2126\u212c\u212d\u2147\u2149\u2168\u216d\u216e\u216f\u2171\u2176\u2178\u217e\u217f\u2184\u2185\u218a\u21bb\u21bc\u21bd\u21be\u2211\u2206\u220a\u220f\u2210\u2223\u1fd7\u2231\u2228\u222d\u222e\u223a\u223b\u223e\u2241\u2246\u2249\u224c\u224d\u227b\u2280\u2281\u2251\u2282\u2287\u2290\u2293\u028d\u2230\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0551\u0000\u0000\u0000\u0000\u0000\u0000\u2235\u225d\u0000\u0000\u0552\u0000\u0000\u0000\u0000\u2021\u203a\u10a2\u10d1\u114b\u119f\u11e5\u1225\u125d\u1293\u12c9\u12fe\u208d\u20c6\u2109\u1ee6\u21c7\u222f' + '\u02c1\u028e\u028f\u0242\u0243\u0244\u0245\u0246\u0247\u027a\u046d\u046e\u046f\u0470\u0000\u0000\u2298\u0128\u2299\u229b\u229c\u229f\u229e\u22a1\u22a2\u22a3\u22a5\u22a6\u22a7\u22a8\u22a9\u22aa\u22ac\u22ad\u22ae\u22af\u22b0\u22b1\u22b2\u22b3\u22b5\u22b6\u22b7\u22b8\u22b9\u229a\u229d\u22a0\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0132\u0133\u0134\u0135\u0136\u0137\u0138\u0000\u0031\u007b\u0000\u0000\u0032\u007c\u0000\u0000\u0000\u0000\u0000\u0000\u22a4\u22ab\u22b4\u1f59\u1f5a\u1f5b\u1f5c\u1f5d\u1f5e\u1f60\u2002\u2003\u2022\u2023\u203b\u208e\u210a\u210b\u210c\u2132\u2133\u218b\u218e\u218f\u21e0\u21e1\u2212\u2213\u2214\u21bf\u203c\u203d\u208f\u2004\u2005\u2090\u203e\u2006\u1ef8\u1ef9\u228c\u228d\u228e\u2252\u2253\u2296\u2297\u2007\u2091\u2092\u2170' + '\u22de\u22e1\u22e2\u22e3\u22e5\u22e6\u22e7\u22e8\u22eb\u22ed\u22ee\u22ef\u22f1\u22f5\u22f6\u22f8\u22f9\u22fd\u22fe\u22ff\u2300\u2301\u2302\u2303\u22f2\u22df\u22e0\u22f0\u22e4\u22fa\u22fb\u22fc\u22f3\u22f4\u22e9\u22ea\u22f7\u22ec\u2305\u2306\u2307\u2308\u2309\u230a\u230b\u230c\u230d\u230e\u230f\u2304\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u10a3\u10d2\u114c\u11a0\u11e6\u1226\u125e\u1294\u12ca\u12ff\u2310\u2311\u2312\u2313\u2314\u2315\u2316\u2317\u2318\u2319\u231a\u231b\u231c\u231e\u2320\u2321\u2323\u2324\u2325\u2326\u2327\u2328\u2329\u232a\u232b\u232c\u232d\u232e\u232f\u2330\u231d\u231f\u2322\u0139\u013a\u013b\u013c\u013d\u013e\u013f\u0140\u0141\u2331\u2332\u0564\u02c2\u0225\u026e\u0000\u0000\u0000\u007d\u1076\u1077' + '\u1ec9\u1eca\u1ecb\u1ecc\u1ecd\u1ece\u1ecf\u1ed0\u1ed1\u1ed2\u1ed3\u1ed4\u1ed5\u1ed6\u1ed7\u1ed8\u1ed9\u1eda\u1edb\u1edc\u1edd\u1ede\u1edf\u1ee0\u00e8\u00e9\u1ee1\u1ee2\u00d7\u00d8\u00d9\u00da\u00db\u00dc\u00dd\u00de\u00df\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5\u00e6\u00e7\u00ea\u0000\u0000\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0000\u22c5\u22c6\u22c7\u22c8\u22c9\u22ca\u22cb\u22cc\u22cd\u22ce\u22cf\u22d0\u22d1\u22d2\u22d3\u22d4\u22d5\u22d6\u22d7\u22d8\u22d9\u22da\u22db\u22dc\u22dd\u007e\u007f\u0080\u0000\u0000\u0471\u0000\u22ba\u22bb\u22bc\u22bd\u22be\u22bf\u22c0\u22c1\u22c2\u22c3\u22c4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1f5f\u1f62\u1fdd\u20e2\u212b\u214b\u21c0\u21e2\u1f23\u1f24\u203f\u2254\u1f25\u1f27\u201b\u20c4\u217d\u2250\u2040\u210d\u2177\u0000\u1f63\u1f64\u1fb1\u2041\u228f\u2124\u2148\u2209\u1f61\u1fb2\u1fb3\u1fde\u2190\u2108\u214a\u1fdf\u1fe0\u21c1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u011f\u00fb\u0101\u0106\u00ef\u00f3\u00f7\u0000\u0000\u0000\u0000\u0000\u0000\u00ee\u00f2\u00f6\u0000\u00fc\u00fd\u0107\u0120\u0121\u0125\u0126\u0123\u0124\u0122\u0102\u0118' + '\u0154\u0155\u0163\u0179\u2534\u2535\u2536\u253c\u253d\u253e\u253f\u2540\u2542\u2544\u2545\u2546\u2547\u2549\u254a\u254b\u254c\u254d\u254f\u2551\u2554\u2555\u2556\u2557\u2558\u255c\u255d\u255e\u255f\u2561\u2564\u2566\u2567\u2568\u2569\u256a\u256b\u256c\u256d\u256e\u2570\u2572\u2573\u2574\u2577\u2578\u2579\u257a\u257b\u257c\u257d\u257e\u257f\u2580\u2596\u2597\u0147\u2581\u2595\u259b\u259c\u259d\u259e\u259f\u25a0\u25a3\u25a5\u25a6\u25a8\u25aa\u25ab\u25ac\u25ad\u25ae\u25a7\u2598\u2531\u0000\u0000\u000e\u000b\u25a4\u2599\u259a\u254e\u2550\u2552\u2559\u2562\u2565\u256f\u2575\u2541\u2543\u25a1\u25a2\u02a3\u02a4\u10a4\u10d3\u114d\u11a1\u11e7\u1227\u125f\u1295\u12cb\u1300\u0473\u1052\u2533\u2537\u2538\u2539\u253a\u253b\u2560\u255a\u2576\u2553\u255b\u2582\u2563\u2571' + '\u25af\u0156\u0164\u017a\u0000\u25b0\u25b1\u25b2\u25b3\u25b4\u25b5\u25b6\u25b8\u0000\u0000\u25ba\u25bb\u0000\u0000\u25bc\u25bd\u25be\u25bf\u25c0\u25c1\u25c2\u25c3\u25c4\u25c5\u25c6\u25c7\u25c8\u25c9\u25ca\u25cc\u25ce\u25cf\u25d1\u25d2\u25d3\u25d4\u0000\u25d5\u25d6\u25d7\u25d8\u25d9\u25da\u25dc\u0000\u25de\u0000\u0000\u0000\u25e0\u25e1\u25e2\u25e3\u0000\u0000\u0148\u25e4\u25e5\u25e6\u25e7\u25e8\u25e9\u25ea\u25eb\u0000\u0000\u25ee\u25ef\u0000\u0000\u25f0\u25f1\u25f2\u25d0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u25f3\u0000\u0000\u0000\u0000\u25cb\u25cd\u0000\u25db\u25b7\u25b9\u25ec\u25ed\u0000\u0000\u10a5\u10d4\u114e\u11a2\u11e8\u1228\u1260\u1296\u12cc\u1301\u25dd\u25df\u1078\u1079\u1019\u101a\u101b\u101c\u101d\u101e\u0565\u107a\u25f4\u0478\u018b\u0000' + '\u0000\u0157\u0165\u017b\u0000\u25fa\u25fb\u25ff\u2600\u25f7\u25f8\u0000\u0000\u0000\u0000\u2601\u25fc\u0000\u0000\u25f9\u25fd\u2606\u2607\u2609\u260b\u260c\u260d\u260e\u260f\u2611\u2612\u2613\u2614\u2615\u2616\u2617\u2618\u2619\u261a\u261b\u261c\u0000\u261d\u261e\u2620\u2621\u2622\u2623\u2625\u0000\u2626\u2627\u0000\u2628\u2603\u0000\u2602\u2604\u0000\u0000\u0149\u0000\u262a\u262b\u262c\u262d\u262e\u0000\u0000\u0000\u0000\u262f\u2630\u0000\u0000\u2631\u2632\u2633\u0000\u0000\u0000\u2605\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2608\u260a\u2610\u2629\u0000\u261f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u10a6\u10d5\u114f\u11a3\u11e9\u1229\u1261\u1297\u12cd\u1302\u018c\u018d\u25fe\u25f6\u25f5\u2624\u0479\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0158\u0166\u017c\u0000\u2635\u2636\u2637\u2638\u2639\u263a\u263b\u263d\u263f\u0000\u2640\u2641\u2642\u0000\u2643\u2644\u2645\u2646\u2647\u2648\u2649\u264a\u264b\u264c\u264e\u264f\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657\u2658\u2659\u0000\u265a\u265b\u265c\u265d\u265e\u265f\u2660\u0000\u2661\u2667\u0000\u2662\u2663\u2664\u2665\u2666\u0000\u0000\u014a\u2668\u2669\u266a\u266b\u266c\u266d\u266e\u266f\u2672\u0000\u2673\u2674\u2675\u0000\u2676\u2677\u2678\u0000\u0000\u2634\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u263c\u263e\u2670\u2671\u0000\u0000\u10a7\u10d6\u1150\u11a4\u11ea\u122a\u1262\u1298\u12ce\u1303\u047a\u107b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u264d\u010d\u0109\u0111\u014b\u014c\u014d' + '\u0000\u0159\u0167\u017d\u0000\u2679\u267a\u267b\u267c\u267d\u267e\u267f\u2681\u0000\u0000\u2683\u2684\u0000\u0000\u2685\u2686\u2687\u2688\u2689\u268a\u268b\u268c\u268d\u268e\u268f\u2690\u2691\u2692\u2693\u2695\u2697\u2698\u2699\u269a\u269b\u269c\u0000\u269d\u269e\u269f\u26a0\u26a1\u26a2\u26a4\u0000\u26a5\u26a6\u0000\u26a7\u26a9\u26aa\u26ab\u26ac\u0000\u0000\u014e\u26ad\u26ae\u26af\u26b0\u26b1\u26b2\u26b3\u26b4\u0000\u0000\u26b7\u26b8\u0000\u0000\u26b9\u26ba\u26bb\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0033\u26bc\u26bd\u0000\u0000\u0000\u0000\u2694\u2696\u0000\u26a3\u2680\u2682\u26b5\u26b6\u0000\u0000\u10a8\u10d7\u1151\u11a5\u11eb\u122b\u1263\u1299\u12cf\u1304\u0566\u26a8\u101f\u1020\u1021\u1022\u1023\u1024\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0168\u26cb\u0000\u26bf\u26c0\u26c1\u26c2\u26c3\u26c4\u0000\u0000\u0000\u26c5\u26c6\u26c7\u0000\u26c8\u26c9\u26ca\u26cc\u0000\u0000\u0000\u26cd\u26ce\u0000\u26de\u0000\u26cf\u26d0\u0000\u0000\u0000\u26d1\u26d2\u0000\u0000\u0000\u26d3\u26dd\u26d4\u0000\u0000\u0000\u26d5\u26d6\u26d7\u26dc\u26d8\u26db\u26da\u26d9\u26df\u26e0\u26e1\u26e2\u0000\u0000\u0000\u0000\u26e3\u26e4\u26e5\u26e6\u26e7\u0000\u0000\u0000\u26e8\u26e9\u26ea\u0000\u26eb\u26ec\u26ed\u26ee\u0000\u0000\u26be\u0000\u0000\u0000\u0000\u0000\u0000\u26ef\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u10a9\u10d8\u1152\u11a6\u11ec\u122c\u1264\u129a\u12d0\u1305\u102b\u102c\u102d\u0567\u0568\u0569\u056a\u056b\u056c\u107d\u056d\u0000\u0000\u0000\u0000\u0000' + '\u015a\u015b\u0169\u017e\u016a\u26f0\u26f1\u26f2\u26f3\u26f4\u26f5\u26f6\u26f8\u0000\u26fa\u26fb\u26fc\u0000\u26fd\u26fe\u26ff\u2700\u2701\u2702\u2703\u2704\u2705\u2707\u2708\u270a\u270b\u270c\u270d\u270e\u270f\u2710\u2711\u2712\u2713\u2714\u2715\u0000\u2716\u2717\u2718\u2719\u271a\u271b\u271c\u271d\u271e\u2724\u2725\u271f\u2720\u2721\u2722\u2723\u0000\u0000\u0000\u2727\u2728\u2729\u272a\u272b\u272c\u272d\u272e\u0000\u2731\u2732\u2733\u0000\u2734\u2735\u2736\u2737\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2738\u2739\u0000\u2706\u2709\u2726\u0000\u0000\u0000\u0000\u0000\u26f7\u26f9\u272f\u2730\u0000\u0000\u10aa\u10d9\u1153\u11a7\u11ed\u122d\u1265\u129b\u12d1\u1306\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u047b\u10ab\u10da\u1154\u11a8\u10db\u1155\u11a9\u056e' + '\u2771\u015c\u016b\u017f\u047c\u273a\u273b\u273c\u273d\u273e\u273f\u2740\u2742\u0000\u2744\u2745\u2746\u0000\u2747\u2748\u2749\u274a\u274b\u274c\u274d\u274e\u274f\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757\u2758\u2759\u275a\u275b\u275c\u275d\u0000\u275e\u275f\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u276c\u0000\u2767\u2768\u2769\u276a\u276b\u0000\u0000\u014f\u276e\u2772\u2773\u2774\u2775\u2776\u2777\u2778\u0000\u277b\u277c\u277d\u0000\u277e\u277f\u2780\u2781\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2782\u2783\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u276d\u0000\u2741\u2743\u2779\u277a\u0000\u0000\u10ac\u10dc\u1156\u11aa\u11ee\u122e\u1266\u129c\u12d2\u1307\u0000\u276f\u2770\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u016c\u015d\u016d\u0180\u27c6\u2784\u2785\u2786\u2787\u2789\u278a\u278b\u278d\u0000\u278f\u2790\u2791\u0000\u2792\u2793\u2794\u2795\u2797\u2798\u2799\u279a\u279b\u279c\u279d\u279e\u279f\u27a0\u27a1\u27a2\u27a3\u27a4\u27a6\u27a7\u27a8\u27a9\u27aa\u27ac\u27ad\u27ae\u27af\u27b0\u27b1\u27b3\u27b5\u27c3\u27b8\u27bf\u27c1\u27ba\u27bb\u27bc\u27bd\u27be\u27c4\u27d8\u27d9\u27c5\u27c7\u27c8\u27c9\u27ca\u27cb\u27cc\u27cd\u0000\u27d0\u27d1\u27d2\u0000\u27d3\u27d4\u27d5\u27d7\u27b6\u056f\u0000\u0000\u0000\u0000\u27b2\u27b4\u27c2\u27d6\u102e\u102f\u1030\u1031\u1032\u1033\u1034\u2788\u278c\u278e\u27ce\u27cf\u0000\u0000\u10ad\u10dd\u1157\u11ab\u11ef\u122f\u1267\u129d\u12d3\u1308\u1035\u1036\u1037\u1038\u1039\u103a\u103b\u103c\u103d\u0570\u27a5\u27ab\u27b7\u27b9\u27c0\u2796' + '\u0000\u015e\u016e\u0181\u0000\u27da\u27db\u27dc\u27dd\u27de\u27df\u27e0\u27e1\u27e2\u27e3\u27e4\u27e5\u27e6\u27e7\u27e8\u27e9\u27ea\u27eb\u0000\u0000\u0000\u27ec\u27ed\u27ee\u27ef\u27f0\u27f1\u27f2\u27f3\u27f4\u27f5\u27f6\u27f7\u27f8\u27f9\u27fa\u27fb\u27fc\u27fd\u27fe\u27ff\u2800\u2801\u2802\u2803\u0000\u2804\u2805\u2806\u2807\u2808\u2809\u280a\u280b\u280c\u0000\u280d\u0000\u0000\u280e\u280f\u2810\u2811\u2812\u2813\u2814\u0000\u0000\u0000\u2826\u0000\u0000\u0000\u0000\u2815\u2816\u2817\u2818\u2819\u281a\u0000\u281b\u0000\u281c\u2820\u2821\u2822\u2823\u2824\u2825\u281e\u0000\u0000\u0000\u0000\u0000\u0000\u10ae\u10de\u1158\u11ac\u11f0\u1230\u1268\u129e\u12d4\u1309\u0000\u0000\u281d\u281f\u047d\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u2904\u2905\u2906\u2907\u2908\u2909\u290a\u290b\u290c\u290d\u290e\u290f\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917\u2918\u2919\u291a\u291b\u291c\u291d\u291e\u291f\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927\u2928\u2929\u292a\u292b\u292c\u292d\u292e\u292f\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937\u2938\u2939\u293a\u293b\u293c\u293d\u0000\u0000\u0000\u0000\u107e\u293e\u293f\u2940\u2941\u2942\u2943\u1053\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u0192\u047e\u10af\u10df\u1159\u11ad\u11f1\u1231\u1269\u129f\u12d5\u130a\u047f\u0480\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u2945\u2946\u0000\u2947\u0000\u2948\u2949\u294a\u294b\u294d\u0000\u294e\u2951\u294f\u2952\u2953\u2954\u2955\u2956\u2957\u2958\u2959\u295a\u295b\u295c\u295d\u295e\u295f\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u0000\u2967\u0000\u2968\u2969\u296a\u294c\u296b\u296e\u296f\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977\u2978\u2979\u297a\u297b\u297c\u297d\u297e\u297f\u0000\u0000\u2980\u2981\u2982\u2983\u2984\u0000\u1054\u0000\u019a\u019b\u019c\u019d\u019e\u019f\u0000\u0000\u10b0\u10e0\u115a\u11ae\u11f2\u1232\u126a\u12a0\u12d6\u130b\u0000\u0000\u296c\u296d\u2944\u2950\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2a1f\u0578\u0579\u057a\u0483\u0484\u0485\u0486\u0487\u0488\u0489\u048c\u048d\u048e\u048f\u0490\u0491\u0492\u0493\u057b\u025e\u057c\u057d\u057e\u0000\u0000\u057f\u0580\u0581\u0582\u0583\u0584\u10b1\u10e1\u115b\u11af\u11f3\u1233\u126b\u12a1\u12d7\u130c\u10fa\u1173\u11c7\u120b\u124b\u1284\u12b9\u12ef\u1324\u10c8\u0585\u0000\u0586\u0000\u0587\u01a2\u0386\u0387\u0388\u0389\u0000\u0000\u29c8\u29cd\u29cf\u29d0\u29d3\u29d5\u29d7\u29d9\u0000\u29db\u29dd\u29df\u29e1\u29e2\u29e5\u29e7\u29e9\u29eb\u29ec\u29ef\u29f1\u29f3\u29f5\u29f6\u29f9\u29fb\u29fd\u29ff\u2a00\u2a03\u2a06\u2a08\u2a0a\u2a0c\u2a0f\u2a14\u2a16\u2a18\u2a1a\u2a1c\u2a1e\u29c9\u2a10\u29cc\u2a13\u0000\u0000\u0000\u0000\u2a29\u2a2a\u2a2b\u2a2e\u2a2f\u2a30\u2a31\u2a32\u2a33\u2a34\u2a35\u2a36\u2a37\u016f\u0182' + '\u2a2c\u2a2d\u0000\u0000\u2a38\u0494\u0000\u0000\u2a21\u2a23\u2a27\u2a28\u2a25\u2a22\u2a24\u2a26\u29ca\u29ce\u29d1\u29d2\u29d4\u29d6\u29d8\u29da\u0000\u29dc\u29de\u29e0\u29e3\u29e4\u29e6\u29e8\u29ea\u29ed\u29ee\u29f0\u29f2\u29f4\u29f7\u29f8\u29fa\u29fc\u29fe\u2a01\u2a02\u2a04\u2a07\u2a09\u2a0b\u2a0d\u2a11\u2a15\u2a17\u2a19\u2a1b\u2a1d\u2a20\u29cb\u2a05\u2a0e\u2a12\u0000\u0588\u0589\u058a\u058b\u058c\u058d\u058e\u058f\u0000\u0590\u0591\u0592\u0593\u0594\u0595\u0000\u0596\u0597\u048a\u048b\u0495\u0496\u0497\u0598\u0599\u059a\u059b\u0498\u0499\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2bbe\u2bc0\u2bc2\u2bc6\u2bc9\u2bcb\u2bce\u2bd2\u2bd7\u2bde\u2be2\u2be3\u2be5\u2be7\u2bea\u2bed\u2bf1\u2bf2\u2bf3\u2bf6\u2bf9\u2bfd\u2bfe\u2c04\u2c07\u2c0a\u2c0c\u2c0e\u2c12\u2c14\u2c1b\u2c1e\u2c24\u2c2b\u2c2c\u2c2d\u2c2e\u2c2f\u2c30\u2c35\u2c36\u2c37\u2c38\u2c3a\u2c39\u2c3e\u2c40\u2c42\u2c45\u2c4a\u2c4e\u2c41\u2c50\u2c4c\u0170\u01a6\u0183\u2c56\u2c57\u2c0d\u2c11\u2c15\u2c21\u2c1c\u10b2\u10e2\u115c\u11b0\u11f4\u1234\u126c\u12a2\u12d8\u130d\u02ae\u02af\u049d\u049e\u049f\u04a0\u2c18\u2c19\u2c31\u2c32\u2c33\u2c34\u2c46\u2c47\u2c48\u2c49\u2bca\u2bd8\u2c26\u2c27\u2bfc\u2c0b\u2c13\u2bdc\u2c51\u2c58\u2c59\u2c1a\u2c2a\u2c52\u2c53\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2bee\u2c28\u2c29\u2c3f\u2c3c\u2c43\u2c44\u2bbf\u2bc1\u2bc3\u2bcc\u2bd5\u2bdf\u2bf4\u2bfa\u2bff\u2c00\u2c05' + '\u2c17\u2c1f\u2c16\u2c3b\u2c4b\u2c4d\u2c55\u2c5f\u2c61\u2c64\u2c65\u2c60\u2c62\u2c63\u2c02\u2c66\u10b3\u10e3\u115d\u11b1\u11f5\u1235\u126d\u12a3\u12d9\u130e\u2c67\u2c68\u2c3d\u2c4f\u059e\u059f\u1d7b\u1d7f\u1d83\u1d87\u1d8b\u1d8f\u1d93\u1d9b\u1d9f\u1da3\u1da7\u1dab\u1db0\u1db8\u1dbc\u1dc0\u1dc4\u1dc8\u1dcc\u1dd4\u1dd8\u1ddc\u1de0\u1de4\u1de8\u1dec\u1df0\u1df4\u1df8\u1dfc\u1e00\u1e08\u1e0c\u1d97\u1db4\u1dd0\u1e04\u1e10\u0000\u1e16\u0000\u0000\u0000\u0000\u0000\u1e20\u0000\u0000\u1d78\u1d7c\u1d80\u1d84\u1d88\u1d8c\u1d90\u1d98\u1d9c\u1da0\u1da4\u1da8\u1dac\u1db5\u1db9\u1dbd\u1dc1\u1dc5\u1dc9\u1dd1\u1dd5\u1dd9\u1ddd\u1de1\u1de5\u1de9\u1ded\u1df1\u1df5\u1df9\u1dfd\u1e05\u1e09\u1d94\u1db1\u1dcd\u1e01\u1e0d\u1e11\u1e13\u1e17\u1e19\u1e1b\u02c3\u1dae\u1e1d\u1e21\u1e23' + '\u3430\u3435\u3438\u343d\u3442\u3445\u344a\u344f\u3454\u3457\u345c\u345f\u3465\u346b\u346e\u3474\u3479\u347e\u3483\u3488\u3489\u348b\u348d\u348e\u348f\u3490\u3491\u3494\u3495\u3497\u3499\u349b\u349c\u349e\u34a1\u34a3\u34a5\u34a6\u34a7\u34a8\u34aa\u34ab\u34ad\u34ae\u34b0\u34b2\u34b4\u34b6\u34b8\u34b9\u34ba\u34bc\u34bd\u34be\u34bf\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d4\u34d5\u34d6\u34d7\u34d8\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e6\u34e8\u34ea\u34eb\u34ec\u34ed\u34ee\u350c\u350d\u3510\u3513\u3516\u3519\u351c\u351f\u3522\u3525\u3528\u352b\u352e\u3531\u3534\u3537\u353a\u353d\u3540\u3543\u3546\u3549\u354c\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558' + '\u3559\u355a\u355b\u355c\u355d\u355f\u3561\u3562\u3563\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356f\u3571\u3572\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357f\u3580\u3581\u3583\u3584\u3585\u3586\u3587\u3588\u35a0\u35a1\u35a2\u35a5\u35a6\u35a9\u35ac\u35ad\u35ae\u35b1\u35b4\u35b7\u35ba\u35bd\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d3\u35d5\u35d6\u35d7\u35d8\u35da\u35db\u35dd\u35de\u35df\u35e0\u35e1\u35e3\u35e4\u35e5\u35e6\u35e8\u35e9\u35eb\u35ec\u35ed\u35ee\u35f0\u35f1\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3606\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614' + '\u236c\u236d\u236e\u236f\u2370\u2371\u2372\u2373\u2374\u2375\u2376\u2377\u2378\u2379\u237a\u237b\u237d\u237e\u237f\u2380\u2381\u2382\u2383\u2384\u2385\u2386\u2387\u2388\u2389\u238a\u238b\u238c\u2392\u2393\u2394\u2395\u2396\u2397\u2398\u2399\u239a\u239b\u239c\u239d\u239e\u239f\u23a0\u23a1\u23a3\u23a4\u23a5\u23a6\u23a7\u23a8\u23a9\u23aa\u23b2\u23b3\u23b4\u23b5\u23b6\u23b7\u23b8\u23b9\u23bb\u23bc\u23bd\u23be\u23bf\u23c0\u23c1\u23c2\u23c3\u0000\u23c4\u23c5\u23c6\u23c7\u0000\u0000\u23c8\u23c9\u23ca\u23cb\u23cc\u23cd\u23ce\u0000\u23cf\u0000\u23d0\u23d1\u23d2\u23d3\u0000\u0000\u23d4\u23d5\u23d6\u23d7\u23d8\u23d9\u23da\u23db\u23e1\u23e2\u23e3\u23e4\u23e5\u23e6\u23e7\u23e8\u23e9\u23ea\u23eb\u23ec\u23ed\u23ee\u23ef\u23f0\u23f2\u23f3\u23f4\u23f5\u23f6\u23f7\u23f8\u23f9' + '\u23fb\u23fc\u23fd\u23fe\u23ff\u2400\u2401\u2402\u2403\u0000\u2404\u2405\u2406\u2407\u0000\u0000\u2408\u2409\u240a\u240b\u240c\u240d\u240e\u240f\u2411\u2412\u2413\u2414\u2415\u2416\u2417\u2418\u241a\u241b\u241c\u241d\u241e\u241f\u2420\u2421\u2423\u2424\u2425\u2426\u2427\u2428\u2429\u242a\u242b\u0000\u242c\u242d\u242e\u242f\u0000\u0000\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u0000\u2437\u0000\u2438\u2439\u243a\u243b\u0000\u0000\u243c\u243d\u243e\u243f\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447\u2448\u2449\u244a\u0000\u244b\u244c\u244d\u244e\u244f\u2450\u2451\u2452\u245a\u245b\u245c\u245d\u245e\u245f\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246a\u246b\u246c\u246d\u246e\u246f\u2470\u2471\u2479\u247a\u247b\u247c\u247d\u247e\u247f\u2480' + '\u2482\u2483\u2484\u2485\u2486\u2487\u2488\u2489\u248b\u248c\u248d\u248e\u248f\u2490\u2491\u2492\u2493\u0000\u2494\u2495\u2496\u2497\u0000\u0000\u2498\u2499\u249a\u249b\u249c\u249d\u249e\u249f\u24a4\u24a5\u24a6\u24a7\u24a8\u24a9\u24aa\u24ab\u24ad\u24ae\u24af\u24b0\u24b1\u24b2\u24b3\u24b4\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24d5\u24d6\u24d7\u24d8\u24d9\u24da\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e9\u24ea\u24eb\u24ec\u24ed\u24ee\u24ef\u24f0\u24f6\u24f7\u24f8\u0000\u0000\u0144\u0143\u0142\u02c4\u0257\u0290\u0258\u0259\u025a\u025b\u027b\u02c5\u10e4\u115e\u11b2\u11f6\u1236\u126e\u12a4\u12da\u130f\u103e\u103f\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u0000\u0000\u0000' + '\u238d\u238e\u238f\u2390\u23dc\u23dd\u23de\u23df\u24e5\u24e6\u24e7\u24e8\u24f1\u24f2\u24f3\u24f4\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0000\u0000\u0000\u0000\u0000\u0000\u2ee3\u2ee5\u2ee7\u2ee9\u2eeb\u2eed\u2eef\u2ef1\u2ef3\u2ef5\u2ef7\u2ef9\u2efb\u2efd\u2eff\u2f01\u2f03\u2f05\u2f07\u2f09\u2f0b\u2f0d\u2f0f\u2f11\u2f13\u2f15\u2f17\u2f19\u2f1b\u2f1d\u2f1f\u2f21\u2f23\u2f25\u2f27\u2f29\u2f2b\u2f2d\u2f2f\u2f31\u2f33\u2f35\u2f37\u2f39\u2f3b\u2f3d\u2f3f\u2f41\u2f43\u2f45\u2f47\u2f49\u2f4b\u2f4d\u2f4f\u2f51\u2f53\u2f55\u2f57\u2f59\u2f5b\u2f5d\u2f5f\u2f61\u2f63\u2f65\u2f67\u2f69\u2f6b\u2f6d\u2f6f\u2f71\u2f73\u2f75\u2f77\u2f79\u2f7b\u2f7d\u2f7f\u2f81\u2f83\u2f85\u2f87\u2f89\u2f8b\u2f8d\u0000\u0000\u2f82\u2f84\u2f86\u2f88\u2f8a\u2f8c\u0000\u0000' + '\u01fe\u2f8e\u2f8f\u2f90\u2f91\u2f92\u2f93\u2f94\u2f95\u2f96\u2f97\u2f98\u2f99\u2f9a\u2f9b\u2f9c\u2f9d\u2f9e\u2f9f\u2fa0\u2fa1\u2fa2\u2fa3\u2fa4\u2fa5\u2fa6\u2fa7\u2fa8\u2fa9\u2faa\u2fab\u2fac\u2fad\u2fae\u2faf\u2fb0\u2fb1\u2fb2\u2fb3\u2fb4\u2fb5\u2fb6\u2fb7\u2fb8\u2fb9\u2fba\u2fbb\u2fbc\u2fbd\u2fbe\u2fbf\u2fc0\u2fc1\u2fc2\u2fc3\u2fc4\u2fc5\u2fc6\u2fc7\u2fc8\u2fc9\u2fca\u2fcb\u2fcc\u2fcd\u2fce\u2fcf\u2fd0\u2fd1\u2fd2\u2fd3\u2fd4\u2fd5\u2fd6\u2fd7\u2fd8\u2fd9\u2fda\u2fdb\u2fdc\u2fdd\u2fde\u2fdf\u2fe0\u2fe1\u2fe2\u2fe3\u2fe4\u2fe5\u2fe6\u2fe7\u2fe8\u2fe9\u2fea\u2feb\u2fec\u2fed\u2fee\u2fef\u2ff0\u2ff1\u2ff2\u2ff3\u2ff4\u2ff5\u2ff6\u2ff7\u2ff8\u2ff9\u2ffa\u2ffb\u2ffc\u2ffd\u2ffe\u2fff\u3000\u3001\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009\u300a\u300b\u300c' + '\u300d\u300e\u300f\u3010\u3011\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019\u301a\u301b\u301c\u301d\u301e\u301f\u3020\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u302a\u302b\u302c\u302d\u302e\u302f\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037\u3038\u3039\u303a\u303b\u303c\u303d\u303e\u303f\u3040\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c' + '\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u3097\u3098\u3099\u309a\u309b\u309c\u309d\u309e\u309f\u30a0\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fb\u30fc\u30fd\u30fe\u30ff\u3100\u3101\u3102\u3103\u3104\u3105\u3106\u3107\u3108\u313b\u3109\u310b\u310c' + '\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u312a\u312b\u312c\u312d\u312e\u312f\u3130\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u318f\u3190\u3191\u3192\u3193\u3194' + '\u3195\u3196\u3197\u3198\u3199\u319a\u319b\u319c\u319d\u319e\u319f\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31b8\u31b9\u31ba\u31bb\u31bc\u31bd\u31be\u31bf\u31c0\u31c1\u31c2\u31c3\u31c4\u31c5\u31c6\u31c7\u31c8\u31c9\u31ca\u31cb\u31cc\u31cd\u31ce\u31cf\u31d0\u31d1\u31d2\u31d3\u31d4\u31d5\u31d6\u31d7\u31d8\u31d9\u31da\u31db\u31dc\u31dd\u31de\u31df\u31e0\u31e1\u31e2\u31e3\u31e4\u31e5\u31e6\u31e7\u31e8\u31e9\u31ea\u31eb\u31ec\u31ed\u31ee\u31ef\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3200\u3201\u059c\u0293\u310a\u311b\u3124\u3125\u3126\u3127\u3128\u3129\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209\u320a' + '\u01de\u3251\u3252\u3253\u3254\u3255\u3256\u3257\u3258\u3259\u325a\u325b\u325c\u325d\u325e\u325f\u3260\u3261\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269\u326a\u038a\u038b\u0000\u0000\u0000\u326b\u326c\u326d\u32b6\u326e\u326f\u3270\u3271\u3273\u3274\u32b2\u32b4\u3275\u3276\u3277\u3279\u327a\u327b\u327c\u327d\u327e\u327f\u3280\u3282\u32b9\u3283\u3285\u3286\u3287\u3288\u3289\u328a\u328b\u328c\u328d\u328f\u3290\u3291\u3292\u3294\u3295\u3297\u3298\u3299\u329b\u329c\u329d\u329f\u32a0\u32a1\u32a2\u32a3\u32a4\u3296\u32a5\u32a7\u32a8\u32a9\u32ab\u32ac\u32ad\u32ae\u32af\u32b0\u32b7\u32bb\u32bc\u32b8\u32ba\u32bd\u32be\u32bf\u32c0\u3284\u329a\u0262\u0263\u0264\u3293\u32aa\u3272\u3281\u329e\u32b1\u3278\u328e\u32a6\u32b3\u32b5\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2adb\u2adc\u2add\u2ade\u2adf\u2ae0\u2ae1\u2ae2\u2ae3\u2ae4\u2ae5\u2ae6\u2ae7\u0000\u2ae8\u2ae9\u2aea\u2aeb\u2aec\u2aed\u2aee\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2aef\u2af0\u2af1\u2af2\u2af3\u2af4\u2af5\u2af6\u2af7\u2af8\u2af9\u2afa\u2afb\u2afc\u2afd\u2afe\u2aff\u2b00\u2b01\u2b02\u2b03\u02ab\u02ac\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2b04\u2b05\u2b06\u2b07\u2b08\u2b09\u2b0a\u2b0b\u2b0c\u2b0d\u2b0e\u2b0f\u2b10\u2b11\u2b12\u2b13\u2b14\u2b15\u2b16\u2b17\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2b18\u2b19\u2b1a\u2b1b\u2b1c\u2b1d\u2b1e\u2b1f\u2b20\u2b21\u2b22\u2b23\u2b24\u0000\u2b25\u2b26\u2b27\u0000\u2b28\u2b29\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2c80\u2c81\u2c82\u2c83\u2c84\u2c85\u2c86\u2c87\u2c88\u2c89\u2c8a\u2c8b\u2c8c\u2c8d\u2c8e\u2c8f\u2c90\u2c91\u2c93\u2c94\u2c95\u2c96\u2c97\u2c98\u2c99\u2c9a\u2c9b\u2c9c\u2c9d\u2c9e\u2c9f\u2ca0\u2ca1\u2ca2\u2ca3\u0000\u0000\u2ca4\u2ca5\u2ca6\u2ca7\u2ca8\u2ca9\u2caa\u2cab\u2cac\u2cad\u2cae\u2caf\u2cb0\u2cb1\u2cb2\u2cb3\u0171\u0184\u01a7\u01a8\u01a9\u0034\u0035\u0036\u0037\u0038\u0039\u003a\u2cb4\u0000\u02b0\u02b1\u025f\u1055\u04a1\u04a2\u04a3\u107f\u2c92\u003b\u0000\u0000\u10b4\u10e5\u115f\u11b3\u11f7\u1237\u126f\u12a5\u12db\u1310\u0000\u0000\u0000\u0000\u0000\u0000\u10b5\u10e6\u1160\u11b4\u11f8\u1238\u1270\u12a6\u12dc\u1311\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0472\u028c\u0226\u0291\u025c\u025d\u0200\u0201\u0227\u0292\u0000\u0000\u0000\u0000\u0000\u0000\u10b6\u10e7\u1161\u11b5\u11f9\u1239\u1271\u12a7\u12dd\u1312\u0000\u0000\u0000\u0000\u0000\u0000\u2e42\u2e44\u2e47\u2e4d\u2e4f\u2e52\u2e54\u2e57\u2e58\u2e59\u2e5e\u2e60\u2e63\u2e65\u2e6a\u2e6c\u2e6d\u2e6e\u2e75\u2e78\u2e7b\u2e81\u2e85\u2e88\u2e8a\u2e8c\u2e8f\u2e94\u2e95\u2e98\u2e9c\u2e9f\u2ea0\u2ea1\u2ea2\u2e41\u2e45\u2e48\u2e4e\u2e50\u2e53\u2e55\u2e5a\u2e5f\u2e61\u2e64\u2e66\u2e6b\u2e76\u2e79\u2e7c\u2e82\u2e96\u2e86\u2e8b\u2e90\u2e9a\u2e9d\u2ea3\u2ea4\u2e7f\u2e46\u2e49\u2e4c\u2e56\u2e51\u2e5b\u2e91\u2e67\u2e69\u2e62\u2e6f\u2e77\u2e7a\u2e83\u2e8d\u2e9b\u2e9e\u2e97\u2e99\u2ea5\u2e7d\u2e87\u2e4a\u2e92\u2e89\u2e8e\u2e84\u2e7e\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2e3a\u2e3b\u2e3c\u2e3d\u2e3e\u2e3f\u2e40\u2e43\u2e4b\u2e93\u2e5c\u2e80\u2ea6\u2ea8\u2ea9\u2eab\u2eac\u2eaf\u2eb1\u2eb2\u2eb4\u2eb6\u2eb8\u2eb9\u2ead\u2eb7\u2e68\u2e5d\u2e70\u2e71\u2ea7\u2eaa\u2eae\u2eb0\u2e72\u2eb5\u2e73\u2e74\u2eba\u2ebb\u2eb3\u2ebd\u2ebc\u0000\u0000\u0000\u0000\u0000\u320b\u320c\u320d\u320e\u320f\u3210\u3211\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219\u321a\u321b\u321c\u321d\u321e\u321f\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\u322a\u322b\u322c\u322d\u322e\u322f\u3230\u3231\u3232\u3233\u3234\u3235\u3236\u3237\u3238\u3239\u323a\u323b\u323c\u323d\u323e\u323f\u3240\u3241\u3242\u3243\u3244\u3245\u3246\u3247\u3248\u3249\u324a\u324b\u324c\u324d\u324e\u324f\u3250\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2aa7\u2aa8\u2aa9\u2aaa\u2aab\u2aac\u2aad\u2aae\u2aaf\u2ab1\u2ab2\u2ab3\u2ab5\u2ab6\u2ab7\u2ab8\u2ab9\u2aba\u2abb\u2abc\u2abd\u2abe\u2abf\u2ac0\u2ac1\u2ac2\u2ac3\u2ac4\u2ac5\u2ab0\u2ab4\u0000\u2ac6\u2ac7\u2ac8\u2ac9\u2aca\u2acb\u2acc\u2acd\u2ace\u2acf\u2ad0\u2ad1\u0000\u0000\u0000\u0000\u2ad2\u2ad3\u2ad4\u2ad5\u2ad6\u2ad7\u2ad8\u2ad9\u2ada\u01b2\u01b3\u01b4\u0000\u0000\u0000\u0000\u059d\u0000\u0000\u0000\u026f\u027c\u10b7\u10e8\u1162\u11b6\u11fa\u123a\u1272\u12a8\u12de\u1313\u2cb5\u2cb6\u2cb7\u2cb8\u2cb9\u2cba\u2cbb\u2cbc\u2cbd\u2cbe\u2cbf\u2cc0\u2cc1\u2cc2\u2cc3\u2cc4\u2cc5\u2cc6\u2cc7\u2cc8\u2cc9\u2cca\u2ccb\u2ccc\u2ccd\u2cce\u2ccf\u2cd0\u2cd1\u2cd2\u0000\u0000\u2cd3\u2cd4\u2cd5\u2cd6\u2cd7\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u2cd8\u2cd9\u2cda\u2cdb\u2cdc\u2cdd\u2cde\u2cdf\u2ce0\u2ce1\u2ce2\u2ce3\u2ce4\u2ce5\u2ce6\u2ce7\u2ce8\u2ce9\u2cea\u2ceb\u2cec\u2ced\u2cee\u2cef\u2cf0\u2cf1\u2cf2\u2cf3\u2cf4\u2cf7\u2cf8\u2cf9\u2cfa\u2cfb\u2cfc\u2cfd\u2cfe\u2cff\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u0000\u0000\u0000\u0000\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u0000\u0000\u0000\u0000\u0000\u0000\u10b8\u10e9\u1163\u11b7\u11fb\u123b\u1273\u12a9\u12df\u1314\u10ea\u0000\u0000\u0000\u2cf5\u2cf6\u05a3\u05a4\u05a5\u05a6\u05a7\u05a8\u05a9\u05aa\u05ab\u05ac\u05ad\u05ae\u05af\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05ba\u05bb\u05bc\u05bd\u05be\u05bf\u05c0\u05c1\u05c2' + '\u2b2a\u2b2b\u2b2c\u2b2d\u2b2e\u2b2f\u2b30\u2b31\u2b32\u2b33\u2b34\u2b35\u2b36\u2b37\u2b38\u2b39\u2b3a\u2b3b\u2b3c\u2b3d\u2b3e\u2b3f\u2b40\u2b41\u2b42\u2b43\u2b44\u2b45\u0000\u0000\u02c6\u02c7\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\u2d26\u2d29\u2d2a\u2d2b\u2d2c\u2d2d\u2d2e\u2d2f\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d52\u2d4b\u2d54\u2d55\u2d56\u2d27\u2d28\u2d3e\u2d3f\u2d57\u2d58\u2d59\u0000\u2d72\u2d60\u2d62\u2d63\u2d64\u2d65\u2d66\u2d67\u2d68\u2d69\u2d6a\u2d53\u2d61\u2d71\u2d6b\u2d6c\u2d6e\u2d6f\u2d70\u2d6d\u0172\u01aa\u01ab\u01ac\u01ad\u01ae\u01af\u01b0\u01b1\u0000\u0000\u0000' + '\u10b9\u10eb\u1164\u11b8\u11fc\u123c\u1274\u12aa\u12e0\u1315\u0000\u0000\u0000\u0000\u0000\u0000\u10ba\u10ec\u1165\u11b9\u11fd\u123d\u1275\u12ab\u12e1\u1316\u0000\u0000\u0000\u0000\u0000\u0000\u04a4\u04a5\u04a6\u04a7\u04a8\u04a9\u04aa\u1056\u02b2\u02b3\u02b4\u02b5\u04ab\u04ac\u0000\u0000\u003c\u003d\u003e\u003f\u0040\u0081\u0082\u0083\u0084\u0085\u0086\u0041\u0042\u0087\u009c\u18b4\u18d0\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u015f\u0160\u0173\u018e\u0185\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dbf\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dcf\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd7\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2ddf\u2de0\u2de1\u2de2\u2de3\u2de4\u2de5\u2de6\u2de8\u2de9\u2dea\u2ded\u0150\u2dee\u2def\u2df0\u2df1\u2df2\u2df3\u2df4\u2df5\u2df6\u2df7\u2df8\u2df9\u2dfa\u2dfb\u2dfc\u2dfd\u2dc7\u2dc8\u2dd8\u2dde\u2de7\u2deb\u2dec\u0000\u0000\u0000\u0000\u10bb\u10ed\u1166\u11ba\u11fe\u123e\u1276\u12ac\u12e2\u1317\u02c8\u02c9\u0294\u0260\u02b6\u02b7\u01ff\u05c3\u05c4\u05c5\u05c6\u05c7\u05c8\u05c9\u05ca\u05cb\u05cc\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u05cd\u05ce\u05cf\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u0000\u0000\u0000' + '\u0174\u0190\u0186\u28d1\u28d3\u28d4\u28d5\u28d6\u28d7\u28d8\u28d9\u28dc\u28dd\u28de\u28df\u28e0\u28e1\u28e2\u28e3\u28e4\u28e5\u28e6\u28e7\u28e8\u28e9\u28eb\u28ee\u28f0\u28f3\u28f6\u28f8\u28f9\u28fb\u28ef\u28f1\u28f4\u28fc\u28fd\u28fe\u28ff\u2900\u2901\u2902\u2903\u28ed\u28f7\u28db\u28fa\u10bc\u10ee\u1167\u11bb\u11ff\u123f\u1277\u12ad\u12e3\u1318\u28d2\u28f2\u28f5\u28ea\u28da\u28ec\u2b46\u2b47\u2b48\u2b49\u2b4a\u2b4b\u2b4c\u2b4d\u2b4e\u2b4f\u2b50\u2b51\u2b52\u2b53\u2b54\u2b55\u2b56\u2b57\u2b58\u2b59\u2b5a\u2b5b\u2b5c\u2b5d\u2b5e\u2b5f\u2b60\u2b61\u2b62\u2b63\u2b64\u2b65\u2b66\u2b67\u2b68\u2b69\u2b6a\u2b6b\u0151\u2b6c\u2b6d\u2b6e\u2b6f\u2b70\u2b71\u2b72\u2b73\u2b74\u2b75\u2b76\u2b77\u2b78\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u04b8\u04b9\u04ba\u04bb' + '\u2a39\u2a3a\u2a3b\u2a3c\u2a3d\u2a3e\u2a3f\u2a40\u2a41\u2a42\u2a46\u2a47\u2a48\u2a49\u2a4a\u2a4b\u2a4c\u2a4d\u2a4e\u2a4f\u2a50\u2a51\u2a52\u2a53\u2a54\u2a55\u2a56\u2a58\u2a5a\u2a5b\u2a5c\u2a5d\u2a5e\u2a5f\u2a60\u2a61\u2a57\u2a59\u2a63\u2a64\u2a65\u2a66\u2a67\u2a68\u2a69\u2a6a\u2a6b\u2a6c\u2a6d\u2a6e\u2a6f\u2a70\u2a71\u2a72\u2a62\u0152\u0000\u0000\u0000\u02a7\u02a8\u049a\u049b\u049c\u10bd\u10ef\u1168\u11bc\u1200\u1240\u1278\u12ae\u12e4\u1319\u0000\u0000\u0000\u2a43\u2a44\u2a45\u10be\u10f0\u1169\u11bd\u1201\u1241\u1279\u12af\u12e5\u131a\u2ebe\u2ebf\u2ec0\u2ec1\u2ec2\u2ec3\u2ec4\u2ec5\u2ec6\u2ec7\u2ec8\u2ec9\u2eca\u2ecb\u2ecc\u2ecd\u2ece\u2ecf\u2ed0\u2ed1\u2ed2\u2ed3\u2ed4\u2ed5\u2ed6\u2ed7\u2ed8\u2ed9\u2eda\u2edb\u2edc\u2edd\u2ede\u2edf\u2ee0\u2ee1\u02bf\u02c0' + '\u1b7f\u1b92\u1c2f\u1c54\u1c5d\u1c5e\u1ccc\u1cde\u1c7b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1d79\u1d7d\u1d81\u1d85\u1d89\u1d8d\u1d91\u1d99\u1d9d\u1da1\u1da5\u1da9\u1dad\u1db6\u1dba\u1dbe\u1dc2\u1dc6\u1dca\u1dd2\u1dd6\u1dda\u1dde\u1de2\u1de6\u1dea\u1dee\u1df2\u1df6\u1dfa\u1dfe\u1e06\u1e0a\u1d95\u1db2\u1dce\u1e02\u1e0e\u1e12\u1e14\u1e18\u1e1a\u1e1c\u0000\u0000\u1e1e\u1e22\u1e24\u04ad\u04ae\u04af\u04b0\u04b1\u04b2\u04b3\u04b4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2583\u2584\u2585\u2586\u0175\u2587\u2588\u2589\u258a\u0187\u0188\u0000\u258c\u258d\u0000\u0000\u0000\u258b\u0000\u0000\u0000\u0000\u0000' + '\u1397\u139d\u139e\u13c4\u13f3\u1435\u1436\u1486\u14a3\u1578\u1594\u15c4\u1603\u1649\u1681\u16f2\u1701\u16f3\u1702\u16fc\u16f6\u1718\u1708\u170a\u1734\u1786\u178c\u180c\u1866\u1869\u186b\u1884\u18a4\u18ca\u1929\u1940\u197a\u197b\u19c7\u1a4b\u1a74\u1a82\u1abe\u1c02\u133a\u137d\u13b7\u13c3\u140e\u1451\u1490\u14d2\u150b\u1546\u158f\u15a7\u15df\u162c\u165e\u1680\u169f\u1717\u1723\u1763\u17ef\u1825\u18bb\u1338\u13a3\u13a7\u139f\u13b6\u140d\u144f\u1495\u149b\u14a4\u14d1\u1579\u15a5\u162a\u1692\u169d\u1700\u1709\u170b\u1721\u17ed\u1823\u186a\u1882\u1894\u197c\u19bf\u19c5\u19ca\u1ab6\u1aba\u1545\u1762\u1824\u1895\u19c0\u19c6\u1a7e\u1ab7\u1abb\u186c\u13c5\u1439\u14c2\u164b\u1682\u1739\u1789\u1797\u17d3\u1811\u192c\u14f6\u1c1d\u14e3\u1801\u157d\u1585\u1735\u1875\u188a' + '\u13c8\u143a\u14c3\u14f2\u15c5\u1614\u164c\u168a\u173a\u178e\u17d4\u17e1\u18a7\u18e5\u192d\u139a\u13a9\u143f\u148b\u149c\u14a2\u1497\u157f\u1704\u17e4\u1876\u1943\u13ac\u13db\u13fd\u1420\u14a1\u14b1\u159b\u14ec\u187d\u157c\u1584\u1575\u157e\u1599\u1617\u1615\u1600\u164f\u1886\u1685\u168c\u167f\u170f\u1743\u17d7\u17df\u1813\u1871\u1889\u1867\u18aa\u18b1\u191b\u1932\u1934\u193d\u1a1c\u0043\u0044\u0088\u0045\u0046\u0047\u0048\u0049\u004a\u004b\u1759\u004c\u004d\u004e\u004f\u0089\u008a\u0050\u1958\u135f\u137b\u138b\u1391\u13e5\u1421\u141e\u14cb\u14ef\u159f\u15d4\u15ff\u164a\u1656\u167e\u1780\u1784\u17a7\u17bf\u1914\u13a5\u13b0\u13ce\u1493\u14ab\u160e\u16bb\u171b\u17dd\u183f\u18b5\u1349\u16ab\u1833\u0051\u0052\u0053\u0054\u008b\u0000\u0055\u008c\u008d\u0056\u008e' + '\u135e\u135d\u13b9\u13b8\u13bb\u13ba\u13bd\u13bc\u13e8\u13e7\u1412\u1411\u1418\u1417\u141c\u141b\u1414\u1413\u141a\u1419\u1481\u1480\u147f\u147e\u1471\u1470\u1473\u1472\u147d\u147c\u14b3\u14b2\u14e0\u14df\u1513\u1512\u151b\u151a\u1511\u1510\u1515\u1514\u151d\u151c\u1563\u1562\u1565\u1564\u15a9\u15a8\u15b1\u15b0\u15b3\u15b2\u15e9\u15e8\u15f1\u15f0\u15ed\u15ec\u15eb\u15ea\u162e\u162d\u1630\u162f\u1632\u1631\u1668\u1667\u166e\u166d\u1672\u1671\u1670\u166f\u16d1\u16d0\u16d3\u16d2\u16df\u16de\u16dd\u16dc\u1725\u1724\u1727\u1726\u1769\u1768\u1773\u1772\u1779\u1778\u1775\u1774\u17b5\u17b4\u17bb\u17ba\u17c3\u17c2\u17c5\u17c4\u17c7\u17c6\u17f4\u17f3\u17f8\u17f7\u17fe\u17fd\u17fc\u17fb\u184b\u184a\u184f\u184e\u184d\u184c\u1859\u1858\u185b\u185a\u1898\u1897\u189a\u1899' + '\u18bf\u18be\u18bd\u18bc\u18c4\u18c3\u18c6\u18c5\u18c8\u18c7\u18e0\u18df\u18de\u18dd\u1901\u1900\u191f\u191e\u1925\u1924\u1927\u1926\u151e\u17f2\u18c2\u18fb\u1396\u17c8\u17da\u17db\u17ca\u1444\u135c\u135b\u1356\u1355\u1369\u1368\u136b\u136a\u136f\u136e\u136d\u136c\u1379\u1378\u1361\u1360\u1363\u1362\u1367\u1366\u1365\u1364\u1377\u1376\u146f\u146e\u1469\u1468\u145f\u145e\u1475\u1474\u1477\u1476\u147b\u147a\u1479\u1478\u1483\u1482\u155b\u155a\u1561\u1560\u16c5\u16c4\u16bd\u16bc\u16c7\u16c6\u16c9\u16c8\u16cd\u16cc\u16cb\u16ca\u16eb\u16ea\u16e1\u16e0\u16e3\u16e2\u16e7\u16e6\u16e5\u16e4\u16e9\u16e8\u1849\u1848\u1841\u1840\u185d\u185c\u185f\u185e\u1863\u1862\u1861\u1860\u1865\u1864\u18f8\u18f7\u1907\u1906\u1905\u1904\u18ff\u18fe\u15f6\u15f5\u18ae\u18ad\u190e\u190d' + '\u198c\u198e\u199f\u19a7\u199d\u19a5\u19a1\u19a9\u198d\u198f\u19a0\u19a8\u199e\u19a6\u19a2\u19aa\u19ce\u19d0\u19da\u19de\u19d8\u19dc\u0000\u0000\u19cf\u19d1\u19db\u19df\u19d9\u19dd\u0000\u0000\u19ec\u19ee\u19fb\u1a03\u19f9\u1a01\u19fd\u1a05\u19ed\u19ef\u19fc\u1a04\u19fa\u1a02\u19fe\u1a06\u1a21\u1a23\u1a34\u1a3a\u1a32\u1a38\u1a36\u1a3c\u1a22\u1a24\u1a35\u1a3b\u1a33\u1a39\u1a37\u1a3d\u1a5d\u1a5f\u1a69\u1a6d\u1a67\u1a6b\u0000\u0000\u1a5e\u1a60\u1a6a\u1a6e\u1a68\u1a6c\u0000\u0000\u1a94\u1a95\u1aa7\u1aab\u1aa6\u1aa9\u1aa8\u1aad\u0000\u1a96\u0000\u1aac\u0000\u1aaa\u0000\u1aae\u1ac2\u1ac4\u1ad1\u1ad9\u1acf\u1ad7\u1ad3\u1adb\u1ac3\u1ac5\u1ad2\u1ada\u1ad0\u1ad8\u1ad4\u1adc\u1994\u1991\u19d6\u19d3\u19f4\u19f1\u1a29\u1a26\u1a65\u1a62\u1a9c\u1a98\u1aca\u1ac7\u0000\u0000' + '\u19a3\u19ab\u19b2\u19b8\u19b0\u19b6\u19b4\u19ba\u19a4\u19ac\u19b3\u19b9\u19b1\u19b7\u19b5\u19bb\u19ff\u1a07\u1a0e\u1a14\u1a0c\u1a12\u1a10\u1a16\u1a00\u1a08\u1a0f\u1a15\u1a0d\u1a13\u1a11\u1a17\u1ad5\u1add\u1ae4\u1aea\u1ae2\u1ae8\u1ae6\u1aec\u1ad6\u1ade\u1ae5\u1aeb\u1ae3\u1ae9\u1ae7\u1aed\u1996\u1999\u19ae\u199b\u19ad\u0000\u1998\u19af\u1997\u199a\u1995\u1993\u199c\u04d6\u1a1e\u04d7\u04df\u04d1\u1a0a\u19f7\u1a09\u0000\u19f6\u1a0b\u19d7\u19d5\u19f5\u19f3\u19f8\u04d9\u04d8\u04da\u1a2b\u1a30\u1a40\u1a3f\u0000\u0000\u1a2d\u1a41\u1a2c\u1a31\u1a2a\u1a28\u0000\u04dd\u04dc\u04de\u1a9e\u1aa4\u1ab1\u1ab0\u1a7f\u1a80\u1aa0\u1ab2\u1a9f\u1aa5\u1a9d\u1a9a\u1a81\u04d0\u04cf\u04c1\u0000\u0000\u1ae0\u1acd\u1adf\u0000\u1acc\u1ae1\u1a66\u1a64\u1acb\u1ac9\u1ace\u04c5\u04db\u0000' + '\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01eb\u01e6\u01e7\u01e8\u0000\u0000\u0000\u0000\u0000\u0202\u0203\u0204\u0205\u0207\u020a\u0402\u01f9\u02e9\u02ea\u02eb\u02ec\u02f1\u02f2\u02f3\u02f4\u042e\u042f\u0434\u0435\u0286\u0288\u028a\u0436\u01da\u01db\u0000\u0000\u0000\u0000\u0000\u01ec\u042a\u042c\u043a\u043b\u043c\u043e\u043f\u0440\u0443\u02ed\u02ee\u0444\u026a\u0282\u01ed\u0445\u0447\u0449\u044a\u0437\u069e\u038c\u038d\u0275\u0274\u026b\u0421\u040b\u0438\u0439\u0414\u0237\u0448\u0415\u069a\u020d\u0446\u02d6\u02d7\u043d\u02d8\u02d9\u02da\u02db\u02dc\u02dd\u02de\u01e9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u10cb\u1544\u0000\u0000\u1211\u1251\u128a\u12bf\u12f5\u132a\u067a\u0698\u0686\u02fe\u0375\u165c' + '\u10cc\u1101\u117a\u11ce\u1212\u1252\u128b\u12c0\u12f6\u132b\u067b\u0699\u0687\u02ff\u0376\u0000\u1339\u1450\u169e\u18dc\u1496\u150a\u15a6\u15de\u162b\u165d\u1722\u17ad\u17ee\u0000\u0000\u0000\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u177d\u1088\u108a\u108b\u108c\u108d\u108e\u108f\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109a\u109b\u109c\u109d\u109e\u109f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u01bb\u01bc\u01bd\u01be\u01bf\u01c0\u01c1\u01c2\u0096\u0097\u0098\u01c3\u01c4\u009d\u009e\u009f\u00a0\u01c5\u00a1\u00a2\u00a3\u0099\u01c6\u01c7\u01c8\u01c9\u009a\u009b\u008f\u0090\u0091\u0092\u0057\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u1385\u1386\u13d8\u0549\u05d8\u13e9\u13ea\u149a\u05d9\u054a\u14cc\u1505\u1506\u1507\u1501\u1517\u1541\u1542\u15db\u15d6\u05da\u165a\u1679\u05db\u05dc\u171f\u174a\u175d\u175e\u175f\u05dd\u05de\u17cc\u1803\u1805\u05df\u1918\u05e0\u1ac1\u05e1\u1919\u05e2\u15a2\u1347\u13b4\u13d9\u05e3\u1448\u144d\u14af\u14c7\u1628\u1697\u1e7b\u1e82\u1e86\u1e89\u153b\u05e4\u14b6\u1a71\u19c2\u19c4\u1a73\u0675\u05e5\u05e6\u05e7\u05e8\u140b\u1406\u1449\u153c\u1588\u05e9\u074e\u05ea\u1387\u14c6\u05eb\u110a\u110c\u1104\u1106\u117c\u1108\u117d\u11d1\u1214\u1109\u1254\u110b\u11d2\u1255\u12c2\u1103\u1540\u1567\u1569\u156f\u1892\u189d\u189f\u18a1\u1571\u18d9\u18e2\u18e4\u15da\u13d7\u140a\u1627\u153a\u1566\u1568\u156e\u188e\u189c\u189e\u18a0\u1570\u18d5\u18e1\u18e3\u15d5\u13d3\u1405\u1623' + '\u1049\u104a\u104b\u13ff\u13fe\u127a\u104c\u104d\u104e\u10cd\u05ec\u05ed\u0000\u0000\u0000\u0000\u05ee\u05f4\u05f1\u05f6\u05f8\u05fa\u05fb\u05fc\u05fd\u05fe\u05f0\u05f3\u05ff\u0600\u0601\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609\u060a\u060b\u060c\u060d\u060e\u060f\u0610\u05f9\u0611\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619\u061a\u061b\u061c\u061d\u061e\u061f\u0620\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u0630\u0636\u0633\u062f\u0631\u0632\u0634\u0635\u0637\u0638\u0639\u063a\u063b\u063c\u063d\u063e\u063f\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065a\u065b\u065c\u065d\u065e\u065f\u0660\u0661' + '\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u066a\u066b\u066c\u066d\u066e\u066f\u0671\u0672\u0673\u0674\u0697\u069b\u069c\u069d\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a6\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06ca\u06cb\u06cc\u06cd\u06c9\u06ce\u06cf\u06d0\u06d1\u06d3\u06d2\u06d4\u06d5\u06d6\u06d7\u06d8\u06d9\u06db\u06dc\u06dd\u06de\u06df\u06e0\u06e1\u06e2\u06e3\u06e4\u06e5\u06e6\u06e7\u06e8\u06e9\u06ea\u06eb\u06ec\u0688\u06ed\u06ee\u06ef\u06f0\u06f2\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u06fa\u06da\u0682\u068e\u06f1\u06f3\u06fb\u06fd\u06fc\u06fe\u06ff\u0701\u0700\u0702\u0703\u0705\u0707\u0709\u070b\u070c' + '\u0704\u0706\u070d\u070f\u070e\u0710\u0711\u0713\u0712\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071e\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u0731\u0732\u0733\u0734\u0735\u0736\u0738\u073a\u073b\u0730\u0737\u0739\u073c\u073d\u073e\u073f\u0741\u0743\u0745\u0747\u0748\u0749\u074a\u074b\u074c\u074d\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u076e\u076f\u0770\u0771\u0708\u070a\u071d\u071f\u0772\u0773\u0774\u0775\u0776\u0777\u0740\u0742\u0744\u0746\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789' + '\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u038e\u038f\u0390\u0391\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u03da\u03dd\u07af\u07b0\u07b1\u07b2\u07b3\u07b4\u07b5\u07b6\u07b7\u07b8\u07b9\u07ba\u07bb\u07bc\u07bd\u07be\u07bf\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u07f4\u07f5\u07f6\u07f7\u07f8\u07f9\u07fa\u07fb\u07fc\u07fd\u07fe\u07ff\u0800\u0801\u0802\u0803' + '\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819\u081a\u081b\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u082d\u082e\u082f\u0830\u0831\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839\u083a\u083b\u083c\u083d\u083e\u083f\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859\u085a\u085b\u085c\u085d\u085e\u085f\u0860\u0861\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869\u086a\u086b\u086c\u086d\u086e\u086f\u0870\u0871\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879\u087a\u087b\u087c\u087d\u087e\u087f\u0880\u0881\u0882\u0883' + '\u0884\u0885\u0886\u0887\u0888\u0889\u088a\u088b\u088c\u088d\u088e\u088f\u0890\u0891\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899\u089a\u089b\u089c\u089d\u089e\u089f\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u10fb\u1174\u11c8\u120c\u124c\u1285\u12ba\u12f0\u1325\u110d\u1117\u111d\u1123\u1128\u112d\u1132\u1137\u113c\u1141\u117e\u0301\u030c\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0302\u0303\u0304' + '\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030d\u1102\u117b\u11cf\u1213\u1253\u128c\u12c1\u12f7\u132c\u1113\u1119\u111f\u1125\u112a\u112f\u1134\u1139\u113e\u1143\u1181\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u1336\u13b5\u13da\u140c\u144e\u14b0\u14d0\u1508\u1543\u158c\u15a4\u15dc\u1629\u165b\u169b\u1720\u174b\u1760\u17ab\u17ec\u1822\u1893\u18b9\u18da\u18f3\u191a\u1333\u13b1\u13d4\u1407\u144a\u14ac\u14cd\u1502\u153d\u1589\u15a0\u15d7\u1624\u1657\u1698\u171c\u1747\u175a\u17a8\u17e9\u181f\u188f\u18b6\u18d6\u18f0\u1915\u10c9\u1118\u111e\u1124\u1129\u112e\u1133\u1138\u113d\u1142\u117f\u10fc\u1175\u11c9\u120d\u124d\u1286\u12bb\u12f1\u1326\u110e\u10ca' + '\u08b6\u08b7\u08b8\u08ba\u08bb\u08bc\u08bd\u08be\u08bf\u08c0\u08c1\u08c2\u08c3\u08c4\u08c5\u08c6\u08c7\u08c8\u08c9\u08ca\u08cb\u08cc\u08cd\u08ce\u08cf\u08d0\u08d1\u08d2\u08d3\u08d4\u08d5\u08d6\u08d7\u08d8\u08d9\u08da\u08db\u08dc\u08dd\u08de\u08df\u08e0\u08e1\u08e2\u08e3\u08e4\u08e5\u08e6\u08e7\u08e8\u08e9\u08ea\u08eb\u08ec\u08ed\u08ee\u08ef\u08f0\u08f1\u08f2\u08f3\u08f4\u08f5\u08f6\u08f7\u08f8\u08f9\u08fa\u08fb\u08fc\u08fd\u08fe\u08ff\u0900\u0901\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936' + '\u0937\u0938\u0939\u093a\u093b\u093c\u093d\u093e\u093f\u0940\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949\u094a\u094b\u094c\u094d\u094e\u094f\u0950\u0951\u0952\u0953\u0954\u0955\u0956\u0957\u0959\u095a\u095b\u095c\u095d\u095e\u095f\u0960\u0961\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0970\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\u097f\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098d\u098e\u098f\u0990\u0991\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09a9\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b1\u09b2\u09b3\u09b4\u09b5\u09b6\u09b7\u09b8' + '\u09b9\u09ba\u09bb\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c5\u09c6\u09c7\u09c8\u09c9\u09ca\u09cb\u09cc\u09cd\u09ce\u09cf\u09d0\u09d1\u09d2\u09d3\u09d4\u09d5\u09d6\u09d7\u09d8\u09d9\u09da\u09db\u09dc\u09dd\u09de\u09df\u09e0\u09e1\u09e2\u09e3\u09e4\u09e5\u09e6\u09e7\u09e8\u0f5b\u0f5c\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09f0\u09f1\u09f2\u09f3\u09f4\u09f5\u09f6\u09f7\u09f8\u09f9\u09fa\u09fb\u09fc\u09fd\u09fe\u09ff\u0a00\u0a01\u0a02\u0a03\u0a04\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0b\u0a0c\u0a0d\u0a0e\u0a0f\u0a10\u0a11\u0a12\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0fda\u0fdb\u0fdc\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a29\u0a2a\u0a2b\u0a2c\u0a2d' + '\u0a2e\u0a2f\u0a30\u0a31\u0a32\u0a33\u0a34\u0a35\u0a36\u0a37\u0f55\u0f56\u0f57\u0f58\u0f59\u0f5a\u0a38\u0a39\u0a3a\u0a3b\u0a3c\u0a3d\u0a3e\u0a3f\u0a40\u0a41\u0a42\u0a43\u0a44\u0a45\u0a46\u0a47\u0a48\u0a49\u0a4a\u0a4b\u0a4c\u0a4d\u0a4e\u0a4f\u0a50\u0a51\u0a52\u0a53\u0a54\u0a55\u0a56\u0a57\u0a58\u0a59\u0a5a\u0a5b\u0a5c\u0a5d\u0a5e\u0a5f\u0a60\u0a61\u0a62\u0a63\u0a64\u0a65\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a70\u0a71\u0a72\u0a73\u0a74\u0a75\u0a76\u0a77\u0a78\u0a79\u0a7a\u0a7b\u0a7c\u0a7d\u0a7e\u0a7f\u0a80\u0a81\u0a82\u0a83\u0a84\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8e\u0a8f\u0a90\u0a91\u0a92\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7' + '\u0aa8\u0aa9\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab1\u0ab2\u0ab3\u0ab4\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0aba\u0abb\u0abc\u0abd\u0abe\u0abf\u0ac0\u0ac1\u0ac2\u0ac3\u0ac4\u0ac5\u0ac6\u0ac7\u0ac8\u0acb\u0acc\u0acd\u0ace\u0acf\u0ad0\u0ad1\u0ad2\u0ad3\u0ad4\u0ad5\u0ad6\u0ad7\u0ad8\u0ad9\u0ada\u0adb\u0adc\u0add\u0ade\u0adf\u0ae0\u0ae1\u0ae2\u0ae3\u0ae4\u0ae5\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0af0\u0af1\u0af2\u0af3\u0af4\u0af5\u0af6\u0af7\u0af8\u0af9\u0afa\u0afb\u0afc\u0afd\u0afe\u0aff\u0b00\u0b01\u0b02\u0b03\u0b04\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0d\u0b0e\u0b0f\u0b10\u0b11\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u10fd\u1176\u11ca\u120e\u124e\u1287\u12bc\u12f2\u1327\u110f' + '\u10fe\u1177\u11cb\u120f\u124f\u1288\u12bd\u12f3\u1328\u1110\u10ff\u1178\u11cc\u1210\u1250\u1289\u12be\u12f4\u1329\u1111\u0b12\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b29\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b31\u0b32\u0b33\u0b34\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3a\u0b3b\u0b3c\u0b3d\u0b3e\u0b3f\u0b40\u0b41\u0b42\u03ac\u03ad\u0b43\u0b44\u0b45\u0b46\u0b47\u0b48\u0b49\u0b4a\u0b4b\u0b4c\u0b4d\u0b4e\u0b4f\u0b50\u0b51\u0b52\u0b53\u0b54\u0b55\u0b56\u0b57\u0b58\u0b59\u0b5a\u0b5b\u0b5c\u0b5d\u0b5e\u0b5f\u0b60\u0b61\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u0b62\u0b63\u0b64\u0b65\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0b70\u0b71' + '\u0e55\u0e56\u0e57\u0e58\u0e59\u0e5a\u0e5b\u0e5c\u0e5d\u0e5e\u0e5f\u0e60\u0e61\u0e62\u0e63\u0e64\u0e65\u0e66\u0e67\u0e68\u0e69\u0e6a\u0e6b\u0e6c\u0e6d\u0e6e\u0e6f\u0e70\u0e71\u0e72\u0e73\u0e74\u0e75\u0e76\u0e77\u0e78\u0e79\u0e7a\u0e7b\u0e7c\u0e7d\u0e7e\u0e7f\u0e80\u0e81\u0e82\u0e83\u0e84\u0e85\u0e86\u0e87\u0e88\u0e89\u0e8a\u0e8b\u0e8c\u0e8d\u0e8e\u0e8f\u0e90\u0e91\u0e92\u0e93\u0e94\u0e95\u0e96\u0e97\u0e98\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea0\u0ea1\u0ea2\u0ea3\u0ea4\u0ea5\u0ea6\u0ea7\u0ea8\u0ea9\u0eaa\u0eab\u0eac\u0ead\u0eae\u0eaf\u0eb0\u0eb1\u0eb2\u0eb3\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0eba\u0ebb\u0ebc\u0ebd\u0ebe\u0ebf\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0ec5\u0ec6\u0ec7\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0ece\u0ecf\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4' + '\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0eda\u0edb\u0edc\u0edd\u0ede\u0edf\u0ee0\u0ee1\u0ee2\u0ee3\u0ee4\u0ee5\u0ee6\u0ee7\u0ee8\u0ee9\u0eea\u0eeb\u0eec\u0eed\u0eee\u0eef\u0ef0\u0ef1\u0ef2\u0ef3\u0ef4\u0ef5\u0ef6\u0ef7\u0ef8\u0ef9\u0efa\u0efb\u0efc\u0efd\u0efe\u0eff\u0f00\u0f01\u0f02\u0f03\u0f04\u0f05\u0f06\u0f07\u0f08\u0f09\u0f0a\u0f0b\u0f0c\u0f0d\u0f0e\u0f0f\u0f10\u0f11\u0f12\u0f13\u0f14\u0f15\u0f16\u0f17\u0f18\u0f19\u0f1a\u0f1b\u0f1c\u0f1d\u0f1e\u0f1f\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f2a\u0f2b\u0f2c\u0f2d\u0f2e\u0f2f\u0f30\u0f31\u0f32\u0f33\u0f34\u0f35\u0f36\u0f37\u0f38\u0f39\u0f3a\u0f3b\u0f3c\u0f3d\u0f3e\u0f3f\u0f40\u0f41\u0f42\u0f43\u0f44\u0f45\u0f46\u0f47\u0f48\u0f49\u0f4a\u0f4b\u0f4c\u0f4d\u0f4e\u0f4f\u0f50\u0f51\u0f52\u0f53\u0f54' + '\u0b72\u0b73\u0b74\u0b75\u0b76\u0b77\u0b78\u0b79\u0b7a\u0b7b\u0b7c\u0b7d\u0b7e\u0b7f\u0b80\u0b81\u0b82\u0b83\u0b84\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8b\u0b8c\u0b8d\u0b8e\u0b8f\u0b90\u0b91\u0b92\u0b93\u0b94\u0b95\u0b96\u0b97\u0b98\u0b99\u0b9a\u0b9b\u0b9c\u0b9d\u0b9e\u0b9f\u0ba0\u0ba1\u0ba2\u0ba3\u0ba4\u0ba5\u0ba6\u0ba7\u0ba8\u0ba9\u0baa\u0bab\u0bac\u0bad\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0bba\u0bbb\u0bbc\u0bbd\u0bbe\u0bbf\u0bc0\u0bc1\u0bc2\u0bc3\u0bc4\u0bc5\u0bc6\u0bc7\u0bc8\u0bc9\u0bca\u0bcb\u0bcc\u0bcd\u0bce\u0bcf\u0bd0\u0bd1\u0bd2\u0bd3\u0bd4\u0bd5\u0bd6\u0bd7\u0bd8\u0bd9\u0bda\u0bdb\u0bdc\u0bdd\u0bde\u0bdf\u0be0\u0be1\u0be2\u0be3\u0be4\u0be5\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0bf0\u0bf1' + '\u0bf2\u0bf3\u0bf4\u0394\u0395\u0396\u0398\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a2\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u0bf5\u0bf6\u0bf7\u0bf8\u0bf9\u0bfa\u0bfb\u0bfc\u0bfd\u0bfe\u0bff\u0c00\u0c01\u0c02\u0c03\u0c04\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0d\u0c0e\u0c0f\u0c10\u0c11\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c29\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0404\u0405\u0406\u0407\u0c34\u0c35\u0c36\u0c37\u0c38\u0c39\u0c3a\u0c3b\u0c3c\u0c3d\u0c3e\u0c3f\u0c40\u0c41\u0c42\u0c43\u0c44\u0c45\u0c46\u0c47\u0c48\u0c49\u0c4a\u0c4b\u0c4c\u0c4d\u0c4e\u0c4f\u0c50\u0c51\u0c52\u0c53\u0392\u0393\u0c54\u0c55' + '\u0c56\u0c57\u0c58\u0c59\u0c5a\u0c5b\u0c5c\u0c5d\u0c5e\u0c5f\u0c60\u0c61\u06b9\u0c62\u0c63\u0c64\u0c65\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0c70\u0c71\u0c72\u0c73\u0c74\u0c75\u0c76\u0c77\u0c78\u0c79\u0c7a\u0c7b\u0c7c\u0c7d\u0c7e\u0c7f\u0c80\u0c81\u0c82\u0c83\u0c84\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8d\u0c8e\u0c8f\u0c90\u0c91\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0ca9\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb4\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cba\u0cbb\u0cbc\u0cbd\u0cbe\u0cbf\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0cc5\u0cc6\u0cc7\u0cc8\u023f\u0689\u068a\u0cc9\u0cca\u0ccb\u0ccc\u0ccd\u0cce\u0ccf\u0cd0\u0cd1' + '\u0cd2\u0cd3\u0cd4\u0cd5\u0cd6\u0cd7\u0cd8\u0cd9\u0cda\u0cdb\u0cdc\u0cdd\u0cde\u0cdf\u0ce0\u0ce1\u0ce2\u0ce3\u0ce4\u0ce5\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0cf0\u0cf1\u0cf2\u0cf3\u0cf4\u0cf5\u0cf6\u0cf7\u0cf8\u0cf9\u0cfa\u0cfb\u0cfc\u0cfd\u0cfe\u0cff\u0d00\u0d01\u0d02\u0d03\u0d04\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0d\u0d0e\u0d0f\u0d10\u0d11\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d29\u0d2a\u0d2b\u0d2c\u0d2d\u0d2f\u0d2e\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d3a\u0d3b\u0d3c\u0d3d\u0d3e\u0d3f\u0d40\u0d41\u0d42\u0d43\u0d44\u0d45\u0d46\u0d47\u0d48\u0d49\u0d4a\u0d4b\u0d4c\u0d4d\u0d4e\u0d4f\u0d50\u0d51' + '\u0d52\u0d53\u0d54\u0d55\u0d56\u0d57\u0d58\u0d59\u0d5a\u0d5b\u0d5c\u0d5d\u0d5e\u0d5f\u0d60\u0d61\u0d62\u0d63\u0d64\u0d65\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0d70\u0d71\u0d72\u0d73\u0d74\u0d75\u0d76\u0d77\u0d78\u0d79\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d80\u0d81\u0d82\u0d83\u0d84\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d97\u0d98\u0d99\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db2\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbc\u0dbd\u0dbe\u0dbf\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0000\u0000\u0dc6\u0dc7\u0dc8\u0dc9\u0dca\u0dcb\u0dcc\u0dcd\u0dce\u0dcf' + '\u0dd0\u0dd1\u0dd2\u0dd3\u0dd4\u0dd5\u0dd6\u0dd7\u0dd8\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0ddf\u0de0\u0de1\u0de2\u0de3\u0de4\u0de5\u0000\u0de6\u0de7\u0de8\u0de9\u0dea\u0deb\u0dec\u0ded\u0dee\u0def\u0df0\u0df1\u0df2\u0df3\u0df4\u0df5\u0df6\u0df7\u0df8\u0df9\u0dfa\u0dfb\u0dfc\u0dfd\u0dfe\u0dff\u0e00\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e33\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e3b\u0e3c\u0e3d\u0e3e\u0e3f\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e' + '\u1d1b\u1d1d\u1d1f\u1d21\u1d23\u1d25\u1d27\u1d29\u1d2b\u1d2d\u1d2f\u1d31\u1d33\u1d35\u1d37\u1d39\u1d3b\u1d3d\u1d3f\u1d41\u1d43\u1d45\u1d47\u1d49\u1d4b\u1d4d\u1d4f\u1d51\u1d53\u1d55\u1d57\u1d59\u1d5b\u1d5d\u1d5f\u1d61\u1d63\u1d65\u1d67\u1d69\u1d6b\u1d6d\u1d6f\u1d71\u1d73\u1d75\u1d77\u0000\u1d1a\u1d1c\u1d1e\u1d20\u1d22\u1d24\u1d26\u1d28\u1d2a\u1d2c\u1d2e\u1d30\u1d32\u1d34\u1d36\u1d38\u1d3a\u1d3c\u1d3e\u1d40\u1d42\u1d44\u1d46\u1d48\u1d4a\u1d4c\u1d4e\u1d50\u1d52\u1d54\u1d56\u1d58\u1d5a\u1d5c\u1d5e\u1d60\u1d62\u1d64\u1d66\u1d68\u1d6a\u1d6c\u1d6e\u1d70\u1d72\u1d74\u1d76\u0000\u1609\u1608\u160b\u1736\u1794\u1398\u180f\u152c\u152b\u15c9\u15c8\u1938\u1937\u13a6\u164e\u13a2\u13ab\u18ab\u18ce\u18cd\u18ac\u152e\u152d\u1744\u148d\u1791\u170c\u1491\u158e\u1896\u17d9\u1936' + '\u1af6\u1af5\u1af8\u1af7\u1afa\u1af9\u1afc\u1afb\u1afe\u1afd\u1b02\u1b01\u1b04\u1b03\u1b06\u1b05\u1b08\u1b07\u1b0a\u1b09\u1b0c\u1b0b\u1b11\u1b10\u1b13\u1b12\u1b15\u1b14\u1b1b\u1b1a\u1b1d\u1b1c\u1b1f\u1b1e\u1b21\u1b20\u1b23\u1b22\u1b25\u1b24\u1b27\u1b26\u1b29\u1b28\u1b2b\u1b2a\u1b2d\u1b2c\u1b2f\u1b2e\u1b65\u1b64\u1b67\u1b66\u1b00\u1aff\u1b0f\u1b0e\u1b17\u1b16\u1b19\u1b18\u1b31\u1b30\u1b33\u1b32\u1b39\u1b38\u1b3b\u1b3a\u1b3d\u1b3c\u1b45\u1b44\u1b49\u1b48\u1b4b\u1b4a\u1b4d\u1b4c\u1b4f\u1b4e\u1b51\u1b50\u1b53\u1b52\u1b59\u1b58\u1b5d\u1b5c\u1b5f\u1b5e\u1b61\u1b60\u1b69\u1b68\u1b6b\u1b6a\u1b6d\u1b6c\u1b0d\u0e4f\u0e50\u0e51\u0e52\u0e53\u0e54\u1b37\u1b36\u1b57\u1b56\u0058\u0008\u0005\u1b43\u1b42\u0000\u0000\u0000\u0000\u0000\u0295\u027d\u027e\u02e4\u104f\u0296\u02e5' + '\u1d7a\u1d7e\u1d82\u1d86\u1d8a\u1d8e\u1d92\u1d9a\u1d9e\u1da2\u1da6\u1daa\u1daf\u1db7\u1dbb\u1dbf\u1dc3\u1dc7\u1dcb\u1dd3\u1dd7\u1ddb\u1ddf\u1de3\u1de7\u1deb\u1def\u1df3\u1df7\u1dfb\u1dff\u1e07\u1e0b\u1d96\u1db3\u1dcf\u1e03\u1e0f\u0000\u1e15\u0000\u0000\u0000\u0000\u0000\u1e1f\u0000\u0000\u2333\u2334\u2335\u2336\u2337\u2338\u2339\u233a\u233b\u233c\u233d\u233e\u2340\u2341\u2342\u2343\u2344\u2345\u2346\u2347\u2348\u2349\u234a\u234b\u234c\u234d\u234e\u234f\u2350\u2351\u2352\u2353\u2354\u2355\u2356\u2357\u2359\u235a\u235b\u235c\u235d\u235e\u235f\u2360\u2361\u2362\u2363\u2364\u2365\u2366\u2367\u2368\u2369\u236a\u233f\u2358\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u236b\u04b5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u237c\u2391\u23a2\u23ab\u23ba\u23e0\u23f1\u23fa\u2410\u2419\u2422\u2453\u2472\u2481\u248a\u24ac\u24b5\u24c5\u24f5\u24a0\u24a1\u24a2\u24a3\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u24f9\u24fa\u24fb\u24fc\u24fd\u24fe\u24ff\u0000\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u0000\u2507\u2508\u2509\u250a\u250b\u250c\u250d\u0000\u250e\u250f\u2510\u2511\u2512\u2513\u2514\u0000\u2515\u2516\u2517\u2518\u2519\u251a\u251b\u0000\u251c\u251d\u251e\u251f\u2520\u2521\u2522\u0000\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u0000\u252a\u252b\u252c\u252d\u252e\u252f\u2530\u0000\u1b7c\u1b80\u1b83\u1b93\u1bae\u1bbb\u1bed\u1c00\u1c14\u1c1b\u1c30\u1c44\u1c4d\u1c55\u1c5f\u1c84\u1c9e\u1ca9\u1cc0\u1cc5\u1d0c\u1c57\u1b6f\u1ba2\u1bea\u1c7c\u1cdf\u1ce8\u1ced\u1cf7\u1cfc\u1d05' + '\u044b\u044c\u03c6\u03c7\u03c8\u03c9\u044d\u044e\u044f\u03ca\u03cb\u0450\u03cc\u03cd\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u020f\u0283\u02e6\u045a\u045b\u03ce\u03cf\u045c\u045d\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u02df\u02e0\u02e1\u02e2\u0277\u1cc9\u0297\u02a1\u021b\u02a2\u021a\u0238\u0430\u0431\u0432\u0409\u020b\u020c\u0298\u02e3\u0403\u040d\u0210\u021c\u02f5\u020e\u045e\u045f\u0460\u0461\u0462\u023a\u041d\u0433\u021d\u040c\u021e\u021f\u0ac9\u0aca\u0422\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\ua8ab\ua910\ua8b2\ua8b1\ua8b0\ua8bf\ua8db\ua8e6\ua8e9\ua8ea\ua90a\ua90c\ua950\ua951\ua954\ua955\ua952\ua956\ua966\ua96b\ua97d\ua97c\ua986\ua985\ua99f\ua9ad\u0000\ua9b9\ua9bd\ua9cb\ua9e9\ua9ef\ua9f3\ua9f7\ua9f8\uaa15\uaa22\uaa23\ua8a6\uaa2b\uaa2f\uaa3a\uaa52\uaa63\uaa74\uaa75\uaa92\uaaa0\uaaad\uaab3\uaab1\uaab4\uaab5\uaab2\uaaba\uaabb\uaabc\uaac2\uaacd\uaacc\uaacf\uaad8\uaae3\uaae4\uaae5\uaaf8\uab02\uab0c\uab0b\uab12\uab13\uab15\uab29\uab37\uab3b\uab45\uab4b\uab4c\uab4d\uab56\uab69\uab6a\uab6c\uab6d\uab70\uab72\uab73\uab84\uab8a\uab92\uab9e\uaba0\uaba2\uaba3\uaba6\uaba5\uabaa\uabac\uabb1\uabb3\uabbb\uabbf\uabc4\uabc6\uabcc\uabcf\uabd5\uabdc\uabdd\uabdf\uabe0\uabe3\uabe5\uabea\uabeb\uabec\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\ua897\ua8a5\ua8aa\ua8ad\ua8ae\ua8b5\ua8b7\ua8bb\ua8bd\ua8ce\ua8d2\ua8d5\ua8da\ua8dc\ua8de\ua8e5\ua8e7\ua8e8\ua8f1\ua8fa\ua8fc\ua8fe\ua8ff\ua902\ua909\ua90b\ua90f\ua911\ua913\ua914\ua926\ua92a\ua935\ua936\ua937\ua938\ua93a\ua942\ua946\ua948\ua94e\ua94f\ua953\ua957\ua95d\ua95e\ua962\ua963\ua965\ua967\ua968\ua96c\ua96e\ua976\ua977\ua979\ua97a\ua97b\ua97e\ua980\ua984\ua99a\ua99d\ua99e\ua9ab\ua9ac\ua9b1\ua9b3\ua9b5\ua9b6\ua9b8\ua9bb\ua9c7\ua9c9\ua9d0\ua9e3\ua9e4\ua9e8\ua9eb\ua9ee\ua9f0\ua9f1\ua9f2\ua9f4\ua9f5\uaa13\uaa20\uaa25\uaa26\uaa27\uaa28\uaa29\uaa2a\uaa2e\uaa36\uaa39\uaa44\uaa45\uaa47\uaa48\uaa49\uaa4a\uaa51\uaa53\uaa59\uaa5a\uaa5b\uaa5c\uaa62\uaa69\uaa6a\uaa6b\uaa73\uaa86\uaa87\uaa8c\uaa90\uaa91\uaa99\uaa9f\uaaae\uaab0\uaab9\uaabf\uaac1\uaac5\uaac6\uaac7' + '\uaacb\uaace\uaad2\uaad4\uaad6\uaad7\uaad9\uaadb\uaadc\uaadd\uaadf\uaae0\uaaf7\uaafa\uaafe\uab00\uab01\uab0a\uab0f\uab14\uab16\uab2a\uab2b\uab2d\uab2e\uab2f\uab38\uab39\uab3a\uab3d\uab3f\uab46\uab48\uab49\uab55\uab5a\uab5e\uab60\uab63\uab6b\uab6e\uab71\uab7c\uab7f\uab83\uab89\uab8d\uab8e\uab8f\uab90\uab93\uab94\uab97\uab9f\uaba1\uaba4\uabab\uabad\uabae\uabb2\uabb4\uabb5\uabb7\uabb8\uabb9\uabba\uabbc\uabc0\uabc5\uabc8\uabcb\uabcd\uabce\uabd0\uabd2\uabd3\uabd4\uabd6\uabd7\uabd8\uabd9\uabdb\uabde\uabe2\uabe9\uabed\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0fdd\u0fde\u0fdf\u0fe0\u0fe1\u0fe2\u0fe3\u0fe4\u0fe5\u0fe6\u0fe7\u0fe8\u0000\u0000\u0000\u0000' + '\u01dd\u022b\u029c\u0441\u100d\u105d\u36bd\u10bf\u03db\u03de\u03e0\u03e2\u03e4\u03e7\u03ea\u03ec\u03ee\u03f0\u100e\u1010\u03f2\u03f5\u03f8\u03fa\u03fc\u03fd\u03fe\u03ff\u0211\u02f6\u02f7\u02f8\u1011\u10f1\u116a\u11be\u1202\u1242\u127b\u12b0\u12e6\u131b\u01b5\u01b6\u01b7\u01b8\u01b9\u01ba\u0212\u105f\u1060\u1061\u1062\u1063\u100f\u1012\ua903\ua905\ua906\u105e\u375d\u0442\u1013\u1014\u0000\u364a\u364b\u3655\u3656\u365e\u365f\u3668\u3669\u3671\u3672\u367a\u367d\u3685\u3688\u3694\u3697\u36a0\u36a3\u36a7\u36aa\u36b0\u36b3\u36b9\u36bc\u36c2\u36c5\u36c8\u36cb\u36d0\u36d3\u36d6\u36d9\u36dd\u36e0\u36e5\u36e6\u36e9\u36ec\u36ef\u36f4\u36f7\u36fc\u3701\u3706\u370a\u370e\u3714\u3717\u3719\u3721\u3724\u3726\u372e\u3731\u3733\u373b\u373e\u3740\u374b\u374e\u3750\u3759\u3763' + '\u376b\u376f\u3776\u377c\u377d\u3785\u3786\u378d\u378e\u3794\u3799\u37a0\u37a7\u37ae\u37b3\u37b4\u37b9\u37bd\u37c2\u37c7\u3662\u3679\u369f\u0000\u0000\u00a4\u00a6\u04e0\u04e1\u1064\u1065\u3790\u0213\u3646\u3648\u3651\u3653\u365a\u365c\u3664\u3666\u366d\u366f\u3677\u367c\u3683\u3687\u3692\u3696\u369d\u36a2\u36a5\u36a9\u36ae\u36b2\u36b7\u36bb\u36c0\u36c4\u36c6\u36ca\u36ce\u36d2\u36d4\u36d8\u36db\u36df\u36e1\u36e3\u36e8\u36ea\u36ee\u36f2\u36f6\u36fa\u36ff\u3704\u3708\u370c\u3712\u3716\u3718\u371f\u3723\u3725\u372c\u3730\u3732\u3739\u373d\u373f\u3749\u374d\u374f\u3757\u3761\u3769\u376d\u3774\u3778\u377a\u3781\u3783\u3789\u378b\u3792\u3797\u379e\u37a5\u37ac\u37b0\u37b1\u37b8\u37bc\u37c0\u37c5\u3661\u3676\u369c\u37b6\u37bb\u37bf\u37c4\u0214\u1066\u1068\u1069\u36ac' + '\u0000\u0000\u0000\u0000\u0000\u37c8\u37ca\u37cc\u37ce\u37d0\u37d1\u37d3\u37d5\u37d6\u37d9\u37dd\u37df\u37e1\u37e2\u37e6\u37e7\u37e8\u37e9\u37ea\u37ec\u37ed\u37f1\u37f3\u37f6\u37f8\u37fb\u37fd\u37fe\u3800\u3801\u3802\u3803\u3805\u3808\u3809\u380c\u380f\u37cf\u37db\u37e3\u3810\u37f7\u37d4\u0000\u3431\u3436\u35a3\u3439\u35a7\u35aa\u343e\u3443\u3446\u35af\u35b2\u35b5\u35b8\u35bb\u35be\u3492\u344b\u3450\u3455\u349f\u3458\u345d\u3460\u3466\u346c\u346f\u3475\u347a\u347f\u3484\u3511\u3514\u3517\u351a\u351d\u3520\u3523\u3526\u3529\u352c\u352f\u3532\u3535\u3538\u353b\u353e\u3541\u3544\u3547\u354a\u354d\u350e\u348a\u348c\u35d2\u35d4\u35d9\u35dc\u35e2\u35e7\u35ea\u3496\u35ef\u35f2\u3498\u349a\u349d\u34a2\u34a4\u34a9\u34ac\u34af\u34b1\u34b3\u34b5\u34b7\u34bb\u34c0\u34cb' + '\u34d3\u34d9\u3605\u3607\u34e5\u34e7\u34e9\u355e\u3560\u3564\u356e\u3570\u3573\u357e\u3582\u0000\u1015\u1016\ua899\ua8b9\ua89d\ua928\ua89f\ua8a8\ua8a1\uaa4b\ua8af\ua8a3\ua89a\ua93c\ua92c\ua8be\u37c9\u37eb\u37e0\u37d8\u37f9\u37fa\u37f5\u37f4\u380e\u37f2\u380a\u380d\u37cd\u37dc\u37fc\u37ff\u3806\u3807\u3804\u380b\u37cb\u37d2\u37da\u37de\u37ee\u37ef\u37f0\u37d7\u37e4\u37e5\u3811\u3812\u0fe9\u0fea\u0feb\u0fec\u0fed\u0fee\u0fef\u0ff0\u0ff1\u0ff2\u0ff3\u0ff4\u0ff5\u0ff6\u0ff7\u0ff8\u0ff9\u0ffa\u0ffb\u0ffc\u0ffd\u0ffe\u0fff\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3691\u36b6\u36bf\u36f1\u3703\u3711\u371e\u372b\u3738\u3748\u3768\u3791\u3796\u379d\u37a4\u37ab' + '\u032f\u0331\u0333\u0335\u0337\u0339\u033b\u033d\u0341\u0344\u0346\u0348\u034a\u034c\u0330\u0332\u0334\u0336\u0338\u033a\u033c\u033e\u0342\u0345\u0347\u0349\u034b\u034d\u0343\u033f\u0340\u0000\u034e\u0352\u0350\u035e\u0353\u0358\u034f\u0357\u0351\u035a\u0362\u0367\u0366\u0364\u0371\u035f\u0361\u0365\u0363\u036a\u035c\u0368\u036f\u036b\u0359\u0354\u035d\u0360\u0369\u0355\u0370\u035b\u036c\u0356\u036d\u036e\ua91c\ua96d\ua9b2\uaa94\u1112\u1180\u11d3\u1215\u1256\u128d\u12c3\u12f8\u1731\u1184\u1187\u118a\u118d\u1190\u1192\u1194\u1196\u1198\u11d4\u11d6\u11d8\u11d9\u11da\u11db\u3432\u343a\u343f\u3447\u344c\u3451\u3459\u3461\u3467\u3470\u3476\u347b\u3480\u3485\u3434\u343c\u3441\u3449\u344e\u3453\u345b\u3463\u3469\u3472\u3478\u347d\u3482\u3487\u3473\u346a\u3464\u1017' + '\ua898\ua8b8\ua89c\ua927\ua8ba\ua8d8\ua89b\ua8d6\ua8b3\ua904\ua9ca\uaa14\ua9f6\ua9d1\uab64\ua92b\ua9bc\ua9d8\ua9cc\uaa78\ua917\uaa2d\uab30\uaa7e\ua8f3\uaa89\uaa4c\ua943\uab51\ua8cd\ua90d\ua9fc\uab98\ua8c4\ua8dd\ua9e5\ua89e\ua8a7\ua8a0\ua964\ua916\ua900\ua94a\ua947\uaa60\ua8c3\uab32\ua908\ua939\u11dc\u11dd\u11de\u11df\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1257\u1147\u119b\u11e1\u1221\u1259\u128f\u12c5\u12fa\u132e\u1115\u111b\u1121\u1520\u1484\u1485\u15fb\u364c\u3657\u3660\u366a\u3673\u367b\u3686\u3695\u36a1\u36a8\u36b1\u36ba\u36c3\u36c9\u36d1\u36d7\u36de\u36e7\u36ed\u36f5\u36fd\u3702\u3707\u370b\u370f\u3715\u3722\u372f\u373c\u374c\u375a\u3764\u376c\u3770\u3777\u377e\u3787\u378f\u3795\u379a\u37a1\u37a8\u37af\u37b5\u37ba\u37be\u37c3\ua8c2' + '\u364e\u364f\u3650\u364d\u3658\u3659\u3663\u366c\u366b\u3675\u3674\u3680\u3681\u3682\u367e\u367f\u3689\u368a\u368c\u368b\u368d\u368e\u368f\u3690\u3698\u3699\u369a\u369b\u36a4\u36ad\u36ab\u36b4\u36b5\u36be\u36cc\u36cd\u36da\u36f0\u36f8\u36f9\u36fe\u3710\u371d\u371a\u371b\u371c\u3727\u3728\u3729\u372a\u3735\u3736\u3734\u3737\u3746\u3743\u3744\u3747\u3745\u3741\u3742\u3751\u3752\u3756\u3753\u3754\u3755\u375b\u375c\u375e\u375f\u3760\u3765\u3766\u3767\u3772\u3773\u3771\u377f\u3780\u3788\u379b\u379c\u37a3\u37a2\u37a9\u37aa\u37b7\u10ce\u1148\u119c\u11e2\u1222\u125a\u1290\u12c6\u12fb\u132f\u1116\u111c\u1122\u1127\u112c\u1131\u1136\u113b\u1140\u1145\u1183\u1186\u1189\u118c\u118f\u1522\u1424\u1390\u13be\u16f1\u172b\u1428\u1429\u142a\u156d\ua969\ua9c0\ua93b\ua9be\ua9d9' + '\u1729\u1673\u1a4f\u1637\u15b4\u15b5\u1639\u14e6\u13ec\u15b6\u172c\u1674\u1a50\u1a51\u163a\u15b7\u1523\u15b8\u163b\u14e7\u1804\u1a52\u163d\u1427\u15ba\u14bc\u1678\u1a53\u163e\u13ef\u15bb\u163f\u13f0\u1635\u15bd\u1640\u13f1\u1636\u15be\u1633\u1634\u172a\u15bf\u1642\u14e8\u177a\u177b\u177c\u1730\u167a\u1a54\u1643\u1732\u167b\u1a55\u1644\u15c1\u1645\u1733\u167c\u1a56\u1646\u15c2\u1647\u15c3\u1648\u1384\u13bf\u13ed\u13ee\u13eb\u13f2\u1426\u14e9\u151f\u1521\u156c\u15b9\u15bc\u15c0\u15f7\u15f8\u15f9\u15fc\u1638\u163c\u1641\u172d\u1728\u172e\u172f\u17cd\u17cf\u18c9\u189b\u1388\u1146\u119a\u11e0\u1220\u1258\u128e\u12c4\u12f9\u132d\u1114\u111a\u1120\u1126\u112b\u1130\u1135\u113a\u113f\u1144\u1182\u1185\u1188\u118b\u118e\u1191\u1193\u1195\u1197\u1199\u11d5\u11d7\u14e5' + '\u3cee\u3cf4\u3cf5\u3d03\u3d04\u3d1d\u3d2e\u3d3c\u3d3d\u3d3e\u3d43\u3d44\u3d46\u3d47\u3d48\u3d49\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d5b\u3d5c\u3d5d\u3d64\u3d65\u3d66\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d74\u3d75\u3d76\u3d78\u3d7c\u3d7d\u3d82\u3d86\u3d9a\u3da3\u3da4\u3da8\u3dab\u3db7\u3db9\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f75\u3fbf\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u401d\u401e\u401f\u4020\u4021' + '\u4022\u4023\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u408e\u408f\u4090\u4091\u409f\u40a0\u40a7\u40a8\u40ac\u40ad\u40ae\u40b0\u40b1\u40b2\u40b7\u40b8\u40bc\u40be\u40cb\u40d8\u40de\u40e2\u40e8\u40ed\u40ee\u40f1\u40f2\u40f3\u4102\u4103\u4104\u410a\u4112\u4122\u4128\u4129\u412b\u412c\u412d\u4131\u4132\u413b\u4144\u4146\u4149\u4153\u4154\u415d\u4163\u4164\u4165\u4166\u4167\u416b\u416c\u4178\u4179\u417a\u417e\u4184\u4185\u4187\u4189\u41a3\u41b0\u41c2\u41c3\u41c4\u41d3\u41d4\u41e7\u41e8\u41fe\u41ff\u4200\u4201\u4202\u4203\u4213\u4214\u4215\u4216\u4217\u422e\u422f\u4230\u4231\u4232\u423d\u423e\u423f\u4240\u4241\u4242\u4248\u4249\u424a\u424b\u424c\u4256\u4257\u425d\u425e' + '\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4274\u427a\u427b\u427c\u427e\u427f\u4280\u4282\u4283\u4290\u4298\u4299\u429a\u42a7\u42a8\u42b4\u42b5\u42b6\u42c3\u42ca\u42cb\u42cc\u42d5\u42da\u42ea\u42f4\u42f5\u42f6\u42f7\u42f8\u4313\u4316\u4318\u431c\u431e\u4321\u8136\u432e\u432f\u433a\u433c\u433d\u433e\u4342\u4348\u434d\u4353\u435b\u4364\u4365\u4371\u437f\u4384\u4385\u4390\u4396\u43aa\u43ab\u43ac\u43b1\u43b2\u43b3\u43b8\u43b9\u43c0\u43c6\u43c7\u43c8\u43d3\u43d6\u43dc\u43dd\u43e0\u43e2\u43e4\u43ea\u43f4\u43f7\u43f8\u43fc\u4404\u4405\u440a\u440c\u4412\u4418\u441b\u441e\u8f66\u443e\u443f\u4440\u445b\u445c\u445d\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb' + '\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4754\u4755\u4756\u4757\u4758' + '\u4759\u475a\u475b\u475c\u475d\u4776\u4777\u4778\u4779\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u479e\u479f\u47a0\u47aa\u47ab\u47b7\u47b8\u47b9\u47c2\u47c6\u47c7\u47cd\u47ce\u47d7\u4291\u47df\u47fb\u47fc\u47ff\u4806\u481a\u481e\u482b\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u4899\u489a\u489b\u489c\u489d\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a2f\u4a30\u4a31\u4a32\u4a35\u4a36\u4a37\u4a40\u4a41' + '\u4a45\u4a4a\u4a4c\u4a5e\u4a64\u4a6d\u4a73\u4a74\u4a80\u4a86\u4a8b\u4a90\u4a91\u4a93\u4aa2\u4aab\u4aac\u4aad\u4ab4\u4ab5\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4acf\u4ad0\u4ada\u4adb\u4adc\u4ae4\u4ae8\u4af0\u4af8\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4b3a\u4bf4\u4bf5\u4bf6\u4bf7\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d' + '\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d44\u4d45\u4d4b\u4d4c\u4d50\u4d51\u4d52\u4d53\u4d5b\u4d5c\u4d5d\u4d61\u4d65\u4d69\u4d6a\u4d75\u4d7b\u4d7c\u4d86\u4d8a\u4d8e\u4d8f\u4d95\u4d98\u4d9c\u4d9f\u4da6\u4da8\u4dad\u4dae\u4db4\u4db5\u4dbf\u4dc0\u4dc1\u4dc2\u4dd2\u4ddc\u4ddd\u4dde\u4ddf\u4df4\u4df5\u4df6\u4df7\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e17\u4e18\u4e21\u4e22\u4e23\u4e24\u4e25\u4e31\u4e32\u4e33\u4e34\u4e3a\u4e3b\u4e3c\u4e41\u4e47\u4e48\u4e4b\u4e52\u4e54\u4e5b\u4e62\u4e75\u4e77\u4e7b\u4e7c\u4e83\u4e89\u4e8b\u4e8c' + '\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e98\u4e99\u4e9d\u4e9e\u4ea6\u4ea8\u4ea9\u4eb0\u4eb8\u4eb9\u4eba\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ece\u4ed4\u4ed5\u4eda\u4edb\u4ede\u4edf\u4ee0\u4ee5\u4ee6\u4eeb\u4ef1\u4ef3\u4efd\u4efe\u4eff\u4f00\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4ef4\u4f34\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f8c\u4f8d\u4f8e\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5069\u506a\u506b\u506c\u506d\u506e\u506f' + '\u5070\u5071\u5072\u5073\u5074\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b8\u50b9\u50ba\u50bb\u50bc\u50c0\u50c1\u50c2\u50c7\u50c8\u50c9\u50ca\u50d2\u50d6\u50d7\u50df\u50e4\u50ea\u50f0\u50fa\u50fb\u50fd\u50ff\u5104\u5107\u510e\u5118\u5119\u511d\u511e\u511f\u5128\u5129\u512a\u512b\u512c\u512d\u513a\u513b\u513c\u513d\u5149\u514a\u514b\u514c\u514d\u514e\u5159\u515a\u5166\u5167\u5168\u5169\u516a\u516b\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5186\u5187\u5188\u5189\u518a\u5196\u5197\u5198\u5199\u51a5\u51a6\u51ab\u51ac\u51ad\u51b1\u51b2\u51b8\u51b9\u51ba\u51bb\u51ca\u51cb\u51cc\u51cd\u51d6\u51d7\u51d8\u51e8\u51e9\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u5203\u5204\u5205\u5206' + '\u5207\u5208\u5209\u5213\u5214\u5215\u5216\u5217\u5225\u5226\u5227\u5228\u5229\u5232\u5233\u5234\u5235\u523e\u524c\u524d\u524e\u524f\u525c\u525d\u525e\u5265\u5266\u5267\u5268\u526d\u5271\u5277\u527c\u528d\u528f\u5290\u5297\u5298\u529b\u52a0\u52a7\u52a8\u52a9\u52aa\u52af\u52b0\u52bb\u52bc\u52bd\u52be\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ce\u52cf\u52d6\u52d7\u52d8\u52de\u52df\u52e0\u52e5\u52e6\u52e7\u52eb\u52f0\u52f1\u52f6\u52ff\u5307\u530d\u5311\u5312\u5313\u5314\u531c\u531e\u531f\u5323\u5325\u5326\u5329\u532c\u5335\u5336\u5340\u5341\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u535b\u535c\u536b\u536c\u536d\u536e\u536f\u5370\u5379\u537a\u537b\u537c\u537d\u5383\u5387\u5388\u5389\u5391\u5392\u5395\u5396\u5399\u539b\u539e\u53a4\u53a9\u53bc\u53bd\u53be\u53bf' + '\u53c0\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u548f\u54ce\u54cf\u54d0\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55e7\u55e8\u55e9\u55ea' + '\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u564e\u564f\u5650\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u5679\u567a\u567f\u5680\u5681\u5682\u5683\u5687\u5688\u5689\u5691\u5692\u5698\u56a5\u56a6\u56ab\u56ac\u56ad\u56af\u56b1\u56b2\u56b3\u56b8\u56bc\u56c3\u56ca\u56cf\u56d0\u56d4\u56de\u56e3\u56e4\u56e8\u56e9\u56fd\u56fe\u56ff\u5716\u5717\u5718\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u589a\u589b\u589c\u589d\u589e\u589f\u58a0' + '\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5946\u5900\u5901\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a62\u5a63\u5a6d\u5a6e\u5a6f\u5a73\u5a74\u5a75\u5a76\u5a86\u5a87\u5a88\u5a8c\u5a8d\u5a90\u5a92\u5a93\u5a94\u5a96\u5aa1' + '\u5aa2\u5aa6\u5aa7\u5aae\u5aaf\u5ab0\u5ab1\u5ab9\u5aba\u5abb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5af2\u5af3\u5af4\u5af5\u5af6\u5afa\u5afb\u5afc\u5afd\u5b06\u5b07\u5b08\u5b0d\u5b0e\u5b0f\u5b10\u5b16\u5b17\u5b1b\u5b1c\u5b1f\u5b23\u5b2b\u5b31\u5b32\u5b34\u5b35\u5b38\u5b3b\u5b3d\u5b42\u5b45\u5b46\u5b4f\u5b50\u5b51\u5b52\u5b57\u5b5b\u5b5d\u5b64\u5b68\u5b75\u5b6d\u5b76\u5b77\u5b78\u5b81\u5b82\u5b83\u5b86\u5b8d\u5b8e\u5ba7\u5ba8\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bd9\u5bda\u5bdb\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d' + '\u5c6e\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c9f\u5ca0\u5ca1\u5ca2\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5ce3\u5ce4\u5ce5\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf6\u5cf7\u5cfe\u5d00\u5d01\u5d05\u5d09\u5d0e\u5d20\u5d21\u5d29\u5d33\u5d34\u5d3b\u5d3c\u5d41\u8061\u5d46\u5d47\u5d49\u5d4a\u5d4b\u5d4e\u5d4f\u5d6e\u5d96\u5d97\u5d98\u5d99\u5d9a\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f90\u5f23\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98' + '\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u6a38\u601a\u601b\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u613b\u60ef\u60f0\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u60f1\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61d2\u61d3' + '\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u6206\u6207\u61f6\u6211\u6212\u6217\u6218\u6219\u621a\u622d\u622e\u6233\u6234\u6235\u6236\u623a\u623b\u623c\u623d\u623e\u623f\u6247\u6248\u6249\u624a\u624b\u6254\u6255\u6256\u6257\u625f\u6260\u6261\u6262\u6263\u62da\u6264\u626e\u626f\u6270\u6271\u6272\u6273\u6279\u627a\u627b\u6282\u6283\u628b\u628c\u6290\u6291\u6292\u6293\u6297\u6298\u629a\u629b\u629c\u62a1\u62a3\u62a4\u62ab\u62ac\u62ad\u62b2\u62b3\u62b9\u62be\u62c2\u62c9\u62ca\u62cb\u62cc\u62d3\u62d4\u62d5\u62db\u62e4\u62e5\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f5\u62f6\u62f7\u62f8\u62f9\u62ff\u6300\u6301\u6302\u6308\u6309\u630f\u6310\u6311\u6315\u631a\u631b\u631d\u631f\u6321\u6325\u6326' + '\u632b\u632e\u632f\u6330\u6336\u6339\u633e\u633f\u6340\u6341\u6342\u6353\u6357\u635c\u635d\u635e\u635f\u6360\u6363\u636d\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6381\u6382\u6383\u6384\u638c\u638d\u638e\u638f\u6390\u6392\u6393\u6394\u6395\u6396\u6397\u63a1\u63a2\u63a3\u63a4\u63a5\u63aa\u63ab\u63ad\u63b0\u63b6\u63c1\u63d0\u63d9\u63da\u63e3\u63f2\u63f3\u63f4\u63f5\u6411\u6412\u6413\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606' + '\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6881\u6882\u6883' + '\u6884\u6885\u6886\u6887\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68e1\u68e2\u68e7\u68e8\u68e9\u68ef\u68f0\u68f7\u6906\u6907\u6915\u6916\u6917\u6935\u6936\u6937\u6938\u6939\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6992\u6993\u6994\u6995\u6996\u6997\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6aec\u6aed' + '\u6aee\u6aef\u6af0\u6af1\u6afe\u6aff\u6b0b\u6b0c\u6b18\u6b0d\u6b19\u6b1a\u6b1b\u6b1f\u6b25\u6b28\u6b29\u6b2e\u6b36\u6b37\u6b3c\u6b3f\u6b46\u6b48\u6b49\u6b4b\u6b4d\u6b55\u6b57\u6b5e\u6b5f\u6b62\u6b63\u6b64\u6b6f\u6b73\u6b74\u6b76\u6b78\u6b79\u6b80\u6b86\u6b87\u6b90\u6b91\u6b92\u6b93\u6b94\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba8\u6ba9\u6baa\u6bab\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bc5\u6bc6\u6bc7\u6bd8\u6bce\u6bcf\u6bd0\u6bd1\u6bd9\u6bda\u6bdb\u6be0\u6be1\u6be2\u6be3\u6be4\u6be9\u6bea\u6beb\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf8\u6bfb\u6bfd\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b' + '\u6c9c\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6d00\u6d01\u6d02\u6d0a\u6d0b\u6d0c\u6d11\u6d15\u6d16\u6d19\u6d1a\u6d1b\u6d1c\u6d23\u6d32\u6d33\u6d34\u6d35\u6d40\u6d41\u6d42\u6d43\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e59\u6e5a\u6e5b\u6e5c\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6eab\u6eac\u6ead' + '\u6eae\u6eaf\u6eb0\u6ec8\u6ec9\u6eca\u6ecb\u6ed3\u6edc\u6ee0\u6ee1\u6ee4\u6ee5\u6ee7\u6ee8\u6ee9\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef1\u6ef5\u6ef8\u6efb\u6efc\u6f06\u6f07\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f1d\u6f1e\u6f1f\u6f20\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f3b\u6f3c\u6f3d\u6f43\u6f44\u6f45\u6f46\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f55\u6f56\u6f58\u6f59\u6f5b\u6f5c\u6f5d\u6f61\u6f66\u6f67\u6f68\u6f69\u6f72\u6f74\u6f75\u6f8a\u6f8b\u6f8c\u6fa5\u6fa6\u6fa7\u6fb4\u6fb5\u6fbf\u6fc0\u6fca\u6fcb\u6fd2\u6fd3\u6fd4\u6fd5\u6fda\u6fdd\u6fde\u6fdf\u6fe3\u6fe6\u6fe8\u6fe9\u6fec\u6fee\u6ff1\u6ff7\u7000\u7001\u700b\u700c\u700d\u700e\u701f\u7020\u7021\u7022\u7023\u7024\u703e\u703f\u7040' + '\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u710f\u7110\u7121\u7122\u7123\u7124\u7125\u7126\u712b\u712c\u712d\u7132\u7138\u7139\u713a\u713e\u7141\u7144\u7145\u7148\u7158\u715e\u7165\u716a\u716b\u7174\u7175\u7176\u717c\u7180\u7189\u718d\u718f\u7192\u7193\u7194\u7197\u7198\u719a\u719b\u719e\u71a1\u71a2\u71a7\u71a8\u71aa\u71ab\u71ad\u71b0\u71b2\u71b7\u71be\u71bf\u71c9\u71ca' + '\u71cb\u71d4\u71d5\u71d9\u71dd\u71de\u71e3\u71e8\u71e9\u71ed\u71f0\u71f2\u71f3\u71f4\u71f7\u71f8\u71ff\u7200\u7201\u7202\u7203\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7345\u7346\u7347\u7348\u734d' + '\u734e\u734f\u7351\u7352\u7357\u735a\u735c\u735e\u7360\u7364\u7365\u7366\u7367\u7368\u7369\u7373\u7374\u7377\u7378\u737b\u737d\u737e\u7384\u7388\u7394\u7395\u73b2\u73b3\u73b4\u73b5\u73b6\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74e3\u74cb\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u750f\u751b\u751c\u751d\u7526\u7527\u7528\u7529\u752b\u752c\u7530\u7532\u7537\u754b\u754c\u754d' + '\u754e\u7563\u7564\u7565\u7572\u7573\u7574\u7581\u7582\u7583\u7584\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u75ad\u75ae\u75af\u75b0\u75b1\u75bc\u75bd\u75c1\u75c2\u75c3\u75c4\u75c5\u75cb\u75d1\u75d2\u75d5\u75d7\u75d8\u75de\u75ec\u75ed\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7629\u762a\u762b\u762c\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76e0\u76e1' + '\u76e2\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76fb\u76fc\u76fe\u76ff\u7700\u7701\u7704\u7705\u7708\u770d\u7712\u771b\u771c\u771d\u771e\u772a\u772b\u772c\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u7743\u7744\u7745\u7746\u7747\u7752\u7753\u7754\u7755\u775c\u775d\u7765\u7766\u7767\u7771\u7772\u7773\u7774\u7775\u7776\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7786\u7787\u7789\u778a\u778c\u7790\u7792\u7797\u7798\u77a1\u77a2\u77aa\u77ab\u77ac\u77ad\u77af\u77b6\u77b7\u77bc\u77bd\u77be\u77bf\u77c6\u77ca\u77cc\u77cd\u77dc\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883' + '\u7884\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u79a0\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u798f\u79a9\u79b9\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79d2\u79d3\u79d4\u79d5\u79dd\u79de\u79df\u9feb\u79e1\u79e9\u79ea\u79ec\u79ff\u7a0f\u7a10\u7a1f\u7a20\u7a21' + '\u7a22\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a77\u7a78\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a9d\u7a9e\u7a9f\u7aa3\u7aa4\u7aa6\u7aaa\u7aac\u7aad\u7aaf\u7ab0\u7aba\u7ac5\u7ac6\u7ac7\u7ac8\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c' + '\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cbe\u7cbf\u7cc2\u7cc3\u7cc4\u7cc5\u7cca\u7ccc\u7ccd\u7cce\u7ccf\u7cd4\u7cd5\u7cd8\u7ce8\u7d0e\u7cfb\u7d0f\u7d1f\u7d20\u7d2a\u7d44\u7d5c\u7d5d\u7d6a\u7d7b\u7d80\u7d84\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d90\u7d93\u7d94\u7d96\u7da3\u7da8\u7dad\u7dae\u7db2\u7db3\u7db4\u7dbd\u7dbe\u7dbf\u7dc1\u7dc5\u7dc6\u7dd0\u7dd1\u7dd2\u7dd3\u7dd9\u7de2\u7de3\u7de9\u7deb\u7df0\u7df1\u7df5\u7e06\u7e07\u7e08\u7e10\u7e11\u7e12\u7e13\u7e17\u7e18\u7e19\u7e22\u7e24\u7e25\u7e26\u7e27\u7e28\u7e2e\u7e31\u7e32\u7e33\u7e37\u7e38\u7e40\u7e4b\u7e4c' + '\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e68\u7e69\u7e6a\u7e6b\u7e6f\u7e70\u7e71\u7e72\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e8c\u7e8d\u7e99\u7e9a\u7e9b\u7ea0\u7ea1\u7ea5\u7eae\u7eaf\u7eb0\u7eb7\u7eb8\u7eb9\u7ebd\u7ec9\u7ecd\u7ece\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed9\u7eda\u7ee0\u7ee1\u7ee2\u7ee5\u7ee8\u7eed\u7efc\u7efd\u7f09\u7f0a\u7f13\u7f18\u7f19\u7f25\u7f26\u7f27\u7f28\u7f29\u7f33\u7f34\u7f37\u7f38\u7f39\u7f3f\u7f40\u7f41\u7f42\u7f49\u7f4f\u7f52\u7f5b\u7f65\u7f66\u7f78\u7f79\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u8062\u8063\u8064\u8065' + '\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8118\u8119\u811a\u811b\u8123\u8124\u8125\u8126\u812b\u812c\u812d\u8133\u8134\u8137\u8138\u8139\u813a\u813d\u8144\u8149\u8155\u815b\u8164\u8166\u816b\u816d\u8170\u8178\u8179\u817b\u8182\u818a\u818b\u818c\u818f\u8194\u8195\u8196\u81a4\u81a5\u81b0\u81b1\u81b2\u81b3\u81b8\u81b9\u81ba\u81bb\u81bc\u81c7\u81c8\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81dc\u81dd\u81de\u81e4\u81e5\u81e6\u81eb' + '\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f5\u81f6\u81f7\u8201\u820c\u820f\u8211\u8212\u8213\u8214\u8216\u821a\u8225\u8226\u8227\u823d\u823e\u823f\u8240\u8241\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u8412\u83a3\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u84f4\u84f5\u84f6\u84f7' + '\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u86b8\u86b9\u86ba\u86bb\u86bc\u86c5\u86c6\u86c7\u86d3\u86d4\u86d5\u86da\u86df' + '\u86e0\u86e1\u86e3\u86e4\u86e5\u86e6\u86e7\u86ea\u86ee\u86f1\u86f5\u86f6\u86f7\u86f8\u86ff\u8700\u8704\u8705\u8708\u8709\u870a\u870b\u870c\u8711\u8715\u8718\u871a\u871b\u871c\u8720\u8738\u8739\u873a\u8762\u8763\u8764\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u882e\u886e\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88fe\u88ff\u8900\u8901\u8902\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u892d\u892e\u892f\u8930' + '\u8931\u8932\u893f\u8940\u8941\u894a\u894b\u894c\u894d\u894e\u8956\u8957\u8958\u8960\u8965\u8969\u896c\u896e\u8973\u8974\u8975\u897c\u8986\u8990\u8991\u8992\u8997\u8998\u89a0\u89a1\u89a2\u89be\u89bf\u89c0\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a2c\u8a2d\u8a2e\u8a2f\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8adf\u8ae0\u8ae7\u8ae8\u8ae9\u8aea\u8af1\u8af6\u8afa\u8afb\u8aff\u8b00\u8b06\u8b07\u8b0c\u8b0d\u8b0f\u8b12\u8b13\u8b1f\u8b20\u8b27\u8b28\u8b29\u8b2e\u8b2f\u8b30\u8b31' + '\u8b34\u8b35\u8b3b\u8b3c\u8b41\u8b42\u8b48\u8b49\u8b4a\u8b4b\u8b51\u8b52\u8b53\u8b58\u8b59\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b69\u8b6d\u8b6e\u8b87\u8b96\u8b97\u8b98\u8b9d\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba9\u8baa\u8bab\u8bac\u8baf\u8bb0\u8bb3\u8bb6\u8bb7\u8bbc\u8bbd\u8bb8\u8bc4\u8bce\u8bcf\u8bd0\u8be3\u8be4\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8d15\u8d16\u8d17\u8d18\u8d19\u8d39\u8d3a' + '\u8d3b\u8d3c\u8d3d\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8dbe\u8dbf\u8dc0\u8dcc\u8dfd\u8e27\u8e49\u8e67\u8e68\u8e6e\u8e78\u8e7b\u8e7d\u8e81\u8e82\u8e85\u8e87\u8e8b\u8e8d\u8e90\u8e93\u8e97\u8e98\u8e9b\u8e9d\u8e9e\u8e9f\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8eaa\u8eab\u8eac\u8eaf\u8eb1\u8eb7\u8ebe\u8ebf\u8ec4\u8eca\u8ecf\u8ed0\u8ed1\u8ed6\u8ed7\u8edf\u8ee1\u8ee2\u8ee4\u8ee5\u8ee6\u8ee7\u8eee\u8eef\u8ef0\u8ef1\u8ef8\u8ef9\u8f04\u8f07\u8f08\u8f0d\u8f11\u8f15\u8f16\u8f18\u8f19\u8f1a\u8f1b\u8f30\u8f31\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f59\u8f5a\u8f5b\u8f67\u8f68\u8f69\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87' + '\u8f91\u8f92\u8f93\u8f94\u8f95\u8f9e\u8f9f\u8fa7\u8faf\u8fb3\u8fbd\u8fc0\u8fed\u8ffd\u8ffe\u9001\u9002\u9010\u9017\u9019\u901a\u901f\u902a\u902b\u902c\u9035\u9036\u9037\u9038\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u9056\u9057\u9058\u9059\u905a\u905b\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u9074\u9075\u9076\u9077\u9078\u9079\u907d\u907e\u907f\u9080\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u9091\u9093\u9094\u9095\u9096\u9099\u909a\u909b\u909c\u909e\u909f\u90a0\u90a4\u90a5\u90aa\u90ab\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u9106\u9107\u9108\u9109\u910a\u910b\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9149\u9127\u914a\u914b' + '\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u91a4\u91a5\u91a6\u91a7\u91a8\u91c0\u91c1\u91c2\u91c3\u91c4\u91ce\u91cf\u91d6\u91d7\u91df\u91e6\u91e7\u91ec\u91f2\u91f8\u91ff\u9200\u9201\u9202\u9203\u9206\u9207\u9208\u9209\u9214\u9217\u9219\u921a\u9221\u9223\u9225\u922c\u922d\u922e\u9237\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u9269\u926a\u926b\u926c\u927d\u927e\u927f\u9280\u9281\u928b\u928c\u928d\u928e\u92a6\u92a7\u92a8\u92a9\u92ba\u92bb\u92bc\u92bd\u92be\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92e5\u92e6\u92e7\u92e8\u92ef\u92f5\u92f6\u92f7\u92fb\u92fc\u92ff\u9300\u9302\u9303' + '\u930a\u9310\u931c\u9346\u9351\u9356\u9357\u9359\u935b\u935c\u9373\u9374\u938d\u938e\u938f\u9390\u93a4\u93a5\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93e1\u93e2\u93e3\u93f8\u93f9\u93fa\u93fb\u93fc\u9419\u9428\u9429\u942a\u942b\u9439\u943a\u943b\u943c\u9448\u9449\u944a\u944b\u9456\u9459\u945a\u945e\u9463\u9467\u9472\u9482\u9483\u9484\u9494\u9495\u9496\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94fb\u94fc\u94fd\u950b\u950c\u950d\u950e\u950f\u951e\u951f\u9520\u9521\u9522\u9530\u9531\u9532\u9533\u9539\u953c\u954c\u954d\u9551\u9552\u955a\u955b\u9568\u9569\u956a\u956b\u956c\u9574\u9575\u9576\u9577\u9578\u9579\u9586\u9587\u9588\u9589\u958a\u958b\u959a\u959b\u95a9\u95aa\u95ab\u95ac' + '\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95ce\u95cf\u95d0\u95d1\u95da\u95e0\u95e1\u95e2\u95e3\u95e4\u95ef\u95f0\u95f1\u95f2\u95f8\u95f9\u95ff\u9609\u961e\u9639\u966a\u966b\u966c\u966d\u96b8\u96b9\u96ba\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u979e\u979f\u97a0\u97a1\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9907\u9908\u9909\u9911\u9923\u994f\u9950\u9951\u9972\u9973\u9974' + '\u999e\u99be\u9a00\u9a17\u9a18\u9a19\u9a25\u9a29\u9a2c\u9a2d\u9a2e\u9a30\u9a3f\u9a40\u9a4e\u9a4f\u9a50\u9a51\u9a5b\u9a5c\u9a5d\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a79\u9a7a\u9a7b\u9a7c\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9ab6\u9abb\u9ac1\u9ac2\u9ac3\u9ac5\u9ae1\u9ae6\u9af6\u9b01\u9b02\u9b08\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b33\u9b34\u9b35\u9b42\u9b43\u9b44\u9b45\u9b46\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b90\u9b91\u9b92\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9bab\u9bac\u9bad\u9bae\u9bb3\u9bb4\u9bb5\u9bbd\u9bbe\u9bb6\u9bbf\u9bc7\u9bc8\u9bc9\u9bcc\u9bce\u9bcf\u9bda\u9bdd\u9bde\u9be7\u9be8\u9be9\u9bf1\u9bf2\u9bf3\u9bf4\u9bf8\u9bfa\u9bfb\u9bfe\u9bff' + '\u7a79\u9c01\u9c02\u9c0d\u9c11\u9c12\u9c13\u9c14\u9c16\u9c19\u9c1b\u9c20\u9c29\u9c2a\u9c36\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c4b\u9c4c\u9c4d\u9c5b\u9c5c\u9c5d\u9c5e\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c82\u9c83\u9c84\u9c85\u9c86\u9c8e\u9c8f\u9c9c\u9c9d\u9c9e\u9ca0\u9ca1\u9ca9\u9cab\u9cb2\u9cb4\u9cb6\u9cc4\u9cc6\u9cc7\u9cc9\u9ccb\u9ccd\u9cd0\u9cd1\u9cd2\u9cd4\u9cd5\u9cd6\u9cd9\u9cda\u9cdb\u9cdc\u9cde\u9cdf\u9ce0\u9ce2\u9cec\u9ced\u9cee\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d1c\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d62\u9d63\u9d64\u9d69' + '\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d73\u9d74\u9d77\u9d78\u9d7c\u9d7d\u9d7e\u9d80\u9d81\u9d82\u9d86\u9d89\u9d8a\u9d8b\u9d8c\u9d91\u9d95\u9d9b\u9d9c\u9d9d\u9da2\u9da3\u9da8\u9daa\u9dab\u9db7\u9db9\u9dbc\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc6\u9dc7\u9dc8\u9dcb\u9dce\u9dd0\u9dd1\u9dd4\u9dd7\u9dd8\u9ddc\u9de7\u9de8\u9df4\u9df5\u9df6\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e16\u9e17\u9e18\u9e19\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e78\u9e79\u9e7a\u9e7b\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e8a\u9e8b\u9e8c\u9e92\u9e93\u9e96\u9ecd\u9ed0\u9ed3\u9ed4\u9ed5\u9ed6\u9edc\u9edd' + '\u9ede\u9edf\u9ee0\u9ee1\u9ee4\u9ee5\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9f05\u9f06\u9f07\u9f0c\u9f0d\u9f14\u9f16\u9f17\u9f28\u9f29\u9f33\u9f39\u9f3a\u9f3b\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fcc\u9fcd\u9fce\u9fd9\u9fda\u9fdb\u9fdc\u9fdd\u9fe4\u9fe5\u9fe6\u9fe7\u9fec\u9fed\u9fee\u9fef\u9ff0\u9ff4\u9ff5\u9ff6\u9ff9\ua02d\ua031\ua032\ua034\ua035\ua03b\ua042\ua043\ua044\ua04d\ua051\ua059\ua05a\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua08e' + '\ua08f\ua090\ua091\ua092\ua093\ua094\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua137\ua138\ua139\ua13a\ua13b\ua143\ua144\ua145\ua149\ua14a\ua14b\ua14c\ua151\ua157\ua15a\ua15c\ua15e\ua17d\ua184\ua195\ua19f\ua1a1\ua1aa\ua1ab\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1cd\ua1ce\ua1d3\ua1d4\ua1d5\ua1d6\ua1de\ua1e2\ua1e4\ua1e9\ua1eb\ua1ed\ua1f1\ua1f2\ua1f4\ua1f7\ua1f9\ua1fb\ua1fe\ua1ff\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua21a\ua21b\ua224\ua225\ua22d\ua22e\ua22f\ua230\ua236\ua237\ua238' + '\ua239\ua23a\ua23b\ua23c\ua244\ua245\ua246\ua247\ua24c\ua24d\ua24e\ua24f\ua256\ua257\ua25c\ua262\ua263\ua264\ua265\ua267\ua268\ua269\ua26b\ua272\ua273\ua27c\ua27d\ua27e\ua280\ua289\ua28a\ua292\ua297\ua298\ua29a\ua29b\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2ab\ua2b2\ua2b3\ua2b4\ua2b5\ua2b9\ua2ba\ua2bb\ua2bd\ua2c2\ua2c7\ua2c8\ua2c9\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua330\ua331\ua332\ua333\ua334\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3fa\ua3fb' + '\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua42e\ua42f\ua430\ua431\ua432\ua433\ua43a\ua43b\ua43c\ua443\ua446\ua447\ua44c\ua456\ua465\ua466\ua4a4\ua4a5\ua4ae\ua4af\ua4b0\ua4d1\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua4fe\ua4ff\ua500\ua501\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua633\ua634' + '\ua635\ua636\ua637\ua638\ua639\ua63a\ua63b\ua64b\ua64c\ua64d\ua64e\ua64f\ua658\ua659\ua65c\ua660\ua668\ua669\ua66a\ua676\ua68d\ua68e\ua6a5\ua6ad\ua6b7\ua6c4\ua6cb\ua6cd\ua6d2\ua6d3\ua6d6\ua6dc\ua6df\ua6e0\ua6e1\ua6e6\ua6e7\ua6e8\ua6f1\ua6f9\ua700\ua702\ua705\ua706\ua70d\ua70e\ua70f\ua714\ua715\ua719\ua71a\ua71b\ua71c\ua71f\ua722\ua723\ua724\ua727\ua728\ua729\ua72a\ua72b\ua72d\ua72e\ua72f\ua731\ua732\ua734\ua735\ua733\ua736\ua740\ua744\ua745\ua74b\ua751\ua752\ua753\ua754\ua755\ua756\ua75a\ua75b\ua75c\ua75e\ua75f\ua760\ua761\ua762\ua763\ua765\ua766\ua767\ua76a\ua76b\ua76e\ua76f\ua775\ua77b\ua77c\ua780\ua781\ua782\ua783\ua786\ua787\ua78f\ua790\ua791\ua797\ua798\ua799\ua79f\ua7a0\ua7a2\ua7a3\ua7a4\ua7a6\ua7b2\ua7b5\ua7b7\ua7ba\ua7c7\ua7c8\ua7c9\ua7ce\ua7cf\ua7d0' + '\ua7d2\ua7d7\ua7de\ua7e2\ua7ed\ua7ef\ua7f4\ua7f9\ua7fe\ua7ff\ua806\ua807\ua80a\ua80b\ua80c\ua80d\ua815\ua816\ua81a\ua81b\ua826\ua82a\ua82b\ua837\ua838\ua839\ua840\ua841\ua845\ua846\ua84c\ua84d\ua854\ua855\ua856\ua85b\ua85c\ua85d\ua85e\ua85f\ua862\ua863\ua864\ua866\ua87d\ua882\ua883\ua887\ua888\ua88a\ua88b\ua890\ua893\ua896\u3cfe\u4441\u445e\u4eef\u5d2a\u5d2b\u5d42\u5d44\u624c\u9f34\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f69\u0f6a\u0f6b\u0f6c\u0f6d\u0f6e\u0f6f\u0f70\u0f71\u0f72\u0f73\u0f74\u0f75\u0f76\u0f77\u0f78\u0f79\u0f7a\u0f7b\u0f7c\u0f7d\u0f7e\u0f7f\u0f80\u0f81\u0f82\u0f83\u0f84\u0f85\u0f86\u0f87\u0f88\u0f89\u0f8a\u0f8b\u0f8c\u0f8d\u0f8e\u0f8f\u0f90\u0f91\u0f92\u0f93\u0f94\u0f95\u0f96\u0f97\u0f98\u0f99\u0f9a\u0f9b\u0f9c\u0f9d\u0f9e\u0f9f\u0fa0\u0fa1\u0fa2' + '\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce5\u3ce6\u3ce7\u3ce4\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf6\u3cf7\u3cf8\u3cfb\u3cfc\u3cff\u3d00\u3d01\u3d02\u6b51\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d12\u3d13\u3d14\u3d15\u3cf9\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1e\u3d1f\u3d20\u3d21\u3d11\u3d22\u3d23\u3d24\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d39\u3d3a\u3d3b\u51c4\u4ef6\u3d3f\u3d40\u3d41\u3d42\u3d45\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d59\u3d5a\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d67\u3d68\u3d69\u3d6a\u3d70\u3d71\u3d72' + '\u3d73\u3d77\u3d79\u3d7a\u3d7b\u3d7e\u3d7f\u3d80\u3d81\u3d83\u3d84\u3d85\u3d87\u3d88\u3d89\u3d8a\u3cdb\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da5\u3da6\u3da7\u3da9\u3daa\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db8\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08' + '\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e36\u3e77\u3e78\u3e79\u3e7a\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99' + '\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34' + '\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe' + '\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u405a\u4048\u4049\u405b\u405c\u404a\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064' + '\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u408c\u409e\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a9\u40aa\u40ab\u40af\u40b3\u40b4\u40b5\u40b6\u40b9\u40ba\u40bb\u40bd\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d9\u40da\u40db\u40dc\u40dd\u40df\u40e0\u40e1\u40e3\u40e4\u40e5\u40e6\u40e7\u40e9\u40ea\u40eb\u40ec\u40ef\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4101\u4105\u4106\u4107\u4108\u410b\u4109\u410c\u410d\u410e\u410f' + '\u4110\u4111\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4123\u4124\u4125\u4126\u4127\u412e\u412f\u4130\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4145\u4147\u4148\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415e\u415f\u4160\u4161\u4162\u4168\u4169\u416a\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u417b\u417c\u417d\u417f\u4180\u4181\u4182\u4183\u4186\u4188\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b1\u41b2\u41b3' + '\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u4233\u4243\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u4244\u4245\u4246\u4247\u423c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255' + '\u4258\u4259\u425a\u425b\u425c\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4275\u4276\u4277\u4278\u4279\u427d\u4281\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4292\u4293\u4294\u4295\u4296\u4297\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42cd\u42ce\u42cf\u42d0\u42d1\u5c2d\u42d2\u42d3\u42d4\u42d6\u42d7\u42d8\u42d9\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301' + '\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4314\u4315\u4317\u4319\u431a\u431b\u431d\u431f\u4320\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u4330\u4331\u4332\u4333\u4334\u4335\u4337\u4338\u4339\u433b\u433f\u4340\u4341\u4343\u4344\u4345\u4346\u4347\u4349\u434a\u434b\u434c\u434e\u434f\u4350\u4351\u4352\u4354\u4355\u4356\u3cdc\u4357\u4358\u4359\u435a\u435c\u435d\u435f\u435e\u4360\u4361\u4362\u4363\u4366\u4367\u4368\u4369\u436a\u436b\u436d\u436e\u436f\u4370\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u4380\u4381\u4382\u4383\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4391\u4392\u4393\u4394\u4395\u4397\u4398\u4399\u439a\u439b' + '\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43ad\u43ae\u43af\u43b0\u43b4\u43b5\u43b6\u43b7\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c1\u43c2\u43c3\u43c4\u43c9\u43ca\u43cb\u43cc\u43ce\u43cf\u43d0\u43d1\u43d2\u43cd\u43d4\u43d5\u43d7\u43d8\u43d9\u43da\u43db\u43de\u43df\u43e1\u43e3\u43e5\u43e6\u43e7\u43e8\u43e9\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f5\u43f6\u43f9\u43fa\u43fb\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4406\u4407\u4408\u4409\u440b\u440d\u440e\u440f\u4410\u4411\u4413\u4414\u4415\u4416\u4417\u4419\u441a\u441c\u441f\u4420\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u4442' + '\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4' + '\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c' + '\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u460b\u45d6\u45d7\u45d8\u45d9\u45da\u5abc\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u460c\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u460d\u460e\u460f\u4610\u4611\u4612' + '\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u466e\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf' + '\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46f7\u46f8\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4651\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u46e6\u4721\u46e7\u4722\u6b40\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u472b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u475e\u475f\u4760' + '\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u4775\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c3\u47b6\u47c1\u47c4\u47c5\u47c8\u47c9\u47ca\u47cb\u47cc\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fd' + '\u47fe\u4800\u4801\u4802\u4803\u4804\u4805\u4807\u4808\u4809\u480a\u480b\u480d\u480e\u480f\u480c\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481b\u481c\u481d\u481f\u4820\u4821\u4822\u4823\u4825\u4826\u4827\u4828\u4829\u482a\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d' + '\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48c9\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4942\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924' + '\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u497f\u496a\u496b\u496c\u496d\u496e\u4980\u496f\u4970\u4971\u4972\u4973\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be' + '\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\ua76c\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a33\u4a34\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4421\u4a3f\u4a42\u4a43\u4a44\u4a46\u4a47\u4a48\u4a49\u4a4b\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5f\u4a60\u4a61\u4a62' + '\u4a63\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a71\u4a6e\u4a6f\u4a70\u4a72\u4a75\u4a76\u4a77\u4a78\u4a7a\u4a79\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a81\u4a82\u4a83\u4a84\u4a85\u4a87\u4a88\u4a89\u4a8a\u4a8c\u4a8d\u4a8e\u4a8f\u4a92\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4ad1\u4abd\u4abe\u4abf\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae5\u4ae6\u4ae7\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01' + '\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b11\u4b12\u4b13\u4b14\u4b79\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4bb4\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0' + '\u4ba1\u4ba2\u4ba3\u4ba4\u79f2\u4ba5\u4ba6\u4ba7\u4ba8\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bf8\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4be0\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b' + '\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c93\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4c7b\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00' + '\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d2a\u4d41\u4d42\u4d43\u4d46\u4d4d\u4d47\u4d48\u4d49\u4d4a\u4d4e\u4d4f\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5e\u4d5f\u4d60\u4d62\u4d63\u4d64\u4d66\u4d67\u4d68\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d87\u4d88\u4d89\u4d8b\u4d8c\u4d8d\u4d90\u4d91\u4d92\u4d94\u4d93\u4d96\u4d97\u4d99\u4d9a\u4d9b\u4d9d\u4d9e\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5' + '\u4da7\u4da9\u4daa\u4dab\u4dac\u4daf\u4db0\u4db1\u4db2\u4db3\u4db6\u4db7\u4db8\u4db9\u4dba\u4dbb\u4dbc\u4dbd\u4dbe\u4dc3\u4dc4\u4dc5\u4dc6\u4dc7\u4dc8\u4dc9\u4dca\u4dcb\u4dcc\u4dcd\u4dce\u4dcf\u4dd0\u4dd1\u4dd3\u4dd4\u4dd5\u4dd6\u4dd7\u4de0\u4dd8\u4dd9\u4dda\u4ddb\u4de1\u4de2\u4de3\u4de4\u4de5\u4de6\u4de7\u4de8\u4de9\u4dea\u4deb\u4dec\u4ded\u4dee\u4def\u4df0\u4df1\u4df2\u4df3\u4df8\u4df9\u4dfa\u4dfb\u4dfc\u4dfd\u4dfe\u4dff\u4e00\u4e01\u4e02\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e35\u4e16\u4e36\u4e37\u4e38\u4e39\u4e3d\u4e3e\u4e3f\u4e40\u4e42\u4e43\u4e44\u4e45\u4e46\u4e49\u4e4a\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51' + '\u4e53\u4e55\u4e56\u4e58\u4e59\u4e5a\u4e57\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e76\u4e78\u4e79\u4e7a\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e84\u4e85\u4e86\u4e87\u4e88\u4e8a\u4e8d\u4e8e\u4e96\u4e97\u4e9a\u4e9b\u4e9c\u4e9f\u4ea0\u4ea1\u4ea2\u3d25\u4ea3\u4ea4\u4ea5\u4ea7\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed6\u4ed7\u4ed8\u4ed9\u4edc\u4edd\u4ee1\u4ee2\u4ee3\u4ee4\u4ee7\u4ee8\u4ee9\u4eea\u4eec\u4eed\u4eee\u4ef0\u4ef2\u4ef5\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08' + '\u4f09\u4f0a\u4f0b\u4f0c\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f69\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6' + '\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u502e\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059' + '\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50b0\u50b1\u50b2\u50b3\u50c3\u50b4\u50b5\u50b6\u50b7\u50bd\u50be\u50bf\u50c4\u50c5\u50c6\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d3\u50d8\u50d4\u50d5\u50d9\u50da\u50db\u50dc\u50dd\u50e0\u50de\u50e1\u50e2\u50e3\u50e5\u50e6\u50e7\u50e8\u50e9\u50eb\u9366\u50ec\u50ed\u50ee\u50ef\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fc\u50fe\u5100\u5101\u5102\u5103\u5105\u5106\u5108\u5109\u510a\u510b\u510c\u510d\u510f\u5110\u5111' + '\u5112\u5113\u5114\u5115\u5116\u5117\u511a\u511b\u511c\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u518b\u5177\u5180\u5181\u5182\u5183\u5184\u5185\u8073\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u519a\u5195\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a7\u51a8\u51a9\u51aa\u51ae\u51af\u51b0\u51b3\u51b4\u51b5\u51b6\u51b7\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c5\u51c6\u51c7\u51c8\u51c9\u51ce' + '\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51ea\u51eb\u51ec\u51e7\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u523f\u5236\u5237\u5238\u5239\u523a\u5231\u523b\u523c\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525f\u5260\u5261\u5262\u5263\u5264\u5269\u526a\u526b\u526e\u526f\u5270\u5272\u5273\u5274\u5275\u5276\u5278\u5279\u527a\u527b\u527d\u527e\u527f\u5280\u5281\u5282' + '\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528e\u5291\u5292\u5293\u5294\u5295\u5296\u5299\u529a\u529c\u529d\u529e\u529f\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52ab\u52ac\u52ad\u52ae\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bf\u52c0\u52c1\u52c2\u52c3\u52ca\u52cb\u52cc\u52cd\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d9\u52da\u52db\u52dc\u52dd\u52e1\u52e2\u52e3\u52e4\u52e8\u52e9\u52ea\u52ec\u52ed\u52ee\u52ef\u52f2\u52f3\u52f4\u52f5\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5308\u5309\u530a\u530b\u530c\u530e\u530f\u5310\u5315\u5316\u5317\u5318\u5319\u86ef\u531a\u531b\u531d\u5320\u5321\u5322\u5324\u5327\u5328\u532a\u532b\u532d\u532e\u532f\u5330\u5331\u5332\u5337\u5338\u5339\u533a' + '\u533b\u533c\u533d\u533e\u533f\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u5354\u5355\u5356\u5357\u5358\u5359\u534b\u535a\u535d\u535e\u535f\u5360\u5371\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u537e\u537f\u5380\u5381\u5382\u5384\u538a\u5385\u5386\u538b\u538c\u538d\u538e\u538f\u5390\u5393\u5394\u5397\u5398\u539a\u539c\u539d\u539f\u53a0\u53a1\u53a2\u53a3\u53a5\u53a6\u53a7\u53a8\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3' + '\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u5490\u5491' + '\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c' + '\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u5564\u55c8\u55c9\u55ca\u55cb\u55f4\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd' + '\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5651\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u567b\u567c\u567d\u567e\u5684\u5685\u5686\u568a\u568b\u568c\u568d' + '\u568e\u568f\u5690\u5693\u5694\u5695\u5696\u5697\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a7\u56a8\u56a9\u56aa\u56ae\u56b0\u56b4\u56b5\u56b6\u56b7\u56b9\u56ba\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56bb\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56cb\u56cc\u56cd\u56d1\u56ce\u56d2\u56d5\u56d3\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56df\u56e0\u56e1\u56e2\u56e5\u56e6\u56e7\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f5\u5700\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5719\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u575b\u5725\u5726\u5727\u5728\u5729\u572a\u572b' + '\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4' + '\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c' + '\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u58aa\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u595b\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb' + '\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u59ab\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u58f2\u5963\u5964\u5965\u59ac\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e' + '\u598f\u5990\u5991\u5992\u5993\u59ad\u59ae\u5994\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59e2\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a35\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43' + '\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a64\u5a61\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a70\u5a71\u5a72\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a81\u5a7e\u5a7f\u5a82\u5a83\u5a84\u5a85\u5a89\u5a8a\u5a8b\u5a8e\u5a8f\u5a91\u5a95\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa3\u5aa4\u5aa5\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5aed\u5aee\u5ae0\u5aef\u5af0\u5af1\u5af7\u5af8\u5af9\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b09\u5b0a\u5b0b\u5b0c' + '\u5b11\u5b12\u5b13\u5b14\u5b18\u5b19\u5b1a\u5b1d\u5b1e\u5b20\u5b21\u5b22\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b33\u5b36\u5b37\u5b39\u5b3a\u5b3c\u5b3e\u5b3f\u5b40\u5b41\u5b43\u5b44\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b53\u5b54\u5b55\u5b56\u5b58\u5b59\u5b5a\u5b5c\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b65\u5b66\u5b67\u5b69\u5b6a\u5b6b\u5b6c\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b79\u5b7a\u5b7b\u5b74\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b84\u5b85\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe' + '\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d' + '\u5c5e\u5c5f\u5c60\u5c61\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c62\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce6\u5ce7\u5ce2\u5ce8\u5ce9\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cff\u5d02\u5d03\u5d04\u5d06\u5d07\u5d08\u5d0a\u5d0b\u5d0c\u5d0d\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d15\u5d14\u5d16\u5d17\u5c41\u5d18\u5d19' + '\u412a\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d2c\u5d2d\u5d2e\u7fa9\u5d2f\u5d30\u5d31\u5d32\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3d\u5d3e\u5d3f\u5d40\u5d43\u8074\u5d45\u5d4c\u5d4d\u80e6\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0' + '\u5db1\u5d95\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39' + '\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1' + '\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60' + '\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4' + '\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u601c\u5fff\u6000\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6001\u6024\u6025\u6026\u6002\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6070\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9' + '\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u6071\u60d8\u60d9\u60da\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u60db\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u60dc\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u6152\u6153\u6154' + '\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61dd\u61de\u61df\u61e0\u61d0\u61e1\u61d1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u6208\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe' + '\u61ff\u6200\u6201\u6202\u6203\u6204\u6209\u620a\u620b\u620c\u620d\u620e\u6205\u620f\u6210\u6213\u6214\u6215\u6216\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6227\u6228\u6229\u622a\u622b\u622f\u622c\u6230\u6231\u6232\u6237\u6238\u6239\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u6274\u6275\u6276\u6277\u6278\u627c\u627d\u627e\u627f\u6280\u6281\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628d\u628e\u628f\u6294\u6295\u6296\u6299\u629d\u629f\u62a0\u62a2\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ae\u62af\u62b0\u62b1\u62b4\u62b5\u62b6\u62b7\u62b8\u62ba\u62bb\u62bc\u62bd\u62bf\u62c0\u62c1\u62c3\u62c4\u62c5\u62c6' + '\u62c7\u62c8\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d6\u62d7\u62d8\u62d9\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62f3\u62f4\u62fa\u62fb\u62fc\u62fd\u62fe\u6303\u6304\u6305\u6306\u6307\u630a\u630b\u630c\u630d\u630e\u6312\u6313\u6314\u6316\u6317\u6318\u631c\u631e\u6320\u6322\u6323\u6324\u6327\u6328\u6329\u632a\u632c\u632d\u6331\u6332\u6333\u6334\u6335\u6337\u6338\u633a\u633b\u633c\u633d\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6354\u6355\u6356\u6358\u6359\u635a\u635b\u6361\u6362\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636e\u636f\u6370\u6371\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u6391\u6398' + '\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a6\u63a7\u63a8\u63a9\u63ac\u63ae\u63af\u63b1\u63b2\u63b3\u63b4\u63b5\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63dc\u63dd\u63df\u63e0\u63e1\u63e2\u63de\u63e4\u63e5\u40f0\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e' + '\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u64c2\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u7396\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64c3' + '\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u6526\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u6527\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551' + '\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u658b\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1' + '\u65e2\u65e3\u65e4\u6616\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u6617\u6618\u65f9\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u65fa\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c' + '\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u668a\u6715\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u6716\u66ee\u66ef\u66f0\u668b\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b' + '\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6785\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u66fd\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6786\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8' + '\u6833\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67ea\u67d1\u67d2\u67d3\u67d4\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u67d5\u681d\u681e\u681f\u6834\u6835\u6820\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6888\u6852\u6853\u6854\u6855\u6856\u6865\u6866\u6867\u6868\u6869\u686a\u686b' + '\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68f3\u68d0\u68d1\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e3\u68e4\u68e5\u68e6\u68ea\u68eb\u68ec\u68ed\u68ee\u68f1\u68f2\u68f4\u68f5\u68f6\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913' + '\u6914\u6918\u6919\u691a\u691b\u691c\u691d\u6905\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8' + '\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69ca\u69bd\u69be\u69bf\u69c0\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u69f3\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a4a\u6a37\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f' + '\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a6a\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9' + '\u6afa\u6afb\u6afc\u6afd\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b0e\u6b07\u6b08\u6b09\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b0a\u6b15\u6b16\u6b17\u6b1c\u6b1d\u6b1e\u6b20\u6b21\u6b22\u6b23\u6b24\u6b26\u6b27\u6b2a\u6b2b\u6b2c\u6b2d\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b38\u6b39\u6b3a\u6b3b\u6b3d\u6b3e\u6b41\u6b42\u6b43\u6b44\u6b45\u6b47\u6b4a\u6b4c\u6b4e\u6b4f\u6b50\u6b52\u6b53\u6b54\u6b56\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b60\u6b61\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b70\u6b71\u6b72\u6b75\u6b77\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b81\u6b82\u6b83\u6b84\u6b85\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6bac\u6bad\u6bae\u6baf\u6bb0' + '\u6bba\u6bb1\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bdc\u6bdd\u6bde\u6bdf\u6be5\u6be6\u6be7\u6be8\u6bec\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf9\u6bfa\u6bfc\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68' + '\u6c69\u6c6a\u6c6b\u6c6c\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6c93\u6c94\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cb3\u6cc1\u6cc2\u6cd0\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6ce1\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0d\u6d0e\u6d0f\u6d10\u6d12\u6d13\u6d14\u6d17\u6d18\u6d1d\u6d1e' + '\u6d1f\u6d20\u6d21\u6d22\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2b\u6d2a\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6db6\u6db7\u6db8\u6db9\u6ddd\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1' + '\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dab\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6e12\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63' + '\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e7d\u6e71\u6e7e\u6e7f\u6e80\u6e81\u6e72\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e9a\u6e90\u6e91\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edd\u6ede\u6edf\u6ee2\u6ee3\u6ee6\u6eea\u6ef0\u6ef2\u6ef3\u6ef4\u6ef6\u6ef7\u6ef9\u6efa\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f08\u6f09\u6f0a\u6f10\u6f11\u6f12\u6f19\u6f1a\u6f1b\u6f1c\u6f21\u6f22\u6f23' + '\u6f24\u6f25\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f38\u6f39\u6f3a\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f47\u6f48\u6f49\u6f4a\u6f52\u6f53\u6f54\u6f57\u6f5a\u6f5e\u6f5f\u6f60\u6f62\u6f63\u6f64\u6f65\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f73\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f8d\u6f89\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u715f\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u7a11\u6fbd\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fbe\u6fd6\u6fc7\u6fc8\u6fc9\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd7\u6fd8\u6fd9\u6fdb\u6fdc' + '\u6fe0\u6fe1\u6fe2\u6fe4\u6fe5\u6fe7\u6fea\u6feb\u6fed\u6fef\u6ff0\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u701e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098' + '\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ba\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70bb\u70d5\u70d6\u70d7\u70d8\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u70f9\u710b\u710c\u710d\u710e\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7127\u7128\u7129\u712e\u712a\u712f\u7130\u7131\u7133\u7134\u7135\u7136\u7137\u713b\u713c\u713d\u713f\u7140\u7142\u7143\u7146\u7147\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153' + '\u7154\u7155\u7156\u7157\u7159\u715a\u715b\u715c\u715d\u7160\u7161\u7162\u7163\u7164\u7166\u7167\u7168\u7169\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7177\u7178\u7179\u717a\u717b\u717d\u717e\u717f\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u718a\u718b\u718c\u718e\u7190\u7191\u7195\u7196\u7199\u719c\u719d\u719f\u71a3\u71a4\u71a5\u71a6\u71a9\u71ac\u71ae\u71af\u71b1\u71b3\u71b4\u71b5\u71b6\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d6\u71d7\u71d3\u71d8\u71da\u71db\u71dc\u71df\u71e0\u71e1\u71e2\u71e4\u71e5\u71e6\u71e7\u71ea\u71eb\u71ec\u71ee\u71ef\u71f1\u71f5\u71f6\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d' + '\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7245\u7269\u7260\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u72b1\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3' + '\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7349\u734a\u734b\u734c\u7350\u7353\u7358\u7354\u7355\u7356\u7359\u735b\u735d\u735f\u7361\u7362\u7363\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7375\u7376\u7379\u737a\u737c\u737f\u7380\u7381\u7382\u7383\u7385\u7386\u7387\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391' + '\u7392\u7393\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u742c\u742d\u742e\u742f\u7430\u7431\u7462\u7432' + '\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7450\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u747f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74b1\u74b2\u74a8\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74a9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc' + '\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u752a\u752d\u752e\u752f\u7531\u7533\u7534\u7535\u7536\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7566\u7567\u7568\u7575\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u7585\u7586\u7587\u7588\u7589\u758a\u758b' + '\u758c\u758d\u758e\u758f\u757f\u7590\u7591\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75be\u75bf\u75c0\u75c6\u75c7\u75c8\u75c9\u75ca\u75cc\u75cd\u75ce\u75cf\u75d3\u75d4\u75d6\u75d9\u75da\u75db\u75dc\u75dd\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u764d' + '\u764e\u764f\u7650\u7651\u7652\u7653\u763b\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76bf\u76c0\u76c1\u76c2\u76c3\u76d3\u7697\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e3\u76e4\u76e5\u76e6\u76e7\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u7702\u7706\u7707\u7703\u7709\u770a\u770b\u770c\u770e\u770f\u7710\u7711\u7713\u7714\u7715\u7716' + '\u7717\u7718\u7719\u771a\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7756\u7757\u7758\u7759\u775a\u775b\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7777\u7778\u7779\u777a\u777b\u777c\u7784\u7785\u7788\u778b\u778d\u778e\u778f\u7791\u7793\u7794\u7795\u7796\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u9dc4\u9dc5\u77ae\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b8\u77b9\u77ba\u77bb\u77c0\u77c1\u77c4\u77c2\u77c3\u77c5\u77c7\u77c8\u77c9\u77cb\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7' + '\u77d8\u77d9\u77da\u77db\u7827\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876' + '\u7877\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u7878\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78ff\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b' + '\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u791c\u794d\u794e\u794f\u791d\u7950\u7951\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79ba\u79bb\u79bc\u79bd\u79be\u79b7\u79b8\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79e2\u79e0\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79eb\u79ed\u79ee\u79ef\u79f0\u79f1\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb' + '\u79fc\u79fd\u79fe\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a23\u7a24\u7a25\u7a26\u7a27\u7a1e\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a40\u7a51\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a84\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7aa0\u7aa1\u7aa2\u7aa7\u7aa5\u7aa8\u7aa9\u7aab\u7aae\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9' + '\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b5b\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63' + '\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7b80\u7bbd\u7bbe\u7bcd\u7bbf\u7bc0\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7' + '\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c67\u7c59\u7c5a\u7c88\u7c5b\u7c5c\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c89\u7c80\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c81\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7' + '\u7ca8\u7ca9\u7caa\u7cab\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cc0\u7cc1\u7cc6\u7cc7\u7cc8\u7cc9\u7ccb\u7cd0\u7cd1\u7cd2\u7cd3\u7cd6\u7cd7\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7ce7\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41' + '\u7d42\u7d43\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7c\u7d7d\u7d7e\u7d7f\u7d81\u7d82\u7d85\u7d83\u7d86\u7d8d\u7d8e\u7d8f\u7d91\u7d92\u7d95\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da4\u7da5\u7da6\u7da7\u7da9\u7daa\u7dab\u7dac\u7daf\u7db0\u7db1\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dc0\u7dc2\u7dc3\u7dc4\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dd4\u7dd5\u7dd6\u7dcf\u7dd7\u7dd8\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de4\u7de5\u7de6' + '\u7de7\u7de8\u7dea\u7dec\u7ded\u7dee\u7def\u7df2\u7df3\u7df4\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e09\u7e02\u7e03\u7e04\u7e05\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e14\u7e15\u7e16\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e23\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2f\u7e30\u7e34\u7e35\u7e36\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e6c\u7e6d\u7e6e\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e94\u7e95\u7e96\u7e97\u7e98\u7e93\u7e9c\u7e9d\u7e9e' + '\u7e9f\u7ea2\u7ea3\u7ea4\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eba\u7ebb\u7ebc\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7eca\u7ecb\u7ecc\u7ecf\u7ed0\u7ed1\u7ed7\u7ed8\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee3\u7ee4\u7ee6\u7ee7\u7ee9\u7eea\u7eeb\u7eec\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f14\u7f15\u7f16\u7f17\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f12\u7f21\u7f22\u7f23\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f35\u7f36\u7f43\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f44\u7f45\u7f46\u7f47\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f50\u7f51\u7f53' + '\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0' + '\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7fd5\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u80a8' + '\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u5d48\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8127\u8128\u812e\u8129\u812a\u812f\u8130\u8131\u8132\u8135\u813b\u813c\u813e\u813f\u8140\u8141\u8142\u8143\u8145\u8146\u8147\u8148\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8156\u8157\u8158\u8159\u815a\u815c\u815d\u815e\u815f\u8160\u8161' + '\u8162\u8163\u8165\u8167\u8168\u8169\u816e\u816a\u816c\u816f\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u817a\u817c\u817d\u817e\u817f\u8180\u8181\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818d\u818e\u8190\u8191\u8192\u8193\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b4\u81b5\u81b6\u81b7\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c9\u81ca\u81cb\u81cc\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81df\u81e0\u81e1\u81e2\u81e3\u81e7\u81e8\u81e9\u81ea\u81f2\u81f3\u81f4\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820b\u820d\u820e\u8210\u8215\u8217\u8218\u8219\u821b\u821d\u821e\u821f\u8220\u8221' + '\u8222\u8223\u8224\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8286\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6' + '\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82d6\u82c9\u82ca\u82cb\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u8340\u82de\u82df\u82e0\u82e1\u82e2\u8341\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u8279\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u83a4\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351' + '\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u842a\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6' + '\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u842b\u842c\u842d\u75e5\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8410\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f' + '\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u6a6b\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u8506\u84f3\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f' + '\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6' + '\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8613\u8600\u8601\u8602\u8614\u8603\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8670\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a' + '\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u869d\u868d\u868e\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u868f\u86ab\u863a\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86c8\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d6\u86d7\u86d8\u86d9\u86db\u86dc\u86dd\u86de\u86e2\u86e8\u86e9\u86eb\u86ec\u86ed\u86f0\u86f2\u43c5\u86f3\u86f4\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u8701\u8702\u8703\u8706\u8707\u870d\u870e\u870f\u8710\u8712\u8713\u8714\u8716\u8717\u8719\u871d\u871e\u871f\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733' + '\u8734\u8735\u8736\u8737\u873b\u873c\u873d\u873e\u8793\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8765\u8761\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8794\u8795\u8796\u8797\u8798\u8799\u87c1\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc' + '\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u87e5\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u87e6\u881d\u881e\u881f\u8820\u8821\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u886f\u885c\u885d\u885e\u885f\u8860\u8861' + '\u8862\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88dc\u88dd\u88de\u88df\u8899\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u8863\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c' + '\u890d\u88cb\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u88fd\u891a\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u893e\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8961\u8962\u8963\u8964\u8966\u8967\u8968\u896a\u896b\u896d\u896f\u8970\u8971\u8972\u8976\u8977\u8978\u8979\u897a\u897b\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8993\u8994\u8995\u8996\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5' + '\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89ef\u89e8\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a5e\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48' + '\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a9f\u8a98\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8ab1\u8aca\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af2\u8af3\u8af4\u8af5\u8af7\u8af8\u8afc\u8afd\u8afe\u8b01\u8b02\u8b03\u8b04\u8b05\u8af9\u8b08\u8b09' + '\u8b0a\u8b0b\u8b0e\u8b10\u8b11\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1d\u8b1e\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b2a\u7580\u8b2b\u8b2c\u8b1c\u8b2d\u8b32\u8b33\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3d\u8b3e\u8b3f\u8b40\u8b43\u8b44\u8b45\u8b46\u8b47\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b54\u8b55\u8b56\u8b57\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b64\u8b65\u8b66\u8b67\u8b68\u8b6a\u8b6b\u8b6c\u8b6f\u8b70\u8b71\u8b72\u8b73\u7549\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b88\u8b89\u8b8c\u8b8a\u8b8b\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b99\u8b9a\u8b9b\u8b9c\u8b9e\u8b9f\u8ba0\u8ba1\u8ba7\u8ba8\u8bad\u8bae\u8bb1\u8bb4\u8bb5\u8bb9\u8bba\u8bbb\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3' + '\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a' + '\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c76\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cdc\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10' + '\u8d11\u8d12\u8d13\u8d14\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d87\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db6\u8db7' + '\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d' + '\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e79\u8e7a\u8e7c\u8e7e\u8e7f\u8e80\u8e83\u8e84\u8e86\u8e88\u8e89\u8e8a\u8e8c\u8e8e\u8e8f\u8e91\u8e92\u8e94\u8e95\u8e96\u8e99\u8e9a\u8ea0\u8ea1\u8ea2\u8ea9\u8ead\u8eae\u8eb0\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ec0\u8ec1\u8ec2\u8ec3\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8ecb\u8ecc\u8ecd\u8ece\u8ed2\u8ed3\u8ed4\u8ed5\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8ee3\u8ee0\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8ef2\u8ef3' + '\u8ef4\u8ef5\u8ef6\u8ef7\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f05\u8f06\u8f09\u8f0a\u8f0b\u8f0c\u8f0e\u8f0f\u8f10\u8f12\u8f13\u8f14\u8f17\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8fa0\u8fa1' + '\u8fa2\u5b15\u8fa3\u8fa4\u8fa5\u8fa6\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8fb0\u8fb1\u8fb2\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbe\u8fbf\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8fff\u9000\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9011\u9012\u9013\u9014\u9015\u9016\u9018\u901b\u901c\u901d\u901e\u9020\u9021\u9022\u9023\u9024\u9025\u9027\u9028\u9029\u902d\u902e\u902f\u9030\u9031\u9032\u9033' + '\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u905c\u905d\u905e\u905f\u9060\u9061\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u907a\u907b\u907c\u9081\u908c\u908d\u908e\u908f\u9090\u9092\u9097\u9098\u909d\u90a1\u90a2\u90a3\u90a6\u90a7\u90a8\u90a9\u90ac\u90ad\u90ae\u90e9\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u90d9\u9100\u9101\u9102\u9103\u9104\u9105\u910c\u910d\u910e\u910f' + '\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9159\u9144\u9145\u9146\u9147\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9148\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91a2\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf' + '\u91a3\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e8\u91e9\u91ea\u91eb\u91ed\u91ee\u91ef\u91f0\u91f1\u91f3\u91f4\u91f7\u91f5\u91f6\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u9204\u9205\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9215\u9216\u9218\u921b\u921c\u921d\u921e\u921f\u9220\u9222\u9224\u9226\u9227\u9228\u9229\u922a\u922b\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u926d\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u926e\u926f' + '\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92f0\u92f1\u92f2\u92f3\u92f4\u92f8\u92f9\u92fa\u92fd\u92fe\u9301\u9304\u9305\u9306\u9307\u9308\u9309\u930b\u930c\u930d\u930e\u930f\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931d\u931e\u931f\u9320' + '\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9352\u9353\u9354\u9355\u9358\u935a\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u938b\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1' + '\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u943d\u9438\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u944c\u944d\u944e' + '\u944f\u9450\u9451\u9452\u9453\u9454\u9447\u9457\u9458\u9455\u945b\u945c\u945d\u945f\u9460\u9461\u9462\u9464\u9465\u9466\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94b6\u94ad\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef' + '\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9534\u9535\u9536\u9537\u9538\u953a\u953b\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9545\u9544\u9546\u9547\u9548\u9549\u954a\u954b\u954e\u954f\u9550\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599' + '\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95db\u95dc\u95dd\u95de\u95df\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95f3\u95f4\u95f5\u95f6\u95f7\u95fa\u95fb\u95fc\u95fd\u95fe\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u963a\u963b\u963c' + '\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u974b\u96c2\u96c3\u96c4' + '\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96b6\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754' + '\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u97a2\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u97a3\u979b\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da' + '\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u982c\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u986d\u98aa\u986e\u986f\u9870\u9871\u9860\u9872\u9873\u9874\u9875\u9876\u9877' + '\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98e1\u9902\u9903\u9904\u9905\u9906\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d' + '\u991e\u991f\u9920\u9921\u9922\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6' + '\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a26\u9a27\u9a28\u9a2a\u9a2b\u9a2f\u9a31\u9a32\u9a33' + '\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a7d\u9a7e\u9a93\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab7\u9ab8\u9ab9\u9aba\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac4\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add' + '\u9ade\u9adf\u9ae0\u9ae2\u9ae3\u9ae4\u9ae5\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b03\u9b04\u9b05\u9b06\u9b07\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b47\u9b48\u9b49\u9b4a\u9b61\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e' + '\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9baf\u9bb0\u9bb1\u9bb2\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bca\u9bcb\u9bcd\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bdb\u9bdc\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf5\u9bf6\u9bf7\u9bf9\u9bfc\u9bfd\u9c00\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0e\u9c0f\u9c10\u9c15\u9c17\u9c18\u9c1a\u9c1c\u9c1d\u9c1e\u9c1f\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c37' + '\u9c38\u9c39\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9f\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9caa\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb3\u9cb5\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc5\u9cc8\u9cca\u9ccc\u9cce\u9ccf\u9cd3\u9cd7\u9cd8\u9cdd\u9ce1\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02' + '\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d5e\u9d5f\u9d60\u9d61\u9d65\u9d66\u9d67\u9d68\u9d6f\u9d70\u9d71\u9d72\u9d75\u9d76\u9d79\u9d7a\u9d7b\u9d7f\u9d83\u9d84\u9d85\u9d87\u9d88\u9d8d\u9d8e\u9d8f\u9d90\u9d92\u9d93\u9d94\u9d96\u9d97\u9d98\u9d99\u9d9a\u9da4\u9d9e\u9d9f\u9da0\u9da1\u9da5\u9da6\u9da7\u9da9\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db8\u9dba\u9dbb\u9dbd\u9dc3\u9dc9\u9dca\u9dcc\u9dcd\u9dcf\u9dd2\u9dd3\u9dd5\u9dd6\u9dd9\u9dda\u9ddb' + '\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9df3\u9dfc\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e1a\u9e1b\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e4a\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e73\u9e74\u9e75\u9e76\u9e77\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e87\u9e88\u9e89\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e94\u9e95\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3' + '\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ece\u9ecf\u9ed1\u9ed2\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9ee2\u9ee3\u9ee6\u9ee7\u9eed\u9eee\u9ef5\u9ef6\u9ef7\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f08\u9f09\u9f0a\u9f0b\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f15\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f22\u9f21\u9f23\u9f24\u9f25\u9f26\u9f27\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f35\u9f36\u9f37\u9f38\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f61\u9f52\u9f53\u9f54\u9f55\u9f56' + '\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f8b\u9f8c\u9f8d\u9f83\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fb4\u9fab\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\u9fd6\u9fd7\u9fd8\u9fde\u9fdf\u9fe0\u9fe1\u9fe2\u9fe3\u9fe8\u9fe9\u9fea\u9ff1\u9ff2\u9ff3\u9ff7\u9ff8\u9ffa\u9ffb\u9ffc\u9ffd\u9ffe\u9fff\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua015\ua016\ua017' + '\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua023\ua021\ua022\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02e\ua02f\ua030\ua033\ua036\ua037\ua038\ua039\ua03a\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04e\ua04f\ua050\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0c4\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba' + '\ua0bb\ua0bc\ua0bd\ua0be\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua146\ua147\ua148\ua14d\ua14e\ua14f\ua150\ua152\ua153\ua154\ua155\ua158\ua159\ua15b\ua15d\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172' + '\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17e\ua17f\ua180\ua181\ua182\ua183\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua1a0\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1c2\ua1c3\ua1ca\ua1cb\ua1cc\ua1cf\ua1d0\ua1d1\ua1d2\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1df\ua1e0\ua1e1\ua1e3\ua1e5\ua1e6\ua1e7\ua1e8\ua1ea\ua1ec\ua1ee\ua1ef\ua1f0\ua1f3\ua1f5\ua1f6\ua1f8\ua1fa\ua1fc\ua1fd\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua226\ua227\ua228\ua229' + '\ua22a\ua22b\ua22c\ua231\ua232\ua233\ua234\ua223\ua235\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua248\ua249\ua24a\ua24b\ua250\ua251\ua252\ua253\ua254\ua258\ua259\ua25a\ua25b\ua255\ua25d\ua25e\ua25f\ua260\ua261\ua266\ua26a\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27f\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua293\ua294\ua295\ua296\ua299\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2aa\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b6\ua2b7\ua2b8\ua2bc\ua2be\ua2bf\ua2c0\ua2c1\ua2c3\ua2c4\ua2c5\ua2c6\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee' + '\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua308\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua335\ua336\ua337\ua338\ua339\ua32f\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua393\ua394\ua395\ua396\ua397\ua380\ua398\ua353\ua399\ua39a' + '\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3c2\ua3c3\ua3c4\ua3c5\ua3b7\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua434\ua42b\ua42c\ua42d\ua435\ua436\ua437\ua438\ua439\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua444\ua445\ua448\ua44a\ua44b\ua44d\ua44e\ua44f\ua450' + '\ua451\ua452\ua453\ua454\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua48d\ua48e\ua48f\ua490\ua491\ua492\ua493\ua494\ua495\ua4a6\ua496\ua497\ua498\ua499\ua49a\ua49b\ua49c\ua49d\ua49e\ua49f\ua4a0\ua4a1\ua4a2\ua4a7\ua4a8\ua4a9\ua4aa\ua4ab\ua4ac\ua4ad\ua4b1\ua4b2\ua4b3\ua4b4\ua4b5\ua4b6\ua4b7\ua4b8\ua4b9\ua4bc\ua4bd\ua4be\ua4bf\ua4c0\ua4c1\ua4c2\ua4c3\ua4c4\ua4c5\ua4c6\ua4c7\ua4c8\ua4c9\ua4ca\ua4cb\ua4cc\ua4cd\ua4ce\ua4cf\ua4d0\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6' + '\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua502\ua4f1\ua4f2\ua4f3\ua4f4\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\u8bb2\ua574\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596' + '\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5b1\ua5a7\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua600\ua5f6\ua5f7\ua5f8\ua5f9\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua60d\ua60e\ua60f\ua610\ua3f8\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua620\ua621\ua622\ua623\ua624\ua625\ua626\ua627\ua628\ua629\ua62a\ua62b\ua62c\ua62d\ua62e\ua62f\ua63c\ua630\ua631\ua632\ua63d\ua63e\ua63f' + '\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua65a\ua65b\ua65d\ua65e\ua65f\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua66b\ua66c\ua66d\ua66e\ua66f\ua670\ua671\ua672\ua673\ua674\ua675\ua677\ua678\ua679\ua67a\ua67b\ua67c\ua67d\ua67e\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua699\ua69a\ua69b\ua69c\ua69d\ua69e\ua69f\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a6\ua6a7\ua6a8\ua6ae\ua6a9\ua6aa\ua6ab\ua6ac\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cc\ua6ce\ua6cf\ua6d0\ua6d1\ua6d4\ua6d5\ua6d7\ua6d8' + '\ua6d9\ua6da\ua6db\ua6dd\ua6de\ua6e2\ua6e3\ua6e4\ua6e5\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua6f0\ua6f2\ua6f3\ua6f4\ua6f5\ua6f6\ua6f7\ua6f8\ua6fa\ua6fb\ua6fc\ua6fd\ua6fe\ua6ff\ua701\ua703\ua704\ua707\ua708\ua709\ua70a\ua70b\ua738\ua70c\ua710\ua711\ua712\ua713\ua716\ua717\ua718\ua71d\ua71e\ua720\ua721\ua725\ua726\ua72c\ua730\ua737\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua741\ua742\ua743\ua746\ua747\ua748\ua749\ua74a\ua74c\ua74d\ua74e\ua74f\ua750\ua757\ua758\ua759\ua75d\ua764\ua768\ua769\ua76d\ua770\ua771\ua772\ua773\ua774\u6a93\ua776\ua777\ua778\ua779\ua77a\ua77d\ua77e\ua77f\ua784\ua785\ua788\ua789\ua78a\ua78b\ua78c\ua78d\ua78e\ua792\ua793\ua794\ua795\ua796\ua79a\ua79b\ua79c\ua79d\ua79e\ua7a1\ua7a5\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7be\ua7ae' + '\ua7af\ua7b0\ua7b1\ua7b3\ua7b4\ua7b6\ua7b8\ua7b9\ua7bb\ua7bc\ua7bd\ua7bf\ua7c0\ua7c1\ua7c2\ua7c3\ua7c4\ua7c5\ua7c6\ua7ca\ua7cb\ua7cc\ua7cd\ua7d1\ua7d3\ua7d4\ua7d5\ua7d6\ua7d8\ua7d9\ua7da\ua7db\ua7dc\ua7dd\ua7df\ua7e0\ua7e1\ua7e3\ua7e4\ua7e5\ua7e6\ua7e7\ua7e8\ua7e9\ua7ea\ua7ee\ua7f0\ua7f1\ua7f2\ua7f3\ua7f5\ua7f6\ua7f7\ua7f8\ua7fa\ua7fb\ua7fc\ua7fd\ua800\ua801\ua802\ua803\ua804\ua805\ua808\ua809\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua817\ua818\ua819\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\ua823\ua824\ua825\ua827\ua828\ua829\ua82c\ua82d\ua82e\ua82f\ua830\ua831\ua832\ua833\ua834\ua835\ua836\ua83a\ua83b\ua83c\ua83d\ua83e\ua83f\ua842\ua843\ua844\ua847\ua848\ua849\ua84a\ua84b\ua84e\ua84f\ua850\ua851\ua852\ua853\ua857\ua858\ua859\ua85a\ua860\ua861\ua865\ua867' + '\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua874\ua875\ua876\ua877\u526c\ua878\ua879\ua87a\ua87b\ua87c\ua87e\ua87f\ua880\ua881\ua884\ua885\ua886\ua889\ua88c\ua88d\ua88e\ua88f\ua891\ua892\ua894\ua895\u6a94\u5cce\u4336\u8604\u9026\u9268\u979c\ua120\ua156\u96b7\u629e\u47d6\u9820\u4a1b\u3d38\u56f4\u4824\u821c\u4e6c\u4100\u436c\u8d7f\u4a2e\u6a95\u71a0\u8411\u86c3\u8c77\u92d5\u727a\u5eac\u75d0\u754a\u3ec8\u5333\u5334\u838f\u8acb\u668c\u48ca\u7401\u99bd\ua3d6\u415c\u832d\u8490\u99ff\ua455\u3cfa\u3cfd\u3fef\u401c\u408d\u4191\u5a80\u6226\u6319\u765c\u76fd\u7df6\u7f24\u7f32\u7f48\u820a\u86c4\u9bd0\u9cb1\ua449\u6aeb\u63db\u73dc\u9971\u523d\u7a76\u67d6\u6d5a\u8e9c\ua3f9\ua464\ua483\ua484\ua4a3\ua4ba\ua4bb\ua698\ua7eb\ua7ec\u0000\u0000\u0000' + '\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892' + '\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912' + '\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992' + '\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12' + '\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92' + '\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12' + '\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92' + '\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12' + '\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92' + '\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u0000\u0000\u0000\u0fa3\u0fa4\u0fa5\u0fa6\u0fa7\u0fa8\u0fa9\u0faa\u0fab\u0fac\u0fad\u0fae\u0faf\u0fb0\u0fb1\u0fb2\u0fb3\u0fb4\u0fb5\u0fb6\u0fb7\u0fb8\u0fb9\u0fba\u0fbb\u0fbc\u0fbd\u0fbe\u0fbf\u0fc0\u0fc1\u0fc2\u0fc3\u0fc4\u0fc5\u0fc6\u0fc7\u0fc8\u0fc9\u0fca\u0fcb\u0fcc\u0fcd\u0fce\u0fcf\u0fd0\u0fd1\u0fd2\u0fd3\u0fd4\u0fd5\u0fd6\u0fd7\u0fd8\u0fd9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc2\u3cc0\u3cc3\u3cc1\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3ca0\u3ca1\u3ca2\u3ca3\u3ca5\u3ca4\u0228\u0299' + '\u32c1\u32c2\u32c3\u32c4\u32c5\u32c6\u32c7\u32c8\u32c9\u32ca\u32cb\u32cc\u32cd\u32cf\u32d0\u32d1\u32d2\u32d3\u32d4\u32d5\u32d6\u32d7\u32d8\u32d9\u32da\u32db\u32dc\u32dd\u32de\u32df\u32e0\u32e2\u32e3\u32e4\u32e5\u32e6\u32e7\u32e8\u32e9\u32ea\u32eb\u32ec\u32ed\u32ee\u32ef\u32f0\u32f1\u32f2\u32f3\u32f4\u32f5\u32f6\u32f8\u32f9\u32fa\u32fb\u32fc\u32fd\u32fe\u32ff\u3300\u3301\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309\u330a\u330b\u330d\u330e\u330f\u3310\u3311\u3312\u3313\u3314\u3315\u3316\u3317\u3319\u331a\u331b\u331c\u331d\u331e\u3321\u3322\u3324\u3325\u3326\u3327\u3328\u3329\u332b\u332c\u332d\u332e\u332f\u3330\u3331\u3332\u3333\u3334\u3336\u3337\u3338\u3339\u333b\u333c\u333d\u333e\u333f\u3340\u3341\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349\u334a\u334b' + '\u334c\u334d\u334e\u334f\u3350\u3351\u3353\u3354\u3356\u3357\u3358\u3359\u335a\u335b\u335c\u335d\u335e\u335f\u3360\u3361\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369\u336a\u336b\u336c\u336d\u336e\u336f\u3370\u3371\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379\u337a\u337b\u337c\u337d\u337e\u337f\u3380\u3381\u3382\u3384\u3385\u3386\u3387\u3388\u3389\u338a\u338b\u338c\u338d\u338e\u338f\u3390\u3391\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399\u339a\u339c\u339d\u339e\u339f\u33a0\u33a1\u33a4\u33a5\u33a6\u33a7\u33a8\u33a9\u33aa\u33ac\u33ad\u33ae\u33af\u33b0\u33b1\u33b2\u33b3\u33b4\u33b5\u33b6\u33b7\u33b8\u33b9\u33ba\u33bb\u33bc\u33bd\u33be\u33bf\u33c0\u33c1\u33c2\u33c3\u33c4\u33c5\u33c6\u33c7\u33c8\u33c9\u33ca\u33cb\u33cc\u33cd\u33ce\u33cf\u33d0\u33d1\u33d2' + '\u33d3\u33d4\u33d5\u33d6\u33d7\u33d8\u33d9\u33da\u33db\u33dc\u33dd\u33de\u33df\u0229\u029a\u027f\u331f\u3335\u3355\u32ce\u32e1\u32f7\u330c\u3318\u3320\u3323\u332a\u3352\u3383\u339b\u33a3\u33ab\u10c0\u10f2\u116b\u11bf\u1203\u1243\u127c\u12b1\u12e7\u131c\u333a\u33a2\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1bc0\u1bbf\u1bc6\u1bc5\u1bca\u1bc9\u1be4\u1be3\u1beb\u1be9\u1c7d\u1c7a\u1c98\u1c97\u1cc8\u1cc7\u1cd1\u1cd0\u1ce2\u1ce1\u1ceb\u1cea\u1cee\u1cec\u1cfa\u1cf9\u1cff\u1cfe\u1d03\u1d02\u1d13\u1d12\u1ca1\u1ca0\u1b9c\u1b9b\u1c0e\u1c0d\u1c19\u1c18\u1c38\u1c31\u1c39\u1c32\u1c3a\u1c33\u1c34\u00c4\u0000\u0000\u0000\u0417\u1bab\u1bd4\u1be1\u1c6c\u1ccd\u1cd3\u1cd8\u1c93\u0059\u005a\u0463\u1cca' + '\u1b98\u1b97\u1bd2\u1bd1\u1bb7\u1bb6\u1cb8\u1cb7\u1bce\u1bcd\u1c68\u1c67\u1c62\u1c61\u1ca3\u1ca2\u1ca7\u1ca6\u1cb0\u1caf\u1c91\u1c90\u1cc3\u1cc2\u1c3b\u1c35\u1c3c\u1c36\u1ccf\u1cda\u1c81\u1cf4\u33e0\u33e1\u33e2\u33e3\u33e4\u33e5\u33e6\u33e7\u33e8\u33e9\u33ea\u33eb\u33ec\u33ed\u33ee\u33ef\u33f0\u33f1\u33f2\u33f3\u33f4\u33f5\u33f6\u33f7\u33f8\u33f9\u33fa\u33fb\u33fc\u33fd\u33fe\u33ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u0145\u0146\u02d4\u029b\u0265\u022a\u0239\u0280\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0530\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u1972\u1971\u197e\u197d\u1532\u1531\u180b\u180a\u195e\u195d\u1960\u195f\u1962\u1961\u14be\u17d0\u138a\u1389\u138d\u138c\u138f\u138e\u1393\u1392\u1383\u1382\u1395\u1394\u1401\u1400\u15cb\u15ca\u15cd\u15cc\u15cf\u15ce\u1602\u1601\u1605\u1604\u1711\u1710\u1707\u1706\u16f0\u16ef\u1738\u1737\u173e\u173d\u1740\u173f\u174f\u174e\u1751\u1750\u1785\u1783\u17a4\u17a3\u18a6\u18a5\u18a3\u18a2\u193a\u1939\u1949\u1948\u194b\u194a\u194f\u194e\u1954\u1953\u1956\u1955\u1959\u1957\u195a\u1443\u161a\u1653\u168f\u17a1\u17a2\u1819\u195b\u1423\u1422\u14b5\u14b4\u14e4\u14f8\u14f7' + '\u161d\u161c\u1777\u1776\u17c1\u17c0\u1800\u17ff\u0544\u0545\u0546\u1974\u1973\u187c\u1618\u1975\u1689\u1688\u13f7\u13f6\u13f8\u1527\u13c7\u13c6\u14c1\u14c0\u134c\u134a\u16ae\u16ac\u1836\u1834\u14e2\u14e1\u15af\u15ae\u166c\u166b\u176d\u176c\u17b9\u17b8\u1529\u14a0\u14eb\u1611\u1574\u174d\u15d1\u181b\u1598\u18eb\u13cf\u13cd\u1714\u1713\u1874\u1873\u139c\u139b\u1581\u1580\u187a\u1879\u0000\u0000\u18cc\u18cb\u13f9\u17d6\u192e\u1438\u1437\u17d2\u17d1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1530\u152f\u1577\u1519\u16ee\u1883\u14c8\u1741\u1651\u1576\u1652' + '\u2866\u2867\u2868\u2869\u286a\u286b\u286c\u286e\u286f\u2870\u2871\u0176\u2872\u2873\u2874\u2875\u2876\u2877\u2878\u2879\u287a\u287b\u287c\u287d\u287e\u287f\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887\u2888\u2889\u288a\u288b\u288c\u288d\u0571\u0572\u0573\u0574\u286d\u0000\u0000\u0000\u1025\u1026\u1027\u1028\u1029\u102a\u0575\u0576\u107c\u0577\u0000\u0000\u0000\u0000\u0000\u0000\u2a73\u2a74\u2a75\u2a76\u2a77\u2a78\u2a79\u2a7a\u2a7f\u2a80\u2a81\u2a82\u2a83\u2a84\u2a85\u2a86\u2a87\u2a88\u2a89\u2a8a\u2a8c\u2a8d\u2a8e\u2a8f\u2a92\u2a95\u2a96\u2a98\u2a99\u2a9c\u2aa1\u2aa2\u2aa3\u2aa4\u2a9d\u2a9e\u2a9f\u2aa0\u2aa5\u2a8b\u2a90\u2a7b\u2a7c\u2a7d\u2a7e\u2a91\u2a97\u2a9a\u2a9b\u2a93\u2a94\u2aa6\u04b6\u04b7\u02a9\u02aa\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0177\u0189\u288e\u288f\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897\u2898\u2899\u289a\u289b\u289c\u289d\u289e\u289f\u28a0\u28a1\u28a2\u28a3\u28a4\u28a5\u28a6\u28a7\u28a8\u28a9\u28aa\u28ab\u28ac\u28ad\u28ae\u28af\u28b0\u28b1\u28b2\u28b3\u28b4\u28b5\u28b6\u28b7\u28b8\u28b9\u28ba\u28bb\u28bc\u28bd\u28be\u28bf\u28c0\u28c1\u28c2\u28c3\u28c4\u28c5\u28c6\u28c7\u28c8\u28c9\u28ca\u28cb\u28cc\u28cd\u28ce\u28cf\u28d0\u0161\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u02a5\u02a6\u10c1\u10f3\u116c\u11c0\u1204\u1244\u127d\u12b2\u12e8\u131d\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u258e\u258f\u2590\u2591\u2592\u2593\u0474\u0475\u0476\u2594\u0477\u2532\u2548\u25a9' + '\u10c2\u10f4\u116d\u11c1\u1205\u1245\u127e\u12b3\u12e9\u131e\u2b9d\u2b9e\u2b9f\u2ba0\u2ba1\u2ba2\u2ba3\u2ba4\u2ba5\u2ba6\u2ba7\u2ba8\u2ba9\u2baa\u2bab\u2bac\u2bad\u2bae\u2baf\u2bb0\u2bb1\u2bb2\u2bb3\u2bb4\u2bb5\u2bb6\u2bb7\u2bb8\u2bb9\u2bba\u2bbb\u2bbc\u2bbd\u01a3\u01a4\u01a5\u04bc\u02ad\u2b79\u2b7a\u2b7b\u2b7c\u2b7d\u2b7e\u2b7f\u2b80\u2b81\u2b82\u2b83\u2b84\u2b85\u2b86\u2b87\u2b88\u2b89\u2b8a\u2b8b\u2b8c\u2b8d\u2b8e\u2b8f\u2b90\u2b91\u2b92\u2b93\u2b94\u2b95\u2b96\u2b97\u2b98\u2b99\u2b9a\u2b9b\u2b9c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u02d5\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u0000\u0000\u0000' + '\u0162\u0178\u018f\u018a\u2dfe\u2dff\u2e00\u2e01\u2e02\u2e03\u2e04\u2e05\u2e06\u2e07\u2e08\u2e09\u2e0a\u2e0b\u2e0c\u2e0d\u2e0e\u2e0f\u2e10\u2e11\u2e12\u2e13\u2e14\u2e15\u2e16\u2e17\u2e18\u2e19\u2e1a\u2e1b\u2e1c\u2e1d\u2e1e\u2e1f\u2e20\u2e21\u2e22\u2e23\u2e24\u2e26\u2e27\u2e29\u2e2a\u2e2b\u2e2c\u2e2d\u2e2e\u0153\u2e2f\u2e30\u2e32\u2e33\u2e34\u2e35\u2e37\u2e38\u2e31\u2e36\u2e25\u2e28\u2e39\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u0261\u02b8\u02b9\u02d0\u02d1\u02d2\u02d3\u0000\u1057\u10c3\u10f5\u116e\u11c2\u1206\u1246\u127f\u12b4\u12ea\u131f\u0000\u0000\u0000\u0000\u04bd\u04be\u2bc7\u2bcf\u2bd9\u2bef\u2c08\u2c54\u1058\u2be1\u2c03\u2bc5\u2bc8\u2bd4\u2bdb\u2be9\u2bec\u2bf0\u10c4\u10f6\u116f\u11c3\u1207\u1247\u1280\u12b5\u12eb\u1320\u2c25\u2bf5\u2bf8\u2c06\u2c09\u0000' + '\u2d73\u2d74\u2d75\u2d76\u2d77\u2d78\u2d79\u2d7a\u2d7b\u2d7c\u2d7d\u2d7e\u2d7f\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2d97\u2d98\u2d99\u2d9a\u2d9b\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da7\u2da8\u2da9\u2d9c\u2d9d\u2d9e\u2d9f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2daa\u2dab\u2dac\u2dad\u2dae\u2daf\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db7\u0000\u0000\u10c5\u10f7\u1170\u11c4\u1208\u1248\u1281\u12b6\u12ec\u1321\u0000\u0000\u04bf\u02ba\u02bb\u02bc\u2bc4\u2bcd\u2bd0\u2bd3\u2bda\u2be0\u2be4\u2be6\u2be8\u2beb\u2bf7\u2bfb\u2c1d\u2c20\u2c22\u2c01\u1059\u2c23\u2bd6\u2c0f\u2c6c\u2c6d\u2c6e\u05a0\u05a1\u05a2\u2c10\u2c69\u2c6a\u2c6b\u2bd1\u2bdd' + '\u2985\u2986\u2987\u2988\u2989\u298a\u298b\u298c\u298d\u298e\u298f\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997\u2998\u2999\u299a\u299b\u299c\u299d\u299e\u299f\u29a0\u29a1\u29a2\u29a3\u29a4\u29a5\u29a6\u29a7\u29a8\u29a9\u29aa\u29ab\u29ac\u29ad\u29ae\u29af\u29b0\u29b1\u29b2\u29b3\u29b4\u29b5\u29b6\u29b7\u29b8\u29b9\u29ba\u29bb\u29bc\u29bd\u29be\u29bf\u29c0\u29c1\u29c2\u29c3\u01a0\u29c4\u01a1\u29c5\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u29c6\u29c7\u105a\u0481\u0482\u2843\u2844\u2845\u2846\u2847\u2848\u2849\u284a\u284b\u284c\u284d\u2856\u2857\u2858\u2859\u285a\u02bd\u0281\u2827\u105b\u105c\u285b\u2865\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u23ac\u23ad\u23ae\u23af\u23b0\u23b1\u0000\u0000\u2473\u2474\u2475\u2476\u2477\u2478\u0000\u0000\u2454\u2455\u2456\u2457\u2458\u2459\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u0000\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u0000\u13a8\u13a0\u1487\u1488\u148c\u14bf\u14ed\u1612\u160d\u160f\u1650\u168e\u1693\u16f4\u16fd\u1703\u16f9\u16f7\u16f8\u16fa\u16fb\u177e\u1782\u1799\u179a\u1795\u179b\u179c\u179d\u17e0\u1868\u1872\u186d\u186e\u1877\u18ea\u18ec\u18ed\u18e6\u18e7\u18e8\u18e9\u190f\u0547\u1533\u1613\u160c\u1878\u1950\u1951\u1705\u1952\u13ad\u1aee\u1432\u1808\u17a0\u18d1\u04f8\u04f9\u0000\u0000\u0000\u0000\u2ee2\u2ee4\u2ee6\u2ee8\u2eea\u2eec\u2eee\u2ef0\u2ef2\u2ef4\u2ef6\u2ef8\u2efa\u2efc\u2efe\u2f00' + '\u2f02\u2f04\u2f06\u2f08\u2f0a\u2f0c\u2f0e\u2f10\u2f12\u2f14\u2f16\u2f18\u2f1a\u2f1c\u2f1e\u2f20\u2f22\u2f24\u2f26\u2f28\u2f2a\u2f2c\u2f2e\u2f30\u2f32\u2f34\u2f36\u2f38\u2f3a\u2f3c\u2f3e\u2f40\u2f42\u2f44\u2f46\u2f48\u2f4a\u2f4c\u2f4e\u2f50\u2f52\u2f54\u2f56\u2f58\u2f5a\u2f5c\u2f5e\u2f60\u2f62\u2f64\u2f66\u2f68\u2f6a\u2f6c\u2f6e\u2f70\u2f72\u2f74\u2f76\u2f78\u2f7a\u2f7c\u2f7e\u2f80\u2828\u2829\u282a\u282b\u282c\u282d\u282e\u282f\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837\u2838\u2839\u283a\u283b\u283c\u283d\u283e\u283f\u2840\u2841\u2842\u285c\u285d\u285e\u285f\u2860\u2861\u2862\u2863\u284e\u284f\u2850\u2851\u2852\u2853\u2854\u2855\u02be\u0191\u2864\u0000\u0000\u10c6\u10f8\u1171\u11c5\u1209\u1249\u1282\u12b7\u12ed\u1322\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u0000\u0000\u0000\u0000\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\uab2c\ua9c8\uab3e\uab33\uaa0a\ua8a9\ua915\uabe6\uabe7\ua93f\uab62\ua91e\ua93e\ua998\uaa58\uaab8\uaaf6\uaafc\uab06\uab54\ua9dd\ua9fd\uaa18\uaa3c\uaaec\uab5b\uabaf\ua8b4\ua90e\ua9e2\uaa1f\uaaf5\uabc3\ua960\uaa10\uaaf1\uab09\ua9a0\uaad1\uaafd\ua971\ua9cd\uaa01\uaa32\uab57\ua8c6\ua8e0\ua8f7\ua9aa\ua9e1\uaa1e\uaa61\uaac0\uaaf3\uaaf9\uab3c\uab87\uabbd\uabc2\uaa6d\uaa81\uaaa5\uaae9\uab67\uabc7\uab1c\ua934\ua978\uaa98\uaaca\uaa2c\uaa6f\uab31\uab86\ua933\ua959\ua9e0\uaa04\uaa0c\uaaa3\uaaab\uab75\ua8f6\uaad0\ua8e3\ua8e2\uaa8a\uaaa6\uaaeb\uab77\uab27\ua9a1\ua9de\uab20\ua8ac\ua94b\ua988\uaa37\uaa50\ua8fd\uaa71\ua8c9\ua982\ua8a2\ua9fa\ua9b0\uaaa2\ua912\ua930\uaa65\uaaed\uab17\ua9ec\uab47\ua9f9\ua9a3\uaae6\ua9a5\uaa4f\ua8bc\ua8d4\ua8e1\ua9da\uaa9e\uaade\uab1b\uab61\ua8f9' + '\ua91a\ua941\ua975\ua9b7\uaa11\uaa72\uab6f\uabb0\uabc9\uabd1\ua8f0\ua9c6\ua9e6\uab44\ua96a\ua995\ua999\ua9a9\uaa0f\uaa19\uaa42\uaa88\uaaa7\uaac9\uab40\uaaef\uab4e\uab68\ua8ec\ua8f2\ua91b\uaa17\uab03\uab18\ua970\ua987\ua9a4\ua9ea\uaa97\uaa35\ua8c1\ua929\ua94c\ua961\ua989\uaa3b\uaa40\uaabd\uaac8\uab65\uab85\uab88\uab9a\ua8c7\uaa85\uab5d\uab7e\ua98d\ua8b6\ua8cb\ua94d\ua958\ua9b4\ua9df\uaa1c\uaa57\uaaf0\uab53\uabe1\ua9c3\uab74\ua8ef\ua9d4\ua9d6\ua9ff\uaa07\uaa3e\uaa4e\uaa6c\uaaa1\uab9d\ua8d7\ua99b\uab78\ua8ca\ua95f\uaa05\uab41\ua981\ua98f\ua9d7\uaa38\uab7a\ua8ed\ua918\ua95b\ua9bf\ua9d2\ua9dc\ua9fb\uaa3d\uaa54\uaab7\uab04\uab05\uab5f\uab80\ua901\uaa08\ua919\uaa1d\uaa43\uaaf2\uab7b\uabbe\uabca\ua9d5\uaa03\uaad3\uaa8f\uaa93\uaa9b\uaa31\uaa16\uab26\ua8c0\uaae7\ua8ee' + '\ua8eb\ua96f\ua9a2\uaa9d\ua949\ua9fe\ua9c5\uab43\uaaff\uab76\uab0e\ua973\ua8cf\ua922\u441d\u48f9\ua92e\u5023\ua9c1\u6003\u6072\ua8e4\uaa33\uaa5d\uaa76\uaa7f\uaa80\uaa84\uab8b\uaa9c\uaabe\u8605\uaaf4\u8789\uab1e\u9034\u938c\uab4f\uab59\u9742\u979d\u9b9c\uaba7\uaba8\uaba9\uabc1\uab58\uab7d\ua8c8\ua8cc\ua8d1\ua8f5\ua8f8\ua907\ua920\ua924\ua925\ua92d\ua931\ua95a\ua95c\ua98b\ua992\ua993\ua996\ua9ae\ua9ba\ua9c4\ua9db\uaa02\uaa06\uaa0d\uaa1a\uaa21\uaa3f\uaa6e\uaa77\uaa7a\uaa79\uaa7b\uaa7c\uaa7d\uaa82\uaa83\uaa8b\uaa8d\uaa95\uaaa8\uaaaa\uaaac\uaab6\uaac3\uaad5\uaae1\uaae2\uaaee\uab07\uab10\uab22\uab24\uab34\uab35\uab4a\uab50\uab81\uab95\uab9b\ua98a\uabf4\uaada\u0000\u0000\ua8a4\ua8df\ua8d3\ua8c5\ua8d0\ua8d9\ua8f4\ua8fb\ua921\ua91d\ua91f\ua923\ua92f\ua932\ua93d\ua940' + '\ua944\ua945\ua972\ua974\ua97f\ua983\ua98c\ua990\ua98e\ua994\ua991\ua997\ua99c\ua9a6\ua9a7\ua9a8\ua9af\ua9c2\ua9ce\ua9cf\ua9d3\ua9e7\ua9ed\uaa00\uaa0b\uaa09\uaa0e\uaa12\uaa1b\uaa68\uaa24\uaa30\uaa34\uaa41\uaa46\uaa4d\uaa55\uaa56\uaa5e\uaa5f\uaa64\uaa67\uaa66\uaa70\uaa8e\uaa96\uaa9a\uaaa4\uaaa9\uaaaf\uaac4\uaae8\uaaea\uaafb\uab08\uab0d\uab11\uab19\uab1f\uab1a\uab23\uab21\uab1d\uab25\uab28\uab36\uab42\uab52\uab5c\uab66\uab79\uab82\uab8c\uab91\uab96\uab99\uab9c\uabb6\uabe8\uabf2\uabf1\uabf3\uabee\uabef\uabf0\uabf5\uabf6\uabf7\uabda\uabe4\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000' + '\u14b7\u14ba\u14bb\u14b8\u14b9\u17cb\u17ce\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1e52\u1e4f\u1e50\u1e68\u1e51\u0000\u0000\u0000\u0000\u0000\u1e9a\u00d6\u1e9e\u1eb2\u1e7c\u1e8a\u1e8d\u1ea0\u1ea6\u1ea9\u1ebe\u1ec7\u0678\u1ec2\u1ec1\u1ec5\u1ec4\u1e7d\u1e7e\u1e7f\u1e83\u1e87\u1e8b\u1e8e\u1e91\u1e95\u0000\u1e98\u1e9b\u1ea3\u1ea2\u1ea7\u0000\u1eab\u0000\u1eae\u1eb0\u0000\u1eb6\u1eb5\u0000\u1eba\u1ebc\u1ebf\u1ec3\u1ec8\u1e90\u1e84\u1ea4\u1eb7\u1e80\u1ef0\u1eef\u1f4e\u1f4d\u1f4b\u1f4c\u1f53\u1f52\u1f50\u1f51\u1f58\u1f57\u1f55\u1f56\u1fa9\u1fa8\u1fa6\u1fa7\u1fb0\u1faf\u1fad\u1fae\u1fa4\u1fa3\u1fa1\u1fa2\u212a\u2129\u2127\u2128\u2131\u2130\u212e\u212f\u1fd1\u1fd0\u1fce\u1fcf\u1fcc\u1fcb\u1fc9\u1fca\u1fd6\u1fd5\u1fd3\u1fd4\u1fdc\u1fdb' + '\u1fd9\u1fda\u201a\u2019\u2017\u2016\u201e\u201d\u2011\u2010\u2038\u2037\u202f\u202e\u216c\u216b\u2169\u216a\u217c\u217b\u2179\u217a\u2189\u2188\u2186\u2187\u2183\u2182\u2180\u2181\u2208\u2207\u220e\u220d\u220b\u220c\u2233\u2232\u222c\u222b\u2229\u222a\u2227\u2226\u2224\u2225\u2292\u2291\u2295\u2294\u0554\u0555\u0556\u0557\u0558\u0559\u055a\u055b\u055c\u055d\u055e\u055f\u0560\u0561\u0562\u0563\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2175\u2174\u2172\u2173\u2243\u2242\u2240\u223f\u2248\u2247\u2245\u224f\u224e\u223d\u223c\u224b\u224a\u2286\u2285\u2283\u2284\u2256\u2257\u1f00\u1eff\u1f10\u1f0f\u1f12\u1f11\u1f16\u1f15\u1f14\u1f13\u1f18\u1f17\u1f22\u1f21\u1f20\u1f1c\u1f1a\u1f19\u227f\u227e\u227c\u227d' + '\u1f02\u1f04\u1f0b\u1f1d\u1f1f\u1f36\u1f38\u1f3b\u1f42\u1f47\u1f49\u1f6e\u1f73\u1f78\u1f81\u1f8b\u1f8d\u1f93\u1f99\u1f9d\u1f9f\u1fba\u1fbf\u1fe7\u1fea\u1ff7\u1ff8\u1ffa\u2049\u204e\u2052\u2059\u2099\u20a5\u20b2\u20b4\u20b8\u20be\u20cd\u20d0\u20e0\u20e9\u20ee\u20fd\u20ff\u2114\u2116\u2118\u211c\u211f\u2121\u213b\u213e\u2144\u2146\u2152\u2154\u2156\u2158\u215c\u2160\u2165\u2167\u219f\u21a6\u21ac\u21b2\u21b8\u21ba\u21ca\u21d0\u21d6\u21dc\u21de\u21df\u21e9\u21f1\u21f6\u21fc\u2203\u2205\u221c\u221e\u2221\u2222\u2264\u2267\u226a\u2270\u2278\u227a\u200e\u2027\u225b\u01cb\u01cc\u01ce\u01d0\u01d2\u01d3\u1f06\u1f07\u1f0a\u1f0c\u1f1b\u1f1e\u1f3d\u1f3e\u1f41\u1f43\u1f46\u1f48\u1f7c\u1f7d\u1f80\u1f87\u1f8a\u1f8c\u1f94\u1f95\u1f98\u1f9a\u1f9c\u1f9e\u211e\u2120\u2143\u2145' + '\u2151\u215b\u215f\u2164\u2166\u21b1\u21b7\u21b9\u21c8\u21db\u21f7\u21f8\u21fb\u21ff\u2202\u2204\u225a\u226b\u226c\u226f\u2274\u2277\u2279\u1f01\u1f03\u1f05\u1f08\u1f0d\u1f35\u1f37\u1f3a\u1f3f\u1f44\u1f6d\u1f72\u1f77\u1f7e\u1f88\u1f96\u1fb9\u1fbe\u1fe6\u1fe9\u1ff6\u1ff9\u2047\u204c\u2050\u2057\u2098\u209d\u20a4\u20b1\u20b3\u20b7\u20bd\u20cc\u20de\u20e8\u20ed\u20fc\u20fe\u2113\u2115\u2117\u211b\u213a\u213d\u2153\u2155\u2157\u2159\u215d\u219e\u21a5\u21ab\u21af\u21b6\u21c9\u21cf\u21d5\u21da\u21e8\u21f0\u21f5\u21f9\u2200\u221b\u221d\u221a\u2263\u2266\u2269\u226d\u2275\u1f09\u1f0e\u1f40\u1f45\u1f7f\u1f89\u1f97\u1f9b\u2058\u2060\u207d\u2085\u215a\u215e\u21b0\u21fa\u2201\u226e\u2276\u01cd\u01cf\u01d1\u20d6\u20d8\u20f4\u20f6\u2104\u2106\u2062\u2064\u2087\u2089\u1fee' + '\u1ff0\u1fc5\u1fc7\u1ffc\u1ffe\u20a9\u20ab\u20c0\u20c2\u206d\u2072\u2079\u207f\u207b\u2056\u209f\u20bc\u20d5\u20d7\u20f3\u20f5\u2103\u2105\u2061\u2063\u2086\u2088\u1fed\u1fef\u1fc4\u1fc6\u1ffb\u1ffd\u20a8\u20aa\u20bf\u20c1\u206c\u2071\u2078\u207e\u207a\u2055\u209e\u20bb\u206a\u206f\u2076\u207c\u205f\u2084\u20ce\u2048\u204d\u2051\u206b\u2070\u2077\u20cf\u20df\u1f2a\u1f2b\u0400\u0401\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1f6f\u1f75\u1f74\u1f76\u1f79\u1f82\u1f83\u1f84\u1fc1\u1fc0\u1fec\u1feb\u204f\u204a\u204b\u205c\u205b\u205a\u205e\u205d\u209b\u209a\u20a7\u2074\u2073\u206e\u2081\u2080\u2083\u2082\u20b5\u20ba\u20b9\u20d2\u20d1\u20d3\u20d4\u20eb\u20f0\u20ef\u20f1\u2100\u2102\u2101\u211a\u2119\u2140\u2141' + '\u21a8\u21aa\u21a9\u21a0\u21a1\u21ae\u21ad\u21b4\u21b3\u21d1\u21d2\u21d4\u21cb\u21cd\u21d7\u21d8\u0000\u0000\u21cc\u221f\u2220\u21f2\u21f3\u21ed\u21ec\u21ee\u21fe\u21fd\u2272\u2271\u1f3c\u1f71\u1f70\u1f7b\u1f7a\u1f86\u1f85\u1fc3\u1fbb\u1fc2\u2053\u209c\u2075\u20b6\u21a4\u21b5\u2268\u2265\u2273\u21dd\u2142\u21f4\u213f\u21a7\u20f2\u2163\u21ea\u21d9\u21a2\u2162\u21a3\u21eb\u1fbc\u1fe8\u21ce\u211d\u1f39\u2161\u20ea\u20a6\u2054\u21ef\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u20a3\u213c\u1f2e\u1f2d\u21d3\u20a0\u2028\u20ec\u2239\u20a1\u20a2\u1fbd\u2029\u0553\u0000\u0000' + '\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0219\u022e\u029e\u023e\u0235\u0269\u0273\u03f9\u03fb\u028b\u0000\u0000\u0000\u0000\u0000\u0000\u00c1\u0000\u00be\u0000\u0000\u0000\u0000\u0093\u0000\u00bf\u0000\u0000\u0000\u0000\u00c3\u0000\u0289\u0209\u0206\u01f7\u01f8\u0300\u0377\u0381\u0385\u03f4\u03f7\u03ef\u03f1\u03e1\u03e3\u03dc\u03df\u03e6\u03e9\u03eb\u03ed\u022f\u0230\u037a\u037d\u01ee\u01ef\u01f0\u01f1\u01f4\u01f5\u01f6\u0218\u022c\u0287\u0000\u0234\u023d\u0272\u0268\u0208\u02fd\u0374\u0380\u0384\u03f3\u03f6\u0425\u0420\u0413\u0679\u01fc\u0681\u068d\u0685\u0000\u041c\u106f\u0428\u0410\u0000\u0000\u0000\u0000\u00ed\u00ec\u00f1\u0000\u00f5\u0000\u00fa\u00f9\u0100\u00ff\u0105\u0104\u010b\u010a\u010f\u010e' + '\u1ee5\u1ee9\u1ee8\u1eec\u1eeb\u1ef3\u1ef2\u1ef6\u1ef5\u1efe\u1efd\u1efb\u1efc\u1f29\u1f28\u1f34\u1f33\u1f31\u1f32\u1f67\u1f66\u1f6c\u1f6b\u1f69\u1f6a\u1f92\u1f91\u1f8f\u1f90\u1fb8\u1fb7\u1fb5\u1fb6\u1fe5\u1fe4\u1fe2\u1fe3\u1ff5\u1ff4\u1ff2\u1ff3\u200a\u2009\u200d\u200c\u2026\u2025\u202c\u202b\u2046\u2045\u2043\u2044\u2069\u2068\u2066\u2067\u2097\u2096\u2094\u2095\u20b0\u20af\u20ad\u20ae\u20cb\u20ca\u20c8\u20c9\u20dd\u20dc\u20da\u20db\u20e7\u20e6\u20e4\u20e5\u20fb\u20fa\u20f8\u20f9\u2112\u2111\u210f\u2110\u2139\u2138\u2136\u2137\u2150\u214f\u214d\u214e\u2195\u2194\u2192\u2193\u21c6\u21c5\u21c3\u21c4\u21e7\u21e6\u21e4\u21e5\u2219\u2218\u2216\u2217\u2237\u2236\u2259\u2258\u2261\u2260\u225e\u225f\u2197\u2196\u2199\u2198\u219b\u219a\u219d\u219c\u0000\u0000\u0000' + '\u0000\u0267\u02f0\u0424\u106e\u0427\u041f\u02e8\u02fc\u0373\u0412\u0677\u0217\u01fb\u0285\u0419\u10c7\u10f9\u1172\u11c6\u120a\u124a\u1283\u12b8\u12ee\u1323\u023c\u0233\u0680\u0684\u068c\u0271\u040f\u1335\u13b3\u13d6\u1409\u144c\u14ae\u14cf\u1504\u153f\u158b\u15a3\u15d9\u1626\u1659\u169a\u171e\u1749\u175c\u17aa\u17eb\u1821\u1891\u18b8\u18d8\u18f2\u1917\u0379\u041b\u037c\u04c8\u01f3\u04c2\u1331\u13af\u13d1\u1403\u1446\u14aa\u14ca\u14ff\u1538\u1587\u159e\u15d3\u1621\u1655\u1695\u171a\u1746\u1757\u17a6\u17e7\u181d\u188c\u18b3\u18d3\u18ef\u1913\u037f\u0692\u0383\u0696\u0397\u0399\u029d\u03e5\u03e8\u022d\u0215\u37c1\u3647\u3652\u365b\u3665\u366e\u3779\u3782\u378a\u36e2\u1067\u3649\u3654\u365d\u3667\u3670\u3678\u3684\u3693\u369e\u36a6\u36af\u36b8\u36c1\u36c7\u36cf' + '\u36d5\u36dc\u36e4\u36eb\u36f3\u36fb\u3700\u3705\u3709\u370d\u3713\u3720\u372d\u373a\u374a\u3758\u3762\u376a\u376e\u3775\u377b\u3784\u378c\u3793\u3798\u379f\u37a6\u37ad\u37b2\u37c6\u00a5\u00a7\u350f\u3433\u3437\u35a4\u343b\u35a8\u35ab\u3440\u3444\u3448\u35b0\u35b3\u35b6\u35b9\u35bc\u35bf\u3493\u344d\u3452\u3456\u34a0\u345a\u345e\u3462\u3468\u346d\u3471\u3477\u347c\u3481\u3486\u0000\u0000\u0000\u3512\u3515\u3518\u351b\u351e\u3521\u0000\u0000\u3524\u3527\u352a\u352d\u3530\u3533\u0000\u0000\u3536\u3539\u353c\u353f\u3542\u3545\u0000\u0000\u3548\u354b\u354e\u0000\u0000\u0000\u106c\u1071\u0690\u04ca\u0694\u1073\u1089\u0000\u08b9\u05ef\u05f5\u05f2\u05f7\u0958\u0984\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u1018\uabf8\u0000\u0000'; /// Kangxi Radicals (U+2F00-U+2FD5) โ†’ CJK Unified equivalents. /// ICU decomposes these via NFD before collation. @@ -225,12 +737,6 @@ const Map _kangxiDecomp = { 0x2FD5: 0x9FA0, }; -final Map _ranks = _buildRanks(); - -Map _buildRanks() { - return {for (var i = 0; i < _ducetOrder.length; i++) _ducetOrder.codeUnitAt(i): i}; -} - /// Compare two characters using DUCET + CLDR ordering. /// Decomposes Kangxi radicals to CJK equivalents before lookup. /// Falls back to codepoint order for characters not in the table. @@ -239,7 +745,9 @@ int ducetCompare(String a, String b) { var cpB = b.runes.first; cpA = _kangxiDecomp[cpA] ?? cpA; cpB = _kangxiDecomp[cpB] ?? cpB; - final rankA = _ranks[cpA] ?? (0x100000 + cpA); - final rankB = _ranks[cpB] ?? (0x100000 + cpB); + final storedRankA = cpA <= 0xFFFF ? _ducetRanks.codeUnitAt(cpA) : 0; + final storedRankB = cpB <= 0xFFFF ? _ducetRanks.codeUnitAt(cpB) : 0; + final rankA = storedRankA == 0 ? 0x100000 + cpA : storedRankA - 1; + final rankB = storedRankB == 0 ? 0x100000 + cpB : storedRankB - 1; return rankA.compareTo(rankB); } diff --git a/lib/data/hid_key_labels.dart b/lib/data/hid_key_labels.dart index ca9006305..859206411 100644 --- a/lib/data/hid_key_labels.dart +++ b/lib/data/hid_key_labels.dart @@ -1,4 +1,4 @@ -// Generated from USB HID Usage Tables โ€” do not edit by hand. +// Generated by dart run scripts/generate_hid_key_labels.dart from scripts/data/hid_key_labels.json; do not edit by hand. /// Human-readable labels for physical keyboard keys, keyed by USB HID usage code. const hidKeyLabels = { diff --git a/lib/data/iso_639_data.dart b/lib/data/iso_639_data.dart index ef7018f46..ec7babf48 100644 --- a/lib/data/iso_639_data.dart +++ b/lib/data/iso_639_data.dart @@ -1,4 +1,4 @@ -// Generated from iso_639_codes.json โ€” do not edit by hand. +// Generated by dart run scripts/generate_iso_639_data.dart from scripts/data/iso_639_codes.json; do not edit by hand. class LanguageEntry { final String code1; diff --git a/lib/focus/focusable_action_bar.dart b/lib/focus/focusable_action_bar.dart index 6ffb1a97b..aa0276ce1 100644 --- a/lib/focus/focusable_action_bar.dart +++ b/lib/focus/focusable_action_bar.dart @@ -106,7 +106,22 @@ class FocusableActionBarState extends State { FocusNode? getFocusNode(int index) => index >= 0 && index < _focusNodes.length ? _focusNodes[index] : null; void requestFocusOnFirst() { - if (_focusNodes.isNotEmpty) _focusNodes.first.requestFocus(); + final index = _nextEnabledIndex(-1); + if (index != null) _focusNodes[index].requestFocus(); + } + + int? _previousEnabledIndex(int index) { + for (var candidate = index - 1; candidate >= 0; candidate--) { + if (widget.actions[candidate].onPressed != null) return candidate; + } + return null; + } + + int? _nextEnabledIndex(int index) { + for (var candidate = index + 1; candidate < widget.actions.length; candidate++) { + if (widget.actions[candidate].onPressed != null) return candidate; + } + return null; } @override @@ -202,10 +217,10 @@ class FocusableActionBarState extends State { Widget _buildButton(int index, bool isKeyboard, Duration duration) { final action = widget.actions[index]; + final enabled = action.onPressed != null; final isFocused = _focusStates[index]; final showFocus = isFocused && isKeyboard; final opacity = isKeyboard && _hasAnyFocus && !isFocused ? 0.6 : 1.0; - final buildState = FocusableActionBuildState( focusNode: _focusNodes[index], isFocused: isFocused, @@ -217,28 +232,29 @@ class FocusableActionBarState extends State { return Focus( focusNode: _focusNodes[index], - autofocus: action.autofocus, + canRequestFocus: enabled, + autofocus: action.autofocus && enabled, descendantsAreFocusable: false, onKeyEvent: (node, event) { if (widget.onBack != null) { final backResult = handleBackKeyAction(event, widget.onBack!); if (backResult != KeyEventResult.ignored) return backResult; } + final previousIndex = _previousEnabledIndex(index); + final nextIndex = _nextEnabledIndex(index); return dpadKeyHandler( onSelect: action.onPressed, - onLeft: index > 0 ? () => _focusNodes[index - 1].requestFocus() : widget.onNavigateLeft, - onRight: index < _focusNodes.length - 1 - ? () => _focusNodes[index + 1].requestFocus() - : widget.onNavigateRight, + onLeft: previousIndex != null ? () => _focusNodes[previousIndex].requestFocus() : widget.onNavigateLeft, + onRight: nextIndex != null ? () => _focusNodes[nextIndex].requestFocus() : widget.onNavigateRight, onDown: widget.onNavigateDown, onUp: widget.onNavigateUp, - // Consume LEFT/RIGHT at the row's first/last button when no edge - // callback is wired, so focus can't fall off the row (#1181). + // Consume LEFT/RIGHT at the row's first/last enabled button when no + // edge callback is wired, so focus can't fall off the row (#1181). trapHorizontalEdges: true, )(node, event); }, child: ClickableCursor( - enabled: action.onPressed != null || action.child != null || customChild != null, + enabled: enabled, child: AnimatedOpacity( opacity: showFocus ? 1.0 : opacity, duration: duration, diff --git a/lib/focus/focusable_button.dart b/lib/focus/focusable_button.dart index fae439e34..f6173003f 100644 --- a/lib/focus/focusable_button.dart +++ b/lib/focus/focusable_button.dart @@ -50,12 +50,14 @@ class _FocusableButtonState extends State { final isKeyboard = InputModeTracker.isKeyboardMode(context); final showFocus = _isFocused && isKeyboard; final duration = FocusTheme.getAnimationDuration(context); + final enabled = widget.onPressed != null; // In dpad mode: focused = full opacity, unfocused = dimmed final opacity = isKeyboard && !_isFocused ? 0.6 : 1.0; return FocusableWrapper( - autofocus: widget.autofocus, + autofocus: widget.autofocus && enabled, focusNode: widget.focusNode, + canRequestFocus: enabled, disableScale: true, borderRadius: 100, useBackgroundFocus: widget.useBackgroundFocus, diff --git a/lib/focus/focusable_text_field.dart b/lib/focus/focusable_text_field.dart index c35e930bb..f2f7ecd42 100644 --- a/lib/focus/focusable_text_field.dart +++ b/lib/focus/focusable_text_field.dart @@ -8,6 +8,7 @@ import '../utils/platform_detector.dart'; import '../utils/text_input_diagnostics.dart'; import '../widgets/tv_virtual_keyboard.dart'; import 'dpad_navigator.dart'; +import 'key_event_utils.dart'; import 'owned_focus_node_binding.dart'; bool _usesTvKeyboard(bool enableTvKeyboard) => enableTvKeyboard && PlatformDetector.isTV(); @@ -360,16 +361,20 @@ KeyEventResult _moveCaretHorizontally(TextEditingController controller, int delt } if (!selection.isCollapsed) { - final offset = delta < 0 - ? (selection.start < selection.end ? selection.start : selection.end) - : (selection.start > selection.end ? selection.start : selection.end); - controller.selection = TextSelection.collapsed(offset: offset); + final range = expandToGraphemeRange(value.text, selection); + controller.selection = TextSelection.collapsed(offset: delta < 0 ? range.start : range.end); return KeyEventResult.handled; } - final nextOffset = selection.extentOffset + delta; - if (nextOffset < 0 || nextOffset > value.text.length) return KeyEventResult.ignored; - controller.selection = TextSelection.collapsed(offset: nextOffset); + final offset = selection.extentOffset.clamp(0, value.text.length); + if ((delta < 0 && offset == 0) || (delta > 0 && offset == value.text.length)) { + return KeyEventResult.ignored; + } + final codeUnitRange = delta < 0 + ? TextRange(start: offset - 1, end: offset) + : TextRange(start: offset, end: offset + 1); + final range = expandToGraphemeRange(value.text, codeUnitRange); + controller.selection = TextSelection.collapsed(offset: delta < 0 ? range.start : range.end); return KeyEventResult.handled; } @@ -439,25 +444,18 @@ void _backspace({ ValueChanged? onChanged, }) { final value = controller.value; - final range = _normalizedSelectionRange(value); - final start = range.start; - final end = range.end; - if (start != end) { - _replaceTextRange( - controller, - start, - end, - inputFormatters: inputFormatters, - maxLength: maxLength, - onChanged: onChanged, - ); - return; - } - if (start == 0) return; + final selectionRange = _normalizedSelectionRange(value); + final start = selectionRange.start; + final end = selectionRange.end; + if (start == end && start == 0) return; + + final codeUnitRange = start == end ? TextRange(start: start - 1, end: start) : TextRange(start: start, end: end); + final range = expandToGraphemeRange(value.text, codeUnitRange); + if (range.isCollapsed) return; _replaceTextRange( controller, - start - 1, - start, + range.start, + range.end, inputFormatters: inputFormatters, maxLength: maxLength, onChanged: onChanged, @@ -471,25 +469,18 @@ void _deleteForward({ ValueChanged? onChanged, }) { final value = controller.value; - final range = _normalizedSelectionRange(value); - final start = range.start; - final end = range.end; - if (start != end) { - _replaceTextRange( - controller, - start, - end, - inputFormatters: inputFormatters, - maxLength: maxLength, - onChanged: onChanged, - ); - return; - } - if (start >= value.text.length) return; + final selectionRange = _normalizedSelectionRange(value); + final start = selectionRange.start; + final end = selectionRange.end; + if (start == end && start >= value.text.length) return; + + final codeUnitRange = start == end ? TextRange(start: start, end: start + 1) : TextRange(start: start, end: end); + final range = expandToGraphemeRange(value.text, codeUnitRange); + if (range.isCollapsed) return; _replaceTextRange( controller, - start, - start + 1, + range.start, + range.end, inputFormatters: inputFormatters, maxLength: maxLength, onChanged: onChanged, diff --git a/lib/focus/focusable_wrapper.dart b/lib/focus/focusable_wrapper.dart index 9d358dd24..c107295ac 100644 --- a/lib/focus/focusable_wrapper.dart +++ b/lib/focus/focusable_wrapper.dart @@ -85,6 +85,12 @@ class FocusableWrapper extends StatefulWidget { /// Optional semantic label for accessibility. final String? semanticLabel; + /// Optional current value announced after [semanticLabel]. + final String? semanticValue; + + /// Optional checked state for toggle-style controls. + final bool? checked; + /// Whether the wrapper can receive focus. final bool canRequestFocus; @@ -147,6 +153,8 @@ class FocusableWrapper extends StatefulWidget { this.scrollAlignment = 0.5, this.useComfortableZone = false, this.semanticLabel, + this.semanticValue, + this.checked, this.canRequestFocus = true, this.onKeyEvent, this.enableLongPress = false, @@ -521,7 +529,17 @@ class _FocusableWrapperState extends State with SingleTickerPr // Add semantics if label provided if (widget.semanticLabel != null) { - result = Semantics(label: widget.semanticLabel, button: widget.onSelect != null, child: result); + result = Semantics( + label: widget.semanticLabel, + value: widget.semanticValue, + button: true, + enabled: widget.onSelect != null, + checked: widget.checked, + onTap: widget.onSelect, + onLongPress: widget.onLongPress, + excludeSemantics: true, + child: result, + ); } if (widget.onSelect != null || widget.onLongPress != null) { diff --git a/lib/focus/input_mode_tracker.dart b/lib/focus/input_mode_tracker.dart index 9324dcd8e..85ab29cb5 100644 --- a/lib/focus/input_mode_tracker.dart +++ b/lib/focus/input_mode_tracker.dart @@ -121,26 +121,32 @@ class _InputModeTrackerState extends State { @override Widget build(BuildContext context) { - // On Android TV, don't switch to pointer mode from pointer events - // as D-pad can generate synthetic pointer events that would incorrectly - // trigger pointer mode and show a cursor instead of D-pad focus navigation. - // Desktop is exempt even in force-TV mode: its pointer events come from a - // real mouse, which should keep flipping modes (and the cursor) as usual. + // Non-desktop TVs keep keyboard mode across synthetic pointer events, but + // their controls remain pointer-reachable for engine-generated taps. if (TvDetectionService.isTVSync() && !PlatformDetector.isDesktopOS()) { return _InputModeProvider(mode: _mode, child: widget.child); } return Listener( - // Switch to pointer mode on mouse activity onPointerDown: (_) => _setMode(InputMode.pointer), onPointerHover: (_) => _setMode(InputMode.pointer), behavior: HitTestBehavior.translucent, - child: MouseRegion( - cursor: _mode == InputMode.keyboard ? SystemMouseCursors.none : MouseCursor.defer, - child: IgnorePointer( - ignoring: _mode == InputMode.keyboard, - child: _InputModeProvider(mode: _mode, child: widget.child), - ), + child: Stack( + alignment: Alignment.topLeft, + fit: StackFit.passthrough, + children: [ + _InputModeProvider(mode: _mode, child: widget.child), + // Hide the desktop cursor in keyboard mode without excluding the + // application subtree from the current pointer hit test. + if (_mode == InputMode.keyboard) + const Positioned.fill( + child: MouseRegion( + cursor: SystemMouseCursors.none, + opaque: false, + hitTestBehavior: HitTestBehavior.translucent, + ), + ), + ], ), ); } diff --git a/lib/focus/key_event_utils.dart b/lib/focus/key_event_utils.dart index 4f8ab2a98..5262b43cf 100644 --- a/lib/focus/key_event_utils.dart +++ b/lib/focus/key_event_utils.dart @@ -123,6 +123,28 @@ KeyEventResult handleOneShotSelect(KeyEvent event, VoidCallback onActivate) { return KeyEventResult.handled; } +/// Expands a UTF-16 [range] to whole extended grapheme clusters in [text]. +/// +/// Flutter selections use UTF-16 code-unit offsets. Custom editors must pass a +/// non-empty range containing the code units they intend to replace; the +/// returned range is normalized, clamped, and safe to use with +/// [String.replaceRange] without splitting a user-perceived character. +TextRange expandToGraphemeRange(String text, TextRange range) { + if (text.isEmpty) return TextRange.empty; + + final first = range.start.clamp(0, text.length); + final second = range.end.clamp(0, text.length); + final start = first <= second ? first : second; + final end = first <= second ? second : first; + if (start == end) return TextRange.collapsed(start); + + final boundary = CharacterBoundary(text); + return TextRange( + start: boundary.getLeadingTextBoundaryAt(start) ?? 0, + end: boundary.getTrailingTextBoundaryAt(end - 1) ?? text.length, + ); +} + /// Creates a [FocusOnKeyEventCallback] that dispatches d-pad / arrow keys to /// the provided directional callbacks. /// diff --git a/lib/focus/locked_hub_controller.dart b/lib/focus/locked_hub_controller.dart index 1d4d8247a..89dfa3957 100644 --- a/lib/focus/locked_hub_controller.dart +++ b/lib/focus/locked_hub_controller.dart @@ -1,20 +1,20 @@ -/// Manages focus memory for hub navigation. +/// Manages focus memory for one browse surface. /// /// Tracks two things: /// 1. Per-hub memory: Each hub remembers which item was last focused -/// 2. Global column hint: When entering a hub that hasn't been visited, +/// 2. Last column hint: When entering a hub that hasn't been visited, /// we use the column position from the last focused hub as a hint class HubFocusMemory { - static final Map _perHubMemory = {}; - static int _lastColumnHint = 0; + final Map _perHubMemory = {}; + int _lastColumnHint = 0; - static void setForHub(String hubKey, int index) { + void setForHub(String hubKey, int index) { _perHubMemory[hubKey] = index; _lastColumnHint = index; } /// Get the remembered index for a hub, or fall back to column hint - static int getForHub(String hubKey, int itemCount) { + int getForHub(String hubKey, int itemCount) { if (itemCount <= 0) return 0; // If this hub has memory, use it @@ -26,16 +26,10 @@ class HubFocusMemory { return _lastColumnHint.clamp(0, itemCount - 1); } - /// Get only this hub's remembered index, without falling back to the global column hint. - static int getForHubOnly(String hubKey, int itemCount, {int fallback = 0}) { + /// Get only this hub's remembered index, without falling back to the last column hint. + int getForHubOnly(String hubKey, int itemCount, {int fallback = 0}) { if (itemCount <= 0) return 0; final remembered = _perHubMemory[hubKey]; return (remembered ?? fallback).clamp(0, itemCount - 1); } - - /// Clear all memory (e.g., when leaving a screen) - static void clear() { - _perHubMemory.clear(); - _lastColumnHint = 0; - } } diff --git a/lib/i18n/bg.i18n.json b/lib/i18n/bg.i18n.json index 66d4f49d9..9bdcbd832 100644 --- a/lib/i18n/bg.i18n.json +++ b/lib/i18n/bg.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "ะ˜ะทั‡ะฐะบะฒะฐะฝะต ะฝะฐ ะพะดะพะฑั€ะตะฝะธะตโ€ฆ", "quickConnectCancel": "ะžั‚ะบะฐะท", "quickConnectExpired": "Quick Connect ะธะทั‚ะตั‡ะต. ะžะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "ะžั‚ะบะฐะท", @@ -180,7 +180,7 @@ "watchTogetherRelay": "ะ ะตะปะตะน ััŠั€ะฒัŠั€ ะทะฐ ะณะปะตะดะฐะฝะต ะทะฐะตะดะฝะพ", "watchTogetherRelayDescription": "ะ—ะฐะดะฐะน ัะพะฑัั‚ะฒะตะฝ ั€ะตะปะตะน ััŠั€ะฒัŠั€. ะ’ัะธั‡ะบะธ ั‚ั€ัะฑะฒะฐ ะดะฐ ะธะทะฟะพะปะทะฒะฐั‚ ััŠั‰ะธั ััŠั€ะฒัŠั€.", "watchTogetherRelayHint": "https://my-relay.example.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "ะ”ะพะบะปะฐะดะฒะฐะฝะต ะฝะฐ ัั€ะธะฒะพะฒะต", "crashReportingDescription": "ะ˜ะทะฟั€ะฐั‰ะฐะน ะดะพะบะปะฐะดะธ ะทะฐ ัั€ะธะฒะพะฒะต, ะทะฐ ะดะฐ ะฟะพะผะพะณะฝะตัˆ ะทะฐ ะฟะพะดะพะฑั€ัะฒะฐะฝะต ะฝะฐ ะฟั€ะธะปะพะถะตะฝะธะตั‚ะพ", "debugLogging": "ะ›ะพะณะพะฒะต ะทะฐ ะพั‚ัั‚ั€ะฐะฝัะฒะฐะฝะต ะฝะฐ ะณั€ะตัˆะบะธ", @@ -197,12 +197,10 @@ "exportSettings": "ะ•ะบัะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธั‚ะต", "exportSettingsDescription": "ะ—ะฐะฟะฐะทะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธัั‚ะฐ ัะธ ะฒัŠะฒ ั„ะฐะนะป", "exportSettingsSuccess": "ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ", - "exportSettingsFailed": "ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ", "importSettings": "ะ˜ะผะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธ", "importSettingsDescription": "ะ’ัŠะทัั‚ะฐะฝะพะฒะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธั ะพั‚ ั„ะฐะนะป", "importSettingsConfirm": "ะขะพะฒะฐ ั‰ะต ะทะฐะผะตะฝะธ ั‚ะตะบัƒั‰ะธั‚ะต ะฒะธ ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดัŠะปะถะฐะฒะฐั‚ะต ะปะธ?", "importSettingsSuccess": "ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ", - "importSettingsFailed": "ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ", "importSettingsInvalidFile": "ะขะพะทะธ ั„ะฐะนะป ะฝะต ะต ะฒะฐะปะธะดะตะฝ ะตะบัะฟะพั€ั‚ ะฝะฐ ะฝะฐัั‚ั€ะพะนะบะธ ะพั‚ Plezy", "importSettingsNoUser": "ะ’ะปะตะทั‚ะต, ะฟั€ะตะดะธ ะดะฐ ะธะผะฟะพั€ั‚ะธั€ะฐั‚ะต ะฝะฐัั‚ั€ะพะนะบะธ", "shortcutsReset": "ะšะปะฐะฒะธัˆะฝะธั‚ะต ะบะพะผะฑะธะฝะฐั†ะธะธ ัะฐ ะฝัƒะปะธั€ะฐะฝะธ ะดะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต", @@ -217,6 +215,7 @@ "validationErrorDuration": "ะŸั€ะพะดัŠะปะถะธั‚ะตะปะฝะพัั‚ั‚ะฐ ั‚ั€ัะฑะฒะฐ ะดะฐ ะต ะผะตะถะดัƒ ${min} ะธ ${max} ${unit}", "shortcutAlreadyAssigned": "ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะฒะตั‡ะต ะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะทะฐ ${action}", "shortcutUpdated": "ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะต ะพะฑะฝะพะฒะตะฝะฐ ะทะฐ ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต", "autoSkipIntro": "ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต ะฝะฐ ะธะฝั‚ั€ะพ", "autoSkipIntroDescription": "ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะน ะธะฝั‚ั€ะพ ะผะฐั€ะบะตั€ะธ ัะปะตะด ะฝัะบะพะปะบะพ ัะตะบัƒะฝะดะธ", @@ -242,7 +241,7 @@ "downloadLocationChanged": "ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฟั€ะพะผะตะฝะตะฝะพ", "downloadLocationReset": "ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฒัŠั€ะฝะฐั‚ะพ ะฟะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต", "downloadLocationInvalid": "ะ˜ะทะฑั€ะฐะฝะฐั‚ะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะทะฐะฟะธัะฒะฐะตะผะฐ", - "downloadLocationSelectError": "ะะตัƒัะฟะตัˆะตะฝ ะธะทะฑะพั€ ะฝะฐ ะฟะฐะฟะบะฐ", + "downloadLocationPickerUnavailable": "ะ˜ะทะฑะพั€ัŠั‚ ะฝะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะฝะฐะปะธั‡ะตะฝ ะฝะฐ ั‚ะพะฒะฐ ัƒัั‚ั€ะพะนัั‚ะฒะพ", "downloadOnWifiOnly": "ะ˜ะทั‚ะตะณะปัะฝะต ัะฐะผะพ ะฟั€ะตะท WiFi", "downloadOnWifiOnlyDescription": "ะŸั€ะตะดะพั‚ะฒั€ะฐั‚ัะฒะฐะน ะธะทั‚ะตะณะปัะฝะธั ะฟั€ะตะท ะผะพะฑะธะปะฝะธ ะดะฐะฝะฝะธ", "autoRemoveWatchedDownloads": "ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฒะฐะน ะธะทะณะปะตะดะฐะฝะธั‚ะต ะธะทั‚ะตะณะปัะฝะธั", @@ -443,7 +442,11 @@ "brightness": "ะฏั€ะบะพัั‚", "hexColor": "ะจะตัั‚ะฝะฐะดะตัะตั‚ะธั‡ะตะฝ ั†ะฒัั‚", "expandText": "ะ ะฐะทะณัŠะฝะธ ั‚ะตะบัั‚ะฐ", - "collapseText": "ะกะฒะธะน ั‚ะตะบัั‚ะฐ" + "collapseText": "ะกะฒะธะน ั‚ะตะบัั‚ะฐ", + "alphabetNavigation": "ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะทะฑัƒะบะฐั‚ะฐ", + "alphabetScrollHint": "ะŸะปัŠะทะฝะตั‚ะต ะฝะฐะณะพั€ะต ะธะปะธ ะฝะฐะดะพะปัƒ, ะทะฐ ะดะฐ ะฟั€ะตะผะธะฝะตั‚ะต ะฟะพ ะฑัƒะบะฒะฐ", + "rowColumnPosition": "ะ ะตะด ${row} ะพั‚ ${rowCount}, ะบะพะปะพะฝะฐ ${column} ะพั‚ ${columnCount}", + "rowPosition": "ะ ะตะด ${row} ะพั‚ ${rowCount}" }, "tooltips": { "shufflePlay": "ะ ะฐะทะฑัŠั€ะบะฐะฝะพ ะฒัŠะทะฟั€ะพะธะทะฒะตะถะดะฐะฝะต", @@ -451,6 +454,9 @@ "markAsWatched": "ะœะฐั€ะบะธั€ะฐะน ะบะฐั‚ะพ ะณะปะตะดะฐะฝะพ", "markAsUnwatched": "ะœะฐั€ะบะธั€ะฐะน ะบะฐั‚ะพ ะฝะตะณะปะตะดะฐะฝะพ" }, + "audioTracks": { + "track": "ะัƒะดะธะพ ะฟัŠั‚ะตั‡ะบะฐ ${n}" + }, "videoControls": { "audioLabel": "ะัƒะดะธะพ", "subtitlesLabel": "ะกัƒะฑั‚ะธั‚ั€ะธ", @@ -478,6 +484,8 @@ "playNext": "ะŸัƒัะฝะธ ัะปะตะดะฒะฐั‰ะพั‚ะพ", "playButton": "ะŸัƒัะฝะธ", "pauseButton": "ะŸะฐัƒะทะฐ", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "ะŸั€ะตะฒัŠั€ั‚ะธ ะฝะฐะทะฐะด ${seconds} ัะตะบัƒะฝะดะธ", "seekForwardButton": "ะŸั€ะตะฒัŠั€ั‚ะธ ะฝะฐะฟั€ะตะด ${seconds} ัะตะบัƒะฝะดะธ", "previousButton": "ะŸั€ะตะดะธัˆะตะฝ ะตะฟะธะทะพะด", @@ -553,11 +561,11 @@ "streamInterrupted": "ะŸะพั‚ะพะบัŠั‚ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ ะธะปะธ ะฟั€ะตะฒัŠั€ั‚ะตั‚ะต, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.", "liveStreamInterrupted": "ะŸะพั‚ะพะบัŠั‚ ะฝะฐ ะถะธะฒะพ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.", "fileInfoNotAvailable": "ะ˜ะฝั„ะพั€ะผะฐั†ะธัั‚ะฐ ะทะฐ ั„ะฐะนะปะฐ ะฝะต ะต ะฝะฐะปะธั‡ะฝะฐ", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ะธะฝั„ะพั€ะผะฐั†ะธั ะทะฐ ั„ะฐะนะปะฐ: ${error}", "errorLoadingSeries": "ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ัะตั€ะธะฐะปะฐ", "musicNotSupported": "ะ’ัŠะทะฟั€ะพะธะทะฒะตะถะดะฐะฝะตั‚ะพ ะฝะฐ ะผัƒะทะธะบะฐ ะฒัะต ะพั‰ะต ะฝะต ัะต ะฟะพะดะดัŠั€ะถะฐ", @@ -680,6 +688,7 @@ "borrowExplain": "ะ˜ะทะฟะพะปะทะฒะฐะน ะฒั€ัŠะทะบะฐ ะพั‚ ะดั€ัƒะณ ะฟั€ะพั„ะธะป. PIN-ะทะฐั‰ะธั‚ะตะฝะธั‚ะต ะฟั€ะพั„ะธะปะธ ะธะทะธัะบะฒะฐั‚ PIN.", "borrowEmpty": "ะ’ัะต ะพั‰ะต ะฝัะผะฐ ะบะฐะบะฒะพ ะดะฐ ัะต ะธะทะฟะพะปะทะฒะฐ.", "borrowEmptySubtitle": "ะŸัŠั€ะฒะพ ัะฒัŠั€ะถะตั‚ะต Plex ะธะปะธ Jellyfin ะบัŠะผ ะดั€ัƒะณ ะฟั€ะพั„ะธะป.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "ะžั‚ ${displayName}", "borrowConnectionBorrowed": "ะ’ั€ัŠะทะบะฐั‚ะฐ ะต ะธะทะฟะพะปะทะฒะฐะฝะฐ.", "borrowFailed": "ะะตัƒัะฟะตัˆะฝะพ ะธะทะฟะพะปะทะฒะฐะฝะต ะฝะฐ ะฒั€ัŠะทะบะฐ.", @@ -944,7 +953,7 @@ "favorites": "ะ›ัŽะฑะธะผะธ", "reorderFavorites": "ะŸั€ะตะฝะฐั€ะตะดะธ ะปัŽะฑะธะผะธั‚ะต", "favoritesLoadFailed": "ะ›ัŽะฑะธะผะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ัะต ะทะฐั€ะตะดัั‚. ะŸั€ะพะฒะตั€ะตั‚ะต ะฒั€ัŠะทะบะฐั‚ะฐ ัะธ ะธ ะพะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "ะŸั€ะธััŠะตะดะธะฝะธ ัะต ะบัŠะผ ั‚ะตะบัƒั‰ะฐ ัะตัะธั", "watchFromStart": "ะ“ะปะตะดะฐะน ะพั‚ ะฝะฐั‡ะฐะปะพั‚ะพ (ะฟั€ะตะดะธ ${minutes} ะผะธะฝ)", "watchLive": "ะ“ะปะตะดะฐะน ะฝะฐ ะถะธะฒะพ", diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index 3cfdc961c..3480c8fc4 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Venter pรฅ godkendelseโ€ฆ", "quickConnectCancel": "Annullรฉr", "quickConnectExpired": "Quick Connect er udlรธbet. Prรธv igen.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Annuller", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Watch Together-relay", "watchTogetherRelayDescription": "Angiv en brugerdefineret relay. Alle skal bruge samme server.", "watchTogetherRelayHint": "https://min-relay.eksempel.dk", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Fejlrapportering", "crashReportingDescription": "Send fejlrapporter for at hjรฆlpe med at forbedre appen", "debugLogging": "Fejlfindingslogning", @@ -197,12 +197,10 @@ "exportSettings": "Eksportรฉr indstillinger", "exportSettingsDescription": "Gem dine prรฆferencer i en fil", "exportSettingsSuccess": "Indstillinger eksporteret", - "exportSettingsFailed": "Kunne ikke eksportere indstillinger", "importSettings": "Importรฉr indstillinger", "importSettingsDescription": "Gendan prรฆferencer fra en fil", "importSettingsConfirm": "Dette vil erstatte dine nuvรฆrende indstillinger. Fortsรฆt?", "importSettingsSuccess": "Indstillinger importeret", - "importSettingsFailed": "Kunne ikke importere indstillinger", "importSettingsInvalidFile": "Denne fil er ikke en gyldig Plezy-indstillingseksport", "importSettingsNoUser": "Log ind fรธr import af indstillinger", "shortcutsReset": "Genveje nulstillet til standard", @@ -217,6 +215,7 @@ "validationErrorDuration": "Varighed skal vรฆre mellem ${min} og ${max} ${unit}", "shortcutAlreadyAssigned": "Genvej allerede tildelt til ${action}", "shortcutUpdated": "Genvej opdateret for ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Auto-spring", "autoSkipIntro": "Auto-spring intro", "autoSkipIntroDescription": "Spring automatisk intromarkรธrer over efter fรฅ sekunder", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Downloadplacering รฆndret", "downloadLocationReset": "Downloadplacering nulstillet", "downloadLocationInvalid": "Valgt mappe er ikke skrivbar", - "downloadLocationSelectError": "Kunne ikke vรฆlge mappe", + "downloadLocationPickerUnavailable": "Mappevalg er ikke tilgรฆngeligt pรฅ denne enhed", "downloadOnWifiOnly": "Download kun pรฅ WiFi", "downloadOnWifiOnlyDescription": "Forhindre downloads pรฅ mobildata", "autoRemoveWatchedDownloads": "Fjern sete downloads automatisk", @@ -443,7 +442,11 @@ "brightness": "Lysstyrke", "hexColor": "Hexfarve", "expandText": "Udvid tekst", - "collapseText": "Fold tekst sammen" + "collapseText": "Fold tekst sammen", + "alphabetNavigation": "Alfabetnavigation", + "alphabetScrollHint": "Stryg op eller ned for at flytte รฉt bogstav", + "rowColumnPosition": "Rรฆkke ${row} af ${rowCount}, kolonne ${column} af ${columnCount}", + "rowPosition": "Rรฆkke ${row} af ${rowCount}" }, "tooltips": { "shufflePlay": "Afspil tilfรฆldigt", @@ -451,6 +454,9 @@ "markAsWatched": "Markรฉr som set", "markAsUnwatched": "Markรฉr som uset" }, + "audioTracks": { + "track": "Lydspor ${n}" + }, "videoControls": { "audioLabel": "Lyd", "subtitlesLabel": "Undertekster", @@ -478,6 +484,8 @@ "playNext": "Afspil nรฆste", "playButton": "Afspil", "pauseButton": "Pause", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Spol ${seconds} sekunder tilbage", "seekForwardButton": "Spol ${seconds} sekunder frem", "previousButton": "Forrige episode", @@ -553,11 +561,11 @@ "streamInterrupted": "Streamen blev afbrudt. Tryk pรฅ afspil, eller spol for at prรธve igen.", "liveStreamInterrupted": "Livestreamen blev afbrudt. Tryk pรฅ afspil for at prรธve igen.", "fileInfoNotAvailable": "Filinfo ikke tilgรฆngelig", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Fejl ved indlรฆsning af filinfo: ${error}", "errorLoadingSeries": "Fejl ved indlรฆsning af serie", "musicNotSupported": "Musikafspilning understรธttes endnu ikke", @@ -680,6 +688,7 @@ "borrowExplain": "Lรฅn en anden profils forbindelse. PIN-beskyttede profiler krรฆver en PIN.", "borrowEmpty": "Intet at lรฅne endnu.", "borrowEmptySubtitle": "Forbind Plex eller Jellyfin til en anden profil fรธrst.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Fra ${displayName}", "borrowConnectionBorrowed": "Forbindelse lรฅnt.", "borrowFailed": "Kunne ikke lรฅne forbindelse.", @@ -944,7 +953,7 @@ "favorites": "Favoritter", "reorderFavorites": "Omarranger favoritter", "favoritesLoadFailed": "Favoritter kunne ikke indlรฆses. Kontrollรฉr forbindelsen, og prรธv igen.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Deltag i igangvรฆrende session", "watchFromStart": "Se fra start (${minutes} min siden)", "watchLive": "Se live", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 9636482c2..940745dbb 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Warte auf Bestรคtigungโ€ฆ", "quickConnectCancel": "Abbrechen", "quickConnectExpired": "Quick Connect ist abgelaufen. Versuche es erneut.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Abbrechen", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Gemeinsam Schauen Relay", "watchTogetherRelayDescription": "Eigenes Relay festlegen. Alle mรผssen denselben Server verwenden.", "watchTogetherRelayHint": "https://mein-relay.beispiel.de", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Absturzberichte", "crashReportingDescription": "Absturzberichte senden, um die App zu verbessern", "debugLogging": "Debug-Protokollierung", @@ -197,12 +197,10 @@ "exportSettings": "Einstellungen exportieren", "exportSettingsDescription": "Speichere deine Einstellungen in einer Datei", "exportSettingsSuccess": "Einstellungen exportiert", - "exportSettingsFailed": "Einstellungen konnten nicht exportiert werden", "importSettings": "Einstellungen importieren", "importSettingsDescription": "Einstellungen aus einer Datei wiederherstellen", "importSettingsConfirm": "Dies ersetzt deine aktuellen Einstellungen. Fortfahren?", "importSettingsSuccess": "Einstellungen importiert", - "importSettingsFailed": "Einstellungen konnten nicht importiert werden", "importSettingsInvalidFile": "Diese Datei ist kein gรผltiger Plezy-Einstellungsexport", "importSettingsNoUser": "Vor dem Import bitte anmelden", "shortcutsReset": "Tastenkรผrzel auf Standard zurรผckgesetzt", @@ -217,6 +215,7 @@ "validationErrorDuration": "Dauer muss zwischen ${min} und ${max} ${unit} liegen", "shortcutAlreadyAssigned": "Tastenkรผrzel bereits zugewiesen an ${action}", "shortcutUpdated": "Tastenkรผrzel aktualisiert fรผr ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Automatisches รœberspringen", "autoSkipIntro": "Intro automatisch รผberspringen", "autoSkipIntroDescription": "Intro-Marker nach wenigen Sekunden automatisch รผberspringen", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Download-Speicherort geรคndert", "downloadLocationReset": "Download-Speicherort auf Standard zurรผckgesetzt", "downloadLocationInvalid": "Ausgewรคhlter Ordner ist nicht beschreibbar", - "downloadLocationSelectError": "Ordnerauswahl fehlgeschlagen", + "downloadLocationPickerUnavailable": "Die Ordnerauswahl ist auf diesem Gerรคt nicht verfรผgbar", "downloadOnWifiOnly": "Nur รผber WLAN herunterladen", "downloadOnWifiOnlyDescription": "Downloads รผber mobile Daten verhindern", "autoRemoveWatchedDownloads": "Gesehene Downloads automatisch entfernen", @@ -443,7 +442,11 @@ "brightness": "Helligkeit", "hexColor": "Hex-Farbe", "expandText": "Text ausklappen", - "collapseText": "Text einklappen" + "collapseText": "Text einklappen", + "alphabetNavigation": "Alphabetische Navigation", + "alphabetScrollHint": "Nach oben oder unten wischen, um einen Buchstaben weiterzugehen", + "rowColumnPosition": "Zeile ${row} von ${rowCount}, Spalte ${column} von ${columnCount}", + "rowPosition": "Zeile ${row} von ${rowCount}" }, "tooltips": { "shufflePlay": "Zufallswiedergabe", @@ -451,6 +454,9 @@ "markAsWatched": "Als gesehen markieren", "markAsUnwatched": "Als ungesehen markieren" }, + "audioTracks": { + "track": "Audiospur ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Untertitel", @@ -478,6 +484,8 @@ "playNext": "Nรคchstes abspielen", "playButton": "Wiedergeben", "pauseButton": "Pause", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "${seconds} Sekunden zurรผck", "seekForwardButton": "${seconds} Sekunden vor", "previousButton": "Vorherige Episode", @@ -553,11 +561,11 @@ "streamInterrupted": "Der Stream wurde unterbrochen. Drรผcke auf Wiedergabe oder spule, um es erneut zu versuchen.", "liveStreamInterrupted": "Der Livestream wurde unterbrochen. Drรผcke auf Wiedergabe, um es erneut zu versuchen.", "fileInfoNotAvailable": "Dateiinfo nicht verfรผgbar", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Fehler beim Laden der Dateiinfo: ${error}", "errorLoadingSeries": "Fehler beim Laden der Serie", "musicNotSupported": "Musikwiedergabe wird noch nicht unterstรผtzt", @@ -680,6 +688,7 @@ "borrowExplain": "Verbindung eines anderen Profils leihen. PIN-geschรผtzte Profile erfordern eine PIN.", "borrowEmpty": "Noch nichts zum Ausleihen.", "borrowEmptySubtitle": "Verbinde zuerst Plex oder Jellyfin mit einem anderen Profil.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Von ${displayName}", "borrowConnectionBorrowed": "Verbindung ausgeliehen.", "borrowFailed": "Verbindung konnte nicht ausgeliehen werden.", @@ -944,7 +953,7 @@ "favorites": "Favoriten", "reorderFavorites": "Favoriten sortieren", "favoritesLoadFailed": "Favoriten konnten nicht geladen werden. รœberprรผfe deine Verbindung und versuche es erneut.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Laufender Sitzung beitreten", "watchFromStart": "Von Anfang an ansehen (vor ${minutes} Min.)", "watchLive": "Live ansehen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index 52b3a29dc..1cff67ed4 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -197,12 +197,10 @@ "exportSettings": "Export Settings", "exportSettingsDescription": "Save your preferences to a file", "exportSettingsSuccess": "Settings exported", - "exportSettingsFailed": "Could not export settings", "importSettings": "Import Settings", "importSettingsDescription": "Restore preferences from a file", "importSettingsConfirm": "This will replace your current settings. Continue?", "importSettingsSuccess": "Settings imported", - "importSettingsFailed": "Could not import settings", "importSettingsInvalidFile": "This file isn't a valid Plezy settings export", "importSettingsNoUser": "Sign in before importing settings", "shortcutsReset": "Shortcuts reset to defaults", @@ -217,6 +215,7 @@ "validationErrorDuration": "Duration must be between ${min} and ${max} ${unit}", "shortcutAlreadyAssigned": "Shortcut already assigned to ${action}", "shortcutUpdated": "Shortcut updated for ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Auto Skip", "autoSkipIntro": "Auto Skip Intro", "autoSkipIntroDescription": "Automatically skip intro markers after a few seconds", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Download location changed", "downloadLocationReset": "Download location reset to default", "downloadLocationInvalid": "Selected folder is not writable", - "downloadLocationSelectError": "Failed to select folder", + "downloadLocationPickerUnavailable": "Folder selection is not available on this device", "downloadOnWifiOnly": "Download on WiFi only", "downloadOnWifiOnlyDescription": "Prevent downloads when on cellular data", "autoRemoveWatchedDownloads": "Auto-remove watched downloads", @@ -443,7 +442,11 @@ "brightness": "Brightness", "hexColor": "Hex color", "expandText": "Expand text", - "collapseText": "Collapse text" + "collapseText": "Collapse text", + "alphabetNavigation": "Alphabet navigation", + "alphabetScrollHint": "Swipe up or down to move by letter", + "rowColumnPosition": "Row ${row} of ${rowCount}, column ${column} of ${columnCount}", + "rowPosition": "Row ${row} of ${rowCount}" }, "tooltips": { "shufflePlay": "Shuffle play", @@ -451,6 +454,9 @@ "markAsWatched": "Mark as watched", "markAsUnwatched": "Mark as unwatched" }, + "audioTracks": { + "track": "Audio Track ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Subtitles", @@ -478,6 +484,8 @@ "playNext": "Play Next", "playButton": "Play", "pauseButton": "Pause", + "showPlaybackControls": "Show playback controls", + "hidePlaybackControls": "Hide playback controls", "seekBackwardButton": "Seek backward ${seconds} seconds", "seekForwardButton": "Seek forward ${seconds} seconds", "previousButton": "Previous episode", @@ -680,6 +688,7 @@ "borrowExplain": "Borrow another profile's connection. PIN-protected profiles require a PIN.", "borrowEmpty": "Nothing to borrow yet.", "borrowEmptySubtitle": "Connect Plex or Jellyfin to another profile first.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "From ${displayName}", "borrowConnectionBorrowed": "Connection borrowed.", "borrowFailed": "Failed to borrow connection.", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 2cf4344c7..37f35ffb7 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Esperando aprobaciรณnโ€ฆ", "quickConnectCancel": "Cancelar", "quickConnectExpired": "Quick Connect caducรณ. Intรฉntalo de nuevo.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Cancelar", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relay de Ver Juntos", "watchTogetherRelayDescription": "Define un relay personalizado. Todos deben usar el mismo servidor.", "watchTogetherRelayHint": "https://mi-relay.ejemplo.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Informes de Errores", "crashReportingDescription": "Enviar informes de errores para mejorar la aplicaciรณn", "debugLogging": "Registro de Depuraciรณn", @@ -197,12 +197,10 @@ "exportSettings": "Exportar Configuraciรณn", "exportSettingsDescription": "Guardar tus preferencias en un archivo", "exportSettingsSuccess": "Configuraciรณn exportada", - "exportSettingsFailed": "No se pudo exportar la configuraciรณn", "importSettings": "Importar Configuraciรณn", "importSettingsDescription": "Restaurar preferencias desde un archivo", "importSettingsConfirm": "Esto reemplazarรก tu configuraciรณn actual. ยฟContinuar?", "importSettingsSuccess": "Configuraciรณn importada", - "importSettingsFailed": "No se pudo importar la configuraciรณn", "importSettingsInvalidFile": "Este archivo no es una exportaciรณn vรกlida de Plezy", "importSettingsNoUser": "Inicia sesiรณn antes de importar la configuraciรณn", "shortcutsReset": "Atajos restablecidos a los valores predeterminados", @@ -217,6 +215,7 @@ "validationErrorDuration": "La duraciรณn debe estar entre ${min} y ${max} ${unit}", "shortcutAlreadyAssigned": "El atajo ya estรก asignado a ${action}", "shortcutUpdated": "Atajo actualizado para ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Salto automรกtico", "autoSkipIntro": "Saltar Intro automรกticamente", "autoSkipIntroDescription": "Saltar automรกticamente los marcadores de intro despuรฉs de unos segundos", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Ubicaciรณn de descarga cambiada", "downloadLocationReset": "Ubicaciรณn de descarga restablecida al predeterminado", "downloadLocationInvalid": "La carpeta seleccionada no tiene permisos de escritura", - "downloadLocationSelectError": "Error al seleccionar la carpeta", + "downloadLocationPickerUnavailable": "La selecciรณn de carpetas no estรก disponible en este dispositivo", "downloadOnWifiOnly": "Descargar solo con WiFi", "downloadOnWifiOnlyDescription": "Evitar descargas cuando se usan datos mรณviles", "autoRemoveWatchedDownloads": "Eliminar descargas vistas automรกticamente", @@ -443,7 +442,11 @@ "brightness": "Brillo", "hexColor": "Color hexadecimal", "expandText": "Expandir texto", - "collapseText": "Contraer texto" + "collapseText": "Contraer texto", + "alphabetNavigation": "Navegaciรณn alfabรฉtica", + "alphabetScrollHint": "Desliza hacia arriba o abajo para avanzar por letra", + "rowColumnPosition": "Fila ${row} de ${rowCount}, columna ${column} de ${columnCount}", + "rowPosition": "Fila ${row} de ${rowCount}" }, "tooltips": { "shufflePlay": "Reproducciรณn aleatoria", @@ -451,6 +454,9 @@ "markAsWatched": "Marcar como visto", "markAsUnwatched": "Marcar como no visto" }, + "audioTracks": { + "track": "Pista de audio ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Subtรญtulos", @@ -478,6 +484,8 @@ "playNext": "Reproducir siguiente", "playButton": "Reproducir", "pauseButton": "Pausa", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Retroceder ${seconds} segundos", "seekForwardButton": "Avanzar ${seconds} segundos", "previousButton": "Episodio anterior", @@ -553,11 +561,11 @@ "streamInterrupted": "La reproducciรณn se interrumpiรณ. Pulsa reproducir o avanza para volver a intentarlo.", "liveStreamInterrupted": "La transmisiรณn en vivo se interrumpiรณ. Pulsa reproducir para volver a intentarlo.", "fileInfoNotAvailable": "Informaciรณn de archivo no disponible", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Error al cargar info de archivo: ${error}", "errorLoadingSeries": "Error al cargar la serie", "musicNotSupported": "La reproducciรณn de mรบsica aรบn no estรก soportada", @@ -680,6 +688,7 @@ "borrowExplain": "Toma prestada la conexiรณn de otro perfil. Los perfiles protegidos con PIN requieren un PIN.", "borrowEmpty": "Nada para tomar prestado todavรญa.", "borrowEmptySubtitle": "Conecta Plex o Jellyfin primero a otro perfil.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "De ${displayName}", "borrowConnectionBorrowed": "Conexiรณn tomada prestada.", "borrowFailed": "No se pudo tomar prestada la conexiรณn.", @@ -944,7 +953,7 @@ "favorites": "Favoritos", "reorderFavorites": "Reordenar favoritos", "favoritesLoadFailed": "No se pudieron cargar los favoritos. Comprueba tu conexiรณn e intรฉntalo de nuevo.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Unirse a sesiรณn en curso", "watchFromStart": "Ver desde el inicio (hace ${minutes} min)", "watchLive": "Ver en vivo", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index ba1b77f9d..d2f978488 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "En attente d'approbationโ€ฆ", "quickConnectCancel": "Annuler", "quickConnectExpired": "Quick Connect a expirรฉ. Rรฉessayez.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Annuler", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relais Regarder Ensemble", "watchTogetherRelayDescription": "Dรฉfinir un relay personnalisรฉ. Tout le monde doit utiliser le mรชme serveur.", "watchTogetherRelayHint": "https://mon-relais.exemple.fr", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Rapports de plantage", "crashReportingDescription": "Envoyer des rapports de plantage pour amรฉliorer l'application", "debugLogging": "Journalisation de dรฉbogage", @@ -197,12 +197,10 @@ "exportSettings": "Exporter les paramรจtres", "exportSettingsDescription": "Enregistrer vos prรฉfรฉrences dans un fichier", "exportSettingsSuccess": "Paramรจtres exportรฉs", - "exportSettingsFailed": "Impossible d'exporter les paramรจtres", "importSettings": "Importer les paramรจtres", "importSettingsDescription": "Restaurer les prรฉfรฉrences depuis un fichier", "importSettingsConfirm": "Cela remplacera vos paramรจtres actuels. Continuer ?", "importSettingsSuccess": "Paramรจtres importรฉs", - "importSettingsFailed": "Impossible d'importer les paramรจtres", "importSettingsInvalidFile": "Ce fichier n'est pas un export Plezy valide", "importSettingsNoUser": "Connectez-vous avant d'importer les paramรจtres", "shortcutsReset": "Raccourcis rรฉinitialisรฉs aux valeurs par dรฉfaut", @@ -217,6 +215,7 @@ "validationErrorDuration": "La durรฉe doit รชtre comprise entre ${min} et ${max} ${unit}", "shortcutAlreadyAssigned": "Raccourci dรฉjร  attribuรฉ ร  ${action}", "shortcutUpdated": "Raccourci mis ร  jour pour ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Skip automatique", "autoSkipIntro": "Skip automatique de l'introduction", "autoSkipIntroDescription": "Skipper automatiquement l'introduction aprรจs quelques secondes", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Emplacement de tรฉlรฉchargement modifiรฉ", "downloadLocationReset": "Emplacement de tรฉlรฉchargement rรฉinitialisรฉ ร  la valeur par dรฉfaut", "downloadLocationInvalid": "Le dossier sรฉlectionnรฉ n'est pas accessible en รฉcriture", - "downloadLocationSelectError": "ร‰chec de la sรฉlection du dossier", + "downloadLocationPickerUnavailable": "La sรฉlection de dossier nโ€™est pas disponible sur cet appareil", "downloadOnWifiOnly": "Tรฉlรฉcharger uniquement via WiFi", "downloadOnWifiOnlyDescription": "Empรชcher les tรฉlรฉchargements lorsque vous utilisez les donnรฉes cellulaires", "autoRemoveWatchedDownloads": "Supprimer automatiquement les tรฉlรฉchargements vus", @@ -443,7 +442,11 @@ "brightness": "Luminositรฉ", "hexColor": "Couleur hexadรฉcimale", "expandText": "Dรฉvelopper le texte", - "collapseText": "Replier le texte" + "collapseText": "Replier le texte", + "alphabetNavigation": "Navigation alphabรฉtique", + "alphabetScrollHint": "Balayez vers le haut ou le bas pour changer de lettre", + "rowColumnPosition": "Ligne ${row} sur ${rowCount}, colonne ${column} sur ${columnCount}", + "rowPosition": "Ligne ${row} sur ${rowCount}" }, "tooltips": { "shufflePlay": "Lecture alรฉatoire", @@ -451,6 +454,9 @@ "markAsWatched": "Marquรฉ comme vu", "markAsUnwatched": "Marquรฉ comme non vu" }, + "audioTracks": { + "track": "Piste audio ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Sous-titres", @@ -478,6 +484,8 @@ "playNext": "Lire l'รฉpisode suivant", "playButton": "Lire", "pauseButton": "Pause", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Reculer de ${seconds} secondes", "seekForwardButton": "Avancer de ${seconds} secondes", "previousButton": "ร‰pisode prรฉcรฉdent", @@ -553,11 +561,11 @@ "streamInterrupted": "La lecture a รฉtรฉ interrompue. Appuyez sur Lecture ou avancez pour rรฉessayer.", "liveStreamInterrupted": "Le direct a รฉtรฉ interrompu. Appuyez sur Lecture pour rรฉessayer.", "fileInfoNotAvailable": "Informations sur le fichier non disponibles", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Erreur lors du chargement des informations sur le fichier: ${error}", "errorLoadingSeries": "Erreur lors du chargement de la sรฉrie", "musicNotSupported": "La lecture de musique n'est pas encore prise en charge", @@ -680,6 +688,7 @@ "borrowExplain": "Emprunter la connexion d'un autre profil. Les profils protรฉgรฉs par PIN exigent un PIN.", "borrowEmpty": "Rien ร  emprunter pour le moment.", "borrowEmptySubtitle": "Connectez d'abord Plex ou Jellyfin ร  un autre profil.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "De ${displayName}", "borrowConnectionBorrowed": "Connexion empruntรฉe.", "borrowFailed": "Impossible d'emprunter la connexion.", @@ -944,7 +953,7 @@ "favorites": "Favoris", "reorderFavorites": "Rรฉorganiser les favoris", "favoritesLoadFailed": "Impossible de charger les favoris. Vรฉrifiez votre connexion et rรฉessayez.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Rejoindre la session en cours", "watchFromStart": "Regarder depuis le dรฉbut (il y a ${minutes} min)", "watchLive": "Regarder en direct", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 6eba0dbf7..9d16c8eae 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "In attesa di approvazioneโ€ฆ", "quickConnectCancel": "Annulla", "quickConnectExpired": "Quick Connect scaduto. Riprova.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Cancella", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relay Guarda Insieme", "watchTogetherRelayDescription": "Imposta un relay personalizzato. Tutti devono usare lo stesso server.", "watchTogetherRelayHint": "https://mio-relay.esempio.it", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Segnalazione errori", "crashReportingDescription": "Invia segnalazioni di errori per migliorare l'app", "debugLogging": "Log di debug", @@ -197,12 +197,10 @@ "exportSettings": "Esporta impostazioni", "exportSettingsDescription": "Salva le tue preferenze in un file", "exportSettingsSuccess": "Impostazioni esportate", - "exportSettingsFailed": "Impossibile esportare le impostazioni", "importSettings": "Importa impostazioni", "importSettingsDescription": "Ripristina le preferenze da un file", "importSettingsConfirm": "Questa azione sostituirร  le impostazioni attuali. Continuare?", "importSettingsSuccess": "Impostazioni importate", - "importSettingsFailed": "Impossibile importare le impostazioni", "importSettingsInvalidFile": "Questo file non รจ un'esportazione Plezy valida", "importSettingsNoUser": "Accedi prima di importare le impostazioni", "shortcutsReset": "Scorciatoie ripristinate alle impostazioni predefinite", @@ -217,6 +215,7 @@ "validationErrorDuration": "la durata deve essere compresa tra ${min} e ${max} ${unit}", "shortcutAlreadyAssigned": "Scorciatoia giร  assegnata a ${action}", "shortcutUpdated": "Scorciatoia aggiornata per ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Salto Automatico", "autoSkipIntro": "Salta Intro Automaticamente", "autoSkipIntroDescription": "Salta automaticamente i marcatori dell'intro dopo alcuni secondi", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Posizione di download modificata", "downloadLocationReset": "Posizione di download ripristinata a predefinita", "downloadLocationInvalid": "La cartella selezionata non รจ scrivibile", - "downloadLocationSelectError": "Impossibile selezionare la cartella", + "downloadLocationPickerUnavailable": "La selezione della cartella non รจ disponibile su questo dispositivo", "downloadOnWifiOnly": "Scarica solo con WiFi", "downloadOnWifiOnlyDescription": "Impedisci i download quando si utilizza la rete dati cellulare", "autoRemoveWatchedDownloads": "Rimuovi automaticamente i download visti", @@ -443,7 +442,11 @@ "brightness": "Luminositร ", "hexColor": "Colore esadecimale", "expandText": "Espandi il testo", - "collapseText": "Comprimi il testo" + "collapseText": "Comprimi il testo", + "alphabetNavigation": "Navigazione alfabetica", + "alphabetScrollHint": "Scorri verso l'alto o il basso per cambiare lettera", + "rowColumnPosition": "Riga ${row} di ${rowCount}, colonna ${column} di ${columnCount}", + "rowPosition": "Riga ${row} di ${rowCount}" }, "tooltips": { "shufflePlay": "Riproduzione casuale", @@ -451,6 +454,9 @@ "markAsWatched": "Segna come visto", "markAsUnwatched": "Segna come non visto" }, + "audioTracks": { + "track": "Traccia audio ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Sottotitoli", @@ -478,6 +484,8 @@ "playNext": "Riproduci successivo", "playButton": "Riproduci", "pauseButton": "Pausa", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Riavvolgi di ${seconds} secondi", "seekForwardButton": "Avanza di ${seconds} secondi", "previousButton": "Episodio precedente", @@ -553,11 +561,11 @@ "streamInterrupted": "La riproduzione si รจ interrotta. Premi Riproduci o scorri per riprovare.", "liveStreamInterrupted": "La diretta si รจ interrotta. Premi Riproduci per riprovare.", "fileInfoNotAvailable": "Informazioni sul file non disponibili", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Errore caricamento informazioni sul file: ${error}", "errorLoadingSeries": "Errore caricamento serie", "musicNotSupported": "La riproduzione musicale non รจ ancora supportata", @@ -680,6 +688,7 @@ "borrowExplain": "Prendi in prestito la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.", "borrowEmpty": "Nulla da prendere in prestito al momento.", "borrowEmptySubtitle": "Collega prima Plex o Jellyfin a un altro profilo.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Da ${displayName}", "borrowConnectionBorrowed": "Connessione presa in prestito.", "borrowFailed": "Impossibile prendere in prestito la connessione.", @@ -944,7 +953,7 @@ "favorites": "Preferiti", "reorderFavorites": "Riordina preferiti", "favoritesLoadFailed": "Impossibile caricare i preferiti. Controlla la connessione e riprova.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Partecipa alla sessione in corso", "watchFromStart": "Guarda dall'inizio (${minutes} min fa)", "watchLive": "Guarda in diretta", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index b63f6cd8e..49f40905c 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "ๆ‰ฟ่ชใ‚’ๅพ…ใฃใฆใ„ใพใ™โ€ฆ", "quickConnectCancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซ", "quickConnectExpired": "Quick Connectใฎๆœ‰ๅŠนๆœŸ้™ใŒๅˆ‡ใ‚Œใพใ—ใŸใ€‚ใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "ใ‚ญใƒฃใƒณใ‚ปใƒซ", @@ -180,7 +180,7 @@ "watchTogetherRelay": "ไธ€็ท’ใซ่ฆ–่ดใƒชใƒฌใƒผใ‚ตใƒผใƒใƒผ", "watchTogetherRelayDescription": "ใ‚ซใ‚นใ‚ฟใƒ ใƒชใƒฌใƒผใ‚’่จญๅฎšใ—ใพใ™ใ€‚ๅ…จๅ“กใŒๅŒใ˜ใ‚ตใƒผใƒใƒผใ‚’ไฝฟใ†ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚", "watchTogetherRelayHint": "https://my-relay.example.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "ใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆ", "crashReportingDescription": "ใ‚ขใƒ—ใƒชใฎๆ”นๅ–„ใซๅฝน็ซ‹ใคใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆใ‚’้€ไฟก", "debugLogging": "ใƒ‡ใƒใƒƒใ‚ฐใƒญใ‚ฐ", @@ -197,12 +197,10 @@ "exportSettings": "่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆ", "exportSettingsDescription": "่จญๅฎšใ‚’ใƒ•ใ‚กใ‚คใƒซใซไฟๅญ˜", "exportSettingsSuccess": "่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใ—ใพใ—ใŸ", - "exportSettingsFailed": "่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ", "importSettings": "่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆ", "importSettingsDescription": "ใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰่จญๅฎšใ‚’ๅพฉๅ…ƒ", "importSettingsConfirm": "็พๅœจใฎ่จญๅฎšใ‚’็ฝฎใๆ›ใˆใพใ™ใ€‚็ถš่กŒใ—ใพใ™ใ‹๏ผŸ", "importSettingsSuccess": "่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ—ใพใ—ใŸ", - "importSettingsFailed": "่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ", "importSettingsInvalidFile": "ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏๆœ‰ๅŠนใชPlezyใฎ่จญๅฎšใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใฏใ‚ใ‚Šใพใ›ใ‚“", "importSettingsNoUser": "่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ™ใ‚‹ๅ‰ใซใ‚ตใ‚คใƒณใ‚คใƒณใ—ใฆใใ ใ•ใ„", "shortcutsReset": "ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ", @@ -217,6 +215,7 @@ "validationErrorDuration": "ๆ™‚้–“ใฏ${min}ใ‹ใ‚‰${max} ${unit}ใฎ้–“ใงใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™", "shortcutAlreadyAssigned": "ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใฏๆ—ขใซ${action}ใซๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใฆใ„ใพใ™", "shortcutUpdated": "${action}ใฎใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ๆ›ดๆ–ฐใ—ใพใ—ใŸ", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—", "autoSkipIntro": "ใ‚คใƒณใƒˆใƒญใ‚’่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—", "autoSkipIntroDescription": "ๆ•ฐ็ง’ๅพŒใซใ‚คใƒณใƒˆใƒญใƒžใƒผใ‚ซใƒผใ‚’่‡ชๅ‹•็š„ใซใ‚นใ‚ญใƒƒใƒ—", @@ -242,7 +241,7 @@ "downloadLocationChanged": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ๅค‰ๆ›ดใ—ใพใ—ใŸ", "downloadLocationReset": "ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ", "downloadLocationInvalid": "้ธๆŠžใ—ใŸใƒ•ใ‚ฉใƒซใƒ€ใฏๆ›ธใ่พผใฟใงใใพใ›ใ‚“", - "downloadLocationSelectError": "ใƒ•ใ‚ฉใƒซใƒ€ใฎ้ธๆŠžใซๅคฑๆ•—ใ—ใพใ—ใŸ", + "downloadLocationPickerUnavailable": "ใ“ใฎใƒ‡ใƒใ‚คใ‚นใงใฏใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใงใใพใ›ใ‚“", "downloadOnWifiOnly": "WiFiใฎใฟใงใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰", "downloadOnWifiOnlyDescription": "ใƒขใƒใ‚คใƒซใƒ‡ใƒผใ‚ฟ้€šไฟกๆ™‚ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’้˜ฒๆญข", "autoRemoveWatchedDownloads": "่ฆ–่ดๆธˆใฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฎ่‡ชๅ‹•ๅ‰Š้™ค", @@ -443,7 +442,11 @@ "brightness": "ๆ˜Žใ‚‹ใ•", "hexColor": "16้€ฒใ‚ซใƒฉใƒผ", "expandText": "ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅฑ•้–‹", - "collapseText": "ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŠ˜ใ‚ŠใŸใŸใ‚€" + "collapseText": "ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŠ˜ใ‚ŠใŸใŸใ‚€", + "alphabetNavigation": "ใ‚ขใƒซใƒ•ใ‚กใƒ™ใƒƒใƒˆใƒŠใƒ“ใ‚ฒใƒผใ‚ทใƒงใƒณ", + "alphabetScrollHint": "ไธŠไธ‹ใซใ‚นใƒฏใ‚คใƒ—ใ—ใฆๆ–‡ๅญ—ใ”ใจใซ็งปๅ‹•", + "rowColumnPosition": "${rowCount}่กŒไธญ${row}่กŒใ€${columnCount}ๅˆ—ไธญ${column}ๅˆ—", + "rowPosition": "${rowCount}่กŒไธญ${row}่กŒ" }, "tooltips": { "shufflePlay": "ใ‚ทใƒฃใƒƒใƒ•ใƒซๅ†็”Ÿ", @@ -451,6 +454,9 @@ "markAsWatched": "่ฆ–่ดๆธˆใฟใซใ™ใ‚‹", "markAsUnwatched": "ๆœช่ฆ–่ดใซใ™ใ‚‹" }, + "audioTracks": { + "track": "้Ÿณๅฃฐใƒˆใƒฉใƒƒใ‚ฏ${n}" + }, "videoControls": { "audioLabel": "้Ÿณๅฃฐ", "subtitlesLabel": "ๅญ—ๅน•", @@ -478,6 +484,8 @@ "playNext": "ๆฌกใ‚’ๅ†็”Ÿ", "playButton": "ๅ†็”Ÿ", "pauseButton": "ไธ€ๆ™‚ๅœๆญข", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "${seconds}็ง’ๆˆปใ‚‹", "seekForwardButton": "${seconds}็ง’้€ฒใ‚€", "previousButton": "ๅ‰ใฎใ‚จใƒ”ใ‚ฝใƒผใƒ‰", @@ -552,11 +560,11 @@ "streamInterrupted": "ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ™ใ‹ใ‚ทใƒผใ‚ฏใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚", "liveStreamInterrupted": "ใƒฉใ‚คใƒ–ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚", "fileInfoNotAvailable": "ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใŒๅˆฉ็”จใงใใพใ›ใ‚“", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ: ${error}", "errorLoadingSeries": "ใ‚ทใƒชใƒผใ‚บใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ", "musicNotSupported": "้Ÿณๆฅฝใฎๅ†็”Ÿใฏใพใ ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“", @@ -679,6 +687,7 @@ "borrowExplain": "ๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ™ใ€‚PINไฟ่ญทใ•ใ‚ŒใŸใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซใฏPINใŒๅฟ…่ฆใงใ™ใ€‚", "borrowEmpty": "ใพใ ๅ€Ÿใ‚Šใ‚‹ใ‚‚ใฎใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚", "borrowEmptySubtitle": "ใพใšๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซPlexใพใŸใฏJellyfinใ‚’ๆŽฅ็ถšใ—ใฆใใ ใ•ใ„ใ€‚", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "${displayName}ใ‹ใ‚‰", "borrowConnectionBorrowed": "ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ—ใŸใ€‚", "borrowFailed": "ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใงใใพใ›ใ‚“ใงใ—ใŸใ€‚", @@ -942,7 +951,7 @@ "favorites": "ใŠๆฐ—ใซๅ…ฅใ‚Š", "reorderFavorites": "ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’ไธฆในๆ›ฟใˆ", "favoritesLoadFailed": "ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’่ชญใฟ่พผใ‚ใพใ›ใ‚“ใงใ—ใŸใ€‚ๆŽฅ็ถšใ‚’็ขบ่ชใ—ใฆใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "้€ฒ่กŒไธญใฎใ‚ปใƒƒใ‚ทใƒงใƒณใซๅ‚ๅŠ ", "watchFromStart": "ๆœ€ๅˆใ‹ใ‚‰่ฆ–่ด๏ผˆ${minutes}ๅˆ†ๅ‰ใซ้–‹ๅง‹๏ผ‰", "watchLive": "ใƒฉใ‚คใƒ–ใง่ฆ–่ด", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 0e955d95d..5c3616584 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "์Šน์ธ ๋Œ€๊ธฐ ์ค‘โ€ฆ", "quickConnectCancel": "์ทจ์†Œ", "quickConnectExpired": "Quick Connect๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "์ทจ์†Œ", @@ -180,7 +180,7 @@ "watchTogetherRelay": "ํ•จ๊ป˜ ๋ณด๊ธฐ ๋ฆด๋ ˆ์ด", "watchTogetherRelayDescription": "์‚ฌ์šฉ์ž ์ง€์ • ๋ฆด๋ ˆ์ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ™์€ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.", "watchTogetherRelayHint": "https://my-relay.example.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "์ถฉ๋Œ ๋ณด๊ณ ", "crashReportingDescription": "์•ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ถฉ๋Œ ๋ณด๊ณ ์„œ ์ „์†ก", "debugLogging": "๋””๋ฒ„๊ทธ ๋กœ๊น…", @@ -197,12 +197,10 @@ "exportSettings": "์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ", "exportSettingsDescription": "๊ธฐ๋ณธ ์„ค์ •์„ ํŒŒ์ผ๋กœ ์ €์žฅ", "exportSettingsSuccess": "์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ์™„๋ฃŒ", - "exportSettingsFailed": "์„ค์ •์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", "importSettings": "์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ", "importSettingsDescription": "ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ ์„ค์ • ๋ณต์›", "importSettingsConfirm": "ํ˜„์žฌ ์„ค์ •์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", "importSettingsSuccess": "์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ ์™„๋ฃŒ", - "importSettingsFailed": "์„ค์ •์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", "importSettingsInvalidFile": "์œ ํšจํ•œ Plezy ์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค", "importSettingsNoUser": "์„ค์ •์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•˜์„ธ์š”", "shortcutsReset": "๋‹จ์ถ•ํ‚ค๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค", @@ -217,6 +215,7 @@ "validationErrorDuration": "๊ธฐ๊ฐ„์€ ${min}๊ณผ ${max} ${unit} ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค", "shortcutAlreadyAssigned": "๋‹จ์ถ•ํ‚ค๊ฐ€ ์ด๋ฏธ ${action}์— ํ• ๋‹น ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "shortcutUpdated": "๋‹จ์ถ•ํ‚ค๊ฐ€ ${action}์— ๋Œ€ํ•ด ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "์ž๋™ ๊ฑด๋„ˆ๋›ฐ๊ธฐ", "autoSkipIntro": "์ž๋™์œผ๋กœ ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ", "autoSkipIntroDescription": "๋ช‡ ์ดˆ ํ›„ ์˜คํ”„๋‹์„ ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ", @@ -242,7 +241,7 @@ "downloadLocationChanged": "๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "downloadLocationReset": "๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ • ๋˜์—ˆ์Šต๋‹ˆ๋‹ค", "downloadLocationInvalid": "์„ ํƒํ•œ ํด๋”์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค", - "downloadLocationSelectError": "ํด๋” ์„ ํƒ ์‹คํŒจ", + "downloadLocationPickerUnavailable": "์ด ๊ธฐ๊ธฐ์—์„œ๋Š” ํด๋”๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค", "downloadOnWifiOnly": "WiFi ์—ฐ๊ฒฐ ์‹œ์—๋งŒ ๋‹ค์šด๋กœ๋“œ", "downloadOnWifiOnlyDescription": "์…€๋ฃฐ๋Ÿฌ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์‹œ ๋‹ค์šด๋กœ๋“œ ๋ถˆ๊ฐ€", "autoRemoveWatchedDownloads": "์‹œ์ฒญํ•œ ๋‹ค์šด๋กœ๋“œ ์ž๋™ ์‚ญ์ œ", @@ -443,7 +442,11 @@ "brightness": "๋ฐ๊ธฐ", "hexColor": "16์ง„์ˆ˜ ์ƒ‰์ƒ", "expandText": "ํ…์ŠคํŠธ ํŽผ์น˜๊ธฐ", - "collapseText": "ํ…์ŠคํŠธ ์ ‘๊ธฐ" + "collapseText": "ํ…์ŠคํŠธ ์ ‘๊ธฐ", + "alphabetNavigation": "์•ŒํŒŒ๋ฒณ ํƒ์ƒ‰", + "alphabetScrollHint": "์œ„์•„๋ž˜๋กœ ์Šค์™€์ดํ”„ํ•˜์—ฌ ๊ธ€์ž๋ณ„๋กœ ์ด๋™", + "rowColumnPosition": "${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰, ${columnCount}์—ด ์ค‘ ${column}์—ด", + "rowPosition": "${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰" }, "tooltips": { "shufflePlay": "๋ฌด์ž‘์œ„ ์žฌ์ƒ", @@ -451,6 +454,9 @@ "markAsWatched": "์‹œ์ฒญ ์™„๋ฃŒ๋กœ ํ‘œ์‹œ", "markAsUnwatched": "์‹œ์ฒญ ์•ˆ ํ•จ์œผ๋กœ ํ‘œ์‹œ" }, + "audioTracks": { + "track": "์˜ค๋””์˜ค ํŠธ๋ž™ ${n}" + }, "videoControls": { "audioLabel": "์˜ค๋””์˜ค", "subtitlesLabel": "์ž๋ง‰", @@ -478,6 +484,8 @@ "playNext": "๋‹ค์Œ ์žฌ์ƒ", "playButton": "์žฌ์ƒ", "pauseButton": "์ผ์‹œ์ •์ง€", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "${seconds} ์ดˆ ๋’ค๋กœ", "seekForwardButton": "${seconds} ์ดˆ ์•ž์œผ๋กœ", "previousButton": "์ด์ „ ์—ํ”ผ์†Œ๋“œ", @@ -552,11 +560,11 @@ "streamInterrupted": "์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", "liveStreamInterrupted": "๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆŒ๋Ÿฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", "fileInfoNotAvailable": "ํŒŒ์ผ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "ํŒŒ์ผ ์ •๋ณด ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜: ${error}", "errorLoadingSeries": "์‹œ๋ฆฌ์ฆˆ ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜", "musicNotSupported": "์Œ์•… ์žฌ์ƒ ๋ฏธ์ง€์›", @@ -679,6 +687,7 @@ "borrowExplain": "๋‹ค๋ฅธ ํ”„๋กœํ•„์˜ ์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฝ๋‹ˆ๋‹ค. PIN์œผ๋กœ ๋ณดํ˜ธ๋œ ํ”„๋กœํ•„์—๋Š” PIN์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.", "borrowEmpty": "์•„์ง ๋นŒ๋ฆด ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.", "borrowEmptySubtitle": "๋จผ์ € ๋‹ค๋ฅธ ํ”„๋กœํ•„์— Plex ๋˜๋Š” Jellyfin์„ ์—ฐ๊ฒฐํ•˜์„ธ์š”.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "${displayName}์—์„œ", "borrowConnectionBorrowed": "์—ฐ๊ฒฐ์„ ๋นŒ๋ ธ์Šต๋‹ˆ๋‹ค.", "borrowFailed": "์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.", @@ -942,7 +951,7 @@ "favorites": "์ฆ๊ฒจ์ฐพ๊ธฐ", "reorderFavorites": "์ฆ๊ฒจ์ฐพ๊ธฐ ์ˆœ์„œ ๋ณ€๊ฒฝ", "favoritesLoadFailed": "์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "์ง„ํ–‰ ์ค‘์ธ ์„ธ์…˜ ์ฐธ์—ฌ", "watchFromStart": "์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ฒญ (${minutes}๋ถ„ ์ „ ์‹œ์ž‘)", "watchLive": "์‹ค์‹œ๊ฐ„ ์‹œ์ฒญ", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index d7660f76a..532c8fc25 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Venter pรฅ godkjenningโ€ฆ", "quickConnectCancel": "Avbryt", "quickConnectExpired": "Quick Connect er utlรธpt. Prรธv igjen.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Avbryt", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Se Sammen-relay", "watchTogetherRelayDescription": "Angi en egendefinert relay. Alle mรฅ bruke samme server.", "watchTogetherRelayHint": "https://min-relay.eksempel.no", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Krasjrapportering", "crashReportingDescription": "Send krasjrapporter for รฅ hjelpe med รฅ forbedre appen", "debugLogging": "Feilsรธkingslogging", @@ -197,12 +197,10 @@ "exportSettings": "Eksporter innstillinger", "exportSettingsDescription": "Lagre innstillingene i en fil", "exportSettingsSuccess": "Innstillinger eksportert", - "exportSettingsFailed": "Kunne ikke eksportere innstillinger", "importSettings": "Importer innstillinger", "importSettingsDescription": "Gjenopprett innstillinger fra en fil", "importSettingsConfirm": "Dette vil erstatte nรฅvรฆrende innstillinger. Fortsette?", "importSettingsSuccess": "Innstillinger importert", - "importSettingsFailed": "Kunne ikke importere innstillinger", "importSettingsInvalidFile": "Denne filen er ikke en gyldig Plezy-innstillingseksport", "importSettingsNoUser": "Logg inn fรธr import av innstillinger", "shortcutsReset": "Snarveier tilbakestilt til standard", @@ -217,6 +215,7 @@ "validationErrorDuration": "Varigheten mรฅ vรฆre mellom ${min} og ${max} ${unit}", "shortcutAlreadyAssigned": "Snarvei allerede tilordnet til ${action}", "shortcutUpdated": "Snarvei oppdatert for ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Automatisk hopp", "autoSkipIntro": "Hopp over intro automatisk", "autoSkipIntroDescription": "Hopp automatisk over intromarkรธrer etter noen sekunder", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Nedlastingsplassering endret", "downloadLocationReset": "Nedlastingsplassering tilbakestilt til standard", "downloadLocationInvalid": "Valgt mappe er ikke skrivbar", - "downloadLocationSelectError": "Kunne ikke velge mappe", + "downloadLocationPickerUnavailable": "Mappevalg er ikke tilgjengelig pรฅ denne enheten", "downloadOnWifiOnly": "Last ned kun pรฅ WiFi", "downloadOnWifiOnlyDescription": "Forhindre nedlastinger pรฅ mobildata", "autoRemoveWatchedDownloads": "Fjern sette nedlastinger automatisk", @@ -443,7 +442,11 @@ "brightness": "Lysstyrke", "hexColor": "Heksadesimal farge", "expandText": "Utvid tekst", - "collapseText": "Fold sammen tekst" + "collapseText": "Fold sammen tekst", + "alphabetNavigation": "Alfabetisk navigasjon", + "alphabetScrollHint": "Sveip opp eller ned for รฅ flytte รฉn bokstav", + "rowColumnPosition": "Rad ${row} av ${rowCount}, kolonne ${column} av ${columnCount}", + "rowPosition": "Rad ${row} av ${rowCount}" }, "tooltips": { "shufflePlay": "Tilfeldig avspilling", @@ -451,6 +454,9 @@ "markAsWatched": "Merk som sett", "markAsUnwatched": "Merk som usett" }, + "audioTracks": { + "track": "Lydspor ${n}" + }, "videoControls": { "audioLabel": "Lyd", "subtitlesLabel": "Undertekster", @@ -478,6 +484,8 @@ "playNext": "Spill neste", "playButton": "Spill av", "pauseButton": "Pause", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Spol tilbake ${seconds} sekunder", "seekForwardButton": "Spol fremover ${seconds} sekunder", "previousButton": "Forrige episode", @@ -553,11 +561,11 @@ "streamInterrupted": "Avspillingen ble avbrutt. Trykk pรฅ Spill av eller spol for รฅ prรธve pรฅ nytt.", "liveStreamInterrupted": "Direktesendingen ble avbrutt. Trykk pรฅ Spill av for รฅ prรธve pรฅ nytt.", "fileInfoNotAvailable": "Filinformasjon ikke tilgjengelig", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Feil ved lasting av filinformasjon: ${error}", "errorLoadingSeries": "Feil ved lasting av serie", "musicNotSupported": "Musikkavspilling stรธttes ikke ennรฅ", @@ -680,6 +688,7 @@ "borrowExplain": "Lรฅn en annen profils tilkobling. PIN-beskyttede profiler krever PIN.", "borrowEmpty": "Ingenting รฅ lรฅne enda.", "borrowEmptySubtitle": "Koble Plex eller Jellyfin til en annen profil fรธrst.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Fra ${displayName}", "borrowConnectionBorrowed": "Tilkobling lรฅnt.", "borrowFailed": "Kunne ikke lรฅne tilkoblingen.", @@ -944,7 +953,7 @@ "favorites": "Favoritter", "reorderFavorites": "Endre rekkefรธlge pรฅ favoritter", "favoritesLoadFailed": "Kunne ikke laste inn favoritter. Kontroller tilkoblingen og prรธv pรฅ nytt.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Bli med i pรฅgรฅende รธkt", "watchFromStart": "Se fra starten (${minutes} min siden)", "watchLive": "Se direkte", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 7e369c3d2..4c50e2b8d 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Wachten op goedkeuringโ€ฆ", "quickConnectCancel": "Annuleren", "quickConnectExpired": "Quick Connect is verlopen. Probeer opnieuw.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Annuleren", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Samen Kijken Relay", "watchTogetherRelayDescription": "Stel een aangepaste relay in. Iedereen moet dezelfde server gebruiken.", "watchTogetherRelayHint": "https://mijn-relay.voorbeeld.nl", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Crashrapportage", "crashReportingDescription": "Crashrapporten verzenden om de app te verbeteren", "debugLogging": "Debug logging", @@ -197,12 +197,10 @@ "exportSettings": "Instellingen exporteren", "exportSettingsDescription": "Sla je voorkeuren op in een bestand", "exportSettingsSuccess": "Instellingen geรซxporteerd", - "exportSettingsFailed": "Kon instellingen niet exporteren", "importSettings": "Instellingen importeren", "importSettingsDescription": "Voorkeuren herstellen vanuit een bestand", "importSettingsConfirm": "Hiermee worden je huidige instellingen vervangen. Doorgaan?", "importSettingsSuccess": "Instellingen geรฏmporteerd", - "importSettingsFailed": "Kon instellingen niet importeren", "importSettingsInvalidFile": "Dit bestand is geen geldige Plezy-export", "importSettingsNoUser": "Meld je aan voordat je instellingen importeert", "shortcutsReset": "Sneltoetsen gereset naar standaard", @@ -217,6 +215,7 @@ "validationErrorDuration": "Duur moet tussen ${min} en ${max} ${unit} zijn", "shortcutAlreadyAssigned": "Sneltoets al toegewezen aan ${action}", "shortcutUpdated": "Sneltoets bijgewerkt voor ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Automatisch Overslaan", "autoSkipIntro": "Intro Automatisch Overslaan", "autoSkipIntroDescription": "Intro-markeringen na enkele seconden automatisch overslaan", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Downloadlocatie gewijzigd", "downloadLocationReset": "Downloadlocatie hersteld naar standaard", "downloadLocationInvalid": "Geselecteerde map is niet beschrijfbaar", - "downloadLocationSelectError": "Kan map niet selecteren", + "downloadLocationPickerUnavailable": "Mapselectie is niet beschikbaar op dit apparaat", "downloadOnWifiOnly": "Alleen via WiFi downloaden", "downloadOnWifiOnlyDescription": "Voorkom downloads bij gebruik van mobiele data", "autoRemoveWatchedDownloads": "Bekeken downloads automatisch verwijderen", @@ -443,7 +442,11 @@ "brightness": "Helderheid", "hexColor": "Hexkleur", "expandText": "Tekst uitvouwen", - "collapseText": "Tekst samenvouwen" + "collapseText": "Tekst samenvouwen", + "alphabetNavigation": "Alfabetische navigatie", + "alphabetScrollHint": "Veeg omhoog of omlaag om per letter te bewegen", + "rowColumnPosition": "Rij ${row} van ${rowCount}, kolom ${column} van ${columnCount}", + "rowPosition": "Rij ${row} van ${rowCount}" }, "tooltips": { "shufflePlay": "Willekeurig afspelen", @@ -451,6 +454,9 @@ "markAsWatched": "Markeer als gekeken", "markAsUnwatched": "Markeer als ongekeken" }, + "audioTracks": { + "track": "Audiospoor ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Ondertitels", @@ -478,6 +484,8 @@ "playNext": "Volgende afspelen", "playButton": "Afspelen", "pauseButton": "Pauzeren", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Terugspoelen ${seconds} seconden", "seekForwardButton": "Vooruitspoelen ${seconds} seconden", "previousButton": "Vorige aflevering", @@ -553,11 +561,11 @@ "streamInterrupted": "De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.", "liveStreamInterrupted": "De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.", "fileInfoNotAvailable": "Bestand informatie niet beschikbaar", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Fout bij laden bestand info: ${error}", "errorLoadingSeries": "Fout bij laden serie", "musicNotSupported": "Muziek afspelen wordt nog niet ondersteund", @@ -680,6 +688,7 @@ "borrowExplain": "Leen de verbinding van een ander profiel. PIN-beveiligde profielen vereisen een PIN.", "borrowEmpty": "Nog niets te lenen.", "borrowEmptySubtitle": "Verbind Plex of Jellyfin eerst met een ander profiel.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Van ${displayName}", "borrowConnectionBorrowed": "Verbinding geleend.", "borrowFailed": "Kan verbinding niet lenen.", @@ -944,7 +953,7 @@ "favorites": "Favorieten", "reorderFavorites": "Favorieten herordenen", "favoritesLoadFailed": "Favorieten konden niet worden geladen. Controleer je verbinding en probeer het opnieuw.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Deelnemen aan lopende sessie", "watchFromStart": "Kijk vanaf het begin (${minutes} min geleden)", "watchLive": "Live kijken", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index 720382144..7b90de2ce 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Oczekiwanie na zatwierdzenieโ€ฆ", "quickConnectCancel": "Anuluj", "quickConnectExpired": "Quick Connect wygasล‚. Sprรณbuj ponownie.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Anuluj", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relay Oglฤ…daj Razem", "watchTogetherRelayDescription": "Ustaw wล‚asny relay. Wszyscy muszฤ… uลผywaฤ‡ tego samego serwera.", "watchTogetherRelayHint": "https://moj-relay.przyklad.pl", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Raportowanie bล‚ฤ™dรณw", "crashReportingDescription": "Wysyล‚aj raporty o bล‚ฤ™dach, aby pomรณc ulepszyฤ‡ aplikacjฤ™", "debugLogging": "Logowanie debugowania", @@ -197,12 +197,10 @@ "exportSettings": "Eksportuj ustawienia", "exportSettingsDescription": "Zapisz swoje preferencje do pliku", "exportSettingsSuccess": "Ustawienia wyeksportowane", - "exportSettingsFailed": "Nie moลผna wyeksportowaฤ‡ ustawieล„", "importSettings": "Importuj ustawienia", "importSettingsDescription": "Przywrรณฤ‡ preferencje z pliku", "importSettingsConfirm": "Bieลผฤ…ce ustawienia zostanฤ… zastฤ…pione. Kontynuowaฤ‡?", "importSettingsSuccess": "Ustawienia zaimportowane", - "importSettingsFailed": "Nie moลผna zaimportowaฤ‡ ustawieล„", "importSettingsInvalidFile": "Ten plik nie jest prawidล‚owym eksportem Plezy", "importSettingsNoUser": "Zaloguj siฤ™ przed importem ustawieล„", "shortcutsReset": "Skrรณty przywrรณcone do domyล›lnych", @@ -217,6 +215,7 @@ "validationErrorDuration": "Czas musi byฤ‡ miฤ™dzy ${min} a ${max} ${unit}", "shortcutAlreadyAssigned": "Skrรณt jest juลผ przypisany do ${action}", "shortcutUpdated": "Skrรณt zaktualizowany dla ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Automatyczne pomijanie", "autoSkipIntro": "Automatyczne pomijanie intro", "autoSkipIntroDescription": "Automatycznie pomijaj znaczniki intro po kilku sekundach", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Lokalizacja pobierania zmieniona", "downloadLocationReset": "Lokalizacja pobierania przywrรณcona do domyล›lnej", "downloadLocationInvalid": "Wybrany folder nie jest zapisywalny", - "downloadLocationSelectError": "Nie udaล‚o siฤ™ wybraฤ‡ folderu", + "downloadLocationPickerUnavailable": "Wybรณr folderu nie jest dostฤ™pny na tym urzฤ…dzeniu", "downloadOnWifiOnly": "Pobieraj tylko przez WiFi", "downloadOnWifiOnlyDescription": "Blokuj pobieranie na danych komรณrkowych", "autoRemoveWatchedDownloads": "Automatycznie usuwaj obejrzane pobrania", @@ -443,7 +442,11 @@ "brightness": "Jasnoล›ฤ‡", "hexColor": "Kolor szesnastkowy", "expandText": "Rozwiล„ tekst", - "collapseText": "Zwiล„ tekst" + "collapseText": "Zwiล„ tekst", + "alphabetNavigation": "Nawigacja alfabetyczna", + "alphabetScrollHint": "Przesuล„ w gรณrฤ™ lub w dรณล‚, aby przejล›ฤ‡ o literฤ™", + "rowColumnPosition": "Wiersz ${row} z ${rowCount}, kolumna ${column} z ${columnCount}", + "rowPosition": "Wiersz ${row} z ${rowCount}" }, "tooltips": { "shufflePlay": "Odtwarzanie losowe", @@ -451,6 +454,9 @@ "markAsWatched": "Oznacz jako obejrzane", "markAsUnwatched": "Oznacz jako nieobejrzane" }, + "audioTracks": { + "track": "ลšcieลผka audio ${n}" + }, "videoControls": { "audioLabel": "Audio", "subtitlesLabel": "Napisy", @@ -478,6 +484,8 @@ "playNext": "Odtwรณrz nastฤ™pny", "playButton": "Odtwรณrz", "pauseButton": "Pauza", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Przewiล„ do tyล‚u o ${seconds} sekund", "seekForwardButton": "Przewiล„ do przodu o ${seconds} sekund", "previousButton": "Poprzedni odcinek", @@ -555,11 +563,11 @@ "streamInterrupted": "Strumieล„ zostaล‚ przerwany. Naciล›nij odtwarzanie lub przewiล„, aby sprรณbowaฤ‡ ponownie.", "liveStreamInterrupted": "Transmisja na ลผywo zostaล‚a przerwana. Naciล›nij odtwarzanie, aby sprรณbowaฤ‡ ponownie.", "fileInfoNotAvailable": "Informacje o pliku niedostฤ™pne", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Bล‚ฤ…d ล‚adowania informacji o pliku: ${error}", "errorLoadingSeries": "Bล‚ฤ…d ล‚adowania serialu", "musicNotSupported": "Odtwarzanie muzyki nie jest jeszcze obsล‚ugiwane", @@ -682,6 +690,7 @@ "borrowExplain": "Poลผycz poล‚ฤ…czenie z innego profilu. Profile chronione PIN wymagajฤ… PIN-u.", "borrowEmpty": "Nic do poลผyczenia.", "borrowEmptySubtitle": "Najpierw poล‚ฤ…cz Plex lub Jellyfin z innym profilem.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Od ${displayName}", "borrowConnectionBorrowed": "Poล‚ฤ…czenie poลผyczone.", "borrowFailed": "Nie udaล‚o siฤ™ poลผyczyฤ‡ poล‚ฤ…czenia.", @@ -948,7 +957,7 @@ "favorites": "Ulubione", "reorderFavorites": "Zmieล„ kolejnoล›ฤ‡ ulubionych", "favoritesLoadFailed": "Nie udaล‚o siฤ™ wczytaฤ‡ ulubionych. Sprawdลบ poล‚ฤ…czenie i sprรณbuj ponownie.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Doล‚ฤ…cz do trwajฤ…cej sesji", "watchFromStart": "Oglฤ…daj od poczฤ…tku (${minutes} min temu)", "watchLive": "Oglฤ…daj na ลผywo", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 2cd061e32..fc976110a 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "A aguardar aprovaรงรฃoโ€ฆ", "quickConnectCancel": "Cancelar", "quickConnectExpired": "Quick Connect expirou. Tente novamente.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Cancelar", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relay do Assistir Juntos", "watchTogetherRelayDescription": "Defina um relay personalizado. Todos devem usar o mesmo servidor.", "watchTogetherRelayHint": "https://meu-relay.exemplo.com.br", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Relatรณrio de Erros", "crashReportingDescription": "Enviar relatรณrios de erros para ajudar a melhorar o app", "debugLogging": "Log de Depuraรงรฃo", @@ -197,12 +197,10 @@ "exportSettings": "Exportar Configuraรงรตes", "exportSettingsDescription": "Salve suas preferรชncias em um arquivo", "exportSettingsSuccess": "Configuraรงรตes exportadas", - "exportSettingsFailed": "Nรฃo foi possรญvel exportar as configuraรงรตes", "importSettings": "Importar Configuraรงรตes", "importSettingsDescription": "Restaurar preferรชncias a partir de um arquivo", "importSettingsConfirm": "Isso substituirรก suas configuraรงรตes atuais. Continuar?", "importSettingsSuccess": "Configuraรงรตes importadas", - "importSettingsFailed": "Nรฃo foi possรญvel importar as configuraรงรตes", "importSettingsInvalidFile": "Este arquivo nรฃo รฉ uma exportaรงรฃo vรกlida do Plezy", "importSettingsNoUser": "Entre na conta antes de importar as configuraรงรตes", "shortcutsReset": "Atalhos redefinidos para o padrรฃo", @@ -217,6 +215,7 @@ "validationErrorDuration": "A duraรงรฃo deve ser entre ${min} e ${max} ${unit}", "shortcutAlreadyAssigned": "Atalho jรก atribuรญdo a ${action}", "shortcutUpdated": "Atalho atualizado para ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Pular Automaticamente", "autoSkipIntro": "Pular Intro Automaticamente", "autoSkipIntroDescription": "Pular marcadores de intro automaticamente apรณs alguns segundos", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Local de download alterado", "downloadLocationReset": "Local de download redefinido para padrรฃo", "downloadLocationInvalid": "A pasta selecionada nรฃo permite gravaรงรฃo", - "downloadLocationSelectError": "Falha ao selecionar pasta", + "downloadLocationPickerUnavailable": "A seleรงรฃo de pasta nรฃo estรก disponรญvel neste dispositivo", "downloadOnWifiOnly": "Baixar apenas no WiFi", "downloadOnWifiOnlyDescription": "Impedir downloads quando em dados mรณveis", "autoRemoveWatchedDownloads": "Remover downloads assistidos automaticamente", @@ -443,7 +442,11 @@ "brightness": "Brilho", "hexColor": "Cor hexadecimal", "expandText": "Expandir texto", - "collapseText": "Recolher texto" + "collapseText": "Recolher texto", + "alphabetNavigation": "Navegaรงรฃo alfabรฉtica", + "alphabetScrollHint": "Deslize para cima ou para baixo para avanรงar por letra", + "rowColumnPosition": "Linha ${row} de ${rowCount}, coluna ${column} de ${columnCount}", + "rowPosition": "Linha ${row} de ${rowCount}" }, "tooltips": { "shufflePlay": "Reproduรงรฃo aleatรณria", @@ -451,6 +454,9 @@ "markAsWatched": "Marcar como assistido", "markAsUnwatched": "Marcar como nรฃo assistido" }, + "audioTracks": { + "track": "Faixa de รกudio ${n}" + }, "videoControls": { "audioLabel": "รudio", "subtitlesLabel": "Legendas", @@ -478,6 +484,8 @@ "playNext": "Reproduzir Prรณximo", "playButton": "Reproduzir", "pauseButton": "Pausar", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Retroceder ${seconds} segundos", "seekForwardButton": "Avanรงar ${seconds} segundos", "previousButton": "Episรณdio anterior", @@ -553,11 +561,11 @@ "streamInterrupted": "A transmissรฃo foi interrompida. Toque em reproduzir ou avance para tentar novamente.", "liveStreamInterrupted": "A transmissรฃo ao vivo foi interrompida. Toque em reproduzir para tentar novamente.", "fileInfoNotAvailable": "Informaรงรตes do arquivo nรฃo disponรญveis", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Erro ao carregar info do arquivo: ${error}", "errorLoadingSeries": "Erro ao carregar sรฉrie", "musicNotSupported": "Reproduรงรฃo de mรบsica ainda nรฃo รฉ suportada", @@ -680,6 +688,7 @@ "borrowExplain": "Use a conexรฃo de outro perfil. Perfis protegidos por PIN exigem PIN.", "borrowEmpty": "Nada para emprestar ainda.", "borrowEmptySubtitle": "Conecte Plex ou Jellyfin a outro perfil primeiro.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "De ${displayName}", "borrowConnectionBorrowed": "Conexรฃo tomada emprestada.", "borrowFailed": "Nรฃo foi possรญvel tomar a conexรฃo emprestada.", @@ -944,7 +953,7 @@ "favorites": "Favoritos", "reorderFavorites": "Reordenar favoritos", "favoritesLoadFailed": "Nรฃo foi possรญvel carregar os favoritos. Verifique sua conexรฃo e tente novamente.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Entrar na sessรฃo em andamento", "watchFromStart": "Assistir do inรญcio (${minutes} min atrรกs)", "watchLive": "Assistir ao vivo", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 2929356f9..a7d8743ae 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "ะžะถะธะดะฐะฝะธะต ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธัโ€ฆ", "quickConnectCancel": "ะžั‚ะผะตะฝะฐ", "quickConnectExpired": "ะกั€ะพะบ Quick Connect ะธัั‚ะตะบ. ะŸะพะฟั€ะพะฑัƒะนั‚ะต ัะฝะพะฒะฐ.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "ะžั‚ะผะตะฝะฐ", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Relay ัะพะฒะผะตัั‚ะฝะพะณะพ ะฟั€ะพัะผะพั‚ั€ะฐ", "watchTogetherRelayDescription": "ะ—ะฐะดะฐะนั‚ะต ัะฒะพะน relay. ะ’ัะต ะดะพะปะถะฝั‹ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะพะดะธะฝ ัะตั€ะฒะตั€.", "watchTogetherRelayHint": "https://my-relay.example.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "ะžั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั…", "crashReportingDescription": "ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ะพั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั… ะดะปั ัƒะปัƒั‡ัˆะตะฝะธั ะฟั€ะธะปะพะถะตะฝะธั", "debugLogging": "ะ–ัƒั€ะฝะฐะป ะพั‚ะปะฐะดะบะธ", @@ -197,12 +197,10 @@ "exportSettings": "ะญะบัะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ", "exportSettingsDescription": "ะกะพั…ั€ะฐะฝะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะฒ ั„ะฐะนะป", "exportSettingsSuccess": "ะะฐัั‚ั€ะพะนะบะธ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹", - "exportSettingsFailed": "ะะต ัƒะดะฐะปะพััŒ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ", "importSettings": "ะ˜ะผะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ", "importSettingsDescription": "ะ’ะพััั‚ะฐะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะธะท ั„ะฐะนะปะฐ", "importSettingsConfirm": "ะญั‚ะพ ะทะฐะผะตะฝะธั‚ ะฒะฐัˆะธ ั‚ะตะบัƒั‰ะธะต ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดะพะปะถะธั‚ัŒ?", "importSettingsSuccess": "ะะฐัั‚ั€ะพะนะบะธ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹", - "importSettingsFailed": "ะะต ัƒะดะฐะปะพััŒ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ", "importSettingsInvalidFile": "ะญั‚ะพั‚ ั„ะฐะนะป ะฝะต ัะฒะปัะตั‚ัั ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝั‹ะผ ัะบัะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ Plezy", "importSettingsNoUser": "ะ’ะพะนะดะธั‚ะต ะฒ ัะธัั‚ะตะผัƒ ะฟะตั€ะตะด ะธะผะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ", "shortcutsReset": "ะ“ะพั€ัั‡ะธะต ะบะปะฐะฒะธัˆะธ ัะฑั€ะพัˆะตะฝั‹ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ", @@ -217,6 +215,7 @@ "validationErrorDuration": "ะ”ะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ะดะพะปะถะฝะฐ ะฑั‹ั‚ัŒ ะพั‚ ${min} ะดะพ ${max} ${unit}", "shortcutAlreadyAssigned": "ะšะปะฐะฒะธัˆะฐ ัƒะถะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะดะปั ${action}", "shortcutUpdated": "ะšะปะฐะฒะธัˆะฐ ะพะฑะฝะพะฒะปะตะฝะฐ ะดะปั ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "ะะฒั‚ะพะฟั€ะพะฟัƒัะบ", "autoSkipIntro": "ะะฒั‚ะพะฟั€ะพะฟัƒัะบ ะฒัั‚ัƒะฟะปะตะฝะธั", "autoSkipIntroDescription": "ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟั€ะพะฟัƒัะบะฐั‚ัŒ ะผะฐั€ะบะตั€ั‹ ะฒัั‚ัƒะฟะปะตะฝะธั ั‡ะตั€ะตะท ะฝะตัะบะพะปัŒะบะพ ัะตะบัƒะฝะด", @@ -242,7 +241,7 @@ "downloadLocationChanged": "ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ะธะทะผะตะฝะตะฝะพ", "downloadLocationReset": "ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ัะฑั€ะพัˆะตะฝะพ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ", "downloadLocationInvalid": "ะ’ั‹ะฑั€ะฐะฝะฝะฐั ะฟะฐะฟะบะฐ ะฝะตะดะพัั‚ัƒะฟะฝะฐ ะดะปั ะทะฐะฟะธัะธ", - "downloadLocationSelectError": "ะะต ัƒะดะฐะปะพััŒ ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะฐะฟะบัƒ", + "downloadLocationPickerUnavailable": "ะ’ั‹ะฑะพั€ ะฟะฐะฟะบะธ ะฝะตะดะพัั‚ัƒะฟะตะฝ ะฝะฐ ัั‚ะพะผ ัƒัั‚ั€ะพะนัั‚ะฒะต", "downloadOnWifiOnly": "ะ—ะฐะณั€ัƒะถะฐั‚ัŒ ั‚ะพะปัŒะบะพ ะฟะพ WiFi", "downloadOnWifiOnlyDescription": "ะ—ะฐะฟั€ะตั‚ะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ ะฟะพ ะผะพะฑะธะปัŒะฝั‹ะผ ะดะฐะฝะฝั‹ะผ", "autoRemoveWatchedDownloads": "ะะฒั‚ะพัƒะดะฐะปะตะฝะธะต ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั… ะทะฐะณั€ัƒะทะพะบ", @@ -443,7 +442,11 @@ "brightness": "ะฏั€ะบะพัั‚ัŒ", "hexColor": "ะจะตัั‚ะฝะฐะดั†ะฐั‚ะตั€ะธั‡ะฝั‹ะน ั†ะฒะตั‚", "expandText": "ะ ะฐะทะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚", - "collapseText": "ะกะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚" + "collapseText": "ะกะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚", + "alphabetNavigation": "ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะปั„ะฐะฒะธั‚ัƒ", + "alphabetScrollHint": "ะŸั€ะพะฒะตะดะธั‚ะต ะฒะฒะตั€ั… ะธะปะธ ะฒะฝะธะท ะดะปั ะฟะตั€ะตั…ะพะดะฐ ะฟะพ ะฑัƒะบะฒะฐะผ", + "rowColumnPosition": "ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}, ัั‚ะพะปะฑะตั† ${column} ะธะท ${columnCount}", + "rowPosition": "ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}" }, "tooltips": { "shufflePlay": "ะกะปัƒั‡ะฐะนะฝะพะต ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต", @@ -451,6 +454,9 @@ "markAsWatched": "ะžั‚ะผะตั‚ะธั‚ัŒ ะบะฐะบ ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต", "markAsUnwatched": "ะžั‚ะผะตั‚ะธั‚ัŒ ะบะฐะบ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต" }, + "audioTracks": { + "track": "ะัƒะดะธะพะดะพั€ะพะถะบะฐ ${n}" + }, "videoControls": { "audioLabel": "ะัƒะดะธะพ", "subtitlesLabel": "ะกัƒะฑั‚ะธั‚ั€ั‹", @@ -478,6 +484,8 @@ "playNext": "ะกะปะตะดัƒัŽั‰ะตะต", "playButton": "ะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธ", "pauseButton": "ะŸะฐัƒะทะฐ", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "ะŸะตั€ะตะผะพั‚ะบะฐ ะฝะฐะทะฐะด ะฝะฐ ${seconds} ัะตะบัƒะฝะด", "seekForwardButton": "ะŸะตั€ะตะผะพั‚ะบะฐ ะฒะฟะตั€ั‘ะด ะฝะฐ ${seconds} ัะตะบัƒะฝะด", "previousButton": "ะŸั€ะตะดั‹ะดัƒั‰ะธะน ัะฟะธะทะพะด", @@ -555,11 +563,11 @@ "streamInterrupted": "ะŸะพั‚ะพะบ ะฟั€ะตั€ะฒะฐะปัั. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป ะธะปะธ ะฟะตั€ะตะผะพั‚ะฐะนั‚ะต, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.", "liveStreamInterrupted": "ะŸั€ัะผะฐั ั‚ั€ะฐะฝัะปัั†ะธั ะฟั€ะตั€ะฒะฐะปะฐััŒ. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.", "fileInfoNotAvailable": "ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ ั„ะฐะนะปะต ะฝะตะดะพัั‚ัƒะฟะฝะฐ", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะธะฝั„ะพั€ะผะฐั†ะธะธ ะพ ั„ะฐะนะปะต: ${error}", "errorLoadingSeries": "ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ัะตั€ะธะฐะปะฐ", "musicNotSupported": "ะ’ะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต ะผัƒะทั‹ะบะธ ะฟะพะบะฐ ะฝะต ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั", @@ -682,6 +690,7 @@ "borrowExplain": "ะ—ะฐะธะผัั‚ะฒัƒะนั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะดั€ัƒะณะพะณะพ ะฟั€ะพั„ะธะปั. ะ”ะปั ะฟั€ะพั„ะธะปะตะน ั PIN ะฝัƒะถะตะฝ PIN.", "borrowEmpty": "ะŸะพะบะฐ ะฝะตั‡ะตะณะพ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ.", "borrowEmptySubtitle": "ะกะฝะฐั‡ะฐะปะฐ ะฟะพะดะบะปัŽั‡ะธั‚ะต Plex ะธะปะธ Jellyfin ะบ ะดั€ัƒะณะพะผัƒ ะฟั€ะพั„ะธะปัŽ.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "ะ˜ะท ${displayName}", "borrowConnectionBorrowed": "ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะทะฐะธะผัั‚ะฒะพะฒะฐะฝะพ.", "borrowFailed": "ะะต ัƒะดะฐะปะพััŒ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ ะฟะพะดะบะปัŽั‡ะตะฝะธะต.", @@ -948,7 +957,7 @@ "favorites": "ะ˜ะทะฑั€ะฐะฝะฝะพะต", "reorderFavorites": "ะ˜ะทะผะตะฝะธั‚ัŒ ะฟะพั€ัะดะพะบ ะธะทะฑั€ะฐะฝะฝะพะณะพ", "favoritesLoadFailed": "ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ ะธะทะฑั€ะฐะฝะฝะพะต. ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะธ ะฟะพะฒั‚ะพั€ะธั‚ะต ะฟะพะฟั‹ั‚ะบัƒ.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "ะŸั€ะธัะพะตะดะธะฝะธั‚ัŒัั ะบ ั‚ะตะบัƒั‰ะตะผัƒ ัะตะฐะฝััƒ", "watchFromStart": "ะกะผะพั‚ั€ะตั‚ัŒ ัะฝะฐั‡ะฐะปะฐ (${minutes} ะผะธะฝ. ะฝะฐะทะฐะด)", "watchLive": "ะกะผะพั‚ั€ะตั‚ัŒ ะฒ ะฟั€ัะผะพะผ ัั„ะธั€ะต", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 901990ae4..b4ba60950 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,7 +4,7 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 16 -/// Strings: 23027 (1439 per locale) +/// Strings: 23082 (1442 per locale) // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_bg.g.dart b/lib/i18n/strings_bg.g.dart index acd97fdc9..047b1be77 100644 --- a/lib/i18n/strings_bg.g.dart +++ b/lib/i18n/strings_bg.g.dart @@ -52,6 +52,7 @@ class TranslationsBg extends Translations with BaseTranslations 'ะ˜ะทั‡ะฐะบะฒะฐะฝะต ะฝะฐ ะพะดะพะฑั€ะตะฝะธะตโ€ฆ'; @override String get quickConnectCancel => 'ะžั‚ะบะฐะท'; @override String get quickConnectExpired => 'Quick Connect ะธะทั‚ะตั‡ะต. ะžะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get libraryDensity => 'ะŸะปัŠั‚ะฝะพัั‚ ะฝะฐ ะฑะธะฑะปะธะพั‚ะตะบะฐั‚ะฐ'; @override String get compact => 'ะšะพะผะฟะฐะบั‚ะฝะฐ'; @override String get comfortable => 'ะฃะดะพะฑะฝะฐ'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'ะ ะตะถะธะผ ะฝะฐ ะธะทะณะปะตะด'; @override String get gridView => 'ะœั€ะตะถะฐ'; @override String get listView => 'ะกะฟะธััŠะบ'; @@ -311,7 +310,7 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'ะ ะตะปะตะน ััŠั€ะฒัŠั€ ะทะฐ ะณะปะตะดะฐะฝะต ะทะฐะตะดะฝะพ'; @override String get watchTogetherRelayDescription => 'ะ—ะฐะดะฐะน ัะพะฑัั‚ะฒะตะฝ ั€ะตะปะตะน ััŠั€ะฒัŠั€. ะ’ัะธั‡ะบะธ ั‚ั€ัะฑะฒะฐ ะดะฐ ะธะทะฟะพะปะทะฒะฐั‚ ััŠั‰ะธั ััŠั€ะฒัŠั€.'; @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'ะ”ะพะบะปะฐะดะฒะฐะฝะต ะฝะฐ ัั€ะธะฒะพะฒะต'; @override String get crashReportingDescription => 'ะ˜ะทะฟั€ะฐั‰ะฐะน ะดะพะบะปะฐะดะธ ะทะฐ ัั€ะธะฒะพะฒะต, ะทะฐ ะดะฐ ะฟะพะผะพะณะฝะตัˆ ะทะฐ ะฟะพะดะพะฑั€ัะฒะฐะฝะต ะฝะฐ ะฟั€ะธะปะพะถะตะฝะธะตั‚ะพ'; @override String get debugLogging => 'ะ›ะพะณะพะฒะต ะทะฐ ะพั‚ัั‚ั€ะฐะฝัะฒะฐะฝะต ะฝะฐ ะณั€ะตัˆะบะธ'; @@ -328,12 +327,10 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get exportSettings => 'ะ•ะบัะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธั‚ะต'; @override String get exportSettingsDescription => 'ะ—ะฐะฟะฐะทะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธัั‚ะฐ ัะธ ะฒัŠะฒ ั„ะฐะนะป'; @override String get exportSettingsSuccess => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ'; - @override String get exportSettingsFailed => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ'; @override String get importSettings => 'ะ˜ะผะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธ'; @override String get importSettingsDescription => 'ะ’ัŠะทัั‚ะฐะฝะพะฒะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธั ะพั‚ ั„ะฐะนะป'; @override String get importSettingsConfirm => 'ะขะพะฒะฐ ั‰ะต ะทะฐะผะตะฝะธ ั‚ะตะบัƒั‰ะธั‚ะต ะฒะธ ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดัŠะปะถะฐะฒะฐั‚ะต ะปะธ?'; @override String get importSettingsSuccess => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ'; - @override String get importSettingsFailed => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ'; @override String get importSettingsInvalidFile => 'ะขะพะทะธ ั„ะฐะนะป ะฝะต ะต ะฒะฐะปะธะดะตะฝ ะตะบัะฟะพั€ั‚ ะฝะฐ ะฝะฐัั‚ั€ะพะนะบะธ ะพั‚ Plezy'; @override String get importSettingsNoUser => 'ะ’ะปะตะทั‚ะต, ะฟั€ะตะดะธ ะดะฐ ะธะผะฟะพั€ั‚ะธั€ะฐั‚ะต ะฝะฐัั‚ั€ะพะนะบะธ'; @override String get shortcutsReset => 'ะšะปะฐะฒะธัˆะฝะธั‚ะต ะบะพะผะฑะธะฝะฐั†ะธะธ ัะฐ ะฝัƒะปะธั€ะฐะฝะธ ะดะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต'; @@ -348,6 +345,7 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'ะŸั€ะพะดัŠะปะถะธั‚ะตะปะฝะพัั‚ั‚ะฐ ั‚ั€ัะฑะฒะฐ ะดะฐ ะต ะผะตะถะดัƒ ${min} ะธ ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะฒะตั‡ะต ะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะทะฐ ${action}'; @override String shortcutUpdated({required Object action}) => 'ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะต ะพะฑะฝะพะฒะตะฝะฐ ะทะฐ ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต'; @override String get autoSkipIntro => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต ะฝะฐ ะธะฝั‚ั€ะพ'; @override String get autoSkipIntroDescription => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะน ะธะฝั‚ั€ะพ ะผะฐั€ะบะตั€ะธ ัะปะตะด ะฝัะบะพะปะบะพ ัะตะบัƒะฝะดะธ'; @@ -373,7 +371,7 @@ class _TranslationsSettingsBg extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฟั€ะพะผะตะฝะตะฝะพ'; @override String get downloadLocationReset => 'ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฒัŠั€ะฝะฐั‚ะพ ะฟะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต'; @override String get downloadLocationInvalid => 'ะ˜ะทะฑั€ะฐะฝะฐั‚ะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะทะฐะฟะธัะฒะฐะตะผะฐ'; - @override String get downloadLocationSelectError => 'ะะตัƒัะฟะตัˆะตะฝ ะธะทะฑะพั€ ะฝะฐ ะฟะฐะฟะบะฐ'; + @override String get downloadLocationPickerUnavailable => 'ะ˜ะทะฑะพั€ัŠั‚ ะฝะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะฝะฐะปะธั‡ะตะฝ ะฝะฐ ั‚ะพะฒะฐ ัƒัั‚ั€ะพะนัั‚ะฒะพ'; @override String get downloadOnWifiOnly => 'ะ˜ะทั‚ะตะณะปัะฝะต ัะฐะผะพ ะฟั€ะตะท WiFi'; @override String get downloadOnWifiOnlyDescription => 'ะŸั€ะตะดะพั‚ะฒั€ะฐั‚ัะฒะฐะน ะธะทั‚ะตะณะปัะฝะธั ะฟั€ะตะท ะผะพะฑะธะปะฝะธ ะดะฐะฝะฝะธ'; @override String get autoRemoveWatchedDownloads => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฒะฐะน ะธะทะณะปะตะดะฐะฝะธั‚ะต ะธะทั‚ะตะณะปัะฝะธั'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityBg extends TranslationsAccessibilityEn { @override String get hexColor => 'ะจะตัั‚ะฝะฐะดะตัะตั‚ะธั‡ะตะฝ ั†ะฒัั‚'; @override String get expandText => 'ะ ะฐะทะณัŠะฝะธ ั‚ะตะบัั‚ะฐ'; @override String get collapseText => 'ะกะฒะธะน ั‚ะตะบัั‚ะฐ'; + @override String get alphabetNavigation => 'ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะทะฑัƒะบะฐั‚ะฐ'; + @override String get alphabetScrollHint => 'ะŸะปัŠะทะฝะตั‚ะต ะฝะฐะณะพั€ะต ะธะปะธ ะฝะฐะดะพะปัƒ, ะทะฐ ะดะฐ ะฟั€ะตะผะธะฝะตั‚ะต ะฟะพ ะฑัƒะบะฒะฐ'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'ะ ะตะด ${row} ะพั‚ ${rowCount}, ะบะพะปะพะฝะฐ ${column} ะพั‚ ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'ะ ะตะด ${row} ะพั‚ ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsBg extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'ะœะฐั€ะบะธั€ะฐะน ะบะฐั‚ะพ ะฝะตะณะปะตะดะฐะฝะพ'; } +// Path: audioTracks +class _TranslationsAudioTracksBg extends TranslationsAudioTracksEn { + _TranslationsAudioTracksBg._(TranslationsBg root) : this._root = root, super.internal(root); + + final TranslationsBg _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'ะัƒะดะธะพ ะฟัŠั‚ะตั‡ะบะฐ ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsBg extends TranslationsVideoControlsEn { _TranslationsVideoControlsBg._(TranslationsBg root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesBg extends TranslationsMessagesEn { @override String get streamInterrupted => 'ะŸะพั‚ะพะบัŠั‚ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ ะธะปะธ ะฟั€ะตะฒัŠั€ั‚ะตั‚ะต, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.'; @override String get liveStreamInterrupted => 'ะŸะพั‚ะพะบัŠั‚ ะฝะฐ ะถะธะฒะพ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.'; @override String get fileInfoNotAvailable => 'ะ˜ะฝั„ะพั€ะผะฐั†ะธัั‚ะฐ ะทะฐ ั„ะฐะนะปะฐ ะฝะต ะต ะฝะฐะปะธั‡ะฝะฐ'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ะธะฝั„ะพั€ะผะฐั†ะธั ะทะฐ ั„ะฐะนะปะฐ: ${error}'; @override String get errorLoadingSeries => 'ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ัะตั€ะธะฐะปะฐ'; @override String get musicNotSupported => 'ะ’ัŠะทะฟั€ะพะธะทะฒะตะถะดะฐะฝะตั‚ะพ ะฝะฐ ะผัƒะทะธะบะฐ ะฒัะต ะพั‰ะต ะฝะต ัะต ะฟะพะดะดัŠั€ะถะฐ'; @@ -867,6 +879,7 @@ class _TranslationsProfilesBg extends TranslationsProfilesEn { @override String get borrowExplain => 'ะ˜ะทะฟะพะปะทะฒะฐะน ะฒั€ัŠะทะบะฐ ะพั‚ ะดั€ัƒะณ ะฟั€ะพั„ะธะป. PIN-ะทะฐั‰ะธั‚ะตะฝะธั‚ะต ะฟั€ะพั„ะธะปะธ ะธะทะธัะบะฒะฐั‚ PIN.'; @override String get borrowEmpty => 'ะ’ัะต ะพั‰ะต ะฝัะผะฐ ะบะฐะบะฒะพ ะดะฐ ัะต ะธะทะฟะพะปะทะฒะฐ.'; @override String get borrowEmptySubtitle => 'ะŸัŠั€ะฒะพ ัะฒัŠั€ะถะตั‚ะต Plex ะธะปะธ Jellyfin ะบัŠะผ ะดั€ัƒะณ ะฟั€ะพั„ะธะป.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'ะžั‚ ${displayName}'; @override String get borrowConnectionBorrowed => 'ะ’ั€ัŠะทะบะฐั‚ะฐ ะต ะธะทะฟะพะปะทะฒะฐะฝะฐ.'; @override String get borrowFailed => 'ะะตัƒัะฟะตัˆะฝะพ ะธะทะฟะพะปะทะฒะฐะฝะต ะฝะฐ ะฒั€ัŠะทะบะฐ.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvBg extends TranslationsLiveTvEn { @override String get favorites => 'ะ›ัŽะฑะธะผะธ'; @override String get reorderFavorites => 'ะŸั€ะตะฝะฐั€ะตะดะธ ะปัŽะฑะธะผะธั‚ะต'; @override String get favoritesLoadFailed => 'ะ›ัŽะฑะธะผะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ัะต ะทะฐั€ะตะดัั‚. ะŸั€ะพะฒะตั€ะตั‚ะต ะฒั€ัŠะทะบะฐั‚ะฐ ัะธ ะธ ะพะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'ะŸั€ะธััŠะตะดะธะฝะธ ัะต ะบัŠะผ ั‚ะตะบัƒั‰ะฐ ัะตัะธั'; @override String watchFromStart({required Object minutes}) => 'ะ“ะปะตะดะฐะน ะพั‚ ะฝะฐั‡ะฐะปะพั‚ะพ (ะฟั€ะตะดะธ ${minutes} ะผะธะฝ)'; @override String get watchLive => 'ะ“ะปะตะดะฐะน ะฝะฐ ะถะธะฒะพ'; @@ -2149,7 +2162,7 @@ extension on TranslationsBg { 'auth.quickConnectWaiting' => 'ะ˜ะทั‡ะฐะบะฒะฐะฝะต ะฝะฐ ะพะดะพะฑั€ะตะฝะธะตโ€ฆ', 'auth.quickConnectCancel' => 'ะžั‚ะบะฐะท', 'auth.quickConnectExpired' => 'Quick Connect ะธะทั‚ะตั‡ะต. ะžะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'ะžั‚ะบะฐะท', 'common.save' => 'ะ—ะฐะฟะฐะทะธ', 'common.close' => 'ะ—ะฐั‚ะฒะพั€ะธ', @@ -2233,8 +2246,6 @@ extension on TranslationsBg { 'settings.libraryDensity' => 'ะŸะปัŠั‚ะฝะพัั‚ ะฝะฐ ะฑะธะฑะปะธะพั‚ะตะบะฐั‚ะฐ', 'settings.compact' => 'ะšะพะผะฟะฐะบั‚ะฝะฐ', 'settings.comfortable' => 'ะฃะดะพะฑะฝะฐ', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'ะ ะตะถะธะผ ะฝะฐ ะธะทะณะปะตะด', 'settings.gridView' => 'ะœั€ะตะถะฐ', 'settings.listView' => 'ะกะฟะธััŠะบ', @@ -2304,7 +2315,7 @@ extension on TranslationsBg { 'settings.watchTogetherRelay' => 'ะ ะตะปะตะน ััŠั€ะฒัŠั€ ะทะฐ ะณะปะตะดะฐะฝะต ะทะฐะตะดะฝะพ', 'settings.watchTogetherRelayDescription' => 'ะ—ะฐะดะฐะน ัะพะฑัั‚ะฒะตะฝ ั€ะตะปะตะน ััŠั€ะฒัŠั€. ะ’ัะธั‡ะบะธ ั‚ั€ัะฑะฒะฐ ะดะฐ ะธะทะฟะพะปะทะฒะฐั‚ ััŠั‰ะธั ััŠั€ะฒัŠั€.', 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'ะ”ะพะบะปะฐะดะฒะฐะฝะต ะฝะฐ ัั€ะธะฒะพะฒะต', 'settings.crashReportingDescription' => 'ะ˜ะทะฟั€ะฐั‰ะฐะน ะดะพะบะปะฐะดะธ ะทะฐ ัั€ะธะฒะพะฒะต, ะทะฐ ะดะฐ ะฟะพะผะพะณะฝะตัˆ ะทะฐ ะฟะพะดะพะฑั€ัะฒะฐะฝะต ะฝะฐ ะฟั€ะธะปะพะถะตะฝะธะตั‚ะพ', 'settings.debugLogging' => 'ะ›ะพะณะพะฒะต ะทะฐ ะพั‚ัั‚ั€ะฐะฝัะฒะฐะฝะต ะฝะฐ ะณั€ะตัˆะบะธ', @@ -2321,12 +2332,10 @@ extension on TranslationsBg { 'settings.exportSettings' => 'ะ•ะบัะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธั‚ะต', 'settings.exportSettingsDescription' => 'ะ—ะฐะฟะฐะทะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธัั‚ะฐ ัะธ ะฒัŠะฒ ั„ะฐะนะป', 'settings.exportSettingsSuccess' => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ', - 'settings.exportSettingsFailed' => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะตะบัะฟะพั€ั‚ะธั€ะฐะฝะธ', 'settings.importSettings' => 'ะ˜ะผะฟะพั€ั‚ะธั€ะฐะน ะฝะฐัั‚ั€ะพะนะบะธ', 'settings.importSettingsDescription' => 'ะ’ัŠะทัั‚ะฐะฝะพะฒะธ ะฟั€ะตะดะฟะพั‡ะธั‚ะฐะฝะธั ะพั‚ ั„ะฐะนะป', 'settings.importSettingsConfirm' => 'ะขะพะฒะฐ ั‰ะต ะทะฐะผะตะฝะธ ั‚ะตะบัƒั‰ะธั‚ะต ะฒะธ ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดัŠะปะถะฐะฒะฐั‚ะต ะปะธ?', 'settings.importSettingsSuccess' => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ัะฐ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ', - 'settings.importSettingsFailed' => 'ะะฐัั‚ั€ะพะนะบะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ะฑัŠะดะฐั‚ ะธะผะฟะพั€ั‚ะธั€ะฐะฝะธ', 'settings.importSettingsInvalidFile' => 'ะขะพะทะธ ั„ะฐะนะป ะฝะต ะต ะฒะฐะปะธะดะตะฝ ะตะบัะฟะพั€ั‚ ะฝะฐ ะฝะฐัั‚ั€ะพะนะบะธ ะพั‚ Plezy', 'settings.importSettingsNoUser' => 'ะ’ะปะตะทั‚ะต, ะฟั€ะตะดะธ ะดะฐ ะธะผะฟะพั€ั‚ะธั€ะฐั‚ะต ะฝะฐัั‚ั€ะพะนะบะธ', 'settings.shortcutsReset' => 'ะšะปะฐะฒะธัˆะฝะธั‚ะต ะบะพะผะฑะธะฝะฐั†ะธะธ ัะฐ ะฝัƒะปะธั€ะฐะฝะธ ะดะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต', @@ -2341,6 +2350,7 @@ extension on TranslationsBg { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'ะŸั€ะพะดัŠะปะถะธั‚ะตะปะฝะพัั‚ั‚ะฐ ั‚ั€ัะฑะฒะฐ ะดะฐ ะต ะผะตะถะดัƒ ${min} ะธ ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะฒะตั‡ะต ะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะทะฐ ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'ะšะปะฐะฒะธัˆะฝะฐั‚ะฐ ะบะพะผะฑะธะฝะฐั†ะธั ะต ะพะฑะฝะพะฒะตะฝะฐ ะทะฐ ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต', 'settings.autoSkipIntro' => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะฝะต ะฝะฐ ะธะฝั‚ั€ะพ', 'settings.autoSkipIntroDescription' => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตัะบะฐั‡ะฐะน ะธะฝั‚ั€ะพ ะผะฐั€ะบะตั€ะธ ัะปะตะด ะฝัะบะพะปะบะพ ัะตะบัƒะฝะดะธ', @@ -2366,7 +2376,7 @@ extension on TranslationsBg { 'settings.downloadLocationChanged' => 'ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฟั€ะพะผะตะฝะตะฝะพ', 'settings.downloadLocationReset' => 'ะœะตัั‚ะพะฟะพะปะพะถะตะฝะธะตั‚ะพ ะทะฐ ะธะทั‚ะตะณะปัะฝะธั ะต ะฒัŠั€ะฝะฐั‚ะพ ะฟะพ ะฟะพะดั€ะฐะทะฑะธั€ะฐะฝะต', 'settings.downloadLocationInvalid' => 'ะ˜ะทะฑั€ะฐะฝะฐั‚ะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะทะฐะฟะธัะฒะฐะตะผะฐ', - 'settings.downloadLocationSelectError' => 'ะะตัƒัะฟะตัˆะตะฝ ะธะทะฑะพั€ ะฝะฐ ะฟะฐะฟะบะฐ', + 'settings.downloadLocationPickerUnavailable' => 'ะ˜ะทะฑะพั€ัŠั‚ ะฝะฐ ะฟะฐะฟะบะฐ ะฝะต ะต ะฝะฐะปะธั‡ะตะฝ ะฝะฐ ั‚ะพะฒะฐ ัƒัั‚ั€ะพะนัั‚ะฒะพ', 'settings.downloadOnWifiOnly' => 'ะ˜ะทั‚ะตะณะปัะฝะต ัะฐะผะพ ะฟั€ะตะท WiFi', 'settings.downloadOnWifiOnlyDescription' => 'ะŸั€ะตะดะพั‚ะฒั€ะฐั‚ัะฒะฐะน ะธะทั‚ะตะณะปัะฝะธั ะฟั€ะตะท ะผะพะฑะธะปะฝะธ ะดะฐะฝะฝะธ', 'settings.autoRemoveWatchedDownloads' => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฒะฐะน ะธะทะณะปะตะดะฐะฝะธั‚ะต ะธะทั‚ะตะณะปัะฝะธั', @@ -2554,10 +2564,15 @@ extension on TranslationsBg { 'accessibility.hexColor' => 'ะจะตัั‚ะฝะฐะดะตัะตั‚ะธั‡ะตะฝ ั†ะฒัั‚', 'accessibility.expandText' => 'ะ ะฐะทะณัŠะฝะธ ั‚ะตะบัั‚ะฐ', 'accessibility.collapseText' => 'ะกะฒะธะน ั‚ะตะบัั‚ะฐ', + 'accessibility.alphabetNavigation' => 'ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะทะฑัƒะบะฐั‚ะฐ', + 'accessibility.alphabetScrollHint' => 'ะŸะปัŠะทะฝะตั‚ะต ะฝะฐะณะพั€ะต ะธะปะธ ะฝะฐะดะพะปัƒ, ะทะฐ ะดะฐ ะฟั€ะตะผะธะฝะตั‚ะต ะฟะพ ะฑัƒะบะฒะฐ', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'ะ ะตะด ${row} ะพั‚ ${rowCount}, ะบะพะปะพะฝะฐ ${column} ะพั‚ ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'ะ ะตะด ${row} ะพั‚ ${rowCount}', 'tooltips.shufflePlay' => 'ะ ะฐะทะฑัŠั€ะบะฐะฝะพ ะฒัŠะทะฟั€ะพะธะทะฒะตะถะดะฐะฝะต', 'tooltips.playTrailer' => 'ะŸัƒัะฝะธ ั‚ั€ะตะนะปัŠั€', 'tooltips.markAsWatched' => 'ะœะฐั€ะบะธั€ะฐะน ะบะฐั‚ะพ ะณะปะตะดะฐะฝะพ', 'tooltips.markAsUnwatched' => 'ะœะฐั€ะบะธั€ะฐะน ะบะฐั‚ะพ ะฝะตะณะปะตะดะฐะฝะพ', + 'audioTracks.track' => ({required Object n}) => 'ะัƒะดะธะพ ะฟัŠั‚ะตั‡ะบะฐ ${n}', 'videoControls.audioLabel' => 'ะัƒะดะธะพ', 'videoControls.subtitlesLabel' => 'ะกัƒะฑั‚ะธั‚ั€ะธ', 'videoControls.resetToZero' => 'ะัƒะปะธั€ะฐะน ะดะพ 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsBg { 'messages.markedAsUnwatched' => 'ะœะฐั€ะบะธั€ะฐะฝะพ ะบะฐั‚ะพ ะฝะตะณะปะตะดะฐะฝะพ', 'messages.markedAsWatchedOffline' => 'ะœะฐั€ะบะธั€ะฐะฝะพ ะบะฐั‚ะพ ะณะปะตะดะฐะฝะพ (ั‰ะต ัะต ัะธะฝั…ั€ะพะฝะธะทะธั€ะฐ, ะบะพะณะฐั‚ะพ ัั‚ะต ะพะฝะปะฐะนะฝ)', 'messages.markedAsUnwatchedOffline' => 'ะœะฐั€ะบะธั€ะฐะฝะพ ะบะฐั‚ะพ ะฝะตะณะปะตะดะฐะฝะพ (ั‰ะต ัะต ัะธะฝั…ั€ะพะฝะธะทะธั€ะฐ, ะบะพะณะฐั‚ะพ ัั‚ะต ะพะฝะปะฐะนะฝ)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะพ: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะพ ${n} ะณะปะตะดะฐะฝะพ ะธะทั‚ะตะณะปัะฝะต', other: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะธ ${n} ะณะปะตะดะฐะฝะธ ะธะทั‚ะตะณะปัะฝะธั', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะพ: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('bg'))(n, one: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะพ ${n} ะณะปะตะดะฐะฝะพ ะธะทั‚ะตะณะปัะฝะต', other: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะฝะพ ะฟั€ะตะผะฐั…ะฝะฐั‚ะธ ${n} ะณะปะตะดะฐะฝะธ ะธะทั‚ะตะณะปัะฝะธั', ), 'messages.removedFromContinueWatching' => 'ะŸั€ะตะผะฐั…ะฝะฐั‚ะพ ะพั‚ ะฟั€ะพะดัŠะปะถะฐะฒะฐะฝะต ะฝะฐ ะณะปะตะดะฐะฝะตั‚ะพ', 'messages.errorLoading' => ({required Object error}) => 'ะ“ั€ะตัˆะบะฐ: ${error}', 'messages.streamInterrupted' => 'ะŸะพั‚ะพะบัŠั‚ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ ะธะปะธ ะฟั€ะตะฒัŠั€ั‚ะตั‚ะต, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.', 'messages.liveStreamInterrupted' => 'ะŸะพั‚ะพะบัŠั‚ ะฝะฐ ะถะธะฒะพ ะฟั€ะตะบัŠัะฝะฐ. ะะฐั‚ะธัะฝะตั‚ะต โ€žะŸัƒัะฝะธโ€œ, ะทะฐ ะดะฐ ะพะฟะธั‚ะฐั‚ะต ะพั‚ะฝะพะฒะพ.', 'messages.fileInfoNotAvailable' => 'ะ˜ะฝั„ะพั€ะผะฐั†ะธัั‚ะฐ ะทะฐ ั„ะฐะนะปะฐ ะฝะต ะต ะฝะฐะปะธั‡ะฝะฐ', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ะธะฝั„ะพั€ะผะฐั†ะธั ะทะฐ ั„ะฐะนะปะฐ: ${error}', 'messages.errorLoadingSeries' => 'ะ“ั€ะตัˆะบะฐ ะฟั€ะธ ะทะฐั€ะตะถะดะฐะฝะต ะฝะฐ ัะตั€ะธะฐะปะฐ', 'messages.musicNotSupported' => 'ะ’ัŠะทะฟั€ะพะธะทะฒะตะถะดะฐะฝะตั‚ะพ ะฝะฐ ะผัƒะทะธะบะฐ ะฒัะต ะพั‰ะต ะฝะต ัะต ะฟะพะดะดัŠั€ะถะฐ', @@ -2772,6 +2787,7 @@ extension on TranslationsBg { 'profiles.borrowExplain' => 'ะ˜ะทะฟะพะปะทะฒะฐะน ะฒั€ัŠะทะบะฐ ะพั‚ ะดั€ัƒะณ ะฟั€ะพั„ะธะป. PIN-ะทะฐั‰ะธั‚ะตะฝะธั‚ะต ะฟั€ะพั„ะธะปะธ ะธะทะธัะบะฒะฐั‚ PIN.', 'profiles.borrowEmpty' => 'ะ’ัะต ะพั‰ะต ะฝัะผะฐ ะบะฐะบะฒะพ ะดะฐ ัะต ะธะทะฟะพะปะทะฒะฐ.', 'profiles.borrowEmptySubtitle' => 'ะŸัŠั€ะฒะพ ัะฒัŠั€ะถะตั‚ะต Plex ะธะปะธ Jellyfin ะบัŠะผ ะดั€ัƒะณ ะฟั€ะพั„ะธะป.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'ะžั‚ ${displayName}', 'profiles.borrowConnectionBorrowed' => 'ะ’ั€ัŠะทะบะฐั‚ะฐ ะต ะธะทะฟะพะปะทะฒะฐะฝะฐ.', 'profiles.borrowFailed' => 'ะะตัƒัะฟะตัˆะฝะพ ะธะทะฟะพะปะทะฒะฐะฝะต ะฝะฐ ะฒั€ัŠะทะบะฐ.', @@ -2997,7 +3013,7 @@ extension on TranslationsBg { 'liveTv.favorites' => 'ะ›ัŽะฑะธะผะธ', 'liveTv.reorderFavorites' => 'ะŸั€ะตะฝะฐั€ะตะดะธ ะปัŽะฑะธะผะธั‚ะต', 'liveTv.favoritesLoadFailed' => 'ะ›ัŽะฑะธะผะธั‚ะต ะฝะต ะผะพะถะฐั…ะฐ ะดะฐ ัะต ะทะฐั€ะตะดัั‚. ะŸั€ะพะฒะตั€ะตั‚ะต ะฒั€ัŠะทะบะฐั‚ะฐ ัะธ ะธ ะพะฟะธั‚ะฐะนั‚ะต ะพั‚ะฝะพะฒะพ.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'ะŸั€ะธััŠะตะดะธะฝะธ ัะต ะบัŠะผ ั‚ะตะบัƒั‰ะฐ ัะตัะธั', 'liveTv.watchFromStart' => ({required Object minutes}) => 'ะ“ะปะตะดะฐะน ะพั‚ ะฝะฐั‡ะฐะปะพั‚ะพ (ะฟั€ะตะดะธ ${minutes} ะผะธะฝ)', 'liveTv.watchLive' => 'ะ“ะปะตะดะฐะน ะฝะฐ ะถะธะฒะพ', @@ -3157,11 +3173,11 @@ extension on TranslationsBg { 'watchTogether.participantLeft' => ({required Object name}) => '${name} ะฝะฐะฟัƒัะฝะฐ', 'watchTogether.participantPaused' => ({required Object name}) => '${name} ะฟะพัั‚ะฐะฒะธ ะฝะฐ ะฟะฐัƒะทะฐ', 'watchTogether.participantResumed' => ({required Object name}) => '${name} ะฟั€ะพะดัŠะปะถะธ', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} ะฟั€ะตะฒัŠั€ั‚ั', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} ะฑัƒั„ะตั€ะธั€ะฐ', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} ะต ั ะฟะพ-ัั‚ะฐั€ะฐ ะฒะตั€ัะธั ะฝะฐ ะฟั€ะธะปะพะถะตะฝะธะตั‚ะพ โ€” ัะธะฝั…ั€ะพะฝะธะทะธั€ะฐะฝะตั‚ะพ ะฝะต ะต ะฝะฐะปะธั‡ะฝะพ', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'ะŸั€ะพะดัŠะปะถะฐะฒะฐะฝะต ะฑะตะท ${name}', 'watchTogether.waitingForParticipants' => 'ะ˜ะทั‡ะฐะบะฒะฐะฝะต ะดั€ัƒะณะธั‚ะต ะดะฐ ะทะฐั€ะตะดัั‚...', 'watchTogether.waitingForName' => ({required Object name}) => 'ะ˜ะทั‡ะฐะบะฒะฐะฝะต ะฝะฐ ${name}...', diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 811d3063a..34560dc1a 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -52,6 +52,7 @@ class TranslationsDa extends Translations with BaseTranslations 'Venter pรฅ godkendelseโ€ฆ'; @override String get quickConnectCancel => 'Annullรฉr'; @override String get quickConnectExpired => 'Quick Connect er udlรธbet. Prรธv igen.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get libraryDensity => 'Bibliotekstรฆthed'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Komfortabel'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Visningstilstand'; @override String get gridView => 'Gitter'; @override String get listView => 'Liste'; @@ -311,7 +310,7 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Watch Together-relay'; @override String get watchTogetherRelayDescription => 'Angiv en brugerdefineret relay. Alle skal bruge samme server.'; @override String get watchTogetherRelayHint => 'https://min-relay.eksempel.dk'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Fejlrapportering'; @override String get crashReportingDescription => 'Send fejlrapporter for at hjรฆlpe med at forbedre appen'; @override String get debugLogging => 'Fejlfindingslogning'; @@ -328,12 +327,10 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get exportSettings => 'Eksportรฉr indstillinger'; @override String get exportSettingsDescription => 'Gem dine prรฆferencer i en fil'; @override String get exportSettingsSuccess => 'Indstillinger eksporteret'; - @override String get exportSettingsFailed => 'Kunne ikke eksportere indstillinger'; @override String get importSettings => 'Importรฉr indstillinger'; @override String get importSettingsDescription => 'Gendan prรฆferencer fra en fil'; @override String get importSettingsConfirm => 'Dette vil erstatte dine nuvรฆrende indstillinger. Fortsรฆt?'; @override String get importSettingsSuccess => 'Indstillinger importeret'; - @override String get importSettingsFailed => 'Kunne ikke importere indstillinger'; @override String get importSettingsInvalidFile => 'Denne fil er ikke en gyldig Plezy-indstillingseksport'; @override String get importSettingsNoUser => 'Log ind fรธr import af indstillinger'; @override String get shortcutsReset => 'Genveje nulstillet til standard'; @@ -348,6 +345,7 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Varighed skal vรฆre mellem ${min} og ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Genvej allerede tildelt til ${action}'; @override String shortcutUpdated({required Object action}) => 'Genvej opdateret for ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Auto-spring'; @override String get autoSkipIntro => 'Auto-spring intro'; @override String get autoSkipIntroDescription => 'Spring automatisk intromarkรธrer over efter fรฅ sekunder'; @@ -373,7 +371,7 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Downloadplacering รฆndret'; @override String get downloadLocationReset => 'Downloadplacering nulstillet'; @override String get downloadLocationInvalid => 'Valgt mappe er ikke skrivbar'; - @override String get downloadLocationSelectError => 'Kunne ikke vรฆlge mappe'; + @override String get downloadLocationPickerUnavailable => 'Mappevalg er ikke tilgรฆngeligt pรฅ denne enhed'; @override String get downloadOnWifiOnly => 'Download kun pรฅ WiFi'; @override String get downloadOnWifiOnlyDescription => 'Forhindre downloads pรฅ mobildata'; @override String get autoRemoveWatchedDownloads => 'Fjern sete downloads automatisk'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityDa extends TranslationsAccessibilityEn { @override String get hexColor => 'Hexfarve'; @override String get expandText => 'Udvid tekst'; @override String get collapseText => 'Fold tekst sammen'; + @override String get alphabetNavigation => 'Alfabetnavigation'; + @override String get alphabetScrollHint => 'Stryg op eller ned for at flytte รฉt bogstav'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rรฆkke ${row} af ${rowCount}, kolonne ${column} af ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Rรฆkke ${row} af ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsDa extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Markรฉr som uset'; } +// Path: audioTracks +class _TranslationsAudioTracksDa extends TranslationsAudioTracksEn { + _TranslationsAudioTracksDa._(TranslationsDa root) : this._root = root, super.internal(root); + + final TranslationsDa _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Lydspor ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsDa extends TranslationsVideoControlsEn { _TranslationsVideoControlsDa._(TranslationsDa root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesDa extends TranslationsMessagesEn { @override String get streamInterrupted => 'Streamen blev afbrudt. Tryk pรฅ afspil, eller spol for at prรธve igen.'; @override String get liveStreamInterrupted => 'Livestreamen blev afbrudt. Tryk pรฅ afspil for at prรธve igen.'; @override String get fileInfoNotAvailable => 'Filinfo ikke tilgรฆngelig'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Fejl ved indlรฆsning af filinfo: ${error}'; @override String get errorLoadingSeries => 'Fejl ved indlรฆsning af serie'; @override String get musicNotSupported => 'Musikafspilning understรธttes endnu ikke'; @@ -867,6 +879,7 @@ class _TranslationsProfilesDa extends TranslationsProfilesEn { @override String get borrowExplain => 'Lรฅn en anden profils forbindelse. PIN-beskyttede profiler krรฆver en PIN.'; @override String get borrowEmpty => 'Intet at lรฅne endnu.'; @override String get borrowEmptySubtitle => 'Forbind Plex eller Jellyfin til en anden profil fรธrst.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Fra ${displayName}'; @override String get borrowConnectionBorrowed => 'Forbindelse lรฅnt.'; @override String get borrowFailed => 'Kunne ikke lรฅne forbindelse.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvDa extends TranslationsLiveTvEn { @override String get favorites => 'Favoritter'; @override String get reorderFavorites => 'Omarranger favoritter'; @override String get favoritesLoadFailed => 'Favoritter kunne ikke indlรฆses. Kontrollรฉr forbindelsen, og prรธv igen.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Deltag i igangvรฆrende session'; @override String watchFromStart({required Object minutes}) => 'Se fra start (${minutes} min siden)'; @override String get watchLive => 'Se live'; @@ -2149,7 +2162,7 @@ extension on TranslationsDa { 'auth.quickConnectWaiting' => 'Venter pรฅ godkendelseโ€ฆ', 'auth.quickConnectCancel' => 'Annullรฉr', 'auth.quickConnectExpired' => 'Quick Connect er udlรธbet. Prรธv igen.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Annuller', 'common.save' => 'Gem', 'common.close' => 'Luk', @@ -2233,8 +2246,6 @@ extension on TranslationsDa { 'settings.libraryDensity' => 'Bibliotekstรฆthed', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Komfortabel', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Visningstilstand', 'settings.gridView' => 'Gitter', 'settings.listView' => 'Liste', @@ -2304,7 +2315,7 @@ extension on TranslationsDa { 'settings.watchTogetherRelay' => 'Watch Together-relay', 'settings.watchTogetherRelayDescription' => 'Angiv en brugerdefineret relay. Alle skal bruge samme server.', 'settings.watchTogetherRelayHint' => 'https://min-relay.eksempel.dk', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Fejlrapportering', 'settings.crashReportingDescription' => 'Send fejlrapporter for at hjรฆlpe med at forbedre appen', 'settings.debugLogging' => 'Fejlfindingslogning', @@ -2321,12 +2332,10 @@ extension on TranslationsDa { 'settings.exportSettings' => 'Eksportรฉr indstillinger', 'settings.exportSettingsDescription' => 'Gem dine prรฆferencer i en fil', 'settings.exportSettingsSuccess' => 'Indstillinger eksporteret', - 'settings.exportSettingsFailed' => 'Kunne ikke eksportere indstillinger', 'settings.importSettings' => 'Importรฉr indstillinger', 'settings.importSettingsDescription' => 'Gendan prรฆferencer fra en fil', 'settings.importSettingsConfirm' => 'Dette vil erstatte dine nuvรฆrende indstillinger. Fortsรฆt?', 'settings.importSettingsSuccess' => 'Indstillinger importeret', - 'settings.importSettingsFailed' => 'Kunne ikke importere indstillinger', 'settings.importSettingsInvalidFile' => 'Denne fil er ikke en gyldig Plezy-indstillingseksport', 'settings.importSettingsNoUser' => 'Log ind fรธr import af indstillinger', 'settings.shortcutsReset' => 'Genveje nulstillet til standard', @@ -2341,6 +2350,7 @@ extension on TranslationsDa { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Varighed skal vรฆre mellem ${min} og ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Genvej allerede tildelt til ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Genvej opdateret for ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Auto-spring', 'settings.autoSkipIntro' => 'Auto-spring intro', 'settings.autoSkipIntroDescription' => 'Spring automatisk intromarkรธrer over efter fรฅ sekunder', @@ -2366,7 +2376,7 @@ extension on TranslationsDa { 'settings.downloadLocationChanged' => 'Downloadplacering รฆndret', 'settings.downloadLocationReset' => 'Downloadplacering nulstillet', 'settings.downloadLocationInvalid' => 'Valgt mappe er ikke skrivbar', - 'settings.downloadLocationSelectError' => 'Kunne ikke vรฆlge mappe', + 'settings.downloadLocationPickerUnavailable' => 'Mappevalg er ikke tilgรฆngeligt pรฅ denne enhed', 'settings.downloadOnWifiOnly' => 'Download kun pรฅ WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Forhindre downloads pรฅ mobildata', 'settings.autoRemoveWatchedDownloads' => 'Fjern sete downloads automatisk', @@ -2554,10 +2564,15 @@ extension on TranslationsDa { 'accessibility.hexColor' => 'Hexfarve', 'accessibility.expandText' => 'Udvid tekst', 'accessibility.collapseText' => 'Fold tekst sammen', + 'accessibility.alphabetNavigation' => 'Alfabetnavigation', + 'accessibility.alphabetScrollHint' => 'Stryg op eller ned for at flytte รฉt bogstav', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rรฆkke ${row} af ${rowCount}, kolonne ${column} af ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Rรฆkke ${row} af ${rowCount}', 'tooltips.shufflePlay' => 'Afspil tilfรฆldigt', 'tooltips.playTrailer' => 'Afspil trailer', 'tooltips.markAsWatched' => 'Markรฉr som set', 'tooltips.markAsUnwatched' => 'Markรฉr som uset', + 'audioTracks.track' => ({required Object n}) => 'Lydspor ${n}', 'videoControls.audioLabel' => 'Lyd', 'videoControls.subtitlesLabel' => 'Undertekster', 'videoControls.resetToZero' => 'Nulstil til 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsDa { 'messages.markedAsUnwatched' => 'Markeret som uset', 'messages.markedAsWatchedOffline' => 'Markeret som set (synkroniseres online)', 'messages.markedAsUnwatchedOffline' => 'Markeret som uset (synkroniseres online)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisk fjernet: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Fjernede automatisk ${n} set download', other: 'Fjernede automatisk ${n} sete downloads', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisk fjernet: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('da'))(n, one: 'Fjernede automatisk ${n} set download', other: 'Fjernede automatisk ${n} sete downloads', ), 'messages.removedFromContinueWatching' => 'Fjernet fra Fortsรฆt med at se', 'messages.errorLoading' => ({required Object error}) => 'Fejl: ${error}', 'messages.streamInterrupted' => 'Streamen blev afbrudt. Tryk pรฅ afspil, eller spol for at prรธve igen.', 'messages.liveStreamInterrupted' => 'Livestreamen blev afbrudt. Tryk pรฅ afspil for at prรธve igen.', 'messages.fileInfoNotAvailable' => 'Filinfo ikke tilgรฆngelig', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fejl ved indlรฆsning af filinfo: ${error}', 'messages.errorLoadingSeries' => 'Fejl ved indlรฆsning af serie', 'messages.musicNotSupported' => 'Musikafspilning understรธttes endnu ikke', @@ -2772,6 +2787,7 @@ extension on TranslationsDa { 'profiles.borrowExplain' => 'Lรฅn en anden profils forbindelse. PIN-beskyttede profiler krรฆver en PIN.', 'profiles.borrowEmpty' => 'Intet at lรฅne endnu.', 'profiles.borrowEmptySubtitle' => 'Forbind Plex eller Jellyfin til en anden profil fรธrst.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Fra ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Forbindelse lรฅnt.', 'profiles.borrowFailed' => 'Kunne ikke lรฅne forbindelse.', @@ -2997,7 +3013,7 @@ extension on TranslationsDa { 'liveTv.favorites' => 'Favoritter', 'liveTv.reorderFavorites' => 'Omarranger favoritter', 'liveTv.favoritesLoadFailed' => 'Favoritter kunne ikke indlรฆses. Kontrollรฉr forbindelsen, og prรธv igen.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Deltag i igangvรฆrende session', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Se fra start (${minutes} min siden)', 'liveTv.watchLive' => 'Se live', @@ -3157,11 +3173,11 @@ extension on TranslationsDa { 'watchTogether.participantLeft' => ({required Object name}) => '${name} forlod', 'watchTogether.participantPaused' => ({required Object name}) => '${name} satte pรฅ pause', 'watchTogether.participantResumed' => ({required Object name}) => '${name} genoptog', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spoled', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} bufferer', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruger en รฆldre appversion โ€” synkronisering er ikke tilgรฆngelig', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsรฆtter uden ${name}', 'watchTogether.waitingForParticipants' => 'Venter pรฅ at andre indlรฆser...', 'watchTogether.waitingForName' => ({required Object name}) => 'Venter pรฅ ${name}...', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 0672887df..9f75d61da 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -52,6 +52,7 @@ class TranslationsDe extends Translations with BaseTranslations 'Warte auf Bestรคtigungโ€ฆ'; @override String get quickConnectCancel => 'Abbrechen'; @override String get quickConnectExpired => 'Quick Connect ist abgelaufen. Versuche es erneut.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -311,7 +312,7 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Gemeinsam Schauen Relay'; @override String get watchTogetherRelayDescription => 'Eigenes Relay festlegen. Alle mรผssen denselben Server verwenden.'; @override String get watchTogetherRelayHint => 'https://mein-relay.beispiel.de'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Absturzberichte'; @override String get crashReportingDescription => 'Absturzberichte senden, um die App zu verbessern'; @override String get debugLogging => 'Debug-Protokollierung'; @@ -328,12 +329,10 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get exportSettings => 'Einstellungen exportieren'; @override String get exportSettingsDescription => 'Speichere deine Einstellungen in einer Datei'; @override String get exportSettingsSuccess => 'Einstellungen exportiert'; - @override String get exportSettingsFailed => 'Einstellungen konnten nicht exportiert werden'; @override String get importSettings => 'Einstellungen importieren'; @override String get importSettingsDescription => 'Einstellungen aus einer Datei wiederherstellen'; @override String get importSettingsConfirm => 'Dies ersetzt deine aktuellen Einstellungen. Fortfahren?'; @override String get importSettingsSuccess => 'Einstellungen importiert'; - @override String get importSettingsFailed => 'Einstellungen konnten nicht importiert werden'; @override String get importSettingsInvalidFile => 'Diese Datei ist kein gรผltiger Plezy-Einstellungsexport'; @override String get importSettingsNoUser => 'Vor dem Import bitte anmelden'; @override String get shortcutsReset => 'Tastenkรผrzel auf Standard zurรผckgesetzt'; @@ -348,6 +347,7 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; @override String shortcutAlreadyAssigned({required Object action}) => 'Tastenkรผrzel bereits zugewiesen an ${action}'; @override String shortcutUpdated({required Object action}) => 'Tastenkรผrzel aktualisiert fรผr ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Automatisches รœberspringen'; @override String get autoSkipIntro => 'Intro automatisch รผberspringen'; @override String get autoSkipIntroDescription => 'Intro-Marker nach wenigen Sekunden automatisch รผberspringen'; @@ -373,7 +373,7 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Download-Speicherort geรคndert'; @override String get downloadLocationReset => 'Download-Speicherort auf Standard zurรผckgesetzt'; @override String get downloadLocationInvalid => 'Ausgewรคhlter Ordner ist nicht beschreibbar'; - @override String get downloadLocationSelectError => 'Ordnerauswahl fehlgeschlagen'; + @override String get downloadLocationPickerUnavailable => 'Die Ordnerauswahl ist auf diesem Gerรคt nicht verfรผgbar'; @override String get downloadOnWifiOnly => 'Nur รผber WLAN herunterladen'; @override String get downloadOnWifiOnlyDescription => 'Downloads รผber mobile Daten verhindern'; @override String get autoRemoveWatchedDownloads => 'Gesehene Downloads automatisch entfernen'; @@ -591,6 +591,10 @@ class _TranslationsAccessibilityDe extends TranslationsAccessibilityEn { @override String get hexColor => 'Hex-Farbe'; @override String get expandText => 'Text ausklappen'; @override String get collapseText => 'Text einklappen'; + @override String get alphabetNavigation => 'Alphabetische Navigation'; + @override String get alphabetScrollHint => 'Nach oben oder unten wischen, um einen Buchstaben weiterzugehen'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Zeile ${row} von ${rowCount}, Spalte ${column} von ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Zeile ${row} von ${rowCount}'; } // Path: tooltips @@ -606,6 +610,16 @@ class _TranslationsTooltipsDe extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Als ungesehen markieren'; } +// Path: audioTracks +class _TranslationsAudioTracksDe extends TranslationsAudioTracksEn { + _TranslationsAudioTracksDe._(TranslationsDe root) : this._root = root, super.internal(root); + + final TranslationsDe _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Audiospur ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsDe extends TranslationsVideoControlsEn { _TranslationsVideoControlsDe._(TranslationsDe root) : this._root = root, super.internal(root); @@ -712,11 +726,11 @@ class _TranslationsMessagesDe extends TranslationsMessagesEn { @override String get streamInterrupted => 'Der Stream wurde unterbrochen. Drรผcke auf Wiedergabe oder spule, um es erneut zu versuchen.'; @override String get liveStreamInterrupted => 'Der Livestream wurde unterbrochen. Drรผcke auf Wiedergabe, um es erneut zu versuchen.'; @override String get fileInfoNotAvailable => 'Dateiinfo nicht verfรผgbar'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}'; @override String get errorLoadingSeries => 'Fehler beim Laden der Serie'; @override String get musicNotSupported => 'Musikwiedergabe wird noch nicht unterstรผtzt'; @@ -867,6 +881,7 @@ class _TranslationsProfilesDe extends TranslationsProfilesEn { @override String get borrowExplain => 'Verbindung eines anderen Profils leihen. PIN-geschรผtzte Profile erfordern eine PIN.'; @override String get borrowEmpty => 'Noch nichts zum Ausleihen.'; @override String get borrowEmptySubtitle => 'Verbinde zuerst Plex oder Jellyfin mit einem anderen Profil.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Von ${displayName}'; @override String get borrowConnectionBorrowed => 'Verbindung ausgeliehen.'; @override String get borrowFailed => 'Verbindung konnte nicht ausgeliehen werden.'; @@ -1150,7 +1165,7 @@ class _TranslationsLiveTvDe extends TranslationsLiveTvEn { @override String get favorites => 'Favoriten'; @override String get reorderFavorites => 'Favoriten sortieren'; @override String get favoritesLoadFailed => 'Favoriten konnten nicht geladen werden. รœberprรผfe deine Verbindung und versuche es erneut.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Laufender Sitzung beitreten'; @override String watchFromStart({required Object minutes}) => 'Von Anfang an ansehen (vor ${minutes} Min.)'; @override String get watchLive => 'Live ansehen'; @@ -2149,7 +2164,7 @@ extension on TranslationsDe { 'auth.quickConnectWaiting' => 'Warte auf Bestรคtigungโ€ฆ', 'auth.quickConnectCancel' => 'Abbrechen', 'auth.quickConnectExpired' => 'Quick Connect ist abgelaufen. Versuche es erneut.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Abbrechen', 'common.save' => 'Speichern', 'common.close' => 'SchlieรŸen', @@ -2304,7 +2319,7 @@ extension on TranslationsDe { 'settings.watchTogetherRelay' => 'Gemeinsam Schauen Relay', 'settings.watchTogetherRelayDescription' => 'Eigenes Relay festlegen. Alle mรผssen denselben Server verwenden.', 'settings.watchTogetherRelayHint' => 'https://mein-relay.beispiel.de', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Absturzberichte', 'settings.crashReportingDescription' => 'Absturzberichte senden, um die App zu verbessern', 'settings.debugLogging' => 'Debug-Protokollierung', @@ -2321,12 +2336,10 @@ extension on TranslationsDe { 'settings.exportSettings' => 'Einstellungen exportieren', 'settings.exportSettingsDescription' => 'Speichere deine Einstellungen in einer Datei', 'settings.exportSettingsSuccess' => 'Einstellungen exportiert', - 'settings.exportSettingsFailed' => 'Einstellungen konnten nicht exportiert werden', 'settings.importSettings' => 'Einstellungen importieren', 'settings.importSettingsDescription' => 'Einstellungen aus einer Datei wiederherstellen', 'settings.importSettingsConfirm' => 'Dies ersetzt deine aktuellen Einstellungen. Fortfahren?', 'settings.importSettingsSuccess' => 'Einstellungen importiert', - 'settings.importSettingsFailed' => 'Einstellungen konnten nicht importiert werden', 'settings.importSettingsInvalidFile' => 'Diese Datei ist kein gรผltiger Plezy-Einstellungsexport', 'settings.importSettingsNoUser' => 'Vor dem Import bitte anmelden', 'settings.shortcutsReset' => 'Tastenkรผrzel auf Standard zurรผckgesetzt', @@ -2341,6 +2354,7 @@ extension on TranslationsDe { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Tastenkรผrzel bereits zugewiesen an ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Tastenkรผrzel aktualisiert fรผr ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Automatisches รœberspringen', 'settings.autoSkipIntro' => 'Intro automatisch รผberspringen', 'settings.autoSkipIntroDescription' => 'Intro-Marker nach wenigen Sekunden automatisch รผberspringen', @@ -2366,7 +2380,7 @@ extension on TranslationsDe { 'settings.downloadLocationChanged' => 'Download-Speicherort geรคndert', 'settings.downloadLocationReset' => 'Download-Speicherort auf Standard zurรผckgesetzt', 'settings.downloadLocationInvalid' => 'Ausgewรคhlter Ordner ist nicht beschreibbar', - 'settings.downloadLocationSelectError' => 'Ordnerauswahl fehlgeschlagen', + 'settings.downloadLocationPickerUnavailable' => 'Die Ordnerauswahl ist auf diesem Gerรคt nicht verfรผgbar', 'settings.downloadOnWifiOnly' => 'Nur รผber WLAN herunterladen', 'settings.downloadOnWifiOnlyDescription' => 'Downloads รผber mobile Daten verhindern', 'settings.autoRemoveWatchedDownloads' => 'Gesehene Downloads automatisch entfernen', @@ -2554,10 +2568,15 @@ extension on TranslationsDe { 'accessibility.hexColor' => 'Hex-Farbe', 'accessibility.expandText' => 'Text ausklappen', 'accessibility.collapseText' => 'Text einklappen', + 'accessibility.alphabetNavigation' => 'Alphabetische Navigation', + 'accessibility.alphabetScrollHint' => 'Nach oben oder unten wischen, um einen Buchstaben weiterzugehen', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Zeile ${row} von ${rowCount}, Spalte ${column} von ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Zeile ${row} von ${rowCount}', 'tooltips.shufflePlay' => 'Zufallswiedergabe', 'tooltips.playTrailer' => 'Trailer abspielen', 'tooltips.markAsWatched' => 'Als gesehen markieren', 'tooltips.markAsUnwatched' => 'Als ungesehen markieren', + 'audioTracks.track' => ({required Object n}) => 'Audiospur ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Untertitel', 'videoControls.resetToZero' => 'Auf 0 ms zurรผcksetzen', @@ -2642,22 +2661,22 @@ extension on TranslationsDe { 'videoControls.searchLanguages' => 'Sprachen suchen...', 'messages.markedAsWatched' => 'Als gesehen markiert', 'messages.markedAsUnwatched' => 'Als ungesehen markiert', + _ => null, + } ?? switch (path) { 'messages.markedAsWatchedOffline' => 'Als gesehen markiert (wird synchronisiert, wenn online)', 'messages.markedAsUnwatchedOffline' => 'Als ungesehen markiert (wird synchronisiert, wenn online)', 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisch entfernt: ${title}', 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('de'))(n, one: 'Automatisch entfernt: ${n} angesehener Download', other: 'Automatisch entfernt: ${n} angesehene Downloads', ), - _ => null, - } ?? switch (path) { 'messages.removedFromContinueWatching' => 'Aus โ€šWeiterschauen\' entfernt', 'messages.errorLoading' => ({required Object error}) => 'Fehler: ${error}', 'messages.streamInterrupted' => 'Der Stream wurde unterbrochen. Drรผcke auf Wiedergabe oder spule, um es erneut zu versuchen.', 'messages.liveStreamInterrupted' => 'Der Livestream wurde unterbrochen. Drรผcke auf Wiedergabe, um es erneut zu versuchen.', 'messages.fileInfoNotAvailable' => 'Dateiinfo nicht verfรผgbar', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}', 'messages.errorLoadingSeries' => 'Fehler beim Laden der Serie', 'messages.musicNotSupported' => 'Musikwiedergabe wird noch nicht unterstรผtzt', @@ -2772,6 +2791,7 @@ extension on TranslationsDe { 'profiles.borrowExplain' => 'Verbindung eines anderen Profils leihen. PIN-geschรผtzte Profile erfordern eine PIN.', 'profiles.borrowEmpty' => 'Noch nichts zum Ausleihen.', 'profiles.borrowEmptySubtitle' => 'Verbinde zuerst Plex oder Jellyfin mit einem anderen Profil.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Von ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Verbindung ausgeliehen.', 'profiles.borrowFailed' => 'Verbindung konnte nicht ausgeliehen werden.', @@ -2997,7 +3017,7 @@ extension on TranslationsDe { 'liveTv.favorites' => 'Favoriten', 'liveTv.reorderFavorites' => 'Favoriten sortieren', 'liveTv.favoritesLoadFailed' => 'Favoriten konnten nicht geladen werden. รœberprรผfe deine Verbindung und versuche es erneut.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Laufender Sitzung beitreten', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Von Anfang an ansehen (vor ${minutes} Min.)', 'liveTv.watchLive' => 'Live ansehen', @@ -3155,13 +3175,13 @@ extension on TranslationsDe { 'watchTogether.failedToOpenCurrentPlayback' => 'Aktuelle Wiedergabe konnte nicht geรถffnet werden', 'watchTogether.participantJoined' => ({required Object name}) => '${name} ist beigetreten', 'watchTogether.participantLeft' => ({required Object name}) => '${name} hat die Sitzung verlassen', + _ => null, + } ?? switch (path) { 'watchTogether.participantPaused' => ({required Object name}) => '${name} hat pausiert', 'watchTogether.participantResumed' => ({required Object name}) => '${name} hat fortgesetzt', 'watchTogether.participantSeeked' => ({required Object name}) => '${name} hat gespult', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} puffert', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} verwendet eine รคltere Appversion โ€” Synchronisierung nicht verfรผgbar', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortfahren ohne ${name}', 'watchTogether.waitingForParticipants' => 'Warte auf andere zum Laden...', 'watchTogether.waitingForName' => ({required Object name}) => 'Warten auf ${name}...', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index 68d614293..b88ddcdf2 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -53,6 +53,7 @@ class Translations with BaseTranslations { late final TranslationsRateSheetEn rateSheet = TranslationsRateSheetEn.internal(_root); late final TranslationsAccessibilityEn accessibility = TranslationsAccessibilityEn.internal(_root); late final TranslationsTooltipsEn tooltips = TranslationsTooltipsEn.internal(_root); + late final TranslationsAudioTracksEn audioTracks = TranslationsAudioTracksEn.internal(_root); late final TranslationsVideoControlsEn videoControls = TranslationsVideoControlsEn.internal(_root); late final TranslationsMessagesEn messages = TranslationsMessagesEn.internal(_root); late final TranslationsSubtitlingStylingEn subtitlingStyling = TranslationsSubtitlingStylingEn.internal(_root); @@ -662,6 +663,9 @@ class TranslationsSettingsEn { /// en: 'Send crash reports to help improve the app' String get crashReportingDescription => 'Send crash reports to help improve the app'; + /// en: 'After disabling, reports already accepted, queued, or being sent may finish. Enabling again takes effect when Plezy restarts.' + String get crashReportingRestartRequired => 'After disabling, reports already accepted, queued, or being sent may finish. Enabling again takes effect when Plezy restarts.'; + /// en: 'Debug Logging' String get debugLogging => 'Debug Logging'; @@ -704,9 +708,6 @@ class TranslationsSettingsEn { /// en: 'Settings exported' String get exportSettingsSuccess => 'Settings exported'; - /// en: 'Could not export settings' - String get exportSettingsFailed => 'Could not export settings'; - /// en: 'Import Settings' String get importSettings => 'Import Settings'; @@ -719,9 +720,6 @@ class TranslationsSettingsEn { /// en: 'Settings imported' String get importSettingsSuccess => 'Settings imported'; - /// en: 'Could not import settings' - String get importSettingsFailed => 'Could not import settings'; - /// en: 'This file isn't a valid Plezy settings export' String get importSettingsInvalidFile => 'This file isn\'t a valid Plezy settings export'; @@ -764,6 +762,9 @@ class TranslationsSettingsEn { /// en: 'Shortcut updated for ${action}' String shortcutUpdated({required Object action}) => 'Shortcut updated for ${action}'; + /// en: 'Could not save changes. Try again.' + String get saveFailed => 'Could not save changes. Try again.'; + /// en: 'Auto Skip' String get autoSkip => 'Auto Skip'; @@ -839,8 +840,8 @@ class TranslationsSettingsEn { /// en: 'Selected folder is not writable' String get downloadLocationInvalid => 'Selected folder is not writable'; - /// en: 'Failed to select folder' - String get downloadLocationSelectError => 'Failed to select folder'; + /// en: 'Folder selection is not available on this device' + String get downloadLocationPickerUnavailable => 'Folder selection is not available on this device'; /// en: 'Download on WiFi only' String get downloadOnWifiOnly => 'Download on WiFi only'; @@ -1383,6 +1384,18 @@ class TranslationsAccessibilityEn { /// en: 'Collapse text' String get collapseText => 'Collapse text'; + + /// en: 'Alphabet navigation' + String get alphabetNavigation => 'Alphabet navigation'; + + /// en: 'Swipe up or down to move by letter' + String get alphabetScrollHint => 'Swipe up or down to move by letter'; + + /// en: 'Row ${row} of ${rowCount}, column ${column} of ${columnCount}' + String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Row ${row} of ${rowCount}, column ${column} of ${columnCount}'; + + /// en: 'Row ${row} of ${rowCount}' + String rowPosition({required Object row, required Object rowCount}) => 'Row ${row} of ${rowCount}'; } // Path: tooltips @@ -1406,6 +1419,18 @@ class TranslationsTooltipsEn { String get markAsUnwatched => 'Mark as unwatched'; } +// Path: audioTracks +class TranslationsAudioTracksEn { + TranslationsAudioTracksEn.internal(this._root); + + final Translations _root; // ignore: unused_field + + // Translations + + /// en: 'Audio Track ${n}' + String track({required Object n}) => 'Audio Track ${n}'; +} + // Path: videoControls class TranslationsVideoControlsEn { TranslationsVideoControlsEn.internal(this._root); @@ -1492,6 +1517,12 @@ class TranslationsVideoControlsEn { /// en: 'Pause' String get pauseButton => 'Pause'; + /// en: 'Show playback controls' + String get showPlaybackControls => 'Show playback controls'; + + /// en: 'Hide playback controls' + String get hidePlaybackControls => 'Hide playback controls'; + /// en: 'Seek backward ${seconds} seconds' String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; @@ -2079,6 +2110,9 @@ class TranslationsProfilesEn { /// en: 'Connect Plex or Jellyfin to another profile first.' String get borrowEmptySubtitle => 'Connect Plex or Jellyfin to another profile first.'; + /// en: 'Available connections could not be loaded. Try again.' + String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; + /// en: 'From ${displayName}' String borrowFromProfile({required Object displayName}) => 'From ${displayName}'; @@ -5186,6 +5220,7 @@ extension on Translations { 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Crash Reporting', 'settings.crashReportingDescription' => 'Send crash reports to help improve the app', + 'settings.crashReportingRestartRequired' => 'After disabling, reports already accepted, queued, or being sent may finish. Enabling again takes effect when Plezy restarts.', 'settings.debugLogging' => 'Debug Logging', 'settings.debugLoggingDescription' => 'Enable detailed logging for troubleshooting', 'settings.viewLogs' => 'View Logs', @@ -5200,12 +5235,10 @@ extension on Translations { 'settings.exportSettings' => 'Export Settings', 'settings.exportSettingsDescription' => 'Save your preferences to a file', 'settings.exportSettingsSuccess' => 'Settings exported', - 'settings.exportSettingsFailed' => 'Could not export settings', 'settings.importSettings' => 'Import Settings', 'settings.importSettingsDescription' => 'Restore preferences from a file', 'settings.importSettingsConfirm' => 'This will replace your current settings. Continue?', 'settings.importSettingsSuccess' => 'Settings imported', - 'settings.importSettingsFailed' => 'Could not import settings', 'settings.importSettingsInvalidFile' => 'This file isn\'t a valid Plezy settings export', 'settings.importSettingsNoUser' => 'Sign in before importing settings', 'settings.shortcutsReset' => 'Shortcuts reset to defaults', @@ -5220,6 +5253,7 @@ extension on Translations { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Shortcut already assigned to ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Shortcut updated for ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Auto Skip', 'settings.autoSkipIntro' => 'Auto Skip Intro', 'settings.autoSkipIntroDescription' => 'Automatically skip intro markers after a few seconds', @@ -5245,7 +5279,7 @@ extension on Translations { 'settings.downloadLocationChanged' => 'Download location changed', 'settings.downloadLocationReset' => 'Download location reset to default', 'settings.downloadLocationInvalid' => 'Selected folder is not writable', - 'settings.downloadLocationSelectError' => 'Failed to select folder', + 'settings.downloadLocationPickerUnavailable' => 'Folder selection is not available on this device', 'settings.downloadOnWifiOnly' => 'Download on WiFi only', 'settings.downloadOnWifiOnlyDescription' => 'Prevent downloads when on cellular data', 'settings.autoRemoveWatchedDownloads' => 'Auto-remove watched downloads', @@ -5433,10 +5467,15 @@ extension on Translations { 'accessibility.hexColor' => 'Hex color', 'accessibility.expandText' => 'Expand text', 'accessibility.collapseText' => 'Collapse text', + 'accessibility.alphabetNavigation' => 'Alphabet navigation', + 'accessibility.alphabetScrollHint' => 'Swipe up or down to move by letter', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Row ${row} of ${rowCount}, column ${column} of ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Row ${row} of ${rowCount}', 'tooltips.shufflePlay' => 'Shuffle play', 'tooltips.playTrailer' => 'Play trailer', 'tooltips.markAsWatched' => 'Mark as watched', 'tooltips.markAsUnwatched' => 'Mark as unwatched', + 'audioTracks.track' => ({required Object n}) => 'Audio Track ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Subtitles', 'videoControls.resetToZero' => 'Reset to 0ms', @@ -5463,6 +5502,8 @@ extension on Translations { 'videoControls.playNext' => 'Play Next', 'videoControls.playButton' => 'Play', 'videoControls.pauseButton' => 'Pause', + 'videoControls.showPlaybackControls' => 'Show playback controls', + 'videoControls.hidePlaybackControls' => 'Hide playback controls', 'videoControls.seekBackwardButton' => ({required Object seconds}) => 'Seek backward ${seconds} seconds', 'videoControls.seekForwardButton' => ({required Object seconds}) => 'Seek forward ${seconds} seconds', 'videoControls.previousButton' => 'Previous episode', @@ -5518,6 +5559,8 @@ extension on Translations { 'videoControls.subtitleDownloaded' => 'Subtitle downloaded', 'videoControls.subtitleDownloadedNotApplied' => 'Subtitle downloaded, but it could not be selected', 'videoControls.subtitleDownloadFailed' => 'Failed to download subtitle', + _ => null, + } ?? switch (path) { 'videoControls.searchLanguages' => 'Search languages...', 'messages.markedAsWatched' => 'Marked as watched', @@ -5526,8 +5569,6 @@ extension on Translations { 'messages.markedAsUnwatchedOffline' => 'Marked as unwatched (will sync when online)', 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Auto-removed: ${title}', 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('en'))(n, one: 'Auto-removed ${n} watched download', other: 'Auto-removed ${n} watched downloads', ), - _ => null, - } ?? switch (path) { 'messages.removedFromContinueWatching' => 'Removed from Continue Watching', 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', 'messages.streamInterrupted' => 'The stream was interrupted. Press play or seek to retry.', @@ -5652,6 +5693,7 @@ extension on Translations { 'profiles.borrowExplain' => 'Borrow another profile\'s connection. PIN-protected profiles require a PIN.', 'profiles.borrowEmpty' => 'Nothing to borrow yet.', 'profiles.borrowEmptySubtitle' => 'Connect Plex or Jellyfin to another profile first.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'From ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Connection borrowed.', 'profiles.borrowFailed' => 'Failed to borrow connection.', @@ -6032,6 +6074,8 @@ extension on Translations { 'watchTogether.currentPlayback' => 'Current Playback', 'watchTogether.joinCurrentPlayback' => 'Join Current Playback', 'watchTogether.joinCurrentPlaybackDescription' => 'Jump back into what the host is currently watching', + _ => null, + } ?? switch (path) { 'watchTogether.failedToOpenCurrentPlayback' => 'Failed to open current playback', 'watchTogether.participantJoined' => ({required Object name}) => '${name} joined', @@ -6041,8 +6085,6 @@ extension on Translations { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} seeked', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} is buffering', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} is on an older app version โ€” sync unavailable', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Resuming without ${name}', 'watchTogether.waitingForParticipants' => 'Waiting for others to load...', 'watchTogether.waitingForName' => ({required Object name}) => 'Waiting for ${name}...', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 9571b1d4a..5601f2ea1 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -52,6 +52,7 @@ class TranslationsEs extends Translations with BaseTranslations 'Esperando aprobaciรณnโ€ฆ'; @override String get quickConnectCancel => 'Cancelar'; @override String get quickConnectExpired => 'Quick Connect caducรณ. Intรฉntalo de nuevo.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get libraryDensity => 'Densidad de Biblioteca'; @override String get compact => 'Compacto'; @override String get comfortable => 'Cรณmodo'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Modo de Vista'; @override String get gridView => 'Cuadrรญcula'; @override String get listView => 'Lista'; @@ -311,7 +310,7 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relay de Ver Juntos'; @override String get watchTogetherRelayDescription => 'Define un relay personalizado. Todos deben usar el mismo servidor.'; @override String get watchTogetherRelayHint => 'https://mi-relay.ejemplo.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Informes de Errores'; @override String get crashReportingDescription => 'Enviar informes de errores para mejorar la aplicaciรณn'; @override String get debugLogging => 'Registro de Depuraciรณn'; @@ -328,12 +327,10 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get exportSettings => 'Exportar Configuraciรณn'; @override String get exportSettingsDescription => 'Guardar tus preferencias en un archivo'; @override String get exportSettingsSuccess => 'Configuraciรณn exportada'; - @override String get exportSettingsFailed => 'No se pudo exportar la configuraciรณn'; @override String get importSettings => 'Importar Configuraciรณn'; @override String get importSettingsDescription => 'Restaurar preferencias desde un archivo'; @override String get importSettingsConfirm => 'Esto reemplazarรก tu configuraciรณn actual. ยฟContinuar?'; @override String get importSettingsSuccess => 'Configuraciรณn importada'; - @override String get importSettingsFailed => 'No se pudo importar la configuraciรณn'; @override String get importSettingsInvalidFile => 'Este archivo no es una exportaciรณn vรกlida de Plezy'; @override String get importSettingsNoUser => 'Inicia sesiรณn antes de importar la configuraciรณn'; @override String get shortcutsReset => 'Atajos restablecidos a los valores predeterminados'; @@ -348,6 +345,7 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'La duraciรณn debe estar entre ${min} y ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'El atajo ya estรก asignado a ${action}'; @override String shortcutUpdated({required Object action}) => 'Atajo actualizado para ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Salto automรกtico'; @override String get autoSkipIntro => 'Saltar Intro automรกticamente'; @override String get autoSkipIntroDescription => 'Saltar automรกticamente los marcadores de intro despuรฉs de unos segundos'; @@ -373,7 +371,7 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Ubicaciรณn de descarga cambiada'; @override String get downloadLocationReset => 'Ubicaciรณn de descarga restablecida al predeterminado'; @override String get downloadLocationInvalid => 'La carpeta seleccionada no tiene permisos de escritura'; - @override String get downloadLocationSelectError => 'Error al seleccionar la carpeta'; + @override String get downloadLocationPickerUnavailable => 'La selecciรณn de carpetas no estรก disponible en este dispositivo'; @override String get downloadOnWifiOnly => 'Descargar solo con WiFi'; @override String get downloadOnWifiOnlyDescription => 'Evitar descargas cuando se usan datos mรณviles'; @override String get autoRemoveWatchedDownloads => 'Eliminar descargas vistas automรกticamente'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityEs extends TranslationsAccessibilityEn { @override String get hexColor => 'Color hexadecimal'; @override String get expandText => 'Expandir texto'; @override String get collapseText => 'Contraer texto'; + @override String get alphabetNavigation => 'Navegaciรณn alfabรฉtica'; + @override String get alphabetScrollHint => 'Desliza hacia arriba o abajo para avanzar por letra'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Fila ${row} de ${rowCount}, columna ${column} de ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Fila ${row} de ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsEs extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Marcar como no visto'; } +// Path: audioTracks +class _TranslationsAudioTracksEs extends TranslationsAudioTracksEn { + _TranslationsAudioTracksEs._(TranslationsEs root) : this._root = root, super.internal(root); + + final TranslationsEs _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Pista de audio ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsEs extends TranslationsVideoControlsEn { _TranslationsVideoControlsEs._(TranslationsEs root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesEs extends TranslationsMessagesEn { @override String get streamInterrupted => 'La reproducciรณn se interrumpiรณ. Pulsa reproducir o avanza para volver a intentarlo.'; @override String get liveStreamInterrupted => 'La transmisiรณn en vivo se interrumpiรณ. Pulsa reproducir para volver a intentarlo.'; @override String get fileInfoNotAvailable => 'Informaciรณn de archivo no disponible'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Error al cargar info de archivo: ${error}'; @override String get errorLoadingSeries => 'Error al cargar la serie'; @override String get musicNotSupported => 'La reproducciรณn de mรบsica aรบn no estรก soportada'; @@ -867,6 +879,7 @@ class _TranslationsProfilesEs extends TranslationsProfilesEn { @override String get borrowExplain => 'Toma prestada la conexiรณn de otro perfil. Los perfiles protegidos con PIN requieren un PIN.'; @override String get borrowEmpty => 'Nada para tomar prestado todavรญa.'; @override String get borrowEmptySubtitle => 'Conecta Plex o Jellyfin primero a otro perfil.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'De ${displayName}'; @override String get borrowConnectionBorrowed => 'Conexiรณn tomada prestada.'; @override String get borrowFailed => 'No se pudo tomar prestada la conexiรณn.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvEs extends TranslationsLiveTvEn { @override String get favorites => 'Favoritos'; @override String get reorderFavorites => 'Reordenar favoritos'; @override String get favoritesLoadFailed => 'No se pudieron cargar los favoritos. Comprueba tu conexiรณn e intรฉntalo de nuevo.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Unirse a sesiรณn en curso'; @override String watchFromStart({required Object minutes}) => 'Ver desde el inicio (hace ${minutes} min)'; @override String get watchLive => 'Ver en vivo'; @@ -2149,7 +2162,7 @@ extension on TranslationsEs { 'auth.quickConnectWaiting' => 'Esperando aprobaciรณnโ€ฆ', 'auth.quickConnectCancel' => 'Cancelar', 'auth.quickConnectExpired' => 'Quick Connect caducรณ. Intรฉntalo de nuevo.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Cancelar', 'common.save' => 'Guardar', 'common.close' => 'Cerrar', @@ -2233,8 +2246,6 @@ extension on TranslationsEs { 'settings.libraryDensity' => 'Densidad de Biblioteca', 'settings.compact' => 'Compacto', 'settings.comfortable' => 'Cรณmodo', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Modo de Vista', 'settings.gridView' => 'Cuadrรญcula', 'settings.listView' => 'Lista', @@ -2304,7 +2315,7 @@ extension on TranslationsEs { 'settings.watchTogetherRelay' => 'Relay de Ver Juntos', 'settings.watchTogetherRelayDescription' => 'Define un relay personalizado. Todos deben usar el mismo servidor.', 'settings.watchTogetherRelayHint' => 'https://mi-relay.ejemplo.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Informes de Errores', 'settings.crashReportingDescription' => 'Enviar informes de errores para mejorar la aplicaciรณn', 'settings.debugLogging' => 'Registro de Depuraciรณn', @@ -2321,12 +2332,10 @@ extension on TranslationsEs { 'settings.exportSettings' => 'Exportar Configuraciรณn', 'settings.exportSettingsDescription' => 'Guardar tus preferencias en un archivo', 'settings.exportSettingsSuccess' => 'Configuraciรณn exportada', - 'settings.exportSettingsFailed' => 'No se pudo exportar la configuraciรณn', 'settings.importSettings' => 'Importar Configuraciรณn', 'settings.importSettingsDescription' => 'Restaurar preferencias desde un archivo', 'settings.importSettingsConfirm' => 'Esto reemplazarรก tu configuraciรณn actual. ยฟContinuar?', 'settings.importSettingsSuccess' => 'Configuraciรณn importada', - 'settings.importSettingsFailed' => 'No se pudo importar la configuraciรณn', 'settings.importSettingsInvalidFile' => 'Este archivo no es una exportaciรณn vรกlida de Plezy', 'settings.importSettingsNoUser' => 'Inicia sesiรณn antes de importar la configuraciรณn', 'settings.shortcutsReset' => 'Atajos restablecidos a los valores predeterminados', @@ -2341,6 +2350,7 @@ extension on TranslationsEs { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'La duraciรณn debe estar entre ${min} y ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'El atajo ya estรก asignado a ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Atajo actualizado para ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Salto automรกtico', 'settings.autoSkipIntro' => 'Saltar Intro automรกticamente', 'settings.autoSkipIntroDescription' => 'Saltar automรกticamente los marcadores de intro despuรฉs de unos segundos', @@ -2366,7 +2376,7 @@ extension on TranslationsEs { 'settings.downloadLocationChanged' => 'Ubicaciรณn de descarga cambiada', 'settings.downloadLocationReset' => 'Ubicaciรณn de descarga restablecida al predeterminado', 'settings.downloadLocationInvalid' => 'La carpeta seleccionada no tiene permisos de escritura', - 'settings.downloadLocationSelectError' => 'Error al seleccionar la carpeta', + 'settings.downloadLocationPickerUnavailable' => 'La selecciรณn de carpetas no estรก disponible en este dispositivo', 'settings.downloadOnWifiOnly' => 'Descargar solo con WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Evitar descargas cuando se usan datos mรณviles', 'settings.autoRemoveWatchedDownloads' => 'Eliminar descargas vistas automรกticamente', @@ -2554,10 +2564,15 @@ extension on TranslationsEs { 'accessibility.hexColor' => 'Color hexadecimal', 'accessibility.expandText' => 'Expandir texto', 'accessibility.collapseText' => 'Contraer texto', + 'accessibility.alphabetNavigation' => 'Navegaciรณn alfabรฉtica', + 'accessibility.alphabetScrollHint' => 'Desliza hacia arriba o abajo para avanzar por letra', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Fila ${row} de ${rowCount}, columna ${column} de ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Fila ${row} de ${rowCount}', 'tooltips.shufflePlay' => 'Reproducciรณn aleatoria', 'tooltips.playTrailer' => 'Reproducir trรกiler', 'tooltips.markAsWatched' => 'Marcar como visto', 'tooltips.markAsUnwatched' => 'Marcar como no visto', + 'audioTracks.track' => ({required Object n}) => 'Pista de audio ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Subtรญtulos', 'videoControls.resetToZero' => 'Restablecer a 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsEs { 'messages.markedAsUnwatched' => 'Marcado como no visto', 'messages.markedAsWatchedOffline' => 'Marcado como visto (se sincronizarรก al estar en lรญnea)', 'messages.markedAsUnwatchedOffline' => 'Marcado como no visto (se sincronizarรก al estar en lรญnea)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Eliminado automรกticamente: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Se eliminรณ automรกticamente ${n} descarga vista', other: 'Se eliminaron automรกticamente ${n} descargas vistas', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Eliminado automรกticamente: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('es'))(n, one: 'Se eliminรณ automรกticamente ${n} descarga vista', other: 'Se eliminaron automรกticamente ${n} descargas vistas', ), 'messages.removedFromContinueWatching' => 'Eliminado de Seguir Viendo', 'messages.errorLoading' => ({required Object error}) => 'Error: ${error}', 'messages.streamInterrupted' => 'La reproducciรณn se interrumpiรณ. Pulsa reproducir o avanza para volver a intentarlo.', 'messages.liveStreamInterrupted' => 'La transmisiรณn en vivo se interrumpiรณ. Pulsa reproducir para volver a intentarlo.', 'messages.fileInfoNotAvailable' => 'Informaciรณn de archivo no disponible', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Error al cargar info de archivo: ${error}', 'messages.errorLoadingSeries' => 'Error al cargar la serie', 'messages.musicNotSupported' => 'La reproducciรณn de mรบsica aรบn no estรก soportada', @@ -2772,6 +2787,7 @@ extension on TranslationsEs { 'profiles.borrowExplain' => 'Toma prestada la conexiรณn de otro perfil. Los perfiles protegidos con PIN requieren un PIN.', 'profiles.borrowEmpty' => 'Nada para tomar prestado todavรญa.', 'profiles.borrowEmptySubtitle' => 'Conecta Plex o Jellyfin primero a otro perfil.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'De ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Conexiรณn tomada prestada.', 'profiles.borrowFailed' => 'No se pudo tomar prestada la conexiรณn.', @@ -2997,7 +3013,7 @@ extension on TranslationsEs { 'liveTv.favorites' => 'Favoritos', 'liveTv.reorderFavorites' => 'Reordenar favoritos', 'liveTv.favoritesLoadFailed' => 'No se pudieron cargar los favoritos. Comprueba tu conexiรณn e intรฉntalo de nuevo.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Unirse a sesiรณn en curso', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Ver desde el inicio (hace ${minutes} min)', 'liveTv.watchLive' => 'Ver en vivo', @@ -3157,11 +3173,11 @@ extension on TranslationsEs { 'watchTogether.participantLeft' => ({required Object name}) => '${name} se fue', 'watchTogether.participantPaused' => ({required Object name}) => '${name} pausรณ', 'watchTogether.participantResumed' => ({required Object name}) => '${name} reanudรณ', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} avanzรณ', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} estรก cargando', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versiรณn anterior de la app โ€” sincronizaciรณn no disponible', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Reanudando sin ${name}', 'watchTogether.waitingForParticipants' => 'Esperando a que otros carguen...', 'watchTogether.waitingForName' => ({required Object name}) => 'Esperando a ${name}...', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 286fed9e0..652d0c9b4 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -52,6 +52,7 @@ class TranslationsFr extends Translations with BaseTranslations 'En attente d\'approbationโ€ฆ'; @override String get quickConnectCancel => 'Annuler'; @override String get quickConnectExpired => 'Quick Connect a expirรฉ. Rรฉessayez.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get libraryDensity => 'Densitรฉ des bibliothรจques'; @override String get compact => 'Compact'; @override String get comfortable => 'Confortable'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Mode d\'affichage'; @override String get gridView => 'Grille'; @override String get listView => 'Liste'; @@ -311,7 +310,7 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relais Regarder Ensemble'; @override String get watchTogetherRelayDescription => 'Dรฉfinir un relay personnalisรฉ. Tout le monde doit utiliser le mรชme serveur.'; @override String get watchTogetherRelayHint => 'https://mon-relais.exemple.fr'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Rapports de plantage'; @override String get crashReportingDescription => 'Envoyer des rapports de plantage pour amรฉliorer l\'application'; @override String get debugLogging => 'Journalisation de dรฉbogage'; @@ -328,12 +327,10 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get exportSettings => 'Exporter les paramรจtres'; @override String get exportSettingsDescription => 'Enregistrer vos prรฉfรฉrences dans un fichier'; @override String get exportSettingsSuccess => 'Paramรจtres exportรฉs'; - @override String get exportSettingsFailed => 'Impossible d\'exporter les paramรจtres'; @override String get importSettings => 'Importer les paramรจtres'; @override String get importSettingsDescription => 'Restaurer les prรฉfรฉrences depuis un fichier'; @override String get importSettingsConfirm => 'Cela remplacera vos paramรจtres actuels. Continuer ?'; @override String get importSettingsSuccess => 'Paramรจtres importรฉs'; - @override String get importSettingsFailed => 'Impossible d\'importer les paramรจtres'; @override String get importSettingsInvalidFile => 'Ce fichier n\'est pas un export Plezy valide'; @override String get importSettingsNoUser => 'Connectez-vous avant d\'importer les paramรจtres'; @override String get shortcutsReset => 'Raccourcis rรฉinitialisรฉs aux valeurs par dรฉfaut'; @@ -348,6 +345,7 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'La durรฉe doit รชtre comprise entre ${min} et ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Raccourci dรฉjร  attribuรฉ ร  ${action}'; @override String shortcutUpdated({required Object action}) => 'Raccourci mis ร  jour pour ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Skip automatique'; @override String get autoSkipIntro => 'Skip automatique de l\'introduction'; @override String get autoSkipIntroDescription => 'Skipper automatiquement l\'introduction aprรจs quelques secondes'; @@ -373,7 +371,7 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Emplacement de tรฉlรฉchargement modifiรฉ'; @override String get downloadLocationReset => 'Emplacement de tรฉlรฉchargement rรฉinitialisรฉ ร  la valeur par dรฉfaut'; @override String get downloadLocationInvalid => 'Le dossier sรฉlectionnรฉ n\'est pas accessible en รฉcriture'; - @override String get downloadLocationSelectError => 'ร‰chec de la sรฉlection du dossier'; + @override String get downloadLocationPickerUnavailable => 'La sรฉlection de dossier nโ€™est pas disponible sur cet appareil'; @override String get downloadOnWifiOnly => 'Tรฉlรฉcharger uniquement via WiFi'; @override String get downloadOnWifiOnlyDescription => 'Empรชcher les tรฉlรฉchargements lorsque vous utilisez les donnรฉes cellulaires'; @override String get autoRemoveWatchedDownloads => 'Supprimer automatiquement les tรฉlรฉchargements vus'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityFr extends TranslationsAccessibilityEn { @override String get hexColor => 'Couleur hexadรฉcimale'; @override String get expandText => 'Dรฉvelopper le texte'; @override String get collapseText => 'Replier le texte'; + @override String get alphabetNavigation => 'Navigation alphabรฉtique'; + @override String get alphabetScrollHint => 'Balayez vers le haut ou le bas pour changer de lettre'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Ligne ${row} sur ${rowCount}, colonne ${column} sur ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Ligne ${row} sur ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsFr extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Marquรฉ comme non vu'; } +// Path: audioTracks +class _TranslationsAudioTracksFr extends TranslationsAudioTracksEn { + _TranslationsAudioTracksFr._(TranslationsFr root) : this._root = root, super.internal(root); + + final TranslationsFr _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Piste audio ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsFr extends TranslationsVideoControlsEn { _TranslationsVideoControlsFr._(TranslationsFr root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesFr extends TranslationsMessagesEn { @override String get streamInterrupted => 'La lecture a รฉtรฉ interrompue. Appuyez sur Lecture ou avancez pour rรฉessayer.'; @override String get liveStreamInterrupted => 'Le direct a รฉtรฉ interrompu. Appuyez sur Lecture pour rรฉessayer.'; @override String get fileInfoNotAvailable => 'Informations sur le fichier non disponibles'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}'; @override String get errorLoadingSeries => 'Erreur lors du chargement de la sรฉrie'; @override String get musicNotSupported => 'La lecture de musique n\'est pas encore prise en charge'; @@ -867,6 +879,7 @@ class _TranslationsProfilesFr extends TranslationsProfilesEn { @override String get borrowExplain => 'Emprunter la connexion d\'un autre profil. Les profils protรฉgรฉs par PIN exigent un PIN.'; @override String get borrowEmpty => 'Rien ร  emprunter pour le moment.'; @override String get borrowEmptySubtitle => 'Connectez d\'abord Plex ou Jellyfin ร  un autre profil.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'De ${displayName}'; @override String get borrowConnectionBorrowed => 'Connexion empruntรฉe.'; @override String get borrowFailed => 'Impossible d\'emprunter la connexion.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvFr extends TranslationsLiveTvEn { @override String get favorites => 'Favoris'; @override String get reorderFavorites => 'Rรฉorganiser les favoris'; @override String get favoritesLoadFailed => 'Impossible de charger les favoris. Vรฉrifiez votre connexion et rรฉessayez.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Rejoindre la session en cours'; @override String watchFromStart({required Object minutes}) => 'Regarder depuis le dรฉbut (il y a ${minutes} min)'; @override String get watchLive => 'Regarder en direct'; @@ -2149,7 +2162,7 @@ extension on TranslationsFr { 'auth.quickConnectWaiting' => 'En attente d\'approbationโ€ฆ', 'auth.quickConnectCancel' => 'Annuler', 'auth.quickConnectExpired' => 'Quick Connect a expirรฉ. Rรฉessayez.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Annuler', 'common.save' => 'Sauvegarder', 'common.close' => 'Fermer', @@ -2233,8 +2246,6 @@ extension on TranslationsFr { 'settings.libraryDensity' => 'Densitรฉ des bibliothรจques', 'settings.compact' => 'Compact', 'settings.comfortable' => 'Confortable', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Mode d\'affichage', 'settings.gridView' => 'Grille', 'settings.listView' => 'Liste', @@ -2304,7 +2315,7 @@ extension on TranslationsFr { 'settings.watchTogetherRelay' => 'Relais Regarder Ensemble', 'settings.watchTogetherRelayDescription' => 'Dรฉfinir un relay personnalisรฉ. Tout le monde doit utiliser le mรชme serveur.', 'settings.watchTogetherRelayHint' => 'https://mon-relais.exemple.fr', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Rapports de plantage', 'settings.crashReportingDescription' => 'Envoyer des rapports de plantage pour amรฉliorer l\'application', 'settings.debugLogging' => 'Journalisation de dรฉbogage', @@ -2321,12 +2332,10 @@ extension on TranslationsFr { 'settings.exportSettings' => 'Exporter les paramรจtres', 'settings.exportSettingsDescription' => 'Enregistrer vos prรฉfรฉrences dans un fichier', 'settings.exportSettingsSuccess' => 'Paramรจtres exportรฉs', - 'settings.exportSettingsFailed' => 'Impossible d\'exporter les paramรจtres', 'settings.importSettings' => 'Importer les paramรจtres', 'settings.importSettingsDescription' => 'Restaurer les prรฉfรฉrences depuis un fichier', 'settings.importSettingsConfirm' => 'Cela remplacera vos paramรจtres actuels. Continuer ?', 'settings.importSettingsSuccess' => 'Paramรจtres importรฉs', - 'settings.importSettingsFailed' => 'Impossible d\'importer les paramรจtres', 'settings.importSettingsInvalidFile' => 'Ce fichier n\'est pas un export Plezy valide', 'settings.importSettingsNoUser' => 'Connectez-vous avant d\'importer les paramรจtres', 'settings.shortcutsReset' => 'Raccourcis rรฉinitialisรฉs aux valeurs par dรฉfaut', @@ -2341,6 +2350,7 @@ extension on TranslationsFr { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'La durรฉe doit รชtre comprise entre ${min} et ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Raccourci dรฉjร  attribuรฉ ร  ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Raccourci mis ร  jour pour ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Skip automatique', 'settings.autoSkipIntro' => 'Skip automatique de l\'introduction', 'settings.autoSkipIntroDescription' => 'Skipper automatiquement l\'introduction aprรจs quelques secondes', @@ -2366,7 +2376,7 @@ extension on TranslationsFr { 'settings.downloadLocationChanged' => 'Emplacement de tรฉlรฉchargement modifiรฉ', 'settings.downloadLocationReset' => 'Emplacement de tรฉlรฉchargement rรฉinitialisรฉ ร  la valeur par dรฉfaut', 'settings.downloadLocationInvalid' => 'Le dossier sรฉlectionnรฉ n\'est pas accessible en รฉcriture', - 'settings.downloadLocationSelectError' => 'ร‰chec de la sรฉlection du dossier', + 'settings.downloadLocationPickerUnavailable' => 'La sรฉlection de dossier nโ€™est pas disponible sur cet appareil', 'settings.downloadOnWifiOnly' => 'Tรฉlรฉcharger uniquement via WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Empรชcher les tรฉlรฉchargements lorsque vous utilisez les donnรฉes cellulaires', 'settings.autoRemoveWatchedDownloads' => 'Supprimer automatiquement les tรฉlรฉchargements vus', @@ -2554,10 +2564,15 @@ extension on TranslationsFr { 'accessibility.hexColor' => 'Couleur hexadรฉcimale', 'accessibility.expandText' => 'Dรฉvelopper le texte', 'accessibility.collapseText' => 'Replier le texte', + 'accessibility.alphabetNavigation' => 'Navigation alphabรฉtique', + 'accessibility.alphabetScrollHint' => 'Balayez vers le haut ou le bas pour changer de lettre', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Ligne ${row} sur ${rowCount}, colonne ${column} sur ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Ligne ${row} sur ${rowCount}', 'tooltips.shufflePlay' => 'Lecture alรฉatoire', 'tooltips.playTrailer' => 'Lire la bande-annonce', 'tooltips.markAsWatched' => 'Marquรฉ comme vu', 'tooltips.markAsUnwatched' => 'Marquรฉ comme non vu', + 'audioTracks.track' => ({required Object n}) => 'Piste audio ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Sous-titres', 'videoControls.resetToZero' => 'Rรฉinitialiser ร  0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsFr { 'messages.markedAsUnwatched' => 'Marquรฉ comme non vu', 'messages.markedAsWatchedOffline' => 'Marquรฉ comme vu (se synchronisera lorsque vous serez en ligne)', 'messages.markedAsUnwatchedOffline' => 'Marquรฉ comme non vu (sera synchronisรฉ lorsque vous serez en ligne)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Supprimรฉ automatiquement : ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} tรฉlรฉchargement vu supprimรฉ automatiquement', other: '${n} tรฉlรฉchargements vus supprimรฉs automatiquement', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Supprimรฉ automatiquement : ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('fr'))(n, one: '${n} tรฉlรฉchargement vu supprimรฉ automatiquement', other: '${n} tรฉlรฉchargements vus supprimรฉs automatiquement', ), 'messages.removedFromContinueWatching' => 'Supprimer de "Continuer ร  regarder"', 'messages.errorLoading' => ({required Object error}) => 'Erreur: ${error}', 'messages.streamInterrupted' => 'La lecture a รฉtรฉ interrompue. Appuyez sur Lecture ou avancez pour rรฉessayer.', 'messages.liveStreamInterrupted' => 'Le direct a รฉtรฉ interrompu. Appuyez sur Lecture pour rรฉessayer.', 'messages.fileInfoNotAvailable' => 'Informations sur le fichier non disponibles', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erreur lors du chargement des informations sur le fichier: ${error}', 'messages.errorLoadingSeries' => 'Erreur lors du chargement de la sรฉrie', 'messages.musicNotSupported' => 'La lecture de musique n\'est pas encore prise en charge', @@ -2772,6 +2787,7 @@ extension on TranslationsFr { 'profiles.borrowExplain' => 'Emprunter la connexion d\'un autre profil. Les profils protรฉgรฉs par PIN exigent un PIN.', 'profiles.borrowEmpty' => 'Rien ร  emprunter pour le moment.', 'profiles.borrowEmptySubtitle' => 'Connectez d\'abord Plex ou Jellyfin ร  un autre profil.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'De ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Connexion empruntรฉe.', 'profiles.borrowFailed' => 'Impossible d\'emprunter la connexion.', @@ -2997,7 +3013,7 @@ extension on TranslationsFr { 'liveTv.favorites' => 'Favoris', 'liveTv.reorderFavorites' => 'Rรฉorganiser les favoris', 'liveTv.favoritesLoadFailed' => 'Impossible de charger les favoris. Vรฉrifiez votre connexion et rรฉessayez.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Rejoindre la session en cours', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Regarder depuis le dรฉbut (il y a ${minutes} min)', 'liveTv.watchLive' => 'Regarder en direct', @@ -3157,11 +3173,11 @@ extension on TranslationsFr { 'watchTogether.participantLeft' => ({required Object name}) => '${name} est parti', 'watchTogether.participantPaused' => ({required Object name}) => '${name} a mis en pause', 'watchTogether.participantResumed' => ({required Object name}) => '${name} a repris', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} a avancรฉ', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} met en mรฉmoire tampon', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} utilise une ancienne version de lโ€™app โ€” synchronisation indisponible', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Reprise sans ${name}', 'watchTogether.waitingForParticipants' => 'En attente du chargement des autres...', 'watchTogether.waitingForName' => ({required Object name}) => 'En attente de ${name}...', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index f6cbcd272..78ed25fea 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -52,6 +52,7 @@ class TranslationsIt extends Translations with BaseTranslations 'In attesa di approvazioneโ€ฆ'; @override String get quickConnectCancel => 'Annulla'; @override String get quickConnectExpired => 'Quick Connect scaduto. Riprova.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get libraryDensity => 'Densitร  libreria'; @override String get compact => 'Compatta'; @override String get comfortable => 'Comoda'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Modalitร  di visualizzazione'; @override String get gridView => 'Griglia'; @override String get listView => 'Elenco'; @@ -311,7 +310,7 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relay Guarda Insieme'; @override String get watchTogetherRelayDescription => 'Imposta un relay personalizzato. Tutti devono usare lo stesso server.'; @override String get watchTogetherRelayHint => 'https://mio-relay.esempio.it'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Segnalazione errori'; @override String get crashReportingDescription => 'Invia segnalazioni di errori per migliorare l\'app'; @override String get debugLogging => 'Log di debug'; @@ -328,12 +327,10 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get exportSettings => 'Esporta impostazioni'; @override String get exportSettingsDescription => 'Salva le tue preferenze in un file'; @override String get exportSettingsSuccess => 'Impostazioni esportate'; - @override String get exportSettingsFailed => 'Impossibile esportare le impostazioni'; @override String get importSettings => 'Importa impostazioni'; @override String get importSettingsDescription => 'Ripristina le preferenze da un file'; @override String get importSettingsConfirm => 'Questa azione sostituirร  le impostazioni attuali. Continuare?'; @override String get importSettingsSuccess => 'Impostazioni importate'; - @override String get importSettingsFailed => 'Impossibile importare le impostazioni'; @override String get importSettingsInvalidFile => 'Questo file non รจ un\'esportazione Plezy valida'; @override String get importSettingsNoUser => 'Accedi prima di importare le impostazioni'; @override String get shortcutsReset => 'Scorciatoie ripristinate alle impostazioni predefinite'; @@ -348,6 +345,7 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Scorciatoia giร  assegnata a ${action}'; @override String shortcutUpdated({required Object action}) => 'Scorciatoia aggiornata per ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Salto Automatico'; @override String get autoSkipIntro => 'Salta Intro Automaticamente'; @override String get autoSkipIntroDescription => 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; @@ -373,7 +371,7 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Posizione di download modificata'; @override String get downloadLocationReset => 'Posizione di download ripristinata a predefinita'; @override String get downloadLocationInvalid => 'La cartella selezionata non รจ scrivibile'; - @override String get downloadLocationSelectError => 'Impossibile selezionare la cartella'; + @override String get downloadLocationPickerUnavailable => 'La selezione della cartella non รจ disponibile su questo dispositivo'; @override String get downloadOnWifiOnly => 'Scarica solo con WiFi'; @override String get downloadOnWifiOnlyDescription => 'Impedisci i download quando si utilizza la rete dati cellulare'; @override String get autoRemoveWatchedDownloads => 'Rimuovi automaticamente i download visti'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityIt extends TranslationsAccessibilityEn { @override String get hexColor => 'Colore esadecimale'; @override String get expandText => 'Espandi il testo'; @override String get collapseText => 'Comprimi il testo'; + @override String get alphabetNavigation => 'Navigazione alfabetica'; + @override String get alphabetScrollHint => 'Scorri verso l\'alto o il basso per cambiare lettera'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Riga ${row} di ${rowCount}, colonna ${column} di ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Riga ${row} di ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsIt extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Segna come non visto'; } +// Path: audioTracks +class _TranslationsAudioTracksIt extends TranslationsAudioTracksEn { + _TranslationsAudioTracksIt._(TranslationsIt root) : this._root = root, super.internal(root); + + final TranslationsIt _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Traccia audio ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsIt extends TranslationsVideoControlsEn { _TranslationsVideoControlsIt._(TranslationsIt root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesIt extends TranslationsMessagesEn { @override String get streamInterrupted => 'La riproduzione si รจ interrotta. Premi Riproduci o scorri per riprovare.'; @override String get liveStreamInterrupted => 'La diretta si รจ interrotta. Premi Riproduci per riprovare.'; @override String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Errore caricamento informazioni sul file: ${error}'; @override String get errorLoadingSeries => 'Errore caricamento serie'; @override String get musicNotSupported => 'La riproduzione musicale non รจ ancora supportata'; @@ -867,6 +879,7 @@ class _TranslationsProfilesIt extends TranslationsProfilesEn { @override String get borrowExplain => 'Prendi in prestito la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.'; @override String get borrowEmpty => 'Nulla da prendere in prestito al momento.'; @override String get borrowEmptySubtitle => 'Collega prima Plex o Jellyfin a un altro profilo.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Da ${displayName}'; @override String get borrowConnectionBorrowed => 'Connessione presa in prestito.'; @override String get borrowFailed => 'Impossibile prendere in prestito la connessione.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvIt extends TranslationsLiveTvEn { @override String get favorites => 'Preferiti'; @override String get reorderFavorites => 'Riordina preferiti'; @override String get favoritesLoadFailed => 'Impossibile caricare i preferiti. Controlla la connessione e riprova.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Partecipa alla sessione in corso'; @override String watchFromStart({required Object minutes}) => 'Guarda dall\'inizio (${minutes} min fa)'; @override String get watchLive => 'Guarda in diretta'; @@ -2149,7 +2162,7 @@ extension on TranslationsIt { 'auth.quickConnectWaiting' => 'In attesa di approvazioneโ€ฆ', 'auth.quickConnectCancel' => 'Annulla', 'auth.quickConnectExpired' => 'Quick Connect scaduto. Riprova.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Cancella', 'common.save' => 'Salva', 'common.close' => 'Chiudi', @@ -2233,8 +2246,6 @@ extension on TranslationsIt { 'settings.libraryDensity' => 'Densitร  libreria', 'settings.compact' => 'Compatta', 'settings.comfortable' => 'Comoda', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Modalitร  di visualizzazione', 'settings.gridView' => 'Griglia', 'settings.listView' => 'Elenco', @@ -2304,7 +2315,7 @@ extension on TranslationsIt { 'settings.watchTogetherRelay' => 'Relay Guarda Insieme', 'settings.watchTogetherRelayDescription' => 'Imposta un relay personalizzato. Tutti devono usare lo stesso server.', 'settings.watchTogetherRelayHint' => 'https://mio-relay.esempio.it', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Segnalazione errori', 'settings.crashReportingDescription' => 'Invia segnalazioni di errori per migliorare l\'app', 'settings.debugLogging' => 'Log di debug', @@ -2321,12 +2332,10 @@ extension on TranslationsIt { 'settings.exportSettings' => 'Esporta impostazioni', 'settings.exportSettingsDescription' => 'Salva le tue preferenze in un file', 'settings.exportSettingsSuccess' => 'Impostazioni esportate', - 'settings.exportSettingsFailed' => 'Impossibile esportare le impostazioni', 'settings.importSettings' => 'Importa impostazioni', 'settings.importSettingsDescription' => 'Ripristina le preferenze da un file', 'settings.importSettingsConfirm' => 'Questa azione sostituirร  le impostazioni attuali. Continuare?', 'settings.importSettingsSuccess' => 'Impostazioni importate', - 'settings.importSettingsFailed' => 'Impossibile importare le impostazioni', 'settings.importSettingsInvalidFile' => 'Questo file non รจ un\'esportazione Plezy valida', 'settings.importSettingsNoUser' => 'Accedi prima di importare le impostazioni', 'settings.shortcutsReset' => 'Scorciatoie ripristinate alle impostazioni predefinite', @@ -2341,6 +2350,7 @@ extension on TranslationsIt { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Scorciatoia giร  assegnata a ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Scorciatoia aggiornata per ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Salto Automatico', 'settings.autoSkipIntro' => 'Salta Intro Automaticamente', 'settings.autoSkipIntroDescription' => 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi', @@ -2366,7 +2376,7 @@ extension on TranslationsIt { 'settings.downloadLocationChanged' => 'Posizione di download modificata', 'settings.downloadLocationReset' => 'Posizione di download ripristinata a predefinita', 'settings.downloadLocationInvalid' => 'La cartella selezionata non รจ scrivibile', - 'settings.downloadLocationSelectError' => 'Impossibile selezionare la cartella', + 'settings.downloadLocationPickerUnavailable' => 'La selezione della cartella non รจ disponibile su questo dispositivo', 'settings.downloadOnWifiOnly' => 'Scarica solo con WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Impedisci i download quando si utilizza la rete dati cellulare', 'settings.autoRemoveWatchedDownloads' => 'Rimuovi automaticamente i download visti', @@ -2554,10 +2564,15 @@ extension on TranslationsIt { 'accessibility.hexColor' => 'Colore esadecimale', 'accessibility.expandText' => 'Espandi il testo', 'accessibility.collapseText' => 'Comprimi il testo', + 'accessibility.alphabetNavigation' => 'Navigazione alfabetica', + 'accessibility.alphabetScrollHint' => 'Scorri verso l\'alto o il basso per cambiare lettera', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Riga ${row} di ${rowCount}, colonna ${column} di ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Riga ${row} di ${rowCount}', 'tooltips.shufflePlay' => 'Riproduzione casuale', 'tooltips.playTrailer' => 'Riproduci trailer', 'tooltips.markAsWatched' => 'Segna come visto', 'tooltips.markAsUnwatched' => 'Segna come non visto', + 'audioTracks.track' => ({required Object n}) => 'Traccia audio ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Sottotitoli', 'videoControls.resetToZero' => 'Riporta a 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsIt { 'messages.markedAsUnwatched' => 'Segna come non visto', 'messages.markedAsWatchedOffline' => 'Segnato come visto (sincronizzato online)', 'messages.markedAsUnwatchedOffline' => 'Segnato come non visto (sincronizzato online)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Rimosso automaticamente: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Rimosso automaticamente ${n} download giร  visto', other: 'Rimossi automaticamente ${n} download giร  visti', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Rimosso automaticamente: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('it'))(n, one: 'Rimosso automaticamente ${n} download giร  visto', other: 'Rimossi automaticamente ${n} download giร  visti', ), 'messages.removedFromContinueWatching' => 'Rimosso da Continua a guardare', 'messages.errorLoading' => ({required Object error}) => 'Errore: ${error}', 'messages.streamInterrupted' => 'La riproduzione si รจ interrotta. Premi Riproduci o scorri per riprovare.', 'messages.liveStreamInterrupted' => 'La diretta si รจ interrotta. Premi Riproduci per riprovare.', 'messages.fileInfoNotAvailable' => 'Informazioni sul file non disponibili', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Errore caricamento informazioni sul file: ${error}', 'messages.errorLoadingSeries' => 'Errore caricamento serie', 'messages.musicNotSupported' => 'La riproduzione musicale non รจ ancora supportata', @@ -2772,6 +2787,7 @@ extension on TranslationsIt { 'profiles.borrowExplain' => 'Prendi in prestito la connessione di un altro profilo. I profili protetti da PIN richiedono un PIN.', 'profiles.borrowEmpty' => 'Nulla da prendere in prestito al momento.', 'profiles.borrowEmptySubtitle' => 'Collega prima Plex o Jellyfin a un altro profilo.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Da ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Connessione presa in prestito.', 'profiles.borrowFailed' => 'Impossibile prendere in prestito la connessione.', @@ -2997,7 +3013,7 @@ extension on TranslationsIt { 'liveTv.favorites' => 'Preferiti', 'liveTv.reorderFavorites' => 'Riordina preferiti', 'liveTv.favoritesLoadFailed' => 'Impossibile caricare i preferiti. Controlla la connessione e riprova.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Partecipa alla sessione in corso', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Guarda dall\'inizio (${minutes} min fa)', 'liveTv.watchLive' => 'Guarda in diretta', @@ -3157,11 +3173,11 @@ extension on TranslationsIt { 'watchTogether.participantLeft' => ({required Object name}) => '${name} se ne รจ andato', 'watchTogether.participantPaused' => ({required Object name}) => '${name} ha messo in pausa', 'watchTogether.participantResumed' => ({required Object name}) => '${name} ha ripreso', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} ha cercato', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} sta caricando', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} usa una versione precedente dell\'app โ€” sincronizzazione non disponibile', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Ripresa senza ${name}', 'watchTogether.waitingForParticipants' => 'In attesa che gli altri carichino...', 'watchTogether.waitingForName' => ({required Object name}) => 'In attesa di ${name}...', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index b48ce00ea..589859224 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -52,6 +52,7 @@ class TranslationsJa extends Translations with BaseTranslations 'ๆ‰ฟ่ชใ‚’ๅพ…ใฃใฆใ„ใพใ™โ€ฆ'; @override String get quickConnectCancel => 'ใ‚ญใƒฃใƒณใ‚ปใƒซ'; @override String get quickConnectExpired => 'Quick Connectใฎๆœ‰ๅŠนๆœŸ้™ใŒๅˆ‡ใ‚Œใพใ—ใŸใ€‚ใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get libraryDensity => 'ใƒฉใ‚คใƒ–ใƒฉใƒชใฎๅฏ†ๅบฆ'; @override String get compact => 'ใ‚ณใƒณใƒ‘ใ‚ฏใƒˆ'; @override String get comfortable => 'ใ‚†ใฃใŸใ‚Š'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => '่กจ็คบใƒขใƒผใƒ‰'; @override String get gridView => 'ใ‚ฐใƒชใƒƒใƒ‰'; @override String get listView => 'ใƒชใ‚นใƒˆ'; @@ -311,7 +310,7 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'ไธ€็ท’ใซ่ฆ–่ดใƒชใƒฌใƒผใ‚ตใƒผใƒใƒผ'; @override String get watchTogetherRelayDescription => 'ใ‚ซใ‚นใ‚ฟใƒ ใƒชใƒฌใƒผใ‚’่จญๅฎšใ—ใพใ™ใ€‚ๅ…จๅ“กใŒๅŒใ˜ใ‚ตใƒผใƒใƒผใ‚’ไฝฟใ†ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚'; @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'ใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆ'; @override String get crashReportingDescription => 'ใ‚ขใƒ—ใƒชใฎๆ”นๅ–„ใซๅฝน็ซ‹ใคใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆใ‚’้€ไฟก'; @override String get debugLogging => 'ใƒ‡ใƒใƒƒใ‚ฐใƒญใ‚ฐ'; @@ -328,12 +327,10 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get exportSettings => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆ'; @override String get exportSettingsDescription => '่จญๅฎšใ‚’ใƒ•ใ‚กใ‚คใƒซใซไฟๅญ˜'; @override String get exportSettingsSuccess => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใ—ใพใ—ใŸ'; - @override String get exportSettingsFailed => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ'; @override String get importSettings => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆ'; @override String get importSettingsDescription => 'ใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰่จญๅฎšใ‚’ๅพฉๅ…ƒ'; @override String get importSettingsConfirm => '็พๅœจใฎ่จญๅฎšใ‚’็ฝฎใๆ›ใˆใพใ™ใ€‚็ถš่กŒใ—ใพใ™ใ‹๏ผŸ'; @override String get importSettingsSuccess => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ—ใพใ—ใŸ'; - @override String get importSettingsFailed => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ'; @override String get importSettingsInvalidFile => 'ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏๆœ‰ๅŠนใชPlezyใฎ่จญๅฎšใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใฏใ‚ใ‚Šใพใ›ใ‚“'; @override String get importSettingsNoUser => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ™ใ‚‹ๅ‰ใซใ‚ตใ‚คใƒณใ‚คใƒณใ—ใฆใใ ใ•ใ„'; @override String get shortcutsReset => 'ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ'; @@ -348,6 +345,7 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'ๆ™‚้–“ใฏ${min}ใ‹ใ‚‰${max} ${unit}ใฎ้–“ใงใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™'; @override String shortcutAlreadyAssigned({required Object action}) => 'ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใฏๆ—ขใซ${action}ใซๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใฆใ„ใพใ™'; @override String shortcutUpdated({required Object action}) => '${action}ใฎใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ๆ›ดๆ–ฐใ—ใพใ—ใŸ'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => '่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—'; @override String get autoSkipIntro => 'ใ‚คใƒณใƒˆใƒญใ‚’่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—'; @override String get autoSkipIntroDescription => 'ๆ•ฐ็ง’ๅพŒใซใ‚คใƒณใƒˆใƒญใƒžใƒผใ‚ซใƒผใ‚’่‡ชๅ‹•็š„ใซใ‚นใ‚ญใƒƒใƒ—'; @@ -373,7 +371,7 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ๅค‰ๆ›ดใ—ใพใ—ใŸ'; @override String get downloadLocationReset => 'ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ'; @override String get downloadLocationInvalid => '้ธๆŠžใ—ใŸใƒ•ใ‚ฉใƒซใƒ€ใฏๆ›ธใ่พผใฟใงใใพใ›ใ‚“'; - @override String get downloadLocationSelectError => 'ใƒ•ใ‚ฉใƒซใƒ€ใฎ้ธๆŠžใซๅคฑๆ•—ใ—ใพใ—ใŸ'; + @override String get downloadLocationPickerUnavailable => 'ใ“ใฎใƒ‡ใƒใ‚คใ‚นใงใฏใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใงใใพใ›ใ‚“'; @override String get downloadOnWifiOnly => 'WiFiใฎใฟใงใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰'; @override String get downloadOnWifiOnlyDescription => 'ใƒขใƒใ‚คใƒซใƒ‡ใƒผใ‚ฟ้€šไฟกๆ™‚ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’้˜ฒๆญข'; @override String get autoRemoveWatchedDownloads => '่ฆ–่ดๆธˆใฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฎ่‡ชๅ‹•ๅ‰Š้™ค'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityJa extends TranslationsAccessibilityEn { @override String get hexColor => '16้€ฒใ‚ซใƒฉใƒผ'; @override String get expandText => 'ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅฑ•้–‹'; @override String get collapseText => 'ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŠ˜ใ‚ŠใŸใŸใ‚€'; + @override String get alphabetNavigation => 'ใ‚ขใƒซใƒ•ใ‚กใƒ™ใƒƒใƒˆใƒŠใƒ“ใ‚ฒใƒผใ‚ทใƒงใƒณ'; + @override String get alphabetScrollHint => 'ไธŠไธ‹ใซใ‚นใƒฏใ‚คใƒ—ใ—ใฆๆ–‡ๅญ—ใ”ใจใซ็งปๅ‹•'; + @override String rowColumnPosition({required Object rowCount, required Object row, required Object columnCount, required Object column}) => '${rowCount}่กŒไธญ${row}่กŒใ€${columnCount}ๅˆ—ไธญ${column}ๅˆ—'; + @override String rowPosition({required Object rowCount, required Object row}) => '${rowCount}่กŒไธญ${row}่กŒ'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsJa extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'ๆœช่ฆ–่ดใซใ™ใ‚‹'; } +// Path: audioTracks +class _TranslationsAudioTracksJa extends TranslationsAudioTracksEn { + _TranslationsAudioTracksJa._(TranslationsJa root) : this._root = root, super.internal(root); + + final TranslationsJa _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => '้Ÿณๅฃฐใƒˆใƒฉใƒƒใ‚ฏ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsJa extends TranslationsVideoControlsEn { _TranslationsVideoControlsJa._(TranslationsJa root) : this._root = root, super.internal(root); @@ -711,11 +723,11 @@ class _TranslationsMessagesJa extends TranslationsMessagesEn { @override String get streamInterrupted => 'ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ™ใ‹ใ‚ทใƒผใ‚ฏใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚'; @override String get liveStreamInterrupted => 'ใƒฉใ‚คใƒ–ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚'; @override String get fileInfoNotAvailable => 'ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใŒๅˆฉ็”จใงใใพใ›ใ‚“'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ: ${error}'; @override String get errorLoadingSeries => 'ใ‚ทใƒชใƒผใ‚บใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ'; @override String get musicNotSupported => '้Ÿณๆฅฝใฎๅ†็”Ÿใฏใพใ ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“'; @@ -866,6 +878,7 @@ class _TranslationsProfilesJa extends TranslationsProfilesEn { @override String get borrowExplain => 'ๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ™ใ€‚PINไฟ่ญทใ•ใ‚ŒใŸใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซใฏPINใŒๅฟ…่ฆใงใ™ใ€‚'; @override String get borrowEmpty => 'ใพใ ๅ€Ÿใ‚Šใ‚‹ใ‚‚ใฎใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚'; @override String get borrowEmptySubtitle => 'ใพใšๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซPlexใพใŸใฏJellyfinใ‚’ๆŽฅ็ถšใ—ใฆใใ ใ•ใ„ใ€‚'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => '${displayName}ใ‹ใ‚‰'; @override String get borrowConnectionBorrowed => 'ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ—ใŸใ€‚'; @override String get borrowFailed => 'ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใงใใพใ›ใ‚“ใงใ—ใŸใ€‚'; @@ -1148,7 +1161,7 @@ class _TranslationsLiveTvJa extends TranslationsLiveTvEn { @override String get favorites => 'ใŠๆฐ—ใซๅ…ฅใ‚Š'; @override String get reorderFavorites => 'ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’ไธฆในๆ›ฟใˆ'; @override String get favoritesLoadFailed => 'ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’่ชญใฟ่พผใ‚ใพใ›ใ‚“ใงใ—ใŸใ€‚ๆŽฅ็ถšใ‚’็ขบ่ชใ—ใฆใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => '้€ฒ่กŒไธญใฎใ‚ปใƒƒใ‚ทใƒงใƒณใซๅ‚ๅŠ '; @override String watchFromStart({required Object minutes}) => 'ๆœ€ๅˆใ‹ใ‚‰่ฆ–่ด๏ผˆ${minutes}ๅˆ†ๅ‰ใซ้–‹ๅง‹๏ผ‰'; @override String get watchLive => 'ใƒฉใ‚คใƒ–ใง่ฆ–่ด'; @@ -2146,7 +2159,7 @@ extension on TranslationsJa { 'auth.quickConnectWaiting' => 'ๆ‰ฟ่ชใ‚’ๅพ…ใฃใฆใ„ใพใ™โ€ฆ', 'auth.quickConnectCancel' => 'ใ‚ญใƒฃใƒณใ‚ปใƒซ', 'auth.quickConnectExpired' => 'Quick Connectใฎๆœ‰ๅŠนๆœŸ้™ใŒๅˆ‡ใ‚Œใพใ—ใŸใ€‚ใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'ใ‚ญใƒฃใƒณใ‚ปใƒซ', 'common.save' => 'ไฟๅญ˜', 'common.close' => '้–‰ใ˜ใ‚‹', @@ -2230,8 +2243,6 @@ extension on TranslationsJa { 'settings.libraryDensity' => 'ใƒฉใ‚คใƒ–ใƒฉใƒชใฎๅฏ†ๅบฆ', 'settings.compact' => 'ใ‚ณใƒณใƒ‘ใ‚ฏใƒˆ', 'settings.comfortable' => 'ใ‚†ใฃใŸใ‚Š', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => '่กจ็คบใƒขใƒผใƒ‰', 'settings.gridView' => 'ใ‚ฐใƒชใƒƒใƒ‰', 'settings.listView' => 'ใƒชใ‚นใƒˆ', @@ -2301,7 +2312,7 @@ extension on TranslationsJa { 'settings.watchTogetherRelay' => 'ไธ€็ท’ใซ่ฆ–่ดใƒชใƒฌใƒผใ‚ตใƒผใƒใƒผ', 'settings.watchTogetherRelayDescription' => 'ใ‚ซใ‚นใ‚ฟใƒ ใƒชใƒฌใƒผใ‚’่จญๅฎšใ—ใพใ™ใ€‚ๅ…จๅ“กใŒๅŒใ˜ใ‚ตใƒผใƒใƒผใ‚’ไฝฟใ†ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚', 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'ใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆ', 'settings.crashReportingDescription' => 'ใ‚ขใƒ—ใƒชใฎๆ”นๅ–„ใซๅฝน็ซ‹ใคใ‚ฏใƒฉใƒƒใ‚ทใƒฅใƒฌใƒใƒผใƒˆใ‚’้€ไฟก', 'settings.debugLogging' => 'ใƒ‡ใƒใƒƒใ‚ฐใƒญใ‚ฐ', @@ -2318,12 +2329,10 @@ extension on TranslationsJa { 'settings.exportSettings' => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆ', 'settings.exportSettingsDescription' => '่จญๅฎšใ‚’ใƒ•ใ‚กใ‚คใƒซใซไฟๅญ˜', 'settings.exportSettingsSuccess' => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใ—ใพใ—ใŸ', - 'settings.exportSettingsFailed' => '่จญๅฎšใ‚’ใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ', 'settings.importSettings' => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆ', 'settings.importSettingsDescription' => 'ใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰่จญๅฎšใ‚’ๅพฉๅ…ƒ', 'settings.importSettingsConfirm' => '็พๅœจใฎ่จญๅฎšใ‚’็ฝฎใๆ›ใˆใพใ™ใ€‚็ถš่กŒใ—ใพใ™ใ‹๏ผŸ', 'settings.importSettingsSuccess' => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ—ใพใ—ใŸ', - 'settings.importSettingsFailed' => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใงใใพใ›ใ‚“ใงใ—ใŸ', 'settings.importSettingsInvalidFile' => 'ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏๆœ‰ๅŠนใชPlezyใฎ่จญๅฎšใ‚จใ‚ฏใ‚นใƒใƒผใƒˆใงใฏใ‚ใ‚Šใพใ›ใ‚“', 'settings.importSettingsNoUser' => '่จญๅฎšใ‚’ใ‚คใƒณใƒใƒผใƒˆใ™ใ‚‹ๅ‰ใซใ‚ตใ‚คใƒณใ‚คใƒณใ—ใฆใใ ใ•ใ„', 'settings.shortcutsReset' => 'ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ', @@ -2338,6 +2347,7 @@ extension on TranslationsJa { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'ๆ™‚้–“ใฏ${min}ใ‹ใ‚‰${max} ${unit}ใฎ้–“ใงใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'ใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใฏๆ—ขใซ${action}ใซๅ‰ฒใ‚Šๅฝ“ใฆใ‚‰ใ‚Œใฆใ„ใพใ™', 'settings.shortcutUpdated' => ({required Object action}) => '${action}ใฎใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ‚’ๆ›ดๆ–ฐใ—ใพใ—ใŸ', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => '่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—', 'settings.autoSkipIntro' => 'ใ‚คใƒณใƒˆใƒญใ‚’่‡ชๅ‹•ใ‚นใ‚ญใƒƒใƒ—', 'settings.autoSkipIntroDescription' => 'ๆ•ฐ็ง’ๅพŒใซใ‚คใƒณใƒˆใƒญใƒžใƒผใ‚ซใƒผใ‚’่‡ชๅ‹•็š„ใซใ‚นใ‚ญใƒƒใƒ—', @@ -2363,7 +2373,7 @@ extension on TranslationsJa { 'settings.downloadLocationChanged' => 'ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ๅค‰ๆ›ดใ—ใพใ—ใŸ', 'settings.downloadLocationReset' => 'ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ๅ ดๆ‰€ใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใซใƒชใ‚ปใƒƒใƒˆใ—ใพใ—ใŸ', 'settings.downloadLocationInvalid' => '้ธๆŠžใ—ใŸใƒ•ใ‚ฉใƒซใƒ€ใฏๆ›ธใ่พผใฟใงใใพใ›ใ‚“', - 'settings.downloadLocationSelectError' => 'ใƒ•ใ‚ฉใƒซใƒ€ใฎ้ธๆŠžใซๅคฑๆ•—ใ—ใพใ—ใŸ', + 'settings.downloadLocationPickerUnavailable' => 'ใ“ใฎใƒ‡ใƒใ‚คใ‚นใงใฏใƒ•ใ‚ฉใƒซใƒ€ใ‚’้ธๆŠžใงใใพใ›ใ‚“', 'settings.downloadOnWifiOnly' => 'WiFiใฎใฟใงใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰', 'settings.downloadOnWifiOnlyDescription' => 'ใƒขใƒใ‚คใƒซใƒ‡ใƒผใ‚ฟ้€šไฟกๆ™‚ใฎใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’้˜ฒๆญข', 'settings.autoRemoveWatchedDownloads' => '่ฆ–่ดๆธˆใฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใฎ่‡ชๅ‹•ๅ‰Š้™ค', @@ -2551,10 +2561,15 @@ extension on TranslationsJa { 'accessibility.hexColor' => '16้€ฒใ‚ซใƒฉใƒผ', 'accessibility.expandText' => 'ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๅฑ•้–‹', 'accessibility.collapseText' => 'ใƒ†ใ‚ญใ‚นใƒˆใ‚’ๆŠ˜ใ‚ŠใŸใŸใ‚€', + 'accessibility.alphabetNavigation' => 'ใ‚ขใƒซใƒ•ใ‚กใƒ™ใƒƒใƒˆใƒŠใƒ“ใ‚ฒใƒผใ‚ทใƒงใƒณ', + 'accessibility.alphabetScrollHint' => 'ไธŠไธ‹ใซใ‚นใƒฏใ‚คใƒ—ใ—ใฆๆ–‡ๅญ—ใ”ใจใซ็งปๅ‹•', + 'accessibility.rowColumnPosition' => ({required Object rowCount, required Object row, required Object columnCount, required Object column}) => '${rowCount}่กŒไธญ${row}่กŒใ€${columnCount}ๅˆ—ไธญ${column}ๅˆ—', + 'accessibility.rowPosition' => ({required Object rowCount, required Object row}) => '${rowCount}่กŒไธญ${row}่กŒ', 'tooltips.shufflePlay' => 'ใ‚ทใƒฃใƒƒใƒ•ใƒซๅ†็”Ÿ', 'tooltips.playTrailer' => 'ไบˆๅ‘Š็ทจใ‚’ๅ†็”Ÿ', 'tooltips.markAsWatched' => '่ฆ–่ดๆธˆใฟใซใ™ใ‚‹', 'tooltips.markAsUnwatched' => 'ๆœช่ฆ–่ดใซใ™ใ‚‹', + 'audioTracks.track' => ({required Object n}) => '้Ÿณๅฃฐใƒˆใƒฉใƒƒใ‚ฏ${n}', 'videoControls.audioLabel' => '้Ÿณๅฃฐ', 'videoControls.subtitlesLabel' => 'ๅญ—ๅน•', 'videoControls.resetToZero' => '0msใซใƒชใ‚ปใƒƒใƒˆ', @@ -2641,20 +2656,20 @@ extension on TranslationsJa { 'messages.markedAsUnwatched' => 'ๆœช่ฆ–่ดใซใ—ใพใ—ใŸ', 'messages.markedAsWatchedOffline' => '่ฆ–่ดๆธˆใฟใซใ—ใพใ—ใŸ๏ผˆใ‚ชใƒณใƒฉใ‚คใƒณๆ™‚ใซๅŒๆœŸ๏ผ‰', 'messages.markedAsUnwatchedOffline' => 'ๆœช่ฆ–่ดใซใ—ใพใ—ใŸ๏ผˆใ‚ชใƒณใƒฉใ‚คใƒณๆ™‚ใซๅŒๆœŸ๏ผ‰', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => '่‡ชๅ‹•ๅ‰Š้™ค: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '่ฆ–่ดๆธˆใฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’${n}ไปถ่‡ชๅ‹•ๅ‰Š้™คใ—ใพใ—ใŸ', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => '่‡ชๅ‹•ๅ‰Š้™ค: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ja'))(n, other: '่ฆ–่ดๆธˆใฟใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ‚’${n}ไปถ่‡ชๅ‹•ๅ‰Š้™คใ—ใพใ—ใŸ', ), 'messages.removedFromContinueWatching' => '่ฆ–่ดไธญใ‹ใ‚‰ๅ‰Š้™คใ—ใพใ—ใŸ', 'messages.errorLoading' => ({required Object error}) => 'ใ‚จใƒฉใƒผ: ${error}', 'messages.streamInterrupted' => 'ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ™ใ‹ใ‚ทใƒผใ‚ฏใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚', 'messages.liveStreamInterrupted' => 'ใƒฉใ‚คใƒ–ใ‚นใƒˆใƒชใƒผใƒ ใŒไธญๆ–ญใ•ใ‚Œใพใ—ใŸใ€‚ๅ†็”Ÿใ‚’ๆŠผใ—ใฆๅ†่ฉฆ่กŒใ—ใฆใใ ใ•ใ„ใ€‚', 'messages.fileInfoNotAvailable' => 'ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใŒๅˆฉ็”จใงใใพใ›ใ‚“', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ใƒ•ใ‚กใ‚คใƒซๆƒ…ๅ ฑใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ: ${error}', 'messages.errorLoadingSeries' => 'ใ‚ทใƒชใƒผใ‚บใฎ่ชญใฟ่พผใฟใ‚จใƒฉใƒผ', 'messages.musicNotSupported' => '้Ÿณๆฅฝใฎๅ†็”Ÿใฏใพใ ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใพใ›ใ‚“', @@ -2769,6 +2784,7 @@ extension on TranslationsJa { 'profiles.borrowExplain' => 'ๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใฎๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ™ใ€‚PINไฟ่ญทใ•ใ‚ŒใŸใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซใฏPINใŒๅฟ…่ฆใงใ™ใ€‚', 'profiles.borrowEmpty' => 'ใพใ ๅ€Ÿใ‚Šใ‚‹ใ‚‚ใฎใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚', 'profiles.borrowEmptySubtitle' => 'ใพใšๅˆฅใฎใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใซPlexใพใŸใฏJellyfinใ‚’ๆŽฅ็ถšใ—ใฆใใ ใ•ใ„ใ€‚', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => '${displayName}ใ‹ใ‚‰', 'profiles.borrowConnectionBorrowed' => 'ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใ—ใพใ—ใŸใ€‚', 'profiles.borrowFailed' => 'ๆŽฅ็ถšใ‚’ๅ€Ÿ็”จใงใใพใ›ใ‚“ใงใ—ใŸใ€‚', @@ -2994,7 +3010,7 @@ extension on TranslationsJa { 'liveTv.favorites' => 'ใŠๆฐ—ใซๅ…ฅใ‚Š', 'liveTv.reorderFavorites' => 'ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’ไธฆในๆ›ฟใˆ', 'liveTv.favoritesLoadFailed' => 'ใŠๆฐ—ใซๅ…ฅใ‚Šใ‚’่ชญใฟ่พผใ‚ใพใ›ใ‚“ใงใ—ใŸใ€‚ๆŽฅ็ถšใ‚’็ขบ่ชใ—ใฆใ‚‚ใ†ไธ€ๅบฆใŠ่ฉฆใ—ใใ ใ•ใ„ใ€‚', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => '้€ฒ่กŒไธญใฎใ‚ปใƒƒใ‚ทใƒงใƒณใซๅ‚ๅŠ ', 'liveTv.watchFromStart' => ({required Object minutes}) => 'ๆœ€ๅˆใ‹ใ‚‰่ฆ–่ด๏ผˆ${minutes}ๅˆ†ๅ‰ใซ้–‹ๅง‹๏ผ‰', 'liveTv.watchLive' => 'ใƒฉใ‚คใƒ–ใง่ฆ–่ด', @@ -3154,11 +3170,11 @@ extension on TranslationsJa { 'watchTogether.participantLeft' => ({required Object name}) => '${name}ใŒ้€€ๅ‡บใ—ใพใ—ใŸ', 'watchTogether.participantPaused' => ({required Object name}) => '${name}ใŒไธ€ๆ™‚ๅœๆญขใ—ใพใ—ใŸ', 'watchTogether.participantResumed' => ({required Object name}) => '${name}ใŒๅ†้–‹ใ—ใพใ—ใŸ', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name}ใŒใ‚ทใƒผใ‚ฏใ—ใพใ—ใŸ', 'watchTogether.participantBuffering' => ({required Object name}) => '${name}ใŒใƒใƒƒใƒ•ใ‚กใƒชใƒณใ‚ฐไธญ', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} ใฏๅคใ„ใƒใƒผใ‚ธใƒงใƒณใฎใ‚ขใƒ—ใƒชใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใŸใ‚ใ€ๅŒๆœŸใงใใพใ›ใ‚“', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => '${name} ใชใ—ใงๅ†้–‹', 'watchTogether.waitingForParticipants' => 'ไป–ใฎๅ‚ๅŠ ่€…ใฎ่ชญใฟ่พผใฟใ‚’ๅพ…ใฃใฆใ„ใพใ™...', 'watchTogether.waitingForName' => ({required Object name}) => '${name}ใ‚’ๅพ…ใฃใฆใ„ใพใ™...', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index 1ad98e9f7..3d90175ba 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -52,6 +52,7 @@ class TranslationsKo extends Translations with BaseTranslations '์Šน์ธ ๋Œ€๊ธฐ ์ค‘โ€ฆ'; @override String get quickConnectCancel => '์ทจ์†Œ'; @override String get quickConnectExpired => 'Quick Connect๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get libraryDensity => '๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ‘œ์‹œ ๋ฐ€๋„'; @override String get compact => '์ข๊ฒŒ'; @override String get comfortable => '๋„“๊ฒŒ'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => '๋ณด๊ธฐ ๋ชจ๋“œ'; @override String get gridView => '๊ทธ๋ฆฌ๋“œ ๋ณด๊ธฐ'; @override String get listView => '๋ชฉ๋ก ๋ณด๊ธฐ'; @@ -311,7 +310,7 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'ํ•จ๊ป˜ ๋ณด๊ธฐ ๋ฆด๋ ˆ์ด'; @override String get watchTogetherRelayDescription => '์‚ฌ์šฉ์ž ์ง€์ • ๋ฆด๋ ˆ์ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ™์€ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.'; @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => '์ถฉ๋Œ ๋ณด๊ณ '; @override String get crashReportingDescription => '์•ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ถฉ๋Œ ๋ณด๊ณ ์„œ ์ „์†ก'; @override String get debugLogging => '๋””๋ฒ„๊ทธ ๋กœ๊น…'; @@ -328,12 +327,10 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get exportSettings => '์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ'; @override String get exportSettingsDescription => '๊ธฐ๋ณธ ์„ค์ •์„ ํŒŒ์ผ๋กœ ์ €์žฅ'; @override String get exportSettingsSuccess => '์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ์™„๋ฃŒ'; - @override String get exportSettingsFailed => '์„ค์ •์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค'; @override String get importSettings => '์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ'; @override String get importSettingsDescription => 'ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ ์„ค์ • ๋ณต์›'; @override String get importSettingsConfirm => 'ํ˜„์žฌ ์„ค์ •์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?'; @override String get importSettingsSuccess => '์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ ์™„๋ฃŒ'; - @override String get importSettingsFailed => '์„ค์ •์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค'; @override String get importSettingsInvalidFile => '์œ ํšจํ•œ Plezy ์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค'; @override String get importSettingsNoUser => '์„ค์ •์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•˜์„ธ์š”'; @override String get shortcutsReset => '๋‹จ์ถ•ํ‚ค๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค'; @@ -348,6 +345,7 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => '๊ธฐ๊ฐ„์€ ${min}๊ณผ ${max} ${unit} ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค'; @override String shortcutAlreadyAssigned({required Object action}) => '๋‹จ์ถ•ํ‚ค๊ฐ€ ์ด๋ฏธ ${action}์— ํ• ๋‹น ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'; @override String shortcutUpdated({required Object action}) => '๋‹จ์ถ•ํ‚ค๊ฐ€ ${action}์— ๋Œ€ํ•ด ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => '์ž๋™ ๊ฑด๋„ˆ๋›ฐ๊ธฐ'; @override String get autoSkipIntro => '์ž๋™์œผ๋กœ ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ'; @override String get autoSkipIntroDescription => '๋ช‡ ์ดˆ ํ›„ ์˜คํ”„๋‹์„ ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ'; @@ -373,7 +371,7 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get downloadLocationChanged => '๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'; @override String get downloadLocationReset => '๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ • ๋˜์—ˆ์Šต๋‹ˆ๋‹ค'; @override String get downloadLocationInvalid => '์„ ํƒํ•œ ํด๋”์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค'; - @override String get downloadLocationSelectError => 'ํด๋” ์„ ํƒ ์‹คํŒจ'; + @override String get downloadLocationPickerUnavailable => '์ด ๊ธฐ๊ธฐ์—์„œ๋Š” ํด๋”๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค'; @override String get downloadOnWifiOnly => 'WiFi ์—ฐ๊ฒฐ ์‹œ์—๋งŒ ๋‹ค์šด๋กœ๋“œ'; @override String get downloadOnWifiOnlyDescription => '์…€๋ฃฐ๋Ÿฌ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์‹œ ๋‹ค์šด๋กœ๋“œ ๋ถˆ๊ฐ€'; @override String get autoRemoveWatchedDownloads => '์‹œ์ฒญํ•œ ๋‹ค์šด๋กœ๋“œ ์ž๋™ ์‚ญ์ œ'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityKo extends TranslationsAccessibilityEn { @override String get hexColor => '16์ง„์ˆ˜ ์ƒ‰์ƒ'; @override String get expandText => 'ํ…์ŠคํŠธ ํŽผ์น˜๊ธฐ'; @override String get collapseText => 'ํ…์ŠคํŠธ ์ ‘๊ธฐ'; + @override String get alphabetNavigation => '์•ŒํŒŒ๋ฒณ ํƒ์ƒ‰'; + @override String get alphabetScrollHint => '์œ„์•„๋ž˜๋กœ ์Šค์™€์ดํ”„ํ•˜์—ฌ ๊ธ€์ž๋ณ„๋กœ ์ด๋™'; + @override String rowColumnPosition({required Object rowCount, required Object row, required Object columnCount, required Object column}) => '${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰, ${columnCount}์—ด ์ค‘ ${column}์—ด'; + @override String rowPosition({required Object rowCount, required Object row}) => '${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsKo extends TranslationsTooltipsEn { @override String get markAsUnwatched => '์‹œ์ฒญ ์•ˆ ํ•จ์œผ๋กœ ํ‘œ์‹œ'; } +// Path: audioTracks +class _TranslationsAudioTracksKo extends TranslationsAudioTracksEn { + _TranslationsAudioTracksKo._(TranslationsKo root) : this._root = root, super.internal(root); + + final TranslationsKo _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => '์˜ค๋””์˜ค ํŠธ๋ž™ ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsKo extends TranslationsVideoControlsEn { _TranslationsVideoControlsKo._(TranslationsKo root) : this._root = root, super.internal(root); @@ -711,11 +723,11 @@ class _TranslationsMessagesKo extends TranslationsMessagesEn { @override String get streamInterrupted => '์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.'; @override String get liveStreamInterrupted => '๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆŒ๋Ÿฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.'; @override String get fileInfoNotAvailable => 'ํŒŒ์ผ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'ํŒŒ์ผ ์ •๋ณด ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜: ${error}'; @override String get errorLoadingSeries => '์‹œ๋ฆฌ์ฆˆ ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜'; @override String get musicNotSupported => '์Œ์•… ์žฌ์ƒ ๋ฏธ์ง€์›'; @@ -866,6 +878,7 @@ class _TranslationsProfilesKo extends TranslationsProfilesEn { @override String get borrowExplain => '๋‹ค๋ฅธ ํ”„๋กœํ•„์˜ ์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฝ๋‹ˆ๋‹ค. PIN์œผ๋กœ ๋ณดํ˜ธ๋œ ํ”„๋กœํ•„์—๋Š” PIN์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'; @override String get borrowEmpty => '์•„์ง ๋นŒ๋ฆด ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.'; @override String get borrowEmptySubtitle => '๋จผ์ € ๋‹ค๋ฅธ ํ”„๋กœํ•„์— Plex ๋˜๋Š” Jellyfin์„ ์—ฐ๊ฒฐํ•˜์„ธ์š”.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => '${displayName}์—์„œ'; @override String get borrowConnectionBorrowed => '์—ฐ๊ฒฐ์„ ๋นŒ๋ ธ์Šต๋‹ˆ๋‹ค.'; @override String get borrowFailed => '์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.'; @@ -1148,7 +1161,7 @@ class _TranslationsLiveTvKo extends TranslationsLiveTvEn { @override String get favorites => '์ฆ๊ฒจ์ฐพ๊ธฐ'; @override String get reorderFavorites => '์ฆ๊ฒจ์ฐพ๊ธฐ ์ˆœ์„œ ๋ณ€๊ฒฝ'; @override String get favoritesLoadFailed => '์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => '์ง„ํ–‰ ์ค‘์ธ ์„ธ์…˜ ์ฐธ์—ฌ'; @override String watchFromStart({required Object minutes}) => '์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ฒญ (${minutes}๋ถ„ ์ „ ์‹œ์ž‘)'; @override String get watchLive => '์‹ค์‹œ๊ฐ„ ์‹œ์ฒญ'; @@ -2146,7 +2159,7 @@ extension on TranslationsKo { 'auth.quickConnectWaiting' => '์Šน์ธ ๋Œ€๊ธฐ ์ค‘โ€ฆ', 'auth.quickConnectCancel' => '์ทจ์†Œ', 'auth.quickConnectExpired' => 'Quick Connect๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => '์ทจ์†Œ', 'common.save' => '์ €์žฅ', 'common.close' => '๋‹ซ๊ธฐ', @@ -2230,8 +2243,6 @@ extension on TranslationsKo { 'settings.libraryDensity' => '๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ‘œ์‹œ ๋ฐ€๋„', 'settings.compact' => '์ข๊ฒŒ', 'settings.comfortable' => '๋„“๊ฒŒ', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => '๋ณด๊ธฐ ๋ชจ๋“œ', 'settings.gridView' => '๊ทธ๋ฆฌ๋“œ ๋ณด๊ธฐ', 'settings.listView' => '๋ชฉ๋ก ๋ณด๊ธฐ', @@ -2301,7 +2312,7 @@ extension on TranslationsKo { 'settings.watchTogetherRelay' => 'ํ•จ๊ป˜ ๋ณด๊ธฐ ๋ฆด๋ ˆ์ด', 'settings.watchTogetherRelayDescription' => '์‚ฌ์šฉ์ž ์ง€์ • ๋ฆด๋ ˆ์ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ™์€ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.', 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => '์ถฉ๋Œ ๋ณด๊ณ ', 'settings.crashReportingDescription' => '์•ฑ ๊ฐœ์„ ์„ ์œ„ํ•ด ์ถฉ๋Œ ๋ณด๊ณ ์„œ ์ „์†ก', 'settings.debugLogging' => '๋””๋ฒ„๊ทธ ๋กœ๊น…', @@ -2318,12 +2329,10 @@ extension on TranslationsKo { 'settings.exportSettings' => '์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ', 'settings.exportSettingsDescription' => '๊ธฐ๋ณธ ์„ค์ •์„ ํŒŒ์ผ๋กœ ์ €์žฅ', 'settings.exportSettingsSuccess' => '์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ์™„๋ฃŒ', - 'settings.exportSettingsFailed' => '์„ค์ •์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค', 'settings.importSettings' => '์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ', 'settings.importSettingsDescription' => 'ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ ์„ค์ • ๋ณต์›', 'settings.importSettingsConfirm' => 'ํ˜„์žฌ ์„ค์ •์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?', 'settings.importSettingsSuccess' => '์„ค์ • ๊ฐ€์ ธ์˜ค๊ธฐ ์™„๋ฃŒ', - 'settings.importSettingsFailed' => '์„ค์ •์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค', 'settings.importSettingsInvalidFile' => '์œ ํšจํ•œ Plezy ์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค', 'settings.importSettingsNoUser' => '์„ค์ •์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— ๋กœ๊ทธ์ธํ•˜์„ธ์š”', 'settings.shortcutsReset' => '๋‹จ์ถ•ํ‚ค๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค', @@ -2338,6 +2347,7 @@ extension on TranslationsKo { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => '๊ธฐ๊ฐ„์€ ${min}๊ณผ ${max} ${unit} ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => '๋‹จ์ถ•ํ‚ค๊ฐ€ ์ด๋ฏธ ${action}์— ํ• ๋‹น ๋˜์—ˆ์Šต๋‹ˆ๋‹ค', 'settings.shortcutUpdated' => ({required Object action}) => '๋‹จ์ถ•ํ‚ค๊ฐ€ ${action}์— ๋Œ€ํ•ด ์—…๋ฐ์ดํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => '์ž๋™ ๊ฑด๋„ˆ๋›ฐ๊ธฐ', 'settings.autoSkipIntro' => '์ž๋™์œผ๋กœ ์˜คํ”„๋‹ ๊ฑด๋„ˆ๋›ฐ๊ธฐ', 'settings.autoSkipIntroDescription' => '๋ช‡ ์ดˆ ํ›„ ์˜คํ”„๋‹์„ ์ž๋™์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ', @@ -2363,7 +2373,7 @@ extension on TranslationsKo { 'settings.downloadLocationChanged' => '๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค', 'settings.downloadLocationReset' => '๋‹ค์šด๋กœ๋“œ ์œ„์น˜๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์žฌ์„ค์ • ๋˜์—ˆ์Šต๋‹ˆ๋‹ค', 'settings.downloadLocationInvalid' => '์„ ํƒํ•œ ํด๋”์— ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค', - 'settings.downloadLocationSelectError' => 'ํด๋” ์„ ํƒ ์‹คํŒจ', + 'settings.downloadLocationPickerUnavailable' => '์ด ๊ธฐ๊ธฐ์—์„œ๋Š” ํด๋”๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค', 'settings.downloadOnWifiOnly' => 'WiFi ์—ฐ๊ฒฐ ์‹œ์—๋งŒ ๋‹ค์šด๋กœ๋“œ', 'settings.downloadOnWifiOnlyDescription' => '์…€๋ฃฐ๋Ÿฌ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ์‹œ ๋‹ค์šด๋กœ๋“œ ๋ถˆ๊ฐ€', 'settings.autoRemoveWatchedDownloads' => '์‹œ์ฒญํ•œ ๋‹ค์šด๋กœ๋“œ ์ž๋™ ์‚ญ์ œ', @@ -2551,10 +2561,15 @@ extension on TranslationsKo { 'accessibility.hexColor' => '16์ง„์ˆ˜ ์ƒ‰์ƒ', 'accessibility.expandText' => 'ํ…์ŠคํŠธ ํŽผ์น˜๊ธฐ', 'accessibility.collapseText' => 'ํ…์ŠคํŠธ ์ ‘๊ธฐ', + 'accessibility.alphabetNavigation' => '์•ŒํŒŒ๋ฒณ ํƒ์ƒ‰', + 'accessibility.alphabetScrollHint' => '์œ„์•„๋ž˜๋กœ ์Šค์™€์ดํ”„ํ•˜์—ฌ ๊ธ€์ž๋ณ„๋กœ ์ด๋™', + 'accessibility.rowColumnPosition' => ({required Object rowCount, required Object row, required Object columnCount, required Object column}) => '${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰, ${columnCount}์—ด ์ค‘ ${column}์—ด', + 'accessibility.rowPosition' => ({required Object rowCount, required Object row}) => '${rowCount}ํ–‰ ์ค‘ ${row}ํ–‰', 'tooltips.shufflePlay' => '๋ฌด์ž‘์œ„ ์žฌ์ƒ', 'tooltips.playTrailer' => '์˜ˆ๊ณ ํŽธ ์žฌ์ƒ', 'tooltips.markAsWatched' => '์‹œ์ฒญ ์™„๋ฃŒ๋กœ ํ‘œ์‹œ', 'tooltips.markAsUnwatched' => '์‹œ์ฒญ ์•ˆ ํ•จ์œผ๋กœ ํ‘œ์‹œ', + 'audioTracks.track' => ({required Object n}) => '์˜ค๋””์˜ค ํŠธ๋ž™ ${n}', 'videoControls.audioLabel' => '์˜ค๋””์˜ค', 'videoControls.subtitlesLabel' => '์ž๋ง‰', 'videoControls.resetToZero' => '0ms๋กœ ์žฌ์„ค์ •', @@ -2641,20 +2656,20 @@ extension on TranslationsKo { 'messages.markedAsUnwatched' => '์‹œ์ฒญ ์•ˆ ํ•จ์œผ๋กœ ํ‘œ์‹œ๋จ', 'messages.markedAsWatchedOffline' => '์‹œ์ฒญ ์™„๋ฃŒ๋กœ ํ‘œ์‹œ๋จ (์—ฐ๊ฒฐ ์‹œ ๋™๊ธฐํ™”๋จ)', 'messages.markedAsUnwatchedOffline' => '๋ฏธ์‹œ์ฒญ์œผ๋กœ ํ‘œ์‹œ๋จ (์—ฐ๊ฒฐ ์‹œ ๋™๊ธฐํ™”๋จ)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => '์ž๋™ ์‚ญ์ œ๋จ: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '์‹œ์ฒญํ•œ ๋‹ค์šด๋กœ๋“œ ${n}๊ฐœ๋ฅผ ์ž๋™ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => '์ž๋™ ์‚ญ์ œ๋จ: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ko'))(n, other: '์‹œ์ฒญํ•œ ๋‹ค์šด๋กœ๋“œ ${n}๊ฐœ๋ฅผ ์ž๋™ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค', ), 'messages.removedFromContinueWatching' => '๊ณ„์† ์‹œ์ฒญ ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐ๋จ', 'messages.errorLoading' => ({required Object error}) => '์˜ค๋ฅ˜: ${error}', 'messages.streamInterrupted' => '์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํƒ์ƒ‰ํ•˜์—ฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.', 'messages.liveStreamInterrupted' => '๋ผ์ด๋ธŒ ์ŠคํŠธ๋ฆผ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ์ƒ์„ ๋ˆŒ๋Ÿฌ ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.', 'messages.fileInfoNotAvailable' => 'ํŒŒ์ผ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ํŒŒ์ผ ์ •๋ณด ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜: ${error}', 'messages.errorLoadingSeries' => '์‹œ๋ฆฌ์ฆˆ ๋กœ๋”ฉ ์ค‘ ์˜ค๋ฅ˜', 'messages.musicNotSupported' => '์Œ์•… ์žฌ์ƒ ๋ฏธ์ง€์›', @@ -2769,6 +2784,7 @@ extension on TranslationsKo { 'profiles.borrowExplain' => '๋‹ค๋ฅธ ํ”„๋กœํ•„์˜ ์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฝ๋‹ˆ๋‹ค. PIN์œผ๋กœ ๋ณดํ˜ธ๋œ ํ”„๋กœํ•„์—๋Š” PIN์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.', 'profiles.borrowEmpty' => '์•„์ง ๋นŒ๋ฆด ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.', 'profiles.borrowEmptySubtitle' => '๋จผ์ € ๋‹ค๋ฅธ ํ”„๋กœํ•„์— Plex ๋˜๋Š” Jellyfin์„ ์—ฐ๊ฒฐํ•˜์„ธ์š”.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => '${displayName}์—์„œ', 'profiles.borrowConnectionBorrowed' => '์—ฐ๊ฒฐ์„ ๋นŒ๋ ธ์Šต๋‹ˆ๋‹ค.', 'profiles.borrowFailed' => '์—ฐ๊ฒฐ์„ ๋นŒ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.', @@ -2994,7 +3010,7 @@ extension on TranslationsKo { 'liveTv.favorites' => '์ฆ๊ฒจ์ฐพ๊ธฐ', 'liveTv.reorderFavorites' => '์ฆ๊ฒจ์ฐพ๊ธฐ ์ˆœ์„œ ๋ณ€๊ฒฝ', 'liveTv.favoritesLoadFailed' => '์ฆ๊ฒจ์ฐพ๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ์‹œ๋„ํ•˜์„ธ์š”.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => '์ง„ํ–‰ ์ค‘์ธ ์„ธ์…˜ ์ฐธ์—ฌ', 'liveTv.watchFromStart' => ({required Object minutes}) => '์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ฒญ (${minutes}๋ถ„ ์ „ ์‹œ์ž‘)', 'liveTv.watchLive' => '์‹ค์‹œ๊ฐ„ ์‹œ์ฒญ', @@ -3154,11 +3170,11 @@ extension on TranslationsKo { 'watchTogether.participantLeft' => ({required Object name}) => '${name}๋‹˜์ด ๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค', 'watchTogether.participantPaused' => ({required Object name}) => '${name}๋‹˜์ด ์ผ์‹œ์ •์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค', 'watchTogether.participantResumed' => ({required Object name}) => '${name}๋‹˜์ด ์žฌ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name}๋‹˜์ด ํƒ์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค', 'watchTogether.participantBuffering' => ({required Object name}) => '${name}๋‹˜์ด ๋ฒ„ํผ๋ง ์ค‘์ž…๋‹ˆ๋‹ค', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name}๋‹˜์ด ์ด์ „ ๋ฒ„์ „์˜ ์•ฑ์„ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค โ€” ๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => '${name}๋‹˜ ์—†์ด ์žฌ์ƒ์„ ์žฌ๊ฐœํ•ฉ๋‹ˆ๋‹ค', 'watchTogether.waitingForParticipants' => '๋‹ค๋ฅธ ์ฐธ๊ฐ€์ž์˜ ๋กœ๋”ฉ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘...', 'watchTogether.waitingForName' => ({required Object name}) => '${name}๋‹˜์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘...', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index 2681dce78..6dec8ec66 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -52,6 +52,7 @@ class TranslationsNb extends Translations with BaseTranslations 'Venter pรฅ godkjenningโ€ฆ'; @override String get quickConnectCancel => 'Avbryt'; @override String get quickConnectExpired => 'Quick Connect er utlรธpt. Prรธv igjen.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get libraryDensity => 'Bibliotekets tetthet'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Komfortabel'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Visningsmodus'; @override String get gridView => 'Rutenett'; @override String get listView => 'Liste'; @@ -311,7 +310,7 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Se Sammen-relay'; @override String get watchTogetherRelayDescription => 'Angi en egendefinert relay. Alle mรฅ bruke samme server.'; @override String get watchTogetherRelayHint => 'https://min-relay.eksempel.no'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Krasjrapportering'; @override String get crashReportingDescription => 'Send krasjrapporter for รฅ hjelpe med รฅ forbedre appen'; @override String get debugLogging => 'Feilsรธkingslogging'; @@ -328,12 +327,10 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get exportSettings => 'Eksporter innstillinger'; @override String get exportSettingsDescription => 'Lagre innstillingene i en fil'; @override String get exportSettingsSuccess => 'Innstillinger eksportert'; - @override String get exportSettingsFailed => 'Kunne ikke eksportere innstillinger'; @override String get importSettings => 'Importer innstillinger'; @override String get importSettingsDescription => 'Gjenopprett innstillinger fra en fil'; @override String get importSettingsConfirm => 'Dette vil erstatte nรฅvรฆrende innstillinger. Fortsette?'; @override String get importSettingsSuccess => 'Innstillinger importert'; - @override String get importSettingsFailed => 'Kunne ikke importere innstillinger'; @override String get importSettingsInvalidFile => 'Denne filen er ikke en gyldig Plezy-innstillingseksport'; @override String get importSettingsNoUser => 'Logg inn fรธr import av innstillinger'; @override String get shortcutsReset => 'Snarveier tilbakestilt til standard'; @@ -348,6 +345,7 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Varigheten mรฅ vรฆre mellom ${min} og ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Snarvei allerede tilordnet til ${action}'; @override String shortcutUpdated({required Object action}) => 'Snarvei oppdatert for ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Automatisk hopp'; @override String get autoSkipIntro => 'Hopp over intro automatisk'; @override String get autoSkipIntroDescription => 'Hopp automatisk over intromarkรธrer etter noen sekunder'; @@ -373,7 +371,7 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Nedlastingsplassering endret'; @override String get downloadLocationReset => 'Nedlastingsplassering tilbakestilt til standard'; @override String get downloadLocationInvalid => 'Valgt mappe er ikke skrivbar'; - @override String get downloadLocationSelectError => 'Kunne ikke velge mappe'; + @override String get downloadLocationPickerUnavailable => 'Mappevalg er ikke tilgjengelig pรฅ denne enheten'; @override String get downloadOnWifiOnly => 'Last ned kun pรฅ WiFi'; @override String get downloadOnWifiOnlyDescription => 'Forhindre nedlastinger pรฅ mobildata'; @override String get autoRemoveWatchedDownloads => 'Fjern sette nedlastinger automatisk'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityNb extends TranslationsAccessibilityEn { @override String get hexColor => 'Heksadesimal farge'; @override String get expandText => 'Utvid tekst'; @override String get collapseText => 'Fold sammen tekst'; + @override String get alphabetNavigation => 'Alfabetisk navigasjon'; + @override String get alphabetScrollHint => 'Sveip opp eller ned for รฅ flytte รฉn bokstav'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rad ${row} av ${rowCount}, kolonne ${column} av ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Rad ${row} av ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsNb extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Merk som usett'; } +// Path: audioTracks +class _TranslationsAudioTracksNb extends TranslationsAudioTracksEn { + _TranslationsAudioTracksNb._(TranslationsNb root) : this._root = root, super.internal(root); + + final TranslationsNb _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Lydspor ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsNb extends TranslationsVideoControlsEn { _TranslationsVideoControlsNb._(TranslationsNb root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesNb extends TranslationsMessagesEn { @override String get streamInterrupted => 'Avspillingen ble avbrutt. Trykk pรฅ Spill av eller spol for รฅ prรธve pรฅ nytt.'; @override String get liveStreamInterrupted => 'Direktesendingen ble avbrutt. Trykk pรฅ Spill av for รฅ prรธve pรฅ nytt.'; @override String get fileInfoNotAvailable => 'Filinformasjon ikke tilgjengelig'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Feil ved lasting av filinformasjon: ${error}'; @override String get errorLoadingSeries => 'Feil ved lasting av serie'; @override String get musicNotSupported => 'Musikkavspilling stรธttes ikke ennรฅ'; @@ -867,6 +879,7 @@ class _TranslationsProfilesNb extends TranslationsProfilesEn { @override String get borrowExplain => 'Lรฅn en annen profils tilkobling. PIN-beskyttede profiler krever PIN.'; @override String get borrowEmpty => 'Ingenting รฅ lรฅne enda.'; @override String get borrowEmptySubtitle => 'Koble Plex eller Jellyfin til en annen profil fรธrst.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Fra ${displayName}'; @override String get borrowConnectionBorrowed => 'Tilkobling lรฅnt.'; @override String get borrowFailed => 'Kunne ikke lรฅne tilkoblingen.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvNb extends TranslationsLiveTvEn { @override String get favorites => 'Favoritter'; @override String get reorderFavorites => 'Endre rekkefรธlge pรฅ favoritter'; @override String get favoritesLoadFailed => 'Kunne ikke laste inn favoritter. Kontroller tilkoblingen og prรธv pรฅ nytt.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Bli med i pรฅgรฅende รธkt'; @override String watchFromStart({required Object minutes}) => 'Se fra starten (${minutes} min siden)'; @override String get watchLive => 'Se direkte'; @@ -2149,7 +2162,7 @@ extension on TranslationsNb { 'auth.quickConnectWaiting' => 'Venter pรฅ godkjenningโ€ฆ', 'auth.quickConnectCancel' => 'Avbryt', 'auth.quickConnectExpired' => 'Quick Connect er utlรธpt. Prรธv igjen.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Avbryt', 'common.save' => 'Lagre', 'common.close' => 'Lukk', @@ -2233,8 +2246,6 @@ extension on TranslationsNb { 'settings.libraryDensity' => 'Bibliotekets tetthet', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Komfortabel', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Visningsmodus', 'settings.gridView' => 'Rutenett', 'settings.listView' => 'Liste', @@ -2304,7 +2315,7 @@ extension on TranslationsNb { 'settings.watchTogetherRelay' => 'Se Sammen-relay', 'settings.watchTogetherRelayDescription' => 'Angi en egendefinert relay. Alle mรฅ bruke samme server.', 'settings.watchTogetherRelayHint' => 'https://min-relay.eksempel.no', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Krasjrapportering', 'settings.crashReportingDescription' => 'Send krasjrapporter for รฅ hjelpe med รฅ forbedre appen', 'settings.debugLogging' => 'Feilsรธkingslogging', @@ -2321,12 +2332,10 @@ extension on TranslationsNb { 'settings.exportSettings' => 'Eksporter innstillinger', 'settings.exportSettingsDescription' => 'Lagre innstillingene i en fil', 'settings.exportSettingsSuccess' => 'Innstillinger eksportert', - 'settings.exportSettingsFailed' => 'Kunne ikke eksportere innstillinger', 'settings.importSettings' => 'Importer innstillinger', 'settings.importSettingsDescription' => 'Gjenopprett innstillinger fra en fil', 'settings.importSettingsConfirm' => 'Dette vil erstatte nรฅvรฆrende innstillinger. Fortsette?', 'settings.importSettingsSuccess' => 'Innstillinger importert', - 'settings.importSettingsFailed' => 'Kunne ikke importere innstillinger', 'settings.importSettingsInvalidFile' => 'Denne filen er ikke en gyldig Plezy-innstillingseksport', 'settings.importSettingsNoUser' => 'Logg inn fรธr import av innstillinger', 'settings.shortcutsReset' => 'Snarveier tilbakestilt til standard', @@ -2341,6 +2350,7 @@ extension on TranslationsNb { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Varigheten mรฅ vรฆre mellom ${min} og ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Snarvei allerede tilordnet til ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Snarvei oppdatert for ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Automatisk hopp', 'settings.autoSkipIntro' => 'Hopp over intro automatisk', 'settings.autoSkipIntroDescription' => 'Hopp automatisk over intromarkรธrer etter noen sekunder', @@ -2366,7 +2376,7 @@ extension on TranslationsNb { 'settings.downloadLocationChanged' => 'Nedlastingsplassering endret', 'settings.downloadLocationReset' => 'Nedlastingsplassering tilbakestilt til standard', 'settings.downloadLocationInvalid' => 'Valgt mappe er ikke skrivbar', - 'settings.downloadLocationSelectError' => 'Kunne ikke velge mappe', + 'settings.downloadLocationPickerUnavailable' => 'Mappevalg er ikke tilgjengelig pรฅ denne enheten', 'settings.downloadOnWifiOnly' => 'Last ned kun pรฅ WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Forhindre nedlastinger pรฅ mobildata', 'settings.autoRemoveWatchedDownloads' => 'Fjern sette nedlastinger automatisk', @@ -2554,10 +2564,15 @@ extension on TranslationsNb { 'accessibility.hexColor' => 'Heksadesimal farge', 'accessibility.expandText' => 'Utvid tekst', 'accessibility.collapseText' => 'Fold sammen tekst', + 'accessibility.alphabetNavigation' => 'Alfabetisk navigasjon', + 'accessibility.alphabetScrollHint' => 'Sveip opp eller ned for รฅ flytte รฉn bokstav', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rad ${row} av ${rowCount}, kolonne ${column} av ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Rad ${row} av ${rowCount}', 'tooltips.shufflePlay' => 'Tilfeldig avspilling', 'tooltips.playTrailer' => 'Spill trailer', 'tooltips.markAsWatched' => 'Merk som sett', 'tooltips.markAsUnwatched' => 'Merk som usett', + 'audioTracks.track' => ({required Object n}) => 'Lydspor ${n}', 'videoControls.audioLabel' => 'Lyd', 'videoControls.subtitlesLabel' => 'Undertekster', 'videoControls.resetToZero' => 'Tilbakestill til 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsNb { 'messages.markedAsUnwatched' => 'Merket som usett', 'messages.markedAsWatchedOffline' => 'Merket som sett (synkroniseres nรฅr tilkoblet)', 'messages.markedAsUnwatchedOffline' => 'Merket som usett (synkroniseres nรฅr tilkoblet)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisk fjernet: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Fjernet automatisk ${n} sett nedlasting', other: 'Fjernet automatisk ${n} sette nedlastinger', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisk fjernet: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nb'))(n, one: 'Fjernet automatisk ${n} sett nedlasting', other: 'Fjernet automatisk ${n} sette nedlastinger', ), 'messages.removedFromContinueWatching' => 'Fjernet fra Fortsett รฅ se', 'messages.errorLoading' => ({required Object error}) => 'Feil: ${error}', 'messages.streamInterrupted' => 'Avspillingen ble avbrutt. Trykk pรฅ Spill av eller spol for รฅ prรธve pรฅ nytt.', 'messages.liveStreamInterrupted' => 'Direktesendingen ble avbrutt. Trykk pรฅ Spill av for รฅ prรธve pรฅ nytt.', 'messages.fileInfoNotAvailable' => 'Filinformasjon ikke tilgjengelig', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Feil ved lasting av filinformasjon: ${error}', 'messages.errorLoadingSeries' => 'Feil ved lasting av serie', 'messages.musicNotSupported' => 'Musikkavspilling stรธttes ikke ennรฅ', @@ -2772,6 +2787,7 @@ extension on TranslationsNb { 'profiles.borrowExplain' => 'Lรฅn en annen profils tilkobling. PIN-beskyttede profiler krever PIN.', 'profiles.borrowEmpty' => 'Ingenting รฅ lรฅne enda.', 'profiles.borrowEmptySubtitle' => 'Koble Plex eller Jellyfin til en annen profil fรธrst.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Fra ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Tilkobling lรฅnt.', 'profiles.borrowFailed' => 'Kunne ikke lรฅne tilkoblingen.', @@ -2997,7 +3013,7 @@ extension on TranslationsNb { 'liveTv.favorites' => 'Favoritter', 'liveTv.reorderFavorites' => 'Endre rekkefรธlge pรฅ favoritter', 'liveTv.favoritesLoadFailed' => 'Kunne ikke laste inn favoritter. Kontroller tilkoblingen og prรธv pรฅ nytt.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Bli med i pรฅgรฅende รธkt', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Se fra starten (${minutes} min siden)', 'liveTv.watchLive' => 'Se direkte', @@ -3157,11 +3173,11 @@ extension on TranslationsNb { 'watchTogether.participantLeft' => ({required Object name}) => '${name} forlot', 'watchTogether.participantPaused' => ({required Object name}) => '${name} pauset', 'watchTogether.participantResumed' => ({required Object name}) => '${name} gjenopptok', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spolet', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buffrer', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} bruker en eldre appversjon โ€” synkronisering er ikke tilgjengelig', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Fortsetter uten ${name}', 'watchTogether.waitingForParticipants' => 'Venter pรฅ at andre laster inn...', 'watchTogether.waitingForName' => ({required Object name}) => 'Venter pรฅ ${name}...', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 694031eb9..001288fd0 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -52,6 +52,7 @@ class TranslationsNl extends Translations with BaseTranslations 'Wachten op goedkeuringโ€ฆ'; @override String get quickConnectCancel => 'Annuleren'; @override String get quickConnectExpired => 'Quick Connect is verlopen. Probeer opnieuw.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get libraryDensity => 'Bibliotheek dichtheid'; @override String get compact => 'Compact'; @override String get comfortable => 'Comfortabel'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Weergavemodus'; @override String get gridView => 'Raster'; @override String get listView => 'Lijst'; @@ -311,7 +310,7 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Samen Kijken Relay'; @override String get watchTogetherRelayDescription => 'Stel een aangepaste relay in. Iedereen moet dezelfde server gebruiken.'; @override String get watchTogetherRelayHint => 'https://mijn-relay.voorbeeld.nl'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Crashrapportage'; @override String get crashReportingDescription => 'Crashrapporten verzenden om de app te verbeteren'; @override String get debugLogging => 'Debug logging'; @@ -328,12 +327,10 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get exportSettings => 'Instellingen exporteren'; @override String get exportSettingsDescription => 'Sla je voorkeuren op in een bestand'; @override String get exportSettingsSuccess => 'Instellingen geรซxporteerd'; - @override String get exportSettingsFailed => 'Kon instellingen niet exporteren'; @override String get importSettings => 'Instellingen importeren'; @override String get importSettingsDescription => 'Voorkeuren herstellen vanuit een bestand'; @override String get importSettingsConfirm => 'Hiermee worden je huidige instellingen vervangen. Doorgaan?'; @override String get importSettingsSuccess => 'Instellingen geรฏmporteerd'; - @override String get importSettingsFailed => 'Kon instellingen niet importeren'; @override String get importSettingsInvalidFile => 'Dit bestand is geen geldige Plezy-export'; @override String get importSettingsNoUser => 'Meld je aan voordat je instellingen importeert'; @override String get shortcutsReset => 'Sneltoetsen gereset naar standaard'; @@ -348,6 +345,7 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; @override String shortcutAlreadyAssigned({required Object action}) => 'Sneltoets al toegewezen aan ${action}'; @override String shortcutUpdated({required Object action}) => 'Sneltoets bijgewerkt voor ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Automatisch Overslaan'; @override String get autoSkipIntro => 'Intro Automatisch Overslaan'; @override String get autoSkipIntroDescription => 'Intro-markeringen na enkele seconden automatisch overslaan'; @@ -373,7 +371,7 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Downloadlocatie gewijzigd'; @override String get downloadLocationReset => 'Downloadlocatie hersteld naar standaard'; @override String get downloadLocationInvalid => 'Geselecteerde map is niet beschrijfbaar'; - @override String get downloadLocationSelectError => 'Kan map niet selecteren'; + @override String get downloadLocationPickerUnavailable => 'Mapselectie is niet beschikbaar op dit apparaat'; @override String get downloadOnWifiOnly => 'Alleen via WiFi downloaden'; @override String get downloadOnWifiOnlyDescription => 'Voorkom downloads bij gebruik van mobiele data'; @override String get autoRemoveWatchedDownloads => 'Bekeken downloads automatisch verwijderen'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityNl extends TranslationsAccessibilityEn { @override String get hexColor => 'Hexkleur'; @override String get expandText => 'Tekst uitvouwen'; @override String get collapseText => 'Tekst samenvouwen'; + @override String get alphabetNavigation => 'Alfabetische navigatie'; + @override String get alphabetScrollHint => 'Veeg omhoog of omlaag om per letter te bewegen'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rij ${row} van ${rowCount}, kolom ${column} van ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Rij ${row} van ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsNl extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Markeer als ongekeken'; } +// Path: audioTracks +class _TranslationsAudioTracksNl extends TranslationsAudioTracksEn { + _TranslationsAudioTracksNl._(TranslationsNl root) : this._root = root, super.internal(root); + + final TranslationsNl _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Audiospoor ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsNl extends TranslationsVideoControlsEn { _TranslationsVideoControlsNl._(TranslationsNl root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesNl extends TranslationsMessagesEn { @override String get streamInterrupted => 'De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.'; @override String get liveStreamInterrupted => 'De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.'; @override String get fileInfoNotAvailable => 'Bestand informatie niet beschikbaar'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Fout bij laden bestand info: ${error}'; @override String get errorLoadingSeries => 'Fout bij laden serie'; @override String get musicNotSupported => 'Muziek afspelen wordt nog niet ondersteund'; @@ -867,6 +879,7 @@ class _TranslationsProfilesNl extends TranslationsProfilesEn { @override String get borrowExplain => 'Leen de verbinding van een ander profiel. PIN-beveiligde profielen vereisen een PIN.'; @override String get borrowEmpty => 'Nog niets te lenen.'; @override String get borrowEmptySubtitle => 'Verbind Plex of Jellyfin eerst met een ander profiel.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Van ${displayName}'; @override String get borrowConnectionBorrowed => 'Verbinding geleend.'; @override String get borrowFailed => 'Kan verbinding niet lenen.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvNl extends TranslationsLiveTvEn { @override String get favorites => 'Favorieten'; @override String get reorderFavorites => 'Favorieten herordenen'; @override String get favoritesLoadFailed => 'Favorieten konden niet worden geladen. Controleer je verbinding en probeer het opnieuw.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Deelnemen aan lopende sessie'; @override String watchFromStart({required Object minutes}) => 'Kijk vanaf het begin (${minutes} min geleden)'; @override String get watchLive => 'Live kijken'; @@ -2149,7 +2162,7 @@ extension on TranslationsNl { 'auth.quickConnectWaiting' => 'Wachten op goedkeuringโ€ฆ', 'auth.quickConnectCancel' => 'Annuleren', 'auth.quickConnectExpired' => 'Quick Connect is verlopen. Probeer opnieuw.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Annuleren', 'common.save' => 'Opslaan', 'common.close' => 'Sluiten', @@ -2233,8 +2246,6 @@ extension on TranslationsNl { 'settings.libraryDensity' => 'Bibliotheek dichtheid', 'settings.compact' => 'Compact', 'settings.comfortable' => 'Comfortabel', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Weergavemodus', 'settings.gridView' => 'Raster', 'settings.listView' => 'Lijst', @@ -2304,7 +2315,7 @@ extension on TranslationsNl { 'settings.watchTogetherRelay' => 'Samen Kijken Relay', 'settings.watchTogetherRelayDescription' => 'Stel een aangepaste relay in. Iedereen moet dezelfde server gebruiken.', 'settings.watchTogetherRelayHint' => 'https://mijn-relay.voorbeeld.nl', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Crashrapportage', 'settings.crashReportingDescription' => 'Crashrapporten verzenden om de app te verbeteren', 'settings.debugLogging' => 'Debug logging', @@ -2321,12 +2332,10 @@ extension on TranslationsNl { 'settings.exportSettings' => 'Instellingen exporteren', 'settings.exportSettingsDescription' => 'Sla je voorkeuren op in een bestand', 'settings.exportSettingsSuccess' => 'Instellingen geรซxporteerd', - 'settings.exportSettingsFailed' => 'Kon instellingen niet exporteren', 'settings.importSettings' => 'Instellingen importeren', 'settings.importSettingsDescription' => 'Voorkeuren herstellen vanuit een bestand', 'settings.importSettingsConfirm' => 'Hiermee worden je huidige instellingen vervangen. Doorgaan?', 'settings.importSettingsSuccess' => 'Instellingen geรฏmporteerd', - 'settings.importSettingsFailed' => 'Kon instellingen niet importeren', 'settings.importSettingsInvalidFile' => 'Dit bestand is geen geldige Plezy-export', 'settings.importSettingsNoUser' => 'Meld je aan voordat je instellingen importeert', 'settings.shortcutsReset' => 'Sneltoetsen gereset naar standaard', @@ -2341,6 +2350,7 @@ extension on TranslationsNl { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Sneltoets al toegewezen aan ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Sneltoets bijgewerkt voor ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Automatisch Overslaan', 'settings.autoSkipIntro' => 'Intro Automatisch Overslaan', 'settings.autoSkipIntroDescription' => 'Intro-markeringen na enkele seconden automatisch overslaan', @@ -2366,7 +2376,7 @@ extension on TranslationsNl { 'settings.downloadLocationChanged' => 'Downloadlocatie gewijzigd', 'settings.downloadLocationReset' => 'Downloadlocatie hersteld naar standaard', 'settings.downloadLocationInvalid' => 'Geselecteerde map is niet beschrijfbaar', - 'settings.downloadLocationSelectError' => 'Kan map niet selecteren', + 'settings.downloadLocationPickerUnavailable' => 'Mapselectie is niet beschikbaar op dit apparaat', 'settings.downloadOnWifiOnly' => 'Alleen via WiFi downloaden', 'settings.downloadOnWifiOnlyDescription' => 'Voorkom downloads bij gebruik van mobiele data', 'settings.autoRemoveWatchedDownloads' => 'Bekeken downloads automatisch verwijderen', @@ -2554,10 +2564,15 @@ extension on TranslationsNl { 'accessibility.hexColor' => 'Hexkleur', 'accessibility.expandText' => 'Tekst uitvouwen', 'accessibility.collapseText' => 'Tekst samenvouwen', + 'accessibility.alphabetNavigation' => 'Alfabetische navigatie', + 'accessibility.alphabetScrollHint' => 'Veeg omhoog of omlaag om per letter te bewegen', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rij ${row} van ${rowCount}, kolom ${column} van ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Rij ${row} van ${rowCount}', 'tooltips.shufflePlay' => 'Willekeurig afspelen', 'tooltips.playTrailer' => 'Trailer afspelen', 'tooltips.markAsWatched' => 'Markeer als gekeken', 'tooltips.markAsUnwatched' => 'Markeer als ongekeken', + 'audioTracks.track' => ({required Object n}) => 'Audiospoor ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Ondertitels', 'videoControls.resetToZero' => 'Reset naar 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsNl { 'messages.markedAsUnwatched' => 'Gemarkeerd als ongekeken', 'messages.markedAsWatchedOffline' => 'Gemarkeerd als gekeken (sync wanneer online)', 'messages.markedAsUnwatchedOffline' => 'Gemarkeerd als ongekeken (sync wanneer online)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisch verwijderd: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Automatisch ${n} bekeken download verwijderd', other: 'Automatisch ${n} bekeken downloads verwijderd', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatisch verwijderd: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('nl'))(n, one: 'Automatisch ${n} bekeken download verwijderd', other: 'Automatisch ${n} bekeken downloads verwijderd', ), 'messages.removedFromContinueWatching' => 'Verwijderd uit Doorgaan met kijken', 'messages.errorLoading' => ({required Object error}) => 'Fout: ${error}', 'messages.streamInterrupted' => 'De stream is onderbroken. Druk op afspelen of spoel om het opnieuw te proberen.', 'messages.liveStreamInterrupted' => 'De livestream is onderbroken. Druk op afspelen om het opnieuw te proberen.', 'messages.fileInfoNotAvailable' => 'Bestand informatie niet beschikbaar', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fout bij laden bestand info: ${error}', 'messages.errorLoadingSeries' => 'Fout bij laden serie', 'messages.musicNotSupported' => 'Muziek afspelen wordt nog niet ondersteund', @@ -2772,6 +2787,7 @@ extension on TranslationsNl { 'profiles.borrowExplain' => 'Leen de verbinding van een ander profiel. PIN-beveiligde profielen vereisen een PIN.', 'profiles.borrowEmpty' => 'Nog niets te lenen.', 'profiles.borrowEmptySubtitle' => 'Verbind Plex of Jellyfin eerst met een ander profiel.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Van ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Verbinding geleend.', 'profiles.borrowFailed' => 'Kan verbinding niet lenen.', @@ -2997,7 +3013,7 @@ extension on TranslationsNl { 'liveTv.favorites' => 'Favorieten', 'liveTv.reorderFavorites' => 'Favorieten herordenen', 'liveTv.favoritesLoadFailed' => 'Favorieten konden niet worden geladen. Controleer je verbinding en probeer het opnieuw.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Deelnemen aan lopende sessie', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Kijk vanaf het begin (${minutes} min geleden)', 'liveTv.watchLive' => 'Live kijken', @@ -3157,11 +3173,11 @@ extension on TranslationsNl { 'watchTogether.participantLeft' => ({required Object name}) => '${name} heeft de sessie verlaten', 'watchTogether.participantPaused' => ({required Object name}) => '${name} heeft gepauzeerd', 'watchTogether.participantResumed' => ({required Object name}) => '${name} heeft hervat', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} heeft gespoeld', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} is aan het bufferen', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} gebruikt een oudere appversie โ€” synchronisatie niet beschikbaar', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Hervatten zonder ${name}', 'watchTogether.waitingForParticipants' => 'Wachten tot anderen geladen zijn...', 'watchTogether.waitingForName' => ({required Object name}) => 'Wachten op ${name}...', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 5a69c6c31..f05e2267b 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -52,6 +52,7 @@ class TranslationsPl extends Translations with BaseTranslations 'Oczekiwanie na zatwierdzenieโ€ฆ'; @override String get quickConnectCancel => 'Anuluj'; @override String get quickConnectExpired => 'Quick Connect wygasล‚. Sprรณbuj ponownie.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get libraryDensity => 'Gฤ™stoล›ฤ‡ biblioteki'; @override String get compact => 'Kompaktowy'; @override String get comfortable => 'Wygodny'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Tryb widoku'; @override String get gridView => 'Siatka'; @override String get listView => 'Lista'; @@ -311,7 +310,7 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relay Oglฤ…daj Razem'; @override String get watchTogetherRelayDescription => 'Ustaw wล‚asny relay. Wszyscy muszฤ… uลผywaฤ‡ tego samego serwera.'; @override String get watchTogetherRelayHint => 'https://moj-relay.przyklad.pl'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Raportowanie bล‚ฤ™dรณw'; @override String get crashReportingDescription => 'Wysyล‚aj raporty o bล‚ฤ™dach, aby pomรณc ulepszyฤ‡ aplikacjฤ™'; @override String get debugLogging => 'Logowanie debugowania'; @@ -328,12 +327,10 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get exportSettings => 'Eksportuj ustawienia'; @override String get exportSettingsDescription => 'Zapisz swoje preferencje do pliku'; @override String get exportSettingsSuccess => 'Ustawienia wyeksportowane'; - @override String get exportSettingsFailed => 'Nie moลผna wyeksportowaฤ‡ ustawieล„'; @override String get importSettings => 'Importuj ustawienia'; @override String get importSettingsDescription => 'Przywrรณฤ‡ preferencje z pliku'; @override String get importSettingsConfirm => 'Bieลผฤ…ce ustawienia zostanฤ… zastฤ…pione. Kontynuowaฤ‡?'; @override String get importSettingsSuccess => 'Ustawienia zaimportowane'; - @override String get importSettingsFailed => 'Nie moลผna zaimportowaฤ‡ ustawieล„'; @override String get importSettingsInvalidFile => 'Ten plik nie jest prawidล‚owym eksportem Plezy'; @override String get importSettingsNoUser => 'Zaloguj siฤ™ przed importem ustawieล„'; @override String get shortcutsReset => 'Skrรณty przywrรณcone do domyล›lnych'; @@ -348,6 +345,7 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Czas musi byฤ‡ miฤ™dzy ${min} a ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Skrรณt jest juลผ przypisany do ${action}'; @override String shortcutUpdated({required Object action}) => 'Skrรณt zaktualizowany dla ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Automatyczne pomijanie'; @override String get autoSkipIntro => 'Automatyczne pomijanie intro'; @override String get autoSkipIntroDescription => 'Automatycznie pomijaj znaczniki intro po kilku sekundach'; @@ -373,7 +371,7 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Lokalizacja pobierania zmieniona'; @override String get downloadLocationReset => 'Lokalizacja pobierania przywrรณcona do domyล›lnej'; @override String get downloadLocationInvalid => 'Wybrany folder nie jest zapisywalny'; - @override String get downloadLocationSelectError => 'Nie udaล‚o siฤ™ wybraฤ‡ folderu'; + @override String get downloadLocationPickerUnavailable => 'Wybรณr folderu nie jest dostฤ™pny na tym urzฤ…dzeniu'; @override String get downloadOnWifiOnly => 'Pobieraj tylko przez WiFi'; @override String get downloadOnWifiOnlyDescription => 'Blokuj pobieranie na danych komรณrkowych'; @override String get autoRemoveWatchedDownloads => 'Automatycznie usuwaj obejrzane pobrania'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityPl extends TranslationsAccessibilityEn { @override String get hexColor => 'Kolor szesnastkowy'; @override String get expandText => 'Rozwiล„ tekst'; @override String get collapseText => 'Zwiล„ tekst'; + @override String get alphabetNavigation => 'Nawigacja alfabetyczna'; + @override String get alphabetScrollHint => 'Przesuล„ w gรณrฤ™ lub w dรณล‚, aby przejล›ฤ‡ o literฤ™'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Wiersz ${row} z ${rowCount}, kolumna ${column} z ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Wiersz ${row} z ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsPl extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Oznacz jako nieobejrzane'; } +// Path: audioTracks +class _TranslationsAudioTracksPl extends TranslationsAudioTracksEn { + _TranslationsAudioTracksPl._(TranslationsPl root) : this._root = root, super.internal(root); + + final TranslationsPl _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'ลšcieลผka audio ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsPl extends TranslationsVideoControlsEn { _TranslationsVideoControlsPl._(TranslationsPl root) : this._root = root, super.internal(root); @@ -714,11 +726,11 @@ class _TranslationsMessagesPl extends TranslationsMessagesEn { @override String get streamInterrupted => 'Strumieล„ zostaล‚ przerwany. Naciล›nij odtwarzanie lub przewiล„, aby sprรณbowaฤ‡ ponownie.'; @override String get liveStreamInterrupted => 'Transmisja na ลผywo zostaล‚a przerwana. Naciล›nij odtwarzanie, aby sprรณbowaฤ‡ ponownie.'; @override String get fileInfoNotAvailable => 'Informacje o pliku niedostฤ™pne'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Bล‚ฤ…d ล‚adowania informacji o pliku: ${error}'; @override String get errorLoadingSeries => 'Bล‚ฤ…d ล‚adowania serialu'; @override String get musicNotSupported => 'Odtwarzanie muzyki nie jest jeszcze obsล‚ugiwane'; @@ -869,6 +881,7 @@ class _TranslationsProfilesPl extends TranslationsProfilesEn { @override String get borrowExplain => 'Poลผycz poล‚ฤ…czenie z innego profilu. Profile chronione PIN wymagajฤ… PIN-u.'; @override String get borrowEmpty => 'Nic do poลผyczenia.'; @override String get borrowEmptySubtitle => 'Najpierw poล‚ฤ…cz Plex lub Jellyfin z innym profilem.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Od ${displayName}'; @override String get borrowConnectionBorrowed => 'Poล‚ฤ…czenie poลผyczone.'; @override String get borrowFailed => 'Nie udaล‚o siฤ™ poลผyczyฤ‡ poล‚ฤ…czenia.'; @@ -1154,7 +1167,7 @@ class _TranslationsLiveTvPl extends TranslationsLiveTvEn { @override String get favorites => 'Ulubione'; @override String get reorderFavorites => 'Zmieล„ kolejnoล›ฤ‡ ulubionych'; @override String get favoritesLoadFailed => 'Nie udaล‚o siฤ™ wczytaฤ‡ ulubionych. Sprawdลบ poล‚ฤ…czenie i sprรณbuj ponownie.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Doล‚ฤ…cz do trwajฤ…cej sesji'; @override String watchFromStart({required Object minutes}) => 'Oglฤ…daj od poczฤ…tku (${minutes} min temu)'; @override String get watchLive => 'Oglฤ…daj na ลผywo'; @@ -2155,7 +2168,7 @@ extension on TranslationsPl { 'auth.quickConnectWaiting' => 'Oczekiwanie na zatwierdzenieโ€ฆ', 'auth.quickConnectCancel' => 'Anuluj', 'auth.quickConnectExpired' => 'Quick Connect wygasล‚. Sprรณbuj ponownie.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Anuluj', 'common.save' => 'Zapisz', 'common.close' => 'Zamknij', @@ -2239,8 +2252,6 @@ extension on TranslationsPl { 'settings.libraryDensity' => 'Gฤ™stoล›ฤ‡ biblioteki', 'settings.compact' => 'Kompaktowy', 'settings.comfortable' => 'Wygodny', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Tryb widoku', 'settings.gridView' => 'Siatka', 'settings.listView' => 'Lista', @@ -2310,7 +2321,7 @@ extension on TranslationsPl { 'settings.watchTogetherRelay' => 'Relay Oglฤ…daj Razem', 'settings.watchTogetherRelayDescription' => 'Ustaw wล‚asny relay. Wszyscy muszฤ… uลผywaฤ‡ tego samego serwera.', 'settings.watchTogetherRelayHint' => 'https://moj-relay.przyklad.pl', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Raportowanie bล‚ฤ™dรณw', 'settings.crashReportingDescription' => 'Wysyล‚aj raporty o bล‚ฤ™dach, aby pomรณc ulepszyฤ‡ aplikacjฤ™', 'settings.debugLogging' => 'Logowanie debugowania', @@ -2327,12 +2338,10 @@ extension on TranslationsPl { 'settings.exportSettings' => 'Eksportuj ustawienia', 'settings.exportSettingsDescription' => 'Zapisz swoje preferencje do pliku', 'settings.exportSettingsSuccess' => 'Ustawienia wyeksportowane', - 'settings.exportSettingsFailed' => 'Nie moลผna wyeksportowaฤ‡ ustawieล„', 'settings.importSettings' => 'Importuj ustawienia', 'settings.importSettingsDescription' => 'Przywrรณฤ‡ preferencje z pliku', 'settings.importSettingsConfirm' => 'Bieลผฤ…ce ustawienia zostanฤ… zastฤ…pione. Kontynuowaฤ‡?', 'settings.importSettingsSuccess' => 'Ustawienia zaimportowane', - 'settings.importSettingsFailed' => 'Nie moลผna zaimportowaฤ‡ ustawieล„', 'settings.importSettingsInvalidFile' => 'Ten plik nie jest prawidล‚owym eksportem Plezy', 'settings.importSettingsNoUser' => 'Zaloguj siฤ™ przed importem ustawieล„', 'settings.shortcutsReset' => 'Skrรณty przywrรณcone do domyล›lnych', @@ -2347,6 +2356,7 @@ extension on TranslationsPl { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Czas musi byฤ‡ miฤ™dzy ${min} a ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Skrรณt jest juลผ przypisany do ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Skrรณt zaktualizowany dla ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Automatyczne pomijanie', 'settings.autoSkipIntro' => 'Automatyczne pomijanie intro', 'settings.autoSkipIntroDescription' => 'Automatycznie pomijaj znaczniki intro po kilku sekundach', @@ -2372,7 +2382,7 @@ extension on TranslationsPl { 'settings.downloadLocationChanged' => 'Lokalizacja pobierania zmieniona', 'settings.downloadLocationReset' => 'Lokalizacja pobierania przywrรณcona do domyล›lnej', 'settings.downloadLocationInvalid' => 'Wybrany folder nie jest zapisywalny', - 'settings.downloadLocationSelectError' => 'Nie udaล‚o siฤ™ wybraฤ‡ folderu', + 'settings.downloadLocationPickerUnavailable' => 'Wybรณr folderu nie jest dostฤ™pny na tym urzฤ…dzeniu', 'settings.downloadOnWifiOnly' => 'Pobieraj tylko przez WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Blokuj pobieranie na danych komรณrkowych', 'settings.autoRemoveWatchedDownloads' => 'Automatycznie usuwaj obejrzane pobrania', @@ -2560,10 +2570,15 @@ extension on TranslationsPl { 'accessibility.hexColor' => 'Kolor szesnastkowy', 'accessibility.expandText' => 'Rozwiล„ tekst', 'accessibility.collapseText' => 'Zwiล„ tekst', + 'accessibility.alphabetNavigation' => 'Nawigacja alfabetyczna', + 'accessibility.alphabetScrollHint' => 'Przesuล„ w gรณrฤ™ lub w dรณล‚, aby przejล›ฤ‡ o literฤ™', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Wiersz ${row} z ${rowCount}, kolumna ${column} z ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Wiersz ${row} z ${rowCount}', 'tooltips.shufflePlay' => 'Odtwarzanie losowe', 'tooltips.playTrailer' => 'Odtwรณrz zwiastun', 'tooltips.markAsWatched' => 'Oznacz jako obejrzane', 'tooltips.markAsUnwatched' => 'Oznacz jako nieobejrzane', + 'audioTracks.track' => ({required Object n}) => 'ลšcieลผka audio ${n}', 'videoControls.audioLabel' => 'Audio', 'videoControls.subtitlesLabel' => 'Napisy', 'videoControls.resetToZero' => 'Zresetuj do 0ms', @@ -2650,20 +2665,20 @@ extension on TranslationsPl { 'messages.markedAsUnwatched' => 'Oznaczono jako nieobejrzane', 'messages.markedAsWatchedOffline' => 'Oznaczono jako obejrzane (zsynchronizuje siฤ™ po poล‚ฤ…czeniu)', 'messages.markedAsUnwatchedOffline' => 'Oznaczono jako nieobejrzane (zsynchronizuje siฤ™ po poล‚ฤ…czeniu)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatycznie usuniฤ™to: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Automatycznie usuniฤ™to ${n} obejrzane pobranie', few: 'Automatycznie usuniฤ™to ${n} obejrzane pobrania', many: 'Automatycznie usuniฤ™to ${n} obejrzanych pobraล„', other: 'Automatycznie usuniฤ™to ${n} obejrzanego pobrania', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatycznie usuniฤ™to: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pl'))(n, one: 'Automatycznie usuniฤ™to ${n} obejrzane pobranie', few: 'Automatycznie usuniฤ™to ${n} obejrzane pobrania', many: 'Automatycznie usuniฤ™to ${n} obejrzanych pobraล„', other: 'Automatycznie usuniฤ™to ${n} obejrzanego pobrania', ), 'messages.removedFromContinueWatching' => 'Usuniฤ™to z kontynuowania oglฤ…dania', 'messages.errorLoading' => ({required Object error}) => 'Bล‚ฤ…d: ${error}', 'messages.streamInterrupted' => 'Strumieล„ zostaล‚ przerwany. Naciล›nij odtwarzanie lub przewiล„, aby sprรณbowaฤ‡ ponownie.', 'messages.liveStreamInterrupted' => 'Transmisja na ลผywo zostaล‚a przerwana. Naciล›nij odtwarzanie, aby sprรณbowaฤ‡ ponownie.', 'messages.fileInfoNotAvailable' => 'Informacje o pliku niedostฤ™pne', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Bล‚ฤ…d ล‚adowania informacji o pliku: ${error}', 'messages.errorLoadingSeries' => 'Bล‚ฤ…d ล‚adowania serialu', 'messages.musicNotSupported' => 'Odtwarzanie muzyki nie jest jeszcze obsล‚ugiwane', @@ -2778,6 +2793,7 @@ extension on TranslationsPl { 'profiles.borrowExplain' => 'Poลผycz poล‚ฤ…czenie z innego profilu. Profile chronione PIN wymagajฤ… PIN-u.', 'profiles.borrowEmpty' => 'Nic do poลผyczenia.', 'profiles.borrowEmptySubtitle' => 'Najpierw poล‚ฤ…cz Plex lub Jellyfin z innym profilem.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Od ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Poล‚ฤ…czenie poลผyczone.', 'profiles.borrowFailed' => 'Nie udaล‚o siฤ™ poลผyczyฤ‡ poล‚ฤ…czenia.', @@ -3003,7 +3019,7 @@ extension on TranslationsPl { 'liveTv.favorites' => 'Ulubione', 'liveTv.reorderFavorites' => 'Zmieล„ kolejnoล›ฤ‡ ulubionych', 'liveTv.favoritesLoadFailed' => 'Nie udaล‚o siฤ™ wczytaฤ‡ ulubionych. Sprawdลบ poล‚ฤ…czenie i sprรณbuj ponownie.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Doล‚ฤ…cz do trwajฤ…cej sesji', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Oglฤ…daj od poczฤ…tku (${minutes} min temu)', 'liveTv.watchLive' => 'Oglฤ…daj na ลผywo', @@ -3163,11 +3179,11 @@ extension on TranslationsPl { 'watchTogether.participantLeft' => ({required Object name}) => '${name} opuล›ciล‚', 'watchTogether.participantPaused' => ({required Object name}) => '${name} wstrzymaล‚', 'watchTogether.participantResumed' => ({required Object name}) => '${name} wznowiล‚', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} przewinฤ…ล‚', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buforuje', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} uลผywa starszej wersji aplikacji โ€” synchronizacja jest niedostฤ™pna', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Wznawianie bez ${name}', 'watchTogether.waitingForParticipants' => 'Oczekiwanie na zaล‚adowanie u innych...', 'watchTogether.waitingForName' => ({required Object name}) => 'Oczekiwanie na ${name}...', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 9c6c030da..27e968ba3 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -52,6 +52,7 @@ class TranslationsPt extends Translations with BaseTranslations 'A aguardar aprovaรงรฃoโ€ฆ'; @override String get quickConnectCancel => 'Cancelar'; @override String get quickConnectExpired => 'Quick Connect expirou. Tente novamente.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get libraryDensity => 'Densidade da Biblioteca'; @override String get compact => 'Compacto'; @override String get comfortable => 'Confortรกvel'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Modo de Visualizaรงรฃo'; @override String get gridView => 'Grade'; @override String get listView => 'Lista'; @@ -311,7 +310,7 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relay do Assistir Juntos'; @override String get watchTogetherRelayDescription => 'Defina um relay personalizado. Todos devem usar o mesmo servidor.'; @override String get watchTogetherRelayHint => 'https://meu-relay.exemplo.com.br'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Relatรณrio de Erros'; @override String get crashReportingDescription => 'Enviar relatรณrios de erros para ajudar a melhorar o app'; @override String get debugLogging => 'Log de Depuraรงรฃo'; @@ -328,12 +327,10 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get exportSettings => 'Exportar Configuraรงรตes'; @override String get exportSettingsDescription => 'Salve suas preferรชncias em um arquivo'; @override String get exportSettingsSuccess => 'Configuraรงรตes exportadas'; - @override String get exportSettingsFailed => 'Nรฃo foi possรญvel exportar as configuraรงรตes'; @override String get importSettings => 'Importar Configuraรงรตes'; @override String get importSettingsDescription => 'Restaurar preferรชncias a partir de um arquivo'; @override String get importSettingsConfirm => 'Isso substituirรก suas configuraรงรตes atuais. Continuar?'; @override String get importSettingsSuccess => 'Configuraรงรตes importadas'; - @override String get importSettingsFailed => 'Nรฃo foi possรญvel importar as configuraรงรตes'; @override String get importSettingsInvalidFile => 'Este arquivo nรฃo รฉ uma exportaรงรฃo vรกlida do Plezy'; @override String get importSettingsNoUser => 'Entre na conta antes de importar as configuraรงรตes'; @override String get shortcutsReset => 'Atalhos redefinidos para o padrรฃo'; @@ -348,6 +345,7 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'A duraรงรฃo deve ser entre ${min} e ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Atalho jรก atribuรญdo a ${action}'; @override String shortcutUpdated({required Object action}) => 'Atalho atualizado para ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Pular Automaticamente'; @override String get autoSkipIntro => 'Pular Intro Automaticamente'; @override String get autoSkipIntroDescription => 'Pular marcadores de intro automaticamente apรณs alguns segundos'; @@ -373,7 +371,7 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Local de download alterado'; @override String get downloadLocationReset => 'Local de download redefinido para padrรฃo'; @override String get downloadLocationInvalid => 'A pasta selecionada nรฃo permite gravaรงรฃo'; - @override String get downloadLocationSelectError => 'Falha ao selecionar pasta'; + @override String get downloadLocationPickerUnavailable => 'A seleรงรฃo de pasta nรฃo estรก disponรญvel neste dispositivo'; @override String get downloadOnWifiOnly => 'Baixar apenas no WiFi'; @override String get downloadOnWifiOnlyDescription => 'Impedir downloads quando em dados mรณveis'; @override String get autoRemoveWatchedDownloads => 'Remover downloads assistidos automaticamente'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityPt extends TranslationsAccessibilityEn { @override String get hexColor => 'Cor hexadecimal'; @override String get expandText => 'Expandir texto'; @override String get collapseText => 'Recolher texto'; + @override String get alphabetNavigation => 'Navegaรงรฃo alfabรฉtica'; + @override String get alphabetScrollHint => 'Deslize para cima ou para baixo para avanรงar por letra'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Linha ${row} de ${rowCount}, coluna ${column} de ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Linha ${row} de ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsPt extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Marcar como nรฃo assistido'; } +// Path: audioTracks +class _TranslationsAudioTracksPt extends TranslationsAudioTracksEn { + _TranslationsAudioTracksPt._(TranslationsPt root) : this._root = root, super.internal(root); + + final TranslationsPt _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Faixa de รกudio ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsPt extends TranslationsVideoControlsEn { _TranslationsVideoControlsPt._(TranslationsPt root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesPt extends TranslationsMessagesEn { @override String get streamInterrupted => 'A transmissรฃo foi interrompida. Toque em reproduzir ou avance para tentar novamente.'; @override String get liveStreamInterrupted => 'A transmissรฃo ao vivo foi interrompida. Toque em reproduzir para tentar novamente.'; @override String get fileInfoNotAvailable => 'Informaรงรตes do arquivo nรฃo disponรญveis'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Erro ao carregar info do arquivo: ${error}'; @override String get errorLoadingSeries => 'Erro ao carregar sรฉrie'; @override String get musicNotSupported => 'Reproduรงรฃo de mรบsica ainda nรฃo รฉ suportada'; @@ -867,6 +879,7 @@ class _TranslationsProfilesPt extends TranslationsProfilesEn { @override String get borrowExplain => 'Use a conexรฃo de outro perfil. Perfis protegidos por PIN exigem PIN.'; @override String get borrowEmpty => 'Nada para emprestar ainda.'; @override String get borrowEmptySubtitle => 'Conecte Plex ou Jellyfin a outro perfil primeiro.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'De ${displayName}'; @override String get borrowConnectionBorrowed => 'Conexรฃo tomada emprestada.'; @override String get borrowFailed => 'Nรฃo foi possรญvel tomar a conexรฃo emprestada.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvPt extends TranslationsLiveTvEn { @override String get favorites => 'Favoritos'; @override String get reorderFavorites => 'Reordenar favoritos'; @override String get favoritesLoadFailed => 'Nรฃo foi possรญvel carregar os favoritos. Verifique sua conexรฃo e tente novamente.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Entrar na sessรฃo em andamento'; @override String watchFromStart({required Object minutes}) => 'Assistir do inรญcio (${minutes} min atrรกs)'; @override String get watchLive => 'Assistir ao vivo'; @@ -2149,7 +2162,7 @@ extension on TranslationsPt { 'auth.quickConnectWaiting' => 'A aguardar aprovaรงรฃoโ€ฆ', 'auth.quickConnectCancel' => 'Cancelar', 'auth.quickConnectExpired' => 'Quick Connect expirou. Tente novamente.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Cancelar', 'common.save' => 'Salvar', 'common.close' => 'Fechar', @@ -2233,8 +2246,6 @@ extension on TranslationsPt { 'settings.libraryDensity' => 'Densidade da Biblioteca', 'settings.compact' => 'Compacto', 'settings.comfortable' => 'Confortรกvel', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Modo de Visualizaรงรฃo', 'settings.gridView' => 'Grade', 'settings.listView' => 'Lista', @@ -2304,7 +2315,7 @@ extension on TranslationsPt { 'settings.watchTogetherRelay' => 'Relay do Assistir Juntos', 'settings.watchTogetherRelayDescription' => 'Defina um relay personalizado. Todos devem usar o mesmo servidor.', 'settings.watchTogetherRelayHint' => 'https://meu-relay.exemplo.com.br', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Relatรณrio de Erros', 'settings.crashReportingDescription' => 'Enviar relatรณrios de erros para ajudar a melhorar o app', 'settings.debugLogging' => 'Log de Depuraรงรฃo', @@ -2321,12 +2332,10 @@ extension on TranslationsPt { 'settings.exportSettings' => 'Exportar Configuraรงรตes', 'settings.exportSettingsDescription' => 'Salve suas preferรชncias em um arquivo', 'settings.exportSettingsSuccess' => 'Configuraรงรตes exportadas', - 'settings.exportSettingsFailed' => 'Nรฃo foi possรญvel exportar as configuraรงรตes', 'settings.importSettings' => 'Importar Configuraรงรตes', 'settings.importSettingsDescription' => 'Restaurar preferรชncias a partir de um arquivo', 'settings.importSettingsConfirm' => 'Isso substituirรก suas configuraรงรตes atuais. Continuar?', 'settings.importSettingsSuccess' => 'Configuraรงรตes importadas', - 'settings.importSettingsFailed' => 'Nรฃo foi possรญvel importar as configuraรงรตes', 'settings.importSettingsInvalidFile' => 'Este arquivo nรฃo รฉ uma exportaรงรฃo vรกlida do Plezy', 'settings.importSettingsNoUser' => 'Entre na conta antes de importar as configuraรงรตes', 'settings.shortcutsReset' => 'Atalhos redefinidos para o padrรฃo', @@ -2341,6 +2350,7 @@ extension on TranslationsPt { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'A duraรงรฃo deve ser entre ${min} e ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Atalho jรก atribuรญdo a ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Atalho atualizado para ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Pular Automaticamente', 'settings.autoSkipIntro' => 'Pular Intro Automaticamente', 'settings.autoSkipIntroDescription' => 'Pular marcadores de intro automaticamente apรณs alguns segundos', @@ -2366,7 +2376,7 @@ extension on TranslationsPt { 'settings.downloadLocationChanged' => 'Local de download alterado', 'settings.downloadLocationReset' => 'Local de download redefinido para padrรฃo', 'settings.downloadLocationInvalid' => 'A pasta selecionada nรฃo permite gravaรงรฃo', - 'settings.downloadLocationSelectError' => 'Falha ao selecionar pasta', + 'settings.downloadLocationPickerUnavailable' => 'A seleรงรฃo de pasta nรฃo estรก disponรญvel neste dispositivo', 'settings.downloadOnWifiOnly' => 'Baixar apenas no WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Impedir downloads quando em dados mรณveis', 'settings.autoRemoveWatchedDownloads' => 'Remover downloads assistidos automaticamente', @@ -2554,10 +2564,15 @@ extension on TranslationsPt { 'accessibility.hexColor' => 'Cor hexadecimal', 'accessibility.expandText' => 'Expandir texto', 'accessibility.collapseText' => 'Recolher texto', + 'accessibility.alphabetNavigation' => 'Navegaรงรฃo alfabรฉtica', + 'accessibility.alphabetScrollHint' => 'Deslize para cima ou para baixo para avanรงar por letra', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Linha ${row} de ${rowCount}, coluna ${column} de ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Linha ${row} de ${rowCount}', 'tooltips.shufflePlay' => 'Reproduรงรฃo aleatรณria', 'tooltips.playTrailer' => 'Reproduzir trailer', 'tooltips.markAsWatched' => 'Marcar como assistido', 'tooltips.markAsUnwatched' => 'Marcar como nรฃo assistido', + 'audioTracks.track' => ({required Object n}) => 'Faixa de รกudio ${n}', 'videoControls.audioLabel' => 'รudio', 'videoControls.subtitlesLabel' => 'Legendas', 'videoControls.resetToZero' => 'Redefinir para 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsPt { 'messages.markedAsUnwatched' => 'Marcado como nรฃo assistido', 'messages.markedAsWatchedOffline' => 'Marcado como assistido (serรก sincronizado quando online)', 'messages.markedAsUnwatchedOffline' => 'Marcado como nรฃo assistido (serรก sincronizado quando online)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Removido automaticamente: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Removido automaticamente ${n} download assistido', other: 'Removidos automaticamente ${n} downloads assistidos', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Removido automaticamente: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('pt'))(n, one: 'Removido automaticamente ${n} download assistido', other: 'Removidos automaticamente ${n} downloads assistidos', ), 'messages.removedFromContinueWatching' => 'Removido de Continuar Assistindo', 'messages.errorLoading' => ({required Object error}) => 'Erro: ${error}', 'messages.streamInterrupted' => 'A transmissรฃo foi interrompida. Toque em reproduzir ou avance para tentar novamente.', 'messages.liveStreamInterrupted' => 'A transmissรฃo ao vivo foi interrompida. Toque em reproduzir para tentar novamente.', 'messages.fileInfoNotAvailable' => 'Informaรงรตes do arquivo nรฃo disponรญveis', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Erro ao carregar info do arquivo: ${error}', 'messages.errorLoadingSeries' => 'Erro ao carregar sรฉrie', 'messages.musicNotSupported' => 'Reproduรงรฃo de mรบsica ainda nรฃo รฉ suportada', @@ -2772,6 +2787,7 @@ extension on TranslationsPt { 'profiles.borrowExplain' => 'Use a conexรฃo de outro perfil. Perfis protegidos por PIN exigem PIN.', 'profiles.borrowEmpty' => 'Nada para emprestar ainda.', 'profiles.borrowEmptySubtitle' => 'Conecte Plex ou Jellyfin a outro perfil primeiro.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'De ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Conexรฃo tomada emprestada.', 'profiles.borrowFailed' => 'Nรฃo foi possรญvel tomar a conexรฃo emprestada.', @@ -2997,7 +3013,7 @@ extension on TranslationsPt { 'liveTv.favorites' => 'Favoritos', 'liveTv.reorderFavorites' => 'Reordenar favoritos', 'liveTv.favoritesLoadFailed' => 'Nรฃo foi possรญvel carregar os favoritos. Verifique sua conexรฃo e tente novamente.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Entrar na sessรฃo em andamento', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Assistir do inรญcio (${minutes} min atrรกs)', 'liveTv.watchLive' => 'Assistir ao vivo', @@ -3157,11 +3173,11 @@ extension on TranslationsPt { 'watchTogether.participantLeft' => ({required Object name}) => '${name} saiu', 'watchTogether.participantPaused' => ({required Object name}) => '${name} pausou', 'watchTogether.participantResumed' => ({required Object name}) => '${name} retomou', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} avanรงou', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} estรก carregando', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} estรก em uma versรฃo mais antiga do aplicativo โ€” sincronizaรงรฃo indisponรญvel', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'Retomando sem ${name}', 'watchTogether.waitingForParticipants' => 'Aguardando outros carregarem...', 'watchTogether.waitingForName' => ({required Object name}) => 'Aguardando ${name}...', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index b783415bb..3a2cb6419 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -52,6 +52,7 @@ class TranslationsRu extends Translations with BaseTranslations 'ะžะถะธะดะฐะฝะธะต ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธัโ€ฆ'; @override String get quickConnectCancel => 'ะžั‚ะผะตะฝะฐ'; @override String get quickConnectExpired => 'ะกั€ะพะบ Quick Connect ะธัั‚ะตะบ. ะŸะพะฟั€ะพะฑัƒะนั‚ะต ัะฝะพะฒะฐ.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get libraryDensity => 'ะŸะปะพั‚ะฝะพัั‚ัŒ ะฑะธะฑะปะธะพั‚ะตะบะธ'; @override String get compact => 'ะšะพะผะฟะฐะบั‚ะฝั‹ะน'; @override String get comfortable => 'ะšะพะผั„ะพั€ั‚ะฝั‹ะน'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'ะ ะตะถะธะผ ะฟั€ะพัะผะพั‚ั€ะฐ'; @override String get gridView => 'ะกะตั‚ะบะฐ'; @override String get listView => 'ะกะฟะธัะพะบ'; @@ -311,7 +310,7 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Relay ัะพะฒะผะตัั‚ะฝะพะณะพ ะฟั€ะพัะผะพั‚ั€ะฐ'; @override String get watchTogetherRelayDescription => 'ะ—ะฐะดะฐะนั‚ะต ัะฒะพะน relay. ะ’ัะต ะดะพะปะถะฝั‹ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะพะดะธะฝ ัะตั€ะฒะตั€.'; @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'ะžั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั…'; @override String get crashReportingDescription => 'ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ะพั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั… ะดะปั ัƒะปัƒั‡ัˆะตะฝะธั ะฟั€ะธะปะพะถะตะฝะธั'; @override String get debugLogging => 'ะ–ัƒั€ะฝะฐะป ะพั‚ะปะฐะดะบะธ'; @@ -328,12 +327,10 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get exportSettings => 'ะญะบัะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ'; @override String get exportSettingsDescription => 'ะกะพั…ั€ะฐะฝะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะฒ ั„ะฐะนะป'; @override String get exportSettingsSuccess => 'ะะฐัั‚ั€ะพะนะบะธ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹'; - @override String get exportSettingsFailed => 'ะะต ัƒะดะฐะปะพััŒ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ'; @override String get importSettings => 'ะ˜ะผะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ'; @override String get importSettingsDescription => 'ะ’ะพััั‚ะฐะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะธะท ั„ะฐะนะปะฐ'; @override String get importSettingsConfirm => 'ะญั‚ะพ ะทะฐะผะตะฝะธั‚ ะฒะฐัˆะธ ั‚ะตะบัƒั‰ะธะต ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดะพะปะถะธั‚ัŒ?'; @override String get importSettingsSuccess => 'ะะฐัั‚ั€ะพะนะบะธ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹'; - @override String get importSettingsFailed => 'ะะต ัƒะดะฐะปะพััŒ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ'; @override String get importSettingsInvalidFile => 'ะญั‚ะพั‚ ั„ะฐะนะป ะฝะต ัะฒะปัะตั‚ัั ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝั‹ะผ ัะบัะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ Plezy'; @override String get importSettingsNoUser => 'ะ’ะพะนะดะธั‚ะต ะฒ ัะธัั‚ะตะผัƒ ะฟะตั€ะตะด ะธะผะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ'; @override String get shortcutsReset => 'ะ“ะพั€ัั‡ะธะต ะบะปะฐะฒะธัˆะธ ัะฑั€ะพัˆะตะฝั‹ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ'; @@ -348,6 +345,7 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'ะ”ะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ะดะพะปะถะฝะฐ ะฑั‹ั‚ัŒ ะพั‚ ${min} ะดะพ ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'ะšะปะฐะฒะธัˆะฐ ัƒะถะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะดะปั ${action}'; @override String shortcutUpdated({required Object action}) => 'ะšะปะฐะฒะธัˆะฐ ะพะฑะฝะพะฒะปะตะฝะฐ ะดะปั ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'ะะฒั‚ะพะฟั€ะพะฟัƒัะบ'; @override String get autoSkipIntro => 'ะะฒั‚ะพะฟั€ะพะฟัƒัะบ ะฒัั‚ัƒะฟะปะตะฝะธั'; @override String get autoSkipIntroDescription => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟั€ะพะฟัƒัะบะฐั‚ัŒ ะผะฐั€ะบะตั€ั‹ ะฒัั‚ัƒะฟะปะตะฝะธั ั‡ะตั€ะตะท ะฝะตัะบะพะปัŒะบะพ ัะตะบัƒะฝะด'; @@ -373,7 +371,7 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ะธะทะผะตะฝะตะฝะพ'; @override String get downloadLocationReset => 'ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ัะฑั€ะพัˆะตะฝะพ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ'; @override String get downloadLocationInvalid => 'ะ’ั‹ะฑั€ะฐะฝะฝะฐั ะฟะฐะฟะบะฐ ะฝะตะดะพัั‚ัƒะฟะฝะฐ ะดะปั ะทะฐะฟะธัะธ'; - @override String get downloadLocationSelectError => 'ะะต ัƒะดะฐะปะพััŒ ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะฐะฟะบัƒ'; + @override String get downloadLocationPickerUnavailable => 'ะ’ั‹ะฑะพั€ ะฟะฐะฟะบะธ ะฝะตะดะพัั‚ัƒะฟะตะฝ ะฝะฐ ัั‚ะพะผ ัƒัั‚ั€ะพะนัั‚ะฒะต'; @override String get downloadOnWifiOnly => 'ะ—ะฐะณั€ัƒะถะฐั‚ัŒ ั‚ะพะปัŒะบะพ ะฟะพ WiFi'; @override String get downloadOnWifiOnlyDescription => 'ะ—ะฐะฟั€ะตั‚ะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ ะฟะพ ะผะพะฑะธะปัŒะฝั‹ะผ ะดะฐะฝะฝั‹ะผ'; @override String get autoRemoveWatchedDownloads => 'ะะฒั‚ะพัƒะดะฐะปะตะฝะธะต ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั… ะทะฐะณั€ัƒะทะพะบ'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityRu extends TranslationsAccessibilityEn { @override String get hexColor => 'ะจะตัั‚ะฝะฐะดั†ะฐั‚ะตั€ะธั‡ะฝั‹ะน ั†ะฒะตั‚'; @override String get expandText => 'ะ ะฐะทะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚'; @override String get collapseText => 'ะกะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚'; + @override String get alphabetNavigation => 'ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะปั„ะฐะฒะธั‚ัƒ'; + @override String get alphabetScrollHint => 'ะŸั€ะพะฒะตะดะธั‚ะต ะฒะฒะตั€ั… ะธะปะธ ะฒะฝะธะท ะดะปั ะฟะตั€ะตั…ะพะดะฐ ะฟะพ ะฑัƒะบะฒะฐะผ'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}, ัั‚ะพะปะฑะตั† ${column} ะธะท ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsRu extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'ะžั‚ะผะตั‚ะธั‚ัŒ ะบะฐะบ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต'; } +// Path: audioTracks +class _TranslationsAudioTracksRu extends TranslationsAudioTracksEn { + _TranslationsAudioTracksRu._(TranslationsRu root) : this._root = root, super.internal(root); + + final TranslationsRu _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'ะัƒะดะธะพะดะพั€ะพะถะบะฐ ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsRu extends TranslationsVideoControlsEn { _TranslationsVideoControlsRu._(TranslationsRu root) : this._root = root, super.internal(root); @@ -714,11 +726,11 @@ class _TranslationsMessagesRu extends TranslationsMessagesEn { @override String get streamInterrupted => 'ะŸะพั‚ะพะบ ะฟั€ะตั€ะฒะฐะปัั. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป ะธะปะธ ะฟะตั€ะตะผะพั‚ะฐะนั‚ะต, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.'; @override String get liveStreamInterrupted => 'ะŸั€ัะผะฐั ั‚ั€ะฐะฝัะปัั†ะธั ะฟั€ะตั€ะฒะฐะปะฐััŒ. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.'; @override String get fileInfoNotAvailable => 'ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ ั„ะฐะนะปะต ะฝะตะดะพัั‚ัƒะฟะฝะฐ'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะธะฝั„ะพั€ะผะฐั†ะธะธ ะพ ั„ะฐะนะปะต: ${error}'; @override String get errorLoadingSeries => 'ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ัะตั€ะธะฐะปะฐ'; @override String get musicNotSupported => 'ะ’ะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต ะผัƒะทั‹ะบะธ ะฟะพะบะฐ ะฝะต ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั'; @@ -869,6 +881,7 @@ class _TranslationsProfilesRu extends TranslationsProfilesEn { @override String get borrowExplain => 'ะ—ะฐะธะผัั‚ะฒัƒะนั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะดั€ัƒะณะพะณะพ ะฟั€ะพั„ะธะปั. ะ”ะปั ะฟั€ะพั„ะธะปะตะน ั PIN ะฝัƒะถะตะฝ PIN.'; @override String get borrowEmpty => 'ะŸะพะบะฐ ะฝะตั‡ะตะณะพ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ.'; @override String get borrowEmptySubtitle => 'ะกะฝะฐั‡ะฐะปะฐ ะฟะพะดะบะปัŽั‡ะธั‚ะต Plex ะธะปะธ Jellyfin ะบ ะดั€ัƒะณะพะผัƒ ะฟั€ะพั„ะธะปัŽ.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'ะ˜ะท ${displayName}'; @override String get borrowConnectionBorrowed => 'ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะทะฐะธะผัั‚ะฒะพะฒะฐะฝะพ.'; @override String get borrowFailed => 'ะะต ัƒะดะฐะปะพััŒ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ ะฟะพะดะบะปัŽั‡ะตะฝะธะต.'; @@ -1154,7 +1167,7 @@ class _TranslationsLiveTvRu extends TranslationsLiveTvEn { @override String get favorites => 'ะ˜ะทะฑั€ะฐะฝะฝะพะต'; @override String get reorderFavorites => 'ะ˜ะทะผะตะฝะธั‚ัŒ ะฟะพั€ัะดะพะบ ะธะทะฑั€ะฐะฝะฝะพะณะพ'; @override String get favoritesLoadFailed => 'ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ ะธะทะฑั€ะฐะฝะฝะพะต. ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะธ ะฟะพะฒั‚ะพั€ะธั‚ะต ะฟะพะฟั‹ั‚ะบัƒ.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'ะŸั€ะธัะพะตะดะธะฝะธั‚ัŒัั ะบ ั‚ะตะบัƒั‰ะตะผัƒ ัะตะฐะฝััƒ'; @override String watchFromStart({required Object minutes}) => 'ะกะผะพั‚ั€ะตั‚ัŒ ัะฝะฐั‡ะฐะปะฐ (${minutes} ะผะธะฝ. ะฝะฐะทะฐะด)'; @override String get watchLive => 'ะกะผะพั‚ั€ะตั‚ัŒ ะฒ ะฟั€ัะผะพะผ ัั„ะธั€ะต'; @@ -2155,7 +2168,7 @@ extension on TranslationsRu { 'auth.quickConnectWaiting' => 'ะžะถะธะดะฐะฝะธะต ะฟะพะดั‚ะฒะตั€ะถะดะตะฝะธัโ€ฆ', 'auth.quickConnectCancel' => 'ะžั‚ะผะตะฝะฐ', 'auth.quickConnectExpired' => 'ะกั€ะพะบ Quick Connect ะธัั‚ะตะบ. ะŸะพะฟั€ะพะฑัƒะนั‚ะต ัะฝะพะฒะฐ.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'ะžั‚ะผะตะฝะฐ', 'common.save' => 'ะกะพั…ั€ะฐะฝะธั‚ัŒ', 'common.close' => 'ะ—ะฐะบั€ั‹ั‚ัŒ', @@ -2239,8 +2252,6 @@ extension on TranslationsRu { 'settings.libraryDensity' => 'ะŸะปะพั‚ะฝะพัั‚ัŒ ะฑะธะฑะปะธะพั‚ะตะบะธ', 'settings.compact' => 'ะšะพะผะฟะฐะบั‚ะฝั‹ะน', 'settings.comfortable' => 'ะšะพะผั„ะพั€ั‚ะฝั‹ะน', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'ะ ะตะถะธะผ ะฟั€ะพัะผะพั‚ั€ะฐ', 'settings.gridView' => 'ะกะตั‚ะบะฐ', 'settings.listView' => 'ะกะฟะธัะพะบ', @@ -2310,7 +2321,7 @@ extension on TranslationsRu { 'settings.watchTogetherRelay' => 'Relay ัะพะฒะผะตัั‚ะฝะพะณะพ ะฟั€ะพัะผะพั‚ั€ะฐ', 'settings.watchTogetherRelayDescription' => 'ะ—ะฐะดะฐะนั‚ะต ัะฒะพะน relay. ะ’ัะต ะดะพะปะถะฝั‹ ะธัะฟะพะปัŒะทะพะฒะฐั‚ัŒ ะพะดะธะฝ ัะตั€ะฒะตั€.', 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'ะžั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั…', 'settings.crashReportingDescription' => 'ะžั‚ะฟั€ะฐะฒะปัั‚ัŒ ะพั‚ั‡ั‘ั‚ั‹ ะพะฑ ะพัˆะธะฑะบะฐั… ะดะปั ัƒะปัƒั‡ัˆะตะฝะธั ะฟั€ะธะปะพะถะตะฝะธั', 'settings.debugLogging' => 'ะ–ัƒั€ะฝะฐะป ะพั‚ะปะฐะดะบะธ', @@ -2327,12 +2338,10 @@ extension on TranslationsRu { 'settings.exportSettings' => 'ะญะบัะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ', 'settings.exportSettingsDescription' => 'ะกะพั…ั€ะฐะฝะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะฒ ั„ะฐะนะป', 'settings.exportSettingsSuccess' => 'ะะฐัั‚ั€ะพะนะบะธ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹', - 'settings.exportSettingsFailed' => 'ะะต ัƒะดะฐะปะพััŒ ัะบัะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ', 'settings.importSettings' => 'ะ˜ะผะฟะพั€ั‚ ะฝะฐัั‚ั€ะพะตะบ', 'settings.importSettingsDescription' => 'ะ’ะพััั‚ะฐะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะธะท ั„ะฐะนะปะฐ', 'settings.importSettingsConfirm' => 'ะญั‚ะพ ะทะฐะผะตะฝะธั‚ ะฒะฐัˆะธ ั‚ะตะบัƒั‰ะธะต ะฝะฐัั‚ั€ะพะนะบะธ. ะŸั€ะพะดะพะปะถะธั‚ัŒ?', 'settings.importSettingsSuccess' => 'ะะฐัั‚ั€ะพะนะบะธ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐะฝั‹', - 'settings.importSettingsFailed' => 'ะะต ัƒะดะฐะปะพััŒ ะธะผะฟะพั€ั‚ะธั€ะพะฒะฐั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ', 'settings.importSettingsInvalidFile' => 'ะญั‚ะพั‚ ั„ะฐะนะป ะฝะต ัะฒะปัะตั‚ัั ะดะตะนัั‚ะฒะธั‚ะตะปัŒะฝั‹ะผ ัะบัะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ Plezy', 'settings.importSettingsNoUser' => 'ะ’ะพะนะดะธั‚ะต ะฒ ัะธัั‚ะตะผัƒ ะฟะตั€ะตะด ะธะผะฟะพั€ั‚ะพะผ ะฝะฐัั‚ั€ะพะตะบ', 'settings.shortcutsReset' => 'ะ“ะพั€ัั‡ะธะต ะบะปะฐะฒะธัˆะธ ัะฑั€ะพัˆะตะฝั‹ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ', @@ -2347,6 +2356,7 @@ extension on TranslationsRu { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'ะ”ะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ะดะพะปะถะฝะฐ ะฑั‹ั‚ัŒ ะพั‚ ${min} ะดะพ ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'ะšะปะฐะฒะธัˆะฐ ัƒะถะต ะฝะฐะทะฝะฐั‡ะตะฝะฐ ะดะปั ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'ะšะปะฐะฒะธัˆะฐ ะพะฑะฝะพะฒะปะตะฝะฐ ะดะปั ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'ะะฒั‚ะพะฟั€ะพะฟัƒัะบ', 'settings.autoSkipIntro' => 'ะะฒั‚ะพะฟั€ะพะฟัƒัะบ ะฒัั‚ัƒะฟะปะตะฝะธั', 'settings.autoSkipIntroDescription' => 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ะฟั€ะพะฟัƒัะบะฐั‚ัŒ ะผะฐั€ะบะตั€ั‹ ะฒัั‚ัƒะฟะปะตะฝะธั ั‡ะตั€ะตะท ะฝะตัะบะพะปัŒะบะพ ัะตะบัƒะฝะด', @@ -2372,7 +2382,7 @@ extension on TranslationsRu { 'settings.downloadLocationChanged' => 'ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ะธะทะผะตะฝะตะฝะพ', 'settings.downloadLocationReset' => 'ะœะตัั‚ะพ ะทะฐะณั€ัƒะทะบะธ ัะฑั€ะพัˆะตะฝะพ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ', 'settings.downloadLocationInvalid' => 'ะ’ั‹ะฑั€ะฐะฝะฝะฐั ะฟะฐะฟะบะฐ ะฝะตะดะพัั‚ัƒะฟะฝะฐ ะดะปั ะทะฐะฟะธัะธ', - 'settings.downloadLocationSelectError' => 'ะะต ัƒะดะฐะปะพััŒ ะฒั‹ะฑั€ะฐั‚ัŒ ะฟะฐะฟะบัƒ', + 'settings.downloadLocationPickerUnavailable' => 'ะ’ั‹ะฑะพั€ ะฟะฐะฟะบะธ ะฝะตะดะพัั‚ัƒะฟะตะฝ ะฝะฐ ัั‚ะพะผ ัƒัั‚ั€ะพะนัั‚ะฒะต', 'settings.downloadOnWifiOnly' => 'ะ—ะฐะณั€ัƒะถะฐั‚ัŒ ั‚ะพะปัŒะบะพ ะฟะพ WiFi', 'settings.downloadOnWifiOnlyDescription' => 'ะ—ะฐะฟั€ะตั‚ะธั‚ัŒ ะทะฐะณั€ัƒะทะบัƒ ะฟะพ ะผะพะฑะธะปัŒะฝั‹ะผ ะดะฐะฝะฝั‹ะผ', 'settings.autoRemoveWatchedDownloads' => 'ะะฒั‚ะพัƒะดะฐะปะตะฝะธะต ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั… ะทะฐะณั€ัƒะทะพะบ', @@ -2560,10 +2570,15 @@ extension on TranslationsRu { 'accessibility.hexColor' => 'ะจะตัั‚ะฝะฐะดั†ะฐั‚ะตั€ะธั‡ะฝั‹ะน ั†ะฒะตั‚', 'accessibility.expandText' => 'ะ ะฐะทะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚', 'accessibility.collapseText' => 'ะกะฒะตั€ะฝัƒั‚ัŒ ั‚ะตะบัั‚', + 'accessibility.alphabetNavigation' => 'ะะฐะฒะธะณะฐั†ะธั ะฟะพ ะฐะปั„ะฐะฒะธั‚ัƒ', + 'accessibility.alphabetScrollHint' => 'ะŸั€ะพะฒะตะดะธั‚ะต ะฒะฒะตั€ั… ะธะปะธ ะฒะฝะธะท ะดะปั ะฟะตั€ะตั…ะพะดะฐ ะฟะพ ะฑัƒะบะฒะฐะผ', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}, ัั‚ะพะปะฑะตั† ${column} ะธะท ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'ะกั‚ั€ะพะบะฐ ${row} ะธะท ${rowCount}', 'tooltips.shufflePlay' => 'ะกะปัƒั‡ะฐะนะฝะพะต ะฒะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต', 'tooltips.playTrailer' => 'ะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธ ั‚ั€ะตะนะปะตั€', 'tooltips.markAsWatched' => 'ะžั‚ะผะตั‚ะธั‚ัŒ ะบะฐะบ ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต', 'tooltips.markAsUnwatched' => 'ะžั‚ะผะตั‚ะธั‚ัŒ ะบะฐะบ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต', + 'audioTracks.track' => ({required Object n}) => 'ะัƒะดะธะพะดะพั€ะพะถะบะฐ ${n}', 'videoControls.audioLabel' => 'ะัƒะดะธะพ', 'videoControls.subtitlesLabel' => 'ะกัƒะฑั‚ะธั‚ั€ั‹', 'videoControls.resetToZero' => 'ะกะฑั€ะพัะธั‚ัŒ ะดะพ 0ะผั', @@ -2650,20 +2665,20 @@ extension on TranslationsRu { 'messages.markedAsUnwatched' => 'ะžั‚ะผะตั‡ะตะฝะพ ะบะฐะบ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต', 'messages.markedAsWatchedOffline' => 'ะžั‚ะผะตั‡ะตะฝะพ ะบะฐะบ ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต (ัะธะฝั…ั€ะพะฝะธะทะธั€ัƒะตั‚ัั ะฟั€ะธ ะฟะพะดะบะปัŽั‡ะตะฝะธะธ)', 'messages.markedAsUnwatchedOffline' => 'ะžั‚ะผะตั‡ะตะฝะพ ะบะฐะบ ะฝะตะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะต (ัะธะฝั…ั€ะพะฝะธะทะธั€ัƒะตั‚ัั ะฟั€ะธ ะฟะพะดะบะปัŽั‡ะตะฝะธะธ)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ะะฒั‚ะพัƒะดะฐะปะตะฝะพ: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะฐ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะฐั ะทะฐะณั€ัƒะทะบะฐ', few: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝั‹ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ะต ะทะฐะณั€ัƒะทะบะธ', many: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะพ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั… ะทะฐะณั€ัƒะทะพะบ', other: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะพ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะน ะทะฐะณั€ัƒะทะบะธ', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ะะฒั‚ะพัƒะดะฐะปะตะฝะพ: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('ru'))(n, one: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะฐ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะฐั ะทะฐะณั€ัƒะทะบะฐ', few: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝั‹ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ะต ะทะฐะณั€ัƒะทะบะธ', many: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะพ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝั‹ั… ะทะฐะณั€ัƒะทะพะบ', other: 'ะะฒั‚ะพะผะฐั‚ะธั‡ะตัะบะธ ัƒะดะฐะปะตะฝะพ ${n} ะฟั€ะพัะผะพั‚ั€ะตะฝะฝะพะน ะทะฐะณั€ัƒะทะบะธ', ), 'messages.removedFromContinueWatching' => 'ะฃะดะฐะปะตะฝะพ ะธะท ยซะŸั€ะพะดะพะปะถะธั‚ัŒ ะฟั€ะพัะผะพั‚ั€ยป', 'messages.errorLoading' => ({required Object error}) => 'ะžัˆะธะฑะบะฐ: ${error}', 'messages.streamInterrupted' => 'ะŸะพั‚ะพะบ ะฟั€ะตั€ะฒะฐะปัั. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป ะธะปะธ ะฟะตั€ะตะผะพั‚ะฐะนั‚ะต, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.', 'messages.liveStreamInterrupted' => 'ะŸั€ัะผะฐั ั‚ั€ะฐะฝัะปัั†ะธั ะฟั€ะตั€ะฒะฐะปะฐััŒ. ะะฐะถะผะธั‚ะต ยซะ’ะพัะฟั€ะพะธะทะฒะตัั‚ะธยป, ั‡ั‚ะพะฑั‹ ะฟะพะฒั‚ะพั€ะธั‚ัŒ ะฟะพะฟั‹ั‚ะบัƒ.', 'messages.fileInfoNotAvailable' => 'ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ ั„ะฐะนะปะต ะฝะตะดะพัั‚ัƒะฟะฝะฐ', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ะธะฝั„ะพั€ะผะฐั†ะธะธ ะพ ั„ะฐะนะปะต: ${error}', 'messages.errorLoadingSeries' => 'ะžัˆะธะฑะบะฐ ะทะฐะณั€ัƒะทะบะธ ัะตั€ะธะฐะปะฐ', 'messages.musicNotSupported' => 'ะ’ะพัะฟั€ะพะธะทะฒะตะดะตะฝะธะต ะผัƒะทั‹ะบะธ ะฟะพะบะฐ ะฝะต ะฟะพะดะดะตั€ะถะธะฒะฐะตั‚ัั', @@ -2778,6 +2793,7 @@ extension on TranslationsRu { 'profiles.borrowExplain' => 'ะ—ะฐะธะผัั‚ะฒัƒะนั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะดั€ัƒะณะพะณะพ ะฟั€ะพั„ะธะปั. ะ”ะปั ะฟั€ะพั„ะธะปะตะน ั PIN ะฝัƒะถะตะฝ PIN.', 'profiles.borrowEmpty' => 'ะŸะพะบะฐ ะฝะตั‡ะตะณะพ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ.', 'profiles.borrowEmptySubtitle' => 'ะกะฝะฐั‡ะฐะปะฐ ะฟะพะดะบะปัŽั‡ะธั‚ะต Plex ะธะปะธ Jellyfin ะบ ะดั€ัƒะณะพะผัƒ ะฟั€ะพั„ะธะปัŽ.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'ะ˜ะท ${displayName}', 'profiles.borrowConnectionBorrowed' => 'ะŸะพะดะบะปัŽั‡ะตะฝะธะต ะทะฐะธะผัั‚ะฒะพะฒะฐะฝะพ.', 'profiles.borrowFailed' => 'ะะต ัƒะดะฐะปะพััŒ ะทะฐะธะผัั‚ะฒะพะฒะฐั‚ัŒ ะฟะพะดะบะปัŽั‡ะตะฝะธะต.', @@ -3003,7 +3019,7 @@ extension on TranslationsRu { 'liveTv.favorites' => 'ะ˜ะทะฑั€ะฐะฝะฝะพะต', 'liveTv.reorderFavorites' => 'ะ˜ะทะผะตะฝะธั‚ัŒ ะฟะพั€ัะดะพะบ ะธะทะฑั€ะฐะฝะฝะพะณะพ', 'liveTv.favoritesLoadFailed' => 'ะะต ัƒะดะฐะปะพััŒ ะทะฐะณั€ัƒะทะธั‚ัŒ ะธะทะฑั€ะฐะฝะฝะพะต. ะŸั€ะพะฒะตั€ัŒั‚ะต ะฟะพะดะบะปัŽั‡ะตะฝะธะต ะธ ะฟะพะฒั‚ะพั€ะธั‚ะต ะฟะพะฟั‹ั‚ะบัƒ.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'ะŸั€ะธัะพะตะดะธะฝะธั‚ัŒัั ะบ ั‚ะตะบัƒั‰ะตะผัƒ ัะตะฐะฝััƒ', 'liveTv.watchFromStart' => ({required Object minutes}) => 'ะกะผะพั‚ั€ะตั‚ัŒ ัะฝะฐั‡ะฐะปะฐ (${minutes} ะผะธะฝ. ะฝะฐะทะฐะด)', 'liveTv.watchLive' => 'ะกะผะพั‚ั€ะตั‚ัŒ ะฒ ะฟั€ัะผะพะผ ัั„ะธั€ะต', @@ -3163,11 +3179,11 @@ extension on TranslationsRu { 'watchTogether.participantLeft' => ({required Object name}) => '${name} ะฒั‹ัˆะตะป', 'watchTogether.participantPaused' => ({required Object name}) => '${name} ะฟะพัั‚ะฐะฒะธะป ะฝะฐ ะฟะฐัƒะทัƒ', 'watchTogether.participantResumed' => ({required Object name}) => '${name} ะฒะพะทะพะฑะฝะพะฒะธะป', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} ะฟะตั€ะตะผะพั‚ะฐะป', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} ะฑัƒั„ะตั€ะธะทัƒะตั‚', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} ะธัะฟะพะปัŒะทัƒะตั‚ ัั‚ะฐั€ัƒัŽ ะฒะตั€ัะธัŽ ะฟั€ะธะปะพะถะตะฝะธั โ€” ัะธะฝั…ั€ะพะฝะธะทะฐั†ะธั ะฝะตะดะพัั‚ัƒะฟะฝะฐ', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'ะ’ะพะทะพะฑะฝะพะฒะปะตะฝะธะต ะฑะตะท ${name}', 'watchTogether.waitingForParticipants' => 'ะžะถะธะดะฐะฝะธะต ะทะฐะณั€ัƒะทะบะธ ัƒ ะดั€ัƒะณะธั…...', 'watchTogether.waitingForName' => ({required Object name}) => 'ะžะถะธะดะฐะฝะธะต ${name}...', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index ccab55807..e338da053 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -52,6 +52,7 @@ class TranslationsSv extends Translations with BaseTranslations 'Vรคntar pรฅ godkรคnnandeโ€ฆ'; @override String get quickConnectCancel => 'Avbryt'; @override String get quickConnectExpired => 'Quick Connect har gรฅtt ut. Fรถrsรถk igen.'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get libraryDensity => 'Biblioteksdensitet'; @override String get compact => 'Kompakt'; @override String get comfortable => 'Bekvรคm'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => 'Visningslรคge'; @override String get gridView => 'Rutnรคt'; @override String get listView => 'Lista'; @@ -311,7 +310,7 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'Titta Tillsammans-relay'; @override String get watchTogetherRelayDescription => 'Ange en anpassad relay. Alla mรฅste anvรคnda samma server.'; @override String get watchTogetherRelayHint => 'https://min-relay.exempel.se'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'Kraschrapportering'; @override String get crashReportingDescription => 'Skicka kraschrapporter fรถr att fรถrbรคttra appen'; @override String get debugLogging => 'Felsรถkningsloggning'; @@ -328,12 +327,10 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get exportSettings => 'Exportera instรคllningar'; @override String get exportSettingsDescription => 'Spara dina instรคllningar till en fil'; @override String get exportSettingsSuccess => 'Instรคllningar exporterade'; - @override String get exportSettingsFailed => 'Kunde inte exportera instรคllningar'; @override String get importSettings => 'Importera instรคllningar'; @override String get importSettingsDescription => 'ร…terstรคll instรคllningar frรฅn en fil'; @override String get importSettingsConfirm => 'Detta ersรคtter dina nuvarande instรคllningar. Fortsรคtta?'; @override String get importSettingsSuccess => 'Instรคllningar importerade'; - @override String get importSettingsFailed => 'Kunde inte importera instรคllningar'; @override String get importSettingsInvalidFile => 'Denna fil รคr inte en giltig Plezy-export'; @override String get importSettingsNoUser => 'Logga in innan du importerar instรคllningar'; @override String get shortcutsReset => 'Genvรคgar รฅterstรคllda till standard'; @@ -348,6 +345,7 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Tiden mรฅste vara mellan ${min} och ${max} ${unit}'; @override String shortcutAlreadyAssigned({required Object action}) => 'Genvรคg redan tilldelad ${action}'; @override String shortcutUpdated({required Object action}) => 'Genvรคg uppdaterad fรถr ${action}'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => 'Auto Hoppa ร–ver'; @override String get autoSkipIntro => 'Hoppa ร–ver Intro Automatiskt'; @override String get autoSkipIntroDescription => 'Hoppa automatiskt รถver intro-markรถrer efter nรฅgra sekunder'; @@ -373,7 +371,7 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'Nedladdningsplats รคndrad'; @override String get downloadLocationReset => 'Nedladdningsplats รฅterstรคlld till standard'; @override String get downloadLocationInvalid => 'Vald mapp รคr inte skrivbar'; - @override String get downloadLocationSelectError => 'Kunde inte vรคlja mapp'; + @override String get downloadLocationPickerUnavailable => 'Mappval รคr inte tillgรคngligt pรฅ den hรคr enheten'; @override String get downloadOnWifiOnly => 'Ladda ner endast pรฅ WiFi'; @override String get downloadOnWifiOnlyDescription => 'Fรถrhindra nedladdningar vid anvรคndning av mobildata'; @override String get autoRemoveWatchedDownloads => 'Ta bort sedda nedladdningar automatiskt'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilitySv extends TranslationsAccessibilityEn { @override String get hexColor => 'Hexfรคrg'; @override String get expandText => 'Expandera text'; @override String get collapseText => 'Fรคll ihop text'; + @override String get alphabetNavigation => 'Alfabetisk navigering'; + @override String get alphabetScrollHint => 'Svep upp eller ned fรถr att flytta en bokstav'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rad ${row} av ${rowCount}, kolumn ${column} av ${columnCount}'; + @override String rowPosition({required Object row, required Object rowCount}) => 'Rad ${row} av ${rowCount}'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsSv extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'Markera som osedd'; } +// Path: audioTracks +class _TranslationsAudioTracksSv extends TranslationsAudioTracksEn { + _TranslationsAudioTracksSv._(TranslationsSv root) : this._root = root, super.internal(root); + + final TranslationsSv _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => 'Ljudspรฅr ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsSv extends TranslationsVideoControlsEn { _TranslationsVideoControlsSv._(TranslationsSv root) : this._root = root, super.internal(root); @@ -712,11 +724,11 @@ class _TranslationsMessagesSv extends TranslationsMessagesEn { @override String get streamInterrupted => 'Uppspelningen avbrรถts. Tryck pรฅ play eller spola fรถr att fรถrsรถka igen.'; @override String get liveStreamInterrupted => 'Livestreamen avbrรถts. Tryck pรฅ play fรถr att fรถrsรถka igen.'; @override String get fileInfoNotAvailable => 'Filinformation inte tillgรคnglig'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'Fel vid laddning av filinformation: ${error}'; @override String get errorLoadingSeries => 'Fel vid laddning av serie'; @override String get musicNotSupported => 'Musikuppspelning stรถds inte รคnnu'; @@ -867,6 +879,7 @@ class _TranslationsProfilesSv extends TranslationsProfilesEn { @override String get borrowExplain => 'Lรฅna en annan profils anslutning. PIN-skyddade profiler krรคver en PIN.'; @override String get borrowEmpty => 'Inget att lรฅna รคnnu.'; @override String get borrowEmptySubtitle => 'Anslut Plex eller Jellyfin till en annan profil fรถrst.'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'Frรฅn ${displayName}'; @override String get borrowConnectionBorrowed => 'Anslutning lรฅnad.'; @override String get borrowFailed => 'Kunde inte lรฅna anslutningen.'; @@ -1150,7 +1163,7 @@ class _TranslationsLiveTvSv extends TranslationsLiveTvEn { @override String get favorites => 'Favoriter'; @override String get reorderFavorites => 'Ordna om favoriter'; @override String get favoritesLoadFailed => 'Det gick inte att lรคsa in favoriter. Kontrollera anslutningen och fรถrsรถk igen.'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'Gรฅ med i pรฅgรฅende session'; @override String watchFromStart({required Object minutes}) => 'Titta frรฅn bรถrjan (${minutes} min sedan)'; @override String get watchLive => 'Titta live'; @@ -2149,7 +2162,7 @@ extension on TranslationsSv { 'auth.quickConnectWaiting' => 'Vรคntar pรฅ godkรคnnandeโ€ฆ', 'auth.quickConnectCancel' => 'Avbryt', 'auth.quickConnectExpired' => 'Quick Connect har gรฅtt ut. Fรถrsรถk igen.', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'Avbryt', 'common.save' => 'Spara', 'common.close' => 'Stรคng', @@ -2233,8 +2246,6 @@ extension on TranslationsSv { 'settings.libraryDensity' => 'Biblioteksdensitet', 'settings.compact' => 'Kompakt', 'settings.comfortable' => 'Bekvรคm', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => 'Visningslรคge', 'settings.gridView' => 'Rutnรคt', 'settings.listView' => 'Lista', @@ -2304,7 +2315,7 @@ extension on TranslationsSv { 'settings.watchTogetherRelay' => 'Titta Tillsammans-relay', 'settings.watchTogetherRelayDescription' => 'Ange en anpassad relay. Alla mรฅste anvรคnda samma server.', 'settings.watchTogetherRelayHint' => 'https://min-relay.exempel.se', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'Kraschrapportering', 'settings.crashReportingDescription' => 'Skicka kraschrapporter fรถr att fรถrbรคttra appen', 'settings.debugLogging' => 'Felsรถkningsloggning', @@ -2321,12 +2332,10 @@ extension on TranslationsSv { 'settings.exportSettings' => 'Exportera instรคllningar', 'settings.exportSettingsDescription' => 'Spara dina instรคllningar till en fil', 'settings.exportSettingsSuccess' => 'Instรคllningar exporterade', - 'settings.exportSettingsFailed' => 'Kunde inte exportera instรคllningar', 'settings.importSettings' => 'Importera instรคllningar', 'settings.importSettingsDescription' => 'ร…terstรคll instรคllningar frรฅn en fil', 'settings.importSettingsConfirm' => 'Detta ersรคtter dina nuvarande instรคllningar. Fortsรคtta?', 'settings.importSettingsSuccess' => 'Instรคllningar importerade', - 'settings.importSettingsFailed' => 'Kunde inte importera instรคllningar', 'settings.importSettingsInvalidFile' => 'Denna fil รคr inte en giltig Plezy-export', 'settings.importSettingsNoUser' => 'Logga in innan du importerar instรคllningar', 'settings.shortcutsReset' => 'Genvรคgar รฅterstรคllda till standard', @@ -2341,6 +2350,7 @@ extension on TranslationsSv { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'Tiden mรฅste vara mellan ${min} och ${max} ${unit}', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'Genvรคg redan tilldelad ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'Genvรคg uppdaterad fรถr ${action}', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => 'Auto Hoppa ร–ver', 'settings.autoSkipIntro' => 'Hoppa ร–ver Intro Automatiskt', 'settings.autoSkipIntroDescription' => 'Hoppa automatiskt รถver intro-markรถrer efter nรฅgra sekunder', @@ -2366,7 +2376,7 @@ extension on TranslationsSv { 'settings.downloadLocationChanged' => 'Nedladdningsplats รคndrad', 'settings.downloadLocationReset' => 'Nedladdningsplats รฅterstรคlld till standard', 'settings.downloadLocationInvalid' => 'Vald mapp รคr inte skrivbar', - 'settings.downloadLocationSelectError' => 'Kunde inte vรคlja mapp', + 'settings.downloadLocationPickerUnavailable' => 'Mappval รคr inte tillgรคngligt pรฅ den hรคr enheten', 'settings.downloadOnWifiOnly' => 'Ladda ner endast pรฅ WiFi', 'settings.downloadOnWifiOnlyDescription' => 'Fรถrhindra nedladdningar vid anvรคndning av mobildata', 'settings.autoRemoveWatchedDownloads' => 'Ta bort sedda nedladdningar automatiskt', @@ -2554,10 +2564,15 @@ extension on TranslationsSv { 'accessibility.hexColor' => 'Hexfรคrg', 'accessibility.expandText' => 'Expandera text', 'accessibility.collapseText' => 'Fรคll ihop text', + 'accessibility.alphabetNavigation' => 'Alfabetisk navigering', + 'accessibility.alphabetScrollHint' => 'Svep upp eller ned fรถr att flytta en bokstav', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => 'Rad ${row} av ${rowCount}, kolumn ${column} av ${columnCount}', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => 'Rad ${row} av ${rowCount}', 'tooltips.shufflePlay' => 'Blanda uppspelning', 'tooltips.playTrailer' => 'Spela trailer', 'tooltips.markAsWatched' => 'Markera som sedd', 'tooltips.markAsUnwatched' => 'Markera som osedd', + 'audioTracks.track' => ({required Object n}) => 'Ljudspรฅr ${n}', 'videoControls.audioLabel' => 'Ljud', 'videoControls.subtitlesLabel' => 'Undertexter', 'videoControls.resetToZero' => 'ร…terstรคll till 0ms', @@ -2644,20 +2659,20 @@ extension on TranslationsSv { 'messages.markedAsUnwatched' => 'Markerad som osedd', 'messages.markedAsWatchedOffline' => 'Markerad som sedd (synkroniseras nรคr online)', 'messages.markedAsUnwatchedOffline' => 'Markerad som osedd (synkroniseras nรคr online)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatiskt borttagen: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Tog automatiskt bort ${n} sedd nedladdning', other: 'Tog automatiskt bort ${n} sedda nedladdningar', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'Automatiskt borttagen: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('sv'))(n, one: 'Tog automatiskt bort ${n} sedd nedladdning', other: 'Tog automatiskt bort ${n} sedda nedladdningar', ), 'messages.removedFromContinueWatching' => 'Borttagen frรฅn Fortsรคtt titta', 'messages.errorLoading' => ({required Object error}) => 'Fel: ${error}', 'messages.streamInterrupted' => 'Uppspelningen avbrรถts. Tryck pรฅ play eller spola fรถr att fรถrsรถka igen.', 'messages.liveStreamInterrupted' => 'Livestreamen avbrรถts. Tryck pรฅ play fรถr att fรถrsรถka igen.', 'messages.fileInfoNotAvailable' => 'Filinformation inte tillgรคnglig', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'Fel vid laddning av filinformation: ${error}', 'messages.errorLoadingSeries' => 'Fel vid laddning av serie', 'messages.musicNotSupported' => 'Musikuppspelning stรถds inte รคnnu', @@ -2772,6 +2787,7 @@ extension on TranslationsSv { 'profiles.borrowExplain' => 'Lรฅna en annan profils anslutning. PIN-skyddade profiler krรคver en PIN.', 'profiles.borrowEmpty' => 'Inget att lรฅna รคnnu.', 'profiles.borrowEmptySubtitle' => 'Anslut Plex eller Jellyfin till en annan profil fรถrst.', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'Frรฅn ${displayName}', 'profiles.borrowConnectionBorrowed' => 'Anslutning lรฅnad.', 'profiles.borrowFailed' => 'Kunde inte lรฅna anslutningen.', @@ -2997,7 +3013,7 @@ extension on TranslationsSv { 'liveTv.favorites' => 'Favoriter', 'liveTv.reorderFavorites' => 'Ordna om favoriter', 'liveTv.favoritesLoadFailed' => 'Det gick inte att lรคsa in favoriter. Kontrollera anslutningen och fรถrsรถk igen.', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'Gรฅ med i pรฅgรฅende session', 'liveTv.watchFromStart' => ({required Object minutes}) => 'Titta frรฅn bรถrjan (${minutes} min sedan)', 'liveTv.watchLive' => 'Titta live', @@ -3157,11 +3173,11 @@ extension on TranslationsSv { 'watchTogether.participantLeft' => ({required Object name}) => '${name} lรคmnade', 'watchTogether.participantPaused' => ({required Object name}) => '${name} pausade', 'watchTogether.participantResumed' => ({required Object name}) => '${name} รฅterupptog', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} spolade', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} buffrar', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} anvรคnder en รคldre appversion โ€” synkronisering รคr inte tillgรคnglig', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'ร…terupptar utan ${name}', 'watchTogether.waitingForParticipants' => 'Vรคntar pรฅ att andra laddar...', 'watchTogether.waitingForName' => ({required Object name}) => 'Vรคntar pรฅ ${name}...', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index b7a3b098e..95354c9b0 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -52,6 +52,7 @@ class TranslationsZh extends Translations with BaseTranslations '็ญ‰ๅพ…ๆ‰นๅ‡†โ€ฆ'; @override String get quickConnectCancel => 'ๅ–ๆถˆ'; @override String get quickConnectExpired => 'Quick Connect ๅทฒ่ฟ‡ๆœŸใ€‚่ฏท้‡่ฏ•ใ€‚'; - @override String get localDataRecoveryRequired => ''; + @override String get localDataRecoveryRequired => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.'; } // Path: common @@ -240,8 +241,6 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get libraryDensity => 'ๅช’ไฝ“ๅบ“ๅฏ†ๅบฆ'; @override String get compact => '็ดงๅ‡‘'; @override String get comfortable => '่ˆ’้€‚'; - @override String get tvCornerSpotlightBackdrop => ''; - @override String get tvCornerSpotlightBackdropDescription => ''; @override String get viewMode => '่ง†ๅ›พๆจกๅผ'; @override String get gridView => '็ฝ‘ๆ ผ่ง†ๅ›พ'; @override String get listView => 'ๅˆ—่กจ่ง†ๅ›พ'; @@ -311,7 +310,7 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get watchTogetherRelay => 'ไธ€่ตท็œ‹ไธญ็ปงๆœๅŠกๅ™จ'; @override String get watchTogetherRelayDescription => '่ฎพ็ฝฎ่‡ชๅฎšไน‰ไธญ็ปงใ€‚ๆ‰€ๆœ‰ไบบๅฟ…้กปไฝฟ็”จๅŒไธ€ๆœๅŠกๅ™จใ€‚'; @override String get watchTogetherRelayHint => 'https://my-relay.example.com'; - @override String get watchTogetherRelayInvalid => ''; + @override String get watchTogetherRelayInvalid => 'Enter a valid HTTP or HTTPS relay base URL.'; @override String get crashReporting => 'ๅดฉๆบƒๆŠฅๅ‘Š'; @override String get crashReportingDescription => 'ๅ‘้€ๅดฉๆบƒๆŠฅๅ‘ŠไปฅๅธฎๅŠฉๆ”น่ฟ›ๅบ”็”จ'; @override String get debugLogging => '่ฐƒ่ฏ•ๆ—ฅๅฟ—'; @@ -328,12 +327,10 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get exportSettings => 'ๅฏผๅ‡บ่ฎพ็ฝฎ'; @override String get exportSettingsDescription => 'ๅฐ†ๆ‚จ็š„ๅๅฅฝไฟๅญ˜ๅˆฐๆ–‡ไปถ'; @override String get exportSettingsSuccess => '่ฎพ็ฝฎๅทฒๅฏผๅ‡บ'; - @override String get exportSettingsFailed => 'ๆ— ๆณ•ๅฏผๅ‡บ่ฎพ็ฝฎ'; @override String get importSettings => 'ๅฏผๅ…ฅ่ฎพ็ฝฎ'; @override String get importSettingsDescription => 'ไปŽๆ–‡ไปถๆขๅคๅๅฅฝ'; @override String get importSettingsConfirm => '่ฟ™ๅฐ†ๆ›ฟๆขๆ‚จๅฝ“ๅ‰็š„่ฎพ็ฝฎใ€‚็ปง็ปญๅ—๏ผŸ'; @override String get importSettingsSuccess => '่ฎพ็ฝฎๅทฒๅฏผๅ…ฅ'; - @override String get importSettingsFailed => 'ๆ— ๆณ•ๅฏผๅ…ฅ่ฎพ็ฝฎ'; @override String get importSettingsInvalidFile => 'ๆญคๆ–‡ไปถไธๆ˜ฏๆœ‰ๆ•ˆ็š„ Plezy ่ฎพ็ฝฎๅฏผๅ‡บ'; @override String get importSettingsNoUser => 'ๅฏผๅ…ฅ่ฎพ็ฝฎๅ‰่ฏทๅ…ˆ็™ปๅฝ•'; @override String get shortcutsReset => 'ๅฟซๆท้”ฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎคๅ€ผ'; @@ -348,6 +345,7 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'ๆ—ถ้•ฟๅฟ…้กปไป‹ไบŽ ${min} ๅ’Œ ${max} ${unit} ไน‹้—ด'; @override String shortcutAlreadyAssigned({required Object action}) => 'ๅฟซๆท้”ฎๅทฒ่ขซๅˆ†้…็ป™ ${action}'; @override String shortcutUpdated({required Object action}) => 'ๅฟซๆท้”ฎๅทฒไธบ ${action} ๆ›ดๆ–ฐ'; + @override String get saveFailed => 'Could not save changes. Try again.'; @override String get autoSkip => '่‡ชๅŠจ่ทณ่ฟ‡'; @override String get autoSkipIntro => '่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคด'; @override String get autoSkipIntroDescription => 'ๅ‡ ็ง’้’ŸๅŽ่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคดๆ ‡่ฎฐ'; @@ -373,7 +371,7 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get downloadLocationChanged => 'ไธ‹่ฝฝไฝ็ฝฎๅทฒๆ›ดๆ”น'; @override String get downloadLocationReset => 'ไธ‹่ฝฝไฝ็ฝฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎค'; @override String get downloadLocationInvalid => 'ๆ‰€้€‰ๆ–‡ไปถๅคนไธๅฏๅ†™ๅ…ฅ'; - @override String get downloadLocationSelectError => '้€‰ๆ‹ฉๆ–‡ไปถๅคนๅคฑ่ดฅ'; + @override String get downloadLocationPickerUnavailable => 'ๆญค่ฎพๅค‡ไธๆ”ฏๆŒ้€‰ๆ‹ฉๆ–‡ไปถๅคน'; @override String get downloadOnWifiOnly => 'ไป…ๅœจ WiFi ๆ—ถไธ‹่ฝฝ'; @override String get downloadOnWifiOnlyDescription => 'ไฝฟ็”จ่œ‚็ชๆ•ฐๆฎๆ—ถ็ฆๆญขไธ‹่ฝฝ'; @override String get autoRemoveWatchedDownloads => '่‡ชๅŠจ็งป้™คๅทฒ่ง‚็œ‹็š„ไธ‹่ฝฝ'; @@ -591,6 +589,10 @@ class _TranslationsAccessibilityZh extends TranslationsAccessibilityEn { @override String get hexColor => 'ๅๅ…ญ่ฟ›ๅˆถ้ขœ่‰ฒ'; @override String get expandText => 'ๅฑ•ๅผ€ๆ–‡ๆœฌ'; @override String get collapseText => 'ๆŠ˜ๅ ๆ–‡ๆœฌ'; + @override String get alphabetNavigation => 'ๅญ—ๆฏๅฏผ่ˆช'; + @override String get alphabetScrollHint => 'ไธŠไธ‹ๆป‘ๅŠจไปฅๆŒ‰ๅญ—ๆฏ็งปๅŠจ'; + @override String rowColumnPosition({required Object row, required Object rowCount, required Object column, required Object columnCount}) => '็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ๏ผ›็ฌฌ ${column} ๅˆ—๏ผŒๅ…ฑ ${columnCount} ๅˆ—'; + @override String rowPosition({required Object row, required Object rowCount}) => '็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ'; } // Path: tooltips @@ -606,6 +608,16 @@ class _TranslationsTooltipsZh extends TranslationsTooltipsEn { @override String get markAsUnwatched => 'ๆ ‡่ฎฐไธบๆœช่ง‚็œ‹'; } +// Path: audioTracks +class _TranslationsAudioTracksZh extends TranslationsAudioTracksEn { + _TranslationsAudioTracksZh._(TranslationsZh root) : this._root = root, super.internal(root); + + final TranslationsZh _root; // ignore: unused_field + + // Translations + @override String track({required Object n}) => '้Ÿณ่ฝจ ${n}'; +} + // Path: videoControls class _TranslationsVideoControlsZh extends TranslationsVideoControlsEn { _TranslationsVideoControlsZh._(TranslationsZh root) : this._root = root, super.internal(root); @@ -711,11 +723,11 @@ class _TranslationsMessagesZh extends TranslationsMessagesEn { @override String get streamInterrupted => '่ง†้ข‘ๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎๆˆ–ๆ‹–ๅŠจ่ฟ›ๅบฆๆก้‡่ฏ•ใ€‚'; @override String get liveStreamInterrupted => '็›ดๆ’ญๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎ้‡่ฏ•ใ€‚'; @override String get fileInfoNotAvailable => 'ๆ–‡ไปถไฟกๆฏไธๅฏ็”จ'; - @override String get playbackAuthenticationRequired => ''; - @override String get playbackServerUnavailable => ''; - @override String get playbackDataInvalid => ''; - @override String get playbackCancelled => ''; - @override String get playbackFailed => ''; + @override String get playbackAuthenticationRequired => 'Sign in to the media server again to play this item.'; + @override String get playbackServerUnavailable => 'The media server is unavailable. Try again later.'; + @override String get playbackDataInvalid => 'The server returned invalid playback information.'; + @override String get playbackCancelled => 'Playback was cancelled.'; + @override String get playbackFailed => 'Playback could not be started.'; @override String errorLoadingFileInfo({required Object error}) => 'ๅŠ ่ฝฝๆ–‡ไปถไฟกๆฏๆ—ถๅ‡บ้”™: ${error}'; @override String get errorLoadingSeries => 'ๅŠ ่ฝฝ็ณปๅˆ—ๆ—ถๅ‡บ้”™'; @override String get musicNotSupported => 'ๅฐšไธๆ”ฏๆŒๆ’ญๆ”พ้Ÿณไน'; @@ -866,6 +878,7 @@ class _TranslationsProfilesZh extends TranslationsProfilesEn { @override String get borrowExplain => 'ๅ€Ÿ็”จๅฆไธ€ไธชไธชไบบ่ต„ๆ–™็š„่ฟžๆŽฅใ€‚ๅ— PIN ไฟๆŠค็š„ไธชไบบ่ต„ๆ–™้œ€่ฆ PINใ€‚'; @override String get borrowEmpty => 'ๆš‚ๆ— ๅฏๅ€Ÿ็”จ็š„ๅ†…ๅฎนใ€‚'; @override String get borrowEmptySubtitle => '่ฏทๅ…ˆๅฐ† Plex ๆˆ– Jellyfin ่ฟžๆŽฅๅˆฐๅฆไธ€ไธชไธชไบบ่ต„ๆ–™ใ€‚'; + @override String get borrowLoadFailed => 'Available connections could not be loaded. Try again.'; @override String borrowFromProfile({required Object displayName}) => 'ๆฅ่‡ช ${displayName}'; @override String get borrowConnectionBorrowed => 'ๅทฒๅ€Ÿ็”จ่ฟžๆŽฅใ€‚'; @override String get borrowFailed => 'ๆ— ๆณ•ๅ€Ÿ็”จ่ฟžๆŽฅใ€‚'; @@ -1148,7 +1161,7 @@ class _TranslationsLiveTvZh extends TranslationsLiveTvEn { @override String get favorites => 'ๆ”ถ่—'; @override String get reorderFavorites => '้‡ๆ–ฐๆŽ’ๅบๆ”ถ่—'; @override String get favoritesLoadFailed => 'ๆ— ๆณ•ๅŠ ่ฝฝๆ”ถ่—ใ€‚่ฏทๆฃ€ๆŸฅ็ฝ‘็ปœ่ฟžๆŽฅๅŽ้‡่ฏ•ใ€‚'; - @override String get favoritesUpdateFailed => ''; + @override String get favoritesUpdateFailed => 'Could not update favorites. Check your connection and try again.'; @override String get joinSession => 'ๅŠ ๅ…ฅๆญฃๅœจ่ฟ›่กŒ็š„ไผš่ฏ'; @override String watchFromStart({required Object minutes}) => 'ไปŽๅคด่ง‚็œ‹๏ผˆ${minutes}ๅˆ†้’Ÿๅ‰ๅผ€ๅง‹๏ผ‰'; @override String get watchLive => '่ง‚็œ‹็›ดๆ’ญ'; @@ -2146,7 +2159,7 @@ extension on TranslationsZh { 'auth.quickConnectWaiting' => '็ญ‰ๅพ…ๆ‰นๅ‡†โ€ฆ', 'auth.quickConnectCancel' => 'ๅ–ๆถˆ', 'auth.quickConnectExpired' => 'Quick Connect ๅทฒ่ฟ‡ๆœŸใ€‚่ฏท้‡่ฏ•ใ€‚', - 'auth.localDataRecoveryRequired' => '', + 'auth.localDataRecoveryRequired' => 'Plezy could not safely recover local sign-in and pending playback data. Please sign in again.', 'common.cancel' => 'ๅ–ๆถˆ', 'common.save' => 'ไฟๅญ˜', 'common.close' => 'ๅ…ณ้—ญ', @@ -2230,8 +2243,6 @@ extension on TranslationsZh { 'settings.libraryDensity' => 'ๅช’ไฝ“ๅบ“ๅฏ†ๅบฆ', 'settings.compact' => '็ดงๅ‡‘', 'settings.comfortable' => '่ˆ’้€‚', - 'settings.tvCornerSpotlightBackdrop' => '', - 'settings.tvCornerSpotlightBackdropDescription' => '', 'settings.viewMode' => '่ง†ๅ›พๆจกๅผ', 'settings.gridView' => '็ฝ‘ๆ ผ่ง†ๅ›พ', 'settings.listView' => 'ๅˆ—่กจ่ง†ๅ›พ', @@ -2301,7 +2312,7 @@ extension on TranslationsZh { 'settings.watchTogetherRelay' => 'ไธ€่ตท็œ‹ไธญ็ปงๆœๅŠกๅ™จ', 'settings.watchTogetherRelayDescription' => '่ฎพ็ฝฎ่‡ชๅฎšไน‰ไธญ็ปงใ€‚ๆ‰€ๆœ‰ไบบๅฟ…้กปไฝฟ็”จๅŒไธ€ๆœๅŠกๅ™จใ€‚', 'settings.watchTogetherRelayHint' => 'https://my-relay.example.com', - 'settings.watchTogetherRelayInvalid' => '', + 'settings.watchTogetherRelayInvalid' => 'Enter a valid HTTP or HTTPS relay base URL.', 'settings.crashReporting' => 'ๅดฉๆบƒๆŠฅๅ‘Š', 'settings.crashReportingDescription' => 'ๅ‘้€ๅดฉๆบƒๆŠฅๅ‘ŠไปฅๅธฎๅŠฉๆ”น่ฟ›ๅบ”็”จ', 'settings.debugLogging' => '่ฐƒ่ฏ•ๆ—ฅๅฟ—', @@ -2318,12 +2329,10 @@ extension on TranslationsZh { 'settings.exportSettings' => 'ๅฏผๅ‡บ่ฎพ็ฝฎ', 'settings.exportSettingsDescription' => 'ๅฐ†ๆ‚จ็š„ๅๅฅฝไฟๅญ˜ๅˆฐๆ–‡ไปถ', 'settings.exportSettingsSuccess' => '่ฎพ็ฝฎๅทฒๅฏผๅ‡บ', - 'settings.exportSettingsFailed' => 'ๆ— ๆณ•ๅฏผๅ‡บ่ฎพ็ฝฎ', 'settings.importSettings' => 'ๅฏผๅ…ฅ่ฎพ็ฝฎ', 'settings.importSettingsDescription' => 'ไปŽๆ–‡ไปถๆขๅคๅๅฅฝ', 'settings.importSettingsConfirm' => '่ฟ™ๅฐ†ๆ›ฟๆขๆ‚จๅฝ“ๅ‰็š„่ฎพ็ฝฎใ€‚็ปง็ปญๅ—๏ผŸ', 'settings.importSettingsSuccess' => '่ฎพ็ฝฎๅทฒๅฏผๅ…ฅ', - 'settings.importSettingsFailed' => 'ๆ— ๆณ•ๅฏผๅ…ฅ่ฎพ็ฝฎ', 'settings.importSettingsInvalidFile' => 'ๆญคๆ–‡ไปถไธๆ˜ฏๆœ‰ๆ•ˆ็š„ Plezy ่ฎพ็ฝฎๅฏผๅ‡บ', 'settings.importSettingsNoUser' => 'ๅฏผๅ…ฅ่ฎพ็ฝฎๅ‰่ฏทๅ…ˆ็™ปๅฝ•', 'settings.shortcutsReset' => 'ๅฟซๆท้”ฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎคๅ€ผ', @@ -2338,6 +2347,7 @@ extension on TranslationsZh { 'settings.validationErrorDuration' => ({required Object min, required Object max, required Object unit}) => 'ๆ—ถ้•ฟๅฟ…้กปไป‹ไบŽ ${min} ๅ’Œ ${max} ${unit} ไน‹้—ด', 'settings.shortcutAlreadyAssigned' => ({required Object action}) => 'ๅฟซๆท้”ฎๅทฒ่ขซๅˆ†้…็ป™ ${action}', 'settings.shortcutUpdated' => ({required Object action}) => 'ๅฟซๆท้”ฎๅทฒไธบ ${action} ๆ›ดๆ–ฐ', + 'settings.saveFailed' => 'Could not save changes. Try again.', 'settings.autoSkip' => '่‡ชๅŠจ่ทณ่ฟ‡', 'settings.autoSkipIntro' => '่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคด', 'settings.autoSkipIntroDescription' => 'ๅ‡ ็ง’้’ŸๅŽ่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคดๆ ‡่ฎฐ', @@ -2363,7 +2373,7 @@ extension on TranslationsZh { 'settings.downloadLocationChanged' => 'ไธ‹่ฝฝไฝ็ฝฎๅทฒๆ›ดๆ”น', 'settings.downloadLocationReset' => 'ไธ‹่ฝฝไฝ็ฝฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎค', 'settings.downloadLocationInvalid' => 'ๆ‰€้€‰ๆ–‡ไปถๅคนไธๅฏๅ†™ๅ…ฅ', - 'settings.downloadLocationSelectError' => '้€‰ๆ‹ฉๆ–‡ไปถๅคนๅคฑ่ดฅ', + 'settings.downloadLocationPickerUnavailable' => 'ๆญค่ฎพๅค‡ไธๆ”ฏๆŒ้€‰ๆ‹ฉๆ–‡ไปถๅคน', 'settings.downloadOnWifiOnly' => 'ไป…ๅœจ WiFi ๆ—ถไธ‹่ฝฝ', 'settings.downloadOnWifiOnlyDescription' => 'ไฝฟ็”จ่œ‚็ชๆ•ฐๆฎๆ—ถ็ฆๆญขไธ‹่ฝฝ', 'settings.autoRemoveWatchedDownloads' => '่‡ชๅŠจ็งป้™คๅทฒ่ง‚็œ‹็š„ไธ‹่ฝฝ', @@ -2551,10 +2561,15 @@ extension on TranslationsZh { 'accessibility.hexColor' => 'ๅๅ…ญ่ฟ›ๅˆถ้ขœ่‰ฒ', 'accessibility.expandText' => 'ๅฑ•ๅผ€ๆ–‡ๆœฌ', 'accessibility.collapseText' => 'ๆŠ˜ๅ ๆ–‡ๆœฌ', + 'accessibility.alphabetNavigation' => 'ๅญ—ๆฏๅฏผ่ˆช', + 'accessibility.alphabetScrollHint' => 'ไธŠไธ‹ๆป‘ๅŠจไปฅๆŒ‰ๅญ—ๆฏ็งปๅŠจ', + 'accessibility.rowColumnPosition' => ({required Object row, required Object rowCount, required Object column, required Object columnCount}) => '็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ๏ผ›็ฌฌ ${column} ๅˆ—๏ผŒๅ…ฑ ${columnCount} ๅˆ—', + 'accessibility.rowPosition' => ({required Object row, required Object rowCount}) => '็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ', 'tooltips.shufflePlay' => '้šๆœบๆ’ญๆ”พ', 'tooltips.playTrailer' => 'ๆ’ญๆ”พ้ข„ๅ‘Š็‰‡', 'tooltips.markAsWatched' => 'ๆ ‡่ฎฐไธบๅทฒ่ง‚็œ‹', 'tooltips.markAsUnwatched' => 'ๆ ‡่ฎฐไธบๆœช่ง‚็œ‹', + 'audioTracks.track' => ({required Object n}) => '้Ÿณ่ฝจ ${n}', 'videoControls.audioLabel' => '้Ÿณ้ข‘', 'videoControls.subtitlesLabel' => 'ๅญ—ๅน•', 'videoControls.resetToZero' => '้‡็ฝฎไธบ 0ms', @@ -2641,20 +2656,20 @@ extension on TranslationsZh { 'messages.markedAsUnwatched' => 'ๅทฒๆ ‡่ฎฐไธบๆœช่ง‚็œ‹', 'messages.markedAsWatchedOffline' => 'ๅทฒๆ ‡่ฎฐไธบๅทฒ่ง‚็œ‹ (ๅฐ†ๅœจ่”็ฝ‘ๆ—ถๅŒๆญฅ)', 'messages.markedAsUnwatchedOffline' => 'ๅทฒๆ ‡่ฎฐไธบๆœช่ง‚็œ‹ (ๅฐ†ๅœจ่”็ฝ‘ๆ—ถๅŒๆญฅ)', - 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ๅทฒ่‡ชๅŠจ็งป้™ค: ${title}', - 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: 'ๅทฒ่‡ชๅŠจ็งป้™ค ${n} ไธช็œ‹่ฟ‡็š„ไธ‹่ฝฝ', ), _ => null, } ?? switch (path) { + 'messages.autoRemovedWatchedDownload' => ({required Object title}) => 'ๅทฒ่‡ชๅŠจ็งป้™ค: ${title}', + 'messages.autoRemovedWatchedDownloads' => ({required num n}) => (_root.$meta.cardinalResolver ?? PluralResolvers.cardinal('zh'))(n, other: 'ๅทฒ่‡ชๅŠจ็งป้™ค ${n} ไธช็œ‹่ฟ‡็š„ไธ‹่ฝฝ', ), 'messages.removedFromContinueWatching' => 'ๅทฒไปŽ็ปง็ปญ่ง‚็œ‹ไธญ็งป้™ค', 'messages.errorLoading' => ({required Object error}) => '้”™่ฏฏ: ${error}', 'messages.streamInterrupted' => '่ง†้ข‘ๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎๆˆ–ๆ‹–ๅŠจ่ฟ›ๅบฆๆก้‡่ฏ•ใ€‚', 'messages.liveStreamInterrupted' => '็›ดๆ’ญๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎ้‡่ฏ•ใ€‚', 'messages.fileInfoNotAvailable' => 'ๆ–‡ไปถไฟกๆฏไธๅฏ็”จ', - 'messages.playbackAuthenticationRequired' => '', - 'messages.playbackServerUnavailable' => '', - 'messages.playbackDataInvalid' => '', - 'messages.playbackCancelled' => '', - 'messages.playbackFailed' => '', + 'messages.playbackAuthenticationRequired' => 'Sign in to the media server again to play this item.', + 'messages.playbackServerUnavailable' => 'The media server is unavailable. Try again later.', + 'messages.playbackDataInvalid' => 'The server returned invalid playback information.', + 'messages.playbackCancelled' => 'Playback was cancelled.', + 'messages.playbackFailed' => 'Playback could not be started.', 'messages.errorLoadingFileInfo' => ({required Object error}) => 'ๅŠ ่ฝฝๆ–‡ไปถไฟกๆฏๆ—ถๅ‡บ้”™: ${error}', 'messages.errorLoadingSeries' => 'ๅŠ ่ฝฝ็ณปๅˆ—ๆ—ถๅ‡บ้”™', 'messages.musicNotSupported' => 'ๅฐšไธๆ”ฏๆŒๆ’ญๆ”พ้Ÿณไน', @@ -2769,6 +2784,7 @@ extension on TranslationsZh { 'profiles.borrowExplain' => 'ๅ€Ÿ็”จๅฆไธ€ไธชไธชไบบ่ต„ๆ–™็š„่ฟžๆŽฅใ€‚ๅ— PIN ไฟๆŠค็š„ไธชไบบ่ต„ๆ–™้œ€่ฆ PINใ€‚', 'profiles.borrowEmpty' => 'ๆš‚ๆ— ๅฏๅ€Ÿ็”จ็š„ๅ†…ๅฎนใ€‚', 'profiles.borrowEmptySubtitle' => '่ฏทๅ…ˆๅฐ† Plex ๆˆ– Jellyfin ่ฟžๆŽฅๅˆฐๅฆไธ€ไธชไธชไบบ่ต„ๆ–™ใ€‚', + 'profiles.borrowLoadFailed' => 'Available connections could not be loaded. Try again.', 'profiles.borrowFromProfile' => ({required Object displayName}) => 'ๆฅ่‡ช ${displayName}', 'profiles.borrowConnectionBorrowed' => 'ๅทฒๅ€Ÿ็”จ่ฟžๆŽฅใ€‚', 'profiles.borrowFailed' => 'ๆ— ๆณ•ๅ€Ÿ็”จ่ฟžๆŽฅใ€‚', @@ -2994,7 +3010,7 @@ extension on TranslationsZh { 'liveTv.favorites' => 'ๆ”ถ่—', 'liveTv.reorderFavorites' => '้‡ๆ–ฐๆŽ’ๅบๆ”ถ่—', 'liveTv.favoritesLoadFailed' => 'ๆ— ๆณ•ๅŠ ่ฝฝๆ”ถ่—ใ€‚่ฏทๆฃ€ๆŸฅ็ฝ‘็ปœ่ฟžๆŽฅๅŽ้‡่ฏ•ใ€‚', - 'liveTv.favoritesUpdateFailed' => '', + 'liveTv.favoritesUpdateFailed' => 'Could not update favorites. Check your connection and try again.', 'liveTv.joinSession' => 'ๅŠ ๅ…ฅๆญฃๅœจ่ฟ›่กŒ็š„ไผš่ฏ', 'liveTv.watchFromStart' => ({required Object minutes}) => 'ไปŽๅคด่ง‚็œ‹๏ผˆ${minutes}ๅˆ†้’Ÿๅ‰ๅผ€ๅง‹๏ผ‰', 'liveTv.watchLive' => '่ง‚็œ‹็›ดๆ’ญ', @@ -3154,11 +3170,11 @@ extension on TranslationsZh { 'watchTogether.participantLeft' => ({required Object name}) => '${name} ็ฆปๅผ€ไบ†', 'watchTogether.participantPaused' => ({required Object name}) => '${name} ๆš‚ๅœไบ†', 'watchTogether.participantResumed' => ({required Object name}) => '${name} ็ปง็ปญๆ’ญๆ”พไบ†', + _ => null, + } ?? switch (path) { 'watchTogether.participantSeeked' => ({required Object name}) => '${name} ่ทณ่ฝฌไบ†', 'watchTogether.participantBuffering' => ({required Object name}) => '${name} ๆญฃๅœจ็ผ“ๅ†ฒ', 'watchTogether.participantNeedsUpdate' => ({required Object name}) => '${name} ๆญฃๅœจไฝฟ็”จ่พƒๆ—ง็‰ˆๆœฌ็š„ๅบ”็”จ๏ผŒๆ— ๆณ•ๅŒๆญฅ', - _ => null, - } ?? switch (path) { 'watchTogether.resumingWithout' => ({required Object name}) => 'ไธ็ญ‰ๅพ… ${name}๏ผŒ็ปง็ปญๆ’ญๆ”พ', 'watchTogether.waitingForParticipants' => '็ญ‰ๅพ…ๅ…ถไป–ไบบๅŠ ่ฝฝ...', 'watchTogether.waitingForName' => ({required Object name}) => 'ๆญฃๅœจ็ญ‰ๅพ… ${name}...', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index dd20a8db9..6489f48c9 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "Vรคntar pรฅ godkรคnnandeโ€ฆ", "quickConnectCancel": "Avbryt", "quickConnectExpired": "Quick Connect har gรฅtt ut. Fรถrsรถk igen.", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "Avbryt", @@ -180,7 +180,7 @@ "watchTogetherRelay": "Titta Tillsammans-relay", "watchTogetherRelayDescription": "Ange en anpassad relay. Alla mรฅste anvรคnda samma server.", "watchTogetherRelayHint": "https://min-relay.exempel.se", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "Kraschrapportering", "crashReportingDescription": "Skicka kraschrapporter fรถr att fรถrbรคttra appen", "debugLogging": "Felsรถkningsloggning", @@ -197,12 +197,10 @@ "exportSettings": "Exportera instรคllningar", "exportSettingsDescription": "Spara dina instรคllningar till en fil", "exportSettingsSuccess": "Instรคllningar exporterade", - "exportSettingsFailed": "Kunde inte exportera instรคllningar", "importSettings": "Importera instรคllningar", "importSettingsDescription": "ร…terstรคll instรคllningar frรฅn en fil", "importSettingsConfirm": "Detta ersรคtter dina nuvarande instรคllningar. Fortsรคtta?", "importSettingsSuccess": "Instรคllningar importerade", - "importSettingsFailed": "Kunde inte importera instรคllningar", "importSettingsInvalidFile": "Denna fil รคr inte en giltig Plezy-export", "importSettingsNoUser": "Logga in innan du importerar instรคllningar", "shortcutsReset": "Genvรคgar รฅterstรคllda till standard", @@ -217,6 +215,7 @@ "validationErrorDuration": "Tiden mรฅste vara mellan ${min} och ${max} ${unit}", "shortcutAlreadyAssigned": "Genvรคg redan tilldelad ${action}", "shortcutUpdated": "Genvรคg uppdaterad fรถr ${action}", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "Auto Hoppa ร–ver", "autoSkipIntro": "Hoppa ร–ver Intro Automatiskt", "autoSkipIntroDescription": "Hoppa automatiskt รถver intro-markรถrer efter nรฅgra sekunder", @@ -242,7 +241,7 @@ "downloadLocationChanged": "Nedladdningsplats รคndrad", "downloadLocationReset": "Nedladdningsplats รฅterstรคlld till standard", "downloadLocationInvalid": "Vald mapp รคr inte skrivbar", - "downloadLocationSelectError": "Kunde inte vรคlja mapp", + "downloadLocationPickerUnavailable": "Mappval รคr inte tillgรคngligt pรฅ den hรคr enheten", "downloadOnWifiOnly": "Ladda ner endast pรฅ WiFi", "downloadOnWifiOnlyDescription": "Fรถrhindra nedladdningar vid anvรคndning av mobildata", "autoRemoveWatchedDownloads": "Ta bort sedda nedladdningar automatiskt", @@ -443,7 +442,11 @@ "brightness": "Ljusstyrka", "hexColor": "Hexfรคrg", "expandText": "Expandera text", - "collapseText": "Fรคll ihop text" + "collapseText": "Fรคll ihop text", + "alphabetNavigation": "Alfabetisk navigering", + "alphabetScrollHint": "Svep upp eller ned fรถr att flytta en bokstav", + "rowColumnPosition": "Rad ${row} av ${rowCount}, kolumn ${column} av ${columnCount}", + "rowPosition": "Rad ${row} av ${rowCount}" }, "tooltips": { "shufflePlay": "Blanda uppspelning", @@ -451,6 +454,9 @@ "markAsWatched": "Markera som sedd", "markAsUnwatched": "Markera som osedd" }, + "audioTracks": { + "track": "Ljudspรฅr ${n}" + }, "videoControls": { "audioLabel": "Ljud", "subtitlesLabel": "Undertexter", @@ -478,6 +484,8 @@ "playNext": "Spela nรคsta", "playButton": "Spela", "pauseButton": "Pausa", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "Spola bakรฅt ${seconds} sekunder", "seekForwardButton": "Spola framรฅt ${seconds} sekunder", "previousButton": "Fรถregรฅende avsnitt", @@ -553,11 +561,11 @@ "streamInterrupted": "Uppspelningen avbrรถts. Tryck pรฅ play eller spola fรถr att fรถrsรถka igen.", "liveStreamInterrupted": "Livestreamen avbrรถts. Tryck pรฅ play fรถr att fรถrsรถka igen.", "fileInfoNotAvailable": "Filinformation inte tillgรคnglig", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "Fel vid laddning av filinformation: ${error}", "errorLoadingSeries": "Fel vid laddning av serie", "musicNotSupported": "Musikuppspelning stรถds inte รคnnu", @@ -680,6 +688,7 @@ "borrowExplain": "Lรฅna en annan profils anslutning. PIN-skyddade profiler krรคver en PIN.", "borrowEmpty": "Inget att lรฅna รคnnu.", "borrowEmptySubtitle": "Anslut Plex eller Jellyfin till en annan profil fรถrst.", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "Frรฅn ${displayName}", "borrowConnectionBorrowed": "Anslutning lรฅnad.", "borrowFailed": "Kunde inte lรฅna anslutningen.", @@ -944,7 +953,7 @@ "favorites": "Favoriter", "reorderFavorites": "Ordna om favoriter", "favoritesLoadFailed": "Det gick inte att lรคsa in favoriter. Kontrollera anslutningen och fรถrsรถk igen.", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "Gรฅ med i pรฅgรฅende session", "watchFromStart": "Titta frรฅn bรถrjan (${minutes} min sedan)", "watchLive": "Titta live", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index 8e8da55e4..69bf84315 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -17,7 +17,7 @@ "quickConnectWaiting": "็ญ‰ๅพ…ๆ‰นๅ‡†โ€ฆ", "quickConnectCancel": "ๅ–ๆถˆ", "quickConnectExpired": "Quick Connect ๅทฒ่ฟ‡ๆœŸใ€‚่ฏท้‡่ฏ•ใ€‚", - "localDataRecoveryRequired": "" + "localDataRecoveryRequired": "Plezy could not safely recover local sign-in and pending playback data. Please sign in again." }, "common": { "cancel": "ๅ–ๆถˆ", @@ -180,7 +180,7 @@ "watchTogetherRelay": "ไธ€่ตท็œ‹ไธญ็ปงๆœๅŠกๅ™จ", "watchTogetherRelayDescription": "่ฎพ็ฝฎ่‡ชๅฎšไน‰ไธญ็ปงใ€‚ๆ‰€ๆœ‰ไบบๅฟ…้กปไฝฟ็”จๅŒไธ€ๆœๅŠกๅ™จใ€‚", "watchTogetherRelayHint": "https://my-relay.example.com", - "watchTogetherRelayInvalid": "", + "watchTogetherRelayInvalid": "Enter a valid HTTP or HTTPS relay base URL.", "crashReporting": "ๅดฉๆบƒๆŠฅๅ‘Š", "crashReportingDescription": "ๅ‘้€ๅดฉๆบƒๆŠฅๅ‘ŠไปฅๅธฎๅŠฉๆ”น่ฟ›ๅบ”็”จ", "debugLogging": "่ฐƒ่ฏ•ๆ—ฅๅฟ—", @@ -197,12 +197,10 @@ "exportSettings": "ๅฏผๅ‡บ่ฎพ็ฝฎ", "exportSettingsDescription": "ๅฐ†ๆ‚จ็š„ๅๅฅฝไฟๅญ˜ๅˆฐๆ–‡ไปถ", "exportSettingsSuccess": "่ฎพ็ฝฎๅทฒๅฏผๅ‡บ", - "exportSettingsFailed": "ๆ— ๆณ•ๅฏผๅ‡บ่ฎพ็ฝฎ", "importSettings": "ๅฏผๅ…ฅ่ฎพ็ฝฎ", "importSettingsDescription": "ไปŽๆ–‡ไปถๆขๅคๅๅฅฝ", "importSettingsConfirm": "่ฟ™ๅฐ†ๆ›ฟๆขๆ‚จๅฝ“ๅ‰็š„่ฎพ็ฝฎใ€‚็ปง็ปญๅ—๏ผŸ", "importSettingsSuccess": "่ฎพ็ฝฎๅทฒๅฏผๅ…ฅ", - "importSettingsFailed": "ๆ— ๆณ•ๅฏผๅ…ฅ่ฎพ็ฝฎ", "importSettingsInvalidFile": "ๆญคๆ–‡ไปถไธๆ˜ฏๆœ‰ๆ•ˆ็š„ Plezy ่ฎพ็ฝฎๅฏผๅ‡บ", "importSettingsNoUser": "ๅฏผๅ…ฅ่ฎพ็ฝฎๅ‰่ฏทๅ…ˆ็™ปๅฝ•", "shortcutsReset": "ๅฟซๆท้”ฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎคๅ€ผ", @@ -217,6 +215,7 @@ "validationErrorDuration": "ๆ—ถ้•ฟๅฟ…้กปไป‹ไบŽ ${min} ๅ’Œ ${max} ${unit} ไน‹้—ด", "shortcutAlreadyAssigned": "ๅฟซๆท้”ฎๅทฒ่ขซๅˆ†้…็ป™ ${action}", "shortcutUpdated": "ๅฟซๆท้”ฎๅทฒไธบ ${action} ๆ›ดๆ–ฐ", + "saveFailed": "Could not save changes. Try again.", "autoSkip": "่‡ชๅŠจ่ทณ่ฟ‡", "autoSkipIntro": "่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคด", "autoSkipIntroDescription": "ๅ‡ ็ง’้’ŸๅŽ่‡ชๅŠจ่ทณ่ฟ‡็‰‡ๅคดๆ ‡่ฎฐ", @@ -242,7 +241,7 @@ "downloadLocationChanged": "ไธ‹่ฝฝไฝ็ฝฎๅทฒๆ›ดๆ”น", "downloadLocationReset": "ไธ‹่ฝฝไฝ็ฝฎๅทฒ้‡็ฝฎไธบ้ป˜่ฎค", "downloadLocationInvalid": "ๆ‰€้€‰ๆ–‡ไปถๅคนไธๅฏๅ†™ๅ…ฅ", - "downloadLocationSelectError": "้€‰ๆ‹ฉๆ–‡ไปถๅคนๅคฑ่ดฅ", + "downloadLocationPickerUnavailable": "ๆญค่ฎพๅค‡ไธๆ”ฏๆŒ้€‰ๆ‹ฉๆ–‡ไปถๅคน", "downloadOnWifiOnly": "ไป…ๅœจ WiFi ๆ—ถไธ‹่ฝฝ", "downloadOnWifiOnlyDescription": "ไฝฟ็”จ่œ‚็ชๆ•ฐๆฎๆ—ถ็ฆๆญขไธ‹่ฝฝ", "autoRemoveWatchedDownloads": "่‡ชๅŠจ็งป้™คๅทฒ่ง‚็œ‹็š„ไธ‹่ฝฝ", @@ -443,7 +442,11 @@ "brightness": "ไบฎๅบฆ", "hexColor": "ๅๅ…ญ่ฟ›ๅˆถ้ขœ่‰ฒ", "expandText": "ๅฑ•ๅผ€ๆ–‡ๆœฌ", - "collapseText": "ๆŠ˜ๅ ๆ–‡ๆœฌ" + "collapseText": "ๆŠ˜ๅ ๆ–‡ๆœฌ", + "alphabetNavigation": "ๅญ—ๆฏๅฏผ่ˆช", + "alphabetScrollHint": "ไธŠไธ‹ๆป‘ๅŠจไปฅๆŒ‰ๅญ—ๆฏ็งปๅŠจ", + "rowColumnPosition": "็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ๏ผ›็ฌฌ ${column} ๅˆ—๏ผŒๅ…ฑ ${columnCount} ๅˆ—", + "rowPosition": "็ฌฌ ${row} ่กŒ๏ผŒๅ…ฑ ${rowCount} ่กŒ" }, "tooltips": { "shufflePlay": "้šๆœบๆ’ญๆ”พ", @@ -451,6 +454,9 @@ "markAsWatched": "ๆ ‡่ฎฐไธบๅทฒ่ง‚็œ‹", "markAsUnwatched": "ๆ ‡่ฎฐไธบๆœช่ง‚็œ‹" }, + "audioTracks": { + "track": "้Ÿณ่ฝจ ${n}" + }, "videoControls": { "audioLabel": "้Ÿณ้ข‘", "subtitlesLabel": "ๅญ—ๅน•", @@ -478,6 +484,8 @@ "playNext": "ๆ’ญๆ”พไธ‹ไธ€้›†", "playButton": "ๆ’ญๆ”พ", "pauseButton": "ๆš‚ๅœ", + "showPlaybackControls": "", + "hidePlaybackControls": "", "seekBackwardButton": "ๅŽ้€€ ${seconds} ็ง’", "seekForwardButton": "ๅ‰่ฟ› ${seconds} ็ง’", "previousButton": "ไธŠไธ€้›†", @@ -552,11 +560,11 @@ "streamInterrupted": "่ง†้ข‘ๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎๆˆ–ๆ‹–ๅŠจ่ฟ›ๅบฆๆก้‡่ฏ•ใ€‚", "liveStreamInterrupted": "็›ดๆ’ญๆตๅทฒไธญๆ–ญใ€‚ๆŒ‰ๆ’ญๆ”พ้”ฎ้‡่ฏ•ใ€‚", "fileInfoNotAvailable": "ๆ–‡ไปถไฟกๆฏไธๅฏ็”จ", - "playbackAuthenticationRequired": "", - "playbackServerUnavailable": "", - "playbackDataInvalid": "", - "playbackCancelled": "", - "playbackFailed": "", + "playbackAuthenticationRequired": "Sign in to the media server again to play this item.", + "playbackServerUnavailable": "The media server is unavailable. Try again later.", + "playbackDataInvalid": "The server returned invalid playback information.", + "playbackCancelled": "Playback was cancelled.", + "playbackFailed": "Playback could not be started.", "errorLoadingFileInfo": "ๅŠ ่ฝฝๆ–‡ไปถไฟกๆฏๆ—ถๅ‡บ้”™: ${error}", "errorLoadingSeries": "ๅŠ ่ฝฝ็ณปๅˆ—ๆ—ถๅ‡บ้”™", "musicNotSupported": "ๅฐšไธๆ”ฏๆŒๆ’ญๆ”พ้Ÿณไน", @@ -679,6 +687,7 @@ "borrowExplain": "ๅ€Ÿ็”จๅฆไธ€ไธชไธชไบบ่ต„ๆ–™็š„่ฟžๆŽฅใ€‚ๅ— PIN ไฟๆŠค็š„ไธชไบบ่ต„ๆ–™้œ€่ฆ PINใ€‚", "borrowEmpty": "ๆš‚ๆ— ๅฏๅ€Ÿ็”จ็š„ๅ†…ๅฎนใ€‚", "borrowEmptySubtitle": "่ฏทๅ…ˆๅฐ† Plex ๆˆ– Jellyfin ่ฟžๆŽฅๅˆฐๅฆไธ€ไธชไธชไบบ่ต„ๆ–™ใ€‚", + "borrowLoadFailed": "Available connections could not be loaded. Try again.", "borrowFromProfile": "ๆฅ่‡ช ${displayName}", "borrowConnectionBorrowed": "ๅทฒๅ€Ÿ็”จ่ฟžๆŽฅใ€‚", "borrowFailed": "ๆ— ๆณ•ๅ€Ÿ็”จ่ฟžๆŽฅใ€‚", @@ -942,7 +951,7 @@ "favorites": "ๆ”ถ่—", "reorderFavorites": "้‡ๆ–ฐๆŽ’ๅบๆ”ถ่—", "favoritesLoadFailed": "ๆ— ๆณ•ๅŠ ่ฝฝๆ”ถ่—ใ€‚่ฏทๆฃ€ๆŸฅ็ฝ‘็ปœ่ฟžๆŽฅๅŽ้‡่ฏ•ใ€‚", - "favoritesUpdateFailed": "", + "favoritesUpdateFailed": "Could not update favorites. Check your connection and try again.", "joinSession": "ๅŠ ๅ…ฅๆญฃๅœจ่ฟ›่กŒ็š„ไผš่ฏ", "watchFromStart": "ไปŽๅคด่ง‚็œ‹๏ผˆ${minutes}ๅˆ†้’Ÿๅ‰ๅผ€ๅง‹๏ผ‰", "watchLive": "่ง‚็œ‹็›ดๆ’ญ", diff --git a/lib/mixins/grid_focus_node_mixin.dart b/lib/mixins/grid_focus_node_mixin.dart index ae5e334ad..9bc58530f 100644 --- a/lib/mixins/grid_focus_node_mixin.dart +++ b/lib/mixins/grid_focus_node_mixin.dart @@ -59,10 +59,12 @@ mixin GridFocusNodeMixin on State { } } for (final key in keysToRemove) { - final node = gridItemFocusNodes.remove(key); - if (node != null && !node.hasFocus) { - node.dispose(); - } + final node = gridItemFocusNodes[key]; + // A focused node is still borrowed by its mounted card. Keep ownership + // and indexed identity until a later eviction or final teardown. + if (node == null || node.hasFocus) continue; + gridItemFocusNodes.remove(key); + node.dispose(); } } diff --git a/lib/models/shader_preset.dart b/lib/models/shader_preset.dart index daa801327..e55f9e88c 100644 --- a/lib/models/shader_preset.dart +++ b/lib/models/shader_preset.dart @@ -208,38 +208,36 @@ class ShaderPreset { return ''; } - static List get allPresets { - return [ - none, - nvscalerDefault, - artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.neutral), - artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.denoise), - artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.denoiseSharpen), - artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.neutral), - artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.denoise), - artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.denoiseSharpen), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeA), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeB), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeC), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeAA), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeBB), - anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeCA), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeA), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeB), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeC), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeAA), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeBB), - anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeCA), - ]; - } + static final List _builtInPresets = List.unmodifiable([ + none, + nvscalerDefault, + artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.neutral), + artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.denoise), + artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.denoiseSharpen), + artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.neutral), + artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.denoise), + artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.denoiseSharpen), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeA), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeB), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeC), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeAA), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeBB), + anime4kPreset(Anime4KQuality.fast, Anime4KMode.modeCA), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeA), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeB), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeC), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeAA), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeBB), + anime4kPreset(Anime4KQuality.hq, Anime4KMode.modeCA), + ]); - static ShaderPreset? fromId(String id) { - try { - return allPresets.firstWhere((p) => p.id == id); - } catch (_) { - return null; - } - } + static final Map _builtInPresetsById = Map.unmodifiable({ + for (final preset in _builtInPresets) preset.id: preset, + }); + + static List get allPresets => _builtInPresets; + + static ShaderPreset? fromId(String id) => _builtInPresetsById[id]; bool get isEnabled => type != ShaderPresetType.none; diff --git a/lib/providers/shader_provider.dart b/lib/providers/shader_provider.dart index ae9e12da3..38c33dc75 100644 --- a/lib/providers/shader_provider.dart +++ b/lib/providers/shader_provider.dart @@ -15,6 +15,7 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { ShaderPreset _savedPreset = ShaderPreset.none; ShaderPreset _currentPreset = ShaderPreset.none; List _customPresets = []; + List _allPresets = ShaderPreset.allPresets; bool _initialized = false; ShaderProvider() { @@ -26,9 +27,22 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { } void _syncFromSettings(SettingsService service) { - final customData = service.read(SettingsService.customShaderPresets); - final customPresets = customData.map((json) => ShaderPreset.fromJson(json)).toList(); + final customPresets = []; + for (final json in service.read(SettingsService.customShaderPresets)) { + try { + final preset = ShaderPreset.fromJson(json); + final fileName = preset.fileName; + if (preset.type == ShaderPresetType.custom && + fileName != null && + ShaderAssetLoader.isValidCustomShaderFileName(fileName)) { + customPresets.add(preset); + } + } on Object { + // Imported settings can contain structurally invalid custom rows. + } + } _customPresets = customPresets; + _refreshAllPresets(); final presetId = service.read(SettingsService.globalShaderPreset); _savedPreset = findPresetById(presetId) ?? ShaderPreset.none; @@ -47,7 +61,7 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { bool get initialized => _initialized; ShaderPreset get savedPreset => _savedPreset; ShaderPreset get currentPreset => _currentPreset; - List get allPresets => [...ShaderPreset.allPresets, ..._customPresets]; + List get allPresets => _allPresets; List get customPresets => _customPresets; bool get isShaderEnabled => _currentPreset.type != ShaderPresetType.none; @@ -83,6 +97,7 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { final preset = ShaderPreset(id: id, name: displayName, type: ShaderPresetType.custom, fileName: storedFileName); _customPresets.add(preset); + _refreshAllPresets(); await _saveCustomPresets(); return preset; } @@ -94,6 +109,7 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { await ShaderAssetLoader.deleteCustomShader(preset.fileName!); } _customPresets.removeWhere((p) => p.id == preset.id); + _refreshAllPresets(); await _saveCustomPresets(); // Reset to none if the deleted preset was active @@ -102,6 +118,12 @@ class ShaderProvider extends ChangeNotifier with DisposableChangeNotifierMixin { } } + void _refreshAllPresets() { + _allPresets = _customPresets.isEmpty + ? ShaderPreset.allPresets + : List.unmodifiable([...ShaderPreset.allPresets, ..._customPresets]); + } + Future _saveCustomPresets() async { final service = _settingsBinding.settings ?? await SettingsService.getInstance(); final data = _customPresets.map((p) => p.toJson()).toList(); diff --git a/lib/screens/catalog_item_detail_screen.dart b/lib/screens/catalog_item_detail_screen.dart index eb3d9b6ed..143a51047 100644 --- a/lib/screens/catalog_item_detail_screen.dart +++ b/lib/screens/catalog_item_detail_screen.dart @@ -10,6 +10,7 @@ import '../focus/focusable_action_bar.dart'; import '../focus/dpad_navigator.dart'; import '../focus/input_mode_tracker.dart'; import '../focus/key_event_utils.dart'; +import '../focus/locked_hub_controller.dart'; import '../i18n/strings.g.dart'; import '../media/media_hub.dart'; import '../media/media_item.dart'; @@ -52,9 +53,11 @@ class CatalogItemDetailScreen extends StatefulWidget { class _CatalogItemDetailScreenState extends State { final _actionBarKey = GlobalKey(); + final _backButtonFocusNode = FocusNode(debugLabel: 'catalog_detail_back'); final _castSectionKey = GlobalKey(); final _castStripKey = GlobalKey(); final _relatedSectionKey = GlobalKey(); + final _hubFocusMemory = HubFocusMemory(); final ScrollController _scrollController = ScrollController(); List _libraryMatchFocusNodes = const []; CatalogSource? _watchlistSource; @@ -101,6 +104,7 @@ class _CatalogItemDetailScreenState extends State { @override void dispose() { + _backButtonFocusNode.dispose(); _watchlistSource?.watchlistChanges.removeListener(_onWatchlistChanged); for (final node in _libraryMatchFocusNodes) { node.dispose(); @@ -441,6 +445,7 @@ class _CatalogItemDetailScreenState extends State { items: [for (final item in related) item.toMediaItem()], size: related.length, ), + focusMemory: _hubFocusMemory, icon: Symbols.recommend_rounded, inset: true, onNavigateUp: _focusSectionAboveRelated, @@ -561,7 +566,7 @@ class _CatalogItemDetailScreenState extends State { ? t.explore.removeFromWatchlist : t.explore.addToWatchlist, onPressed: onWatchlist == null - ? () {} + ? null : () => unawaited(_toggleWatchlist()), ), if (_requestSource case final SeerrCatalogSource seerr) @@ -608,7 +613,7 @@ class _CatalogItemDetailScreenState extends State { top: 0, left: 0, child: DesktopAppBarHelper.buildAdjustedLeading( - const AppBarBackButton(style: BackButtonStyle.circular), + AppBarBackButton(style: BackButtonStyle.circular, focusNode: _backButtonFocusNode), context: hostContext, )!, ), diff --git a/lib/screens/discover_screen.dart b/lib/screens/discover_screen.dart index 2bd853c6f..39f5aaaec 100644 --- a/lib/screens/discover_screen.dart +++ b/lib/screens/discover_screen.dart @@ -10,6 +10,7 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:provider/provider.dart'; import '../focus/focusable_action_bar.dart'; import '../focus/hub_vertical_navigation.dart'; +import '../focus/locked_hub_controller.dart'; import '../focus/input_mode_tracker.dart'; import '../focus/key_event_utils.dart'; import 'package:cached_network_image_ce/cached_network_image.dart'; @@ -112,6 +113,7 @@ class _DiscoverScreenState extends State final Map> _hubKeysByIdentity = {}; List> _orderedHubKeys = const []; final _tvBrowseRailKey = GlobalKey(); + final _hubFocusMemory = HubFocusMemory(); // Hero and app bar focus late FocusNode _heroFocusNode; @@ -1045,6 +1047,7 @@ class _DiscoverScreenState extends State more: _hasMoreContinueWatching, items: _onDeck, ), + focusMemory: _hubFocusMemory, icon: Symbols.play_circle_rounded, onRefresh: _discover.updateItem, onRemoveFromContinueWatching: _discover.refreshContinueWatching, @@ -1062,6 +1065,7 @@ class _DiscoverScreenState extends State child: HubSection( key: i < _orderedHubKeys.length ? _orderedHubKeys[i] : null, hub: _hubs[i], + focusMemory: _hubFocusMemory, icon: _getHubIcon(_hubs[i].title), showServerName: showServerNameOnHubs || hubsSpanMultipleServers, onRefresh: _discover.updateItem, @@ -1146,6 +1150,7 @@ class _DiscoverScreenState extends State return _tvBrowseRailWidget = TvBrowseRail( key: _tvBrowseRailKey, hubs: browseHubs, + focusMemory: _hubFocusMemory, showServerName: showServerName, iconForHub: (hub, _) => hub.id == 'continue_watching' ? Symbols.play_circle_rounded : _getHubIcon(hub.title), onFocusedItemChanged: _setSpotlightItem, diff --git a/lib/screens/explore_screen.dart b/lib/screens/explore_screen.dart index ff859f835..0d3550f70 100644 --- a/lib/screens/explore_screen.dart +++ b/lib/screens/explore_screen.dart @@ -6,6 +6,7 @@ import 'package:provider/provider.dart'; import '../focus/focusable_action_bar.dart'; import '../focus/hub_vertical_navigation.dart'; +import '../focus/locked_hub_controller.dart'; import '../i18n/strings.g.dart'; import '../media/ids.dart'; import '../media/media_hub.dart'; @@ -54,6 +55,7 @@ class ExploreScreenState extends State final _sourceMenuKey = GlobalKey>(); final _tvBrowseRailKey = GlobalKey(); + final _hubFocusMemory = HubFocusMemory(); final TvSpotlightController _spotlight = TvSpotlightController(); @override @@ -302,6 +304,7 @@ class ExploreScreenState extends State child: HubSection( key: _orderedHubKeys[i], hub: rowHubs[i].hub, + focusMemory: _hubFocusMemory, icon: _rowIcon(rowHubs[i].row), loadMoreItems: rowHubs[i].hub.more ? () => _explore.loadAllForHub(rowHubs[i]) : null, onVerticalNavigation: (isUp) => _handleVerticalNavigation(i, isUp), @@ -431,6 +434,7 @@ class ExploreScreenState extends State child: TvBrowseRail( key: _tvBrowseRailKey, hubs: tvHubs, + focusMemory: _hubFocusMemory, iconForHub: (hub, _) => _rowIcon(_rowForHub(hub)?.row), onFocusedItemChanged: _setSpotlightItem, loadMoreItems: (hub) { diff --git a/lib/screens/focusable_detail_screen_mixin.dart b/lib/screens/focusable_detail_screen_mixin.dart index 37b7bba8a..02c7bc9c2 100644 --- a/lib/screens/focusable_detail_screen_mixin.dart +++ b/lib/screens/focusable_detail_screen_mixin.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import '../focus/focusable_action_bar.dart'; import '../focus/input_mode_tracker.dart'; import '../focus/key_event_utils.dart'; +import '../i18n/strings.g.dart'; import '../media/media_item.dart'; import '../media/media_playlist.dart'; import '../mixins/grid_focus_node_mixin.dart'; @@ -195,6 +196,7 @@ mixin FocusableDetailScreenMixin on State, GridFocu key: Key(_idForItem(item)), item: item, focusNode: focusNode, + semanticValue: _semanticPosition(position), disableScale: position.disableScale, onRefresh: onRefresh, collectionId: collectionId, @@ -233,7 +235,8 @@ mixin FocusableDetailScreenMixin on State, GridFocu final fullCardLayout = PlatformDetector.isTV() && svc.read(SettingsService.tvFullCardLayout); final useFullCardLayout = fullCardLayout && shape != CardShape.square; - Widget buildTile(int index, {required bool inFirstRow, required bool disableScale}) { + Widget buildTile(MediaCardSliverPosition position) { + final index = position.index; final item = itemAt(index); if (item == null) { onSkeletonVisible?.call(index); @@ -244,13 +247,14 @@ mixin FocusableDetailScreenMixin on State, GridFocu key: Key(item.id), item: item, focusNode: focusNode, - disableScale: disableScale, + semanticValue: _semanticPosition(position), + disableScale: position.disableScale, onRefresh: onRefresh, collectionId: collectionId, onListRefresh: onListRefresh, - fullBleedImage: useFullCardLayout && !disableScale, + fullBleedImage: useFullCardLayout && position.isGrid, cardShapeOverride: shape, - onNavigateUp: inFirstRow ? navigateToAppBar : null, + onNavigateUp: position.isFirstRow ? navigateToAppBar : null, onBack: handleBackFromContent, onFocusChange: (hasFocus) => trackGridItemFocus(index, hasFocus), ); @@ -263,10 +267,23 @@ mixin FocusableDetailScreenMixin on State, GridFocu padding: const EdgeInsets.all(8), fullBleedImage: useFullCardLayout, shape: shape, - itemBuilder: (context, position) => - buildTile(position.index, inFirstRow: position.isFirstRow, disableScale: position.disableScale), + itemBuilder: (context, position) => buildTile(position), ); }, ); } + + String _semanticPosition(MediaCardSliverPosition position) { + if (!position.isGrid) { + return t.accessibility.rowPosition(row: position.index + 1, rowCount: position.itemCount); + } + + final rowCount = (position.itemCount + position.columnCount - 1) ~/ position.columnCount; + return t.accessibility.rowColumnPosition( + row: position.index ~/ position.columnCount + 1, + rowCount: rowCount, + column: position.index % position.columnCount + 1, + columnCount: position.columnCount, + ); + } } diff --git a/lib/screens/libraries/alpha_jump_bar.dart b/lib/screens/libraries/alpha_jump_bar.dart index d22a40c2e..aff123318 100644 --- a/lib/screens/libraries/alpha_jump_bar.dart +++ b/lib/screens/libraries/alpha_jump_bar.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import '../../focus/key_event_utils.dart'; +import '../../i18n/strings.g.dart'; import '../../media/library_first_character.dart'; import '../../widgets/clickable_cursor.dart'; import 'alpha_jump_helper.dart'; @@ -217,73 +218,89 @@ class _AlphaJumpBarState extends State { final markerSize = (letterSlotHeight - 2).clamp(10.0, 18.0).toDouble(); final fontSize = (letterSlotHeight * 0.58).clamp(7.0, 10.0).toDouble(); - return ClickableCursor( - child: GestureDetector( - behavior: HitTestBehavior.opaque, - onTapDown: (details) { - final idx = _letterIndexFromDy(details.localPosition.dy, constraints.maxHeight); - setState(() => _highlightedIndex = idx); - _jumpToLetter(_displayed[idx]); - }, - onVerticalDragUpdate: (details) { - final idx = _letterIndexFromDy(details.localPosition.dy, constraints.maxHeight); - if (idx != _highlightedIndex) { + return Semantics( + container: true, + explicitChildNodes: true, + label: t.accessibility.alphabetNavigation, + child: ClickableCursor( + child: GestureDetector( + excludeFromSemantics: true, + behavior: HitTestBehavior.opaque, + onTapDown: (details) { + final idx = _letterIndexFromDy(details.localPosition.dy, constraints.maxHeight); setState(() => _highlightedIndex = idx); _jumpToLetter(_displayed[idx]); - } - }, - child: Container( - width: 20, - decoration: BoxDecoration( - color: colorScheme.surface.withValues(alpha: 0.7), - borderRadius: const BorderRadius.all(Radius.circular(10)), - ), - child: Column( - mainAxisAlignment: .spaceEvenly, - children: List.generate(_displayed.length, (i) { - final letter = _displayed[i]; - final isCurrent = letter == currentLetter && !_hasFocus; - final isHighlighted = _hasFocus && i == _highlightedIndex; + }, + onVerticalDragUpdate: (details) { + final idx = _letterIndexFromDy(details.localPosition.dy, constraints.maxHeight); + if (idx != _highlightedIndex) { + setState(() => _highlightedIndex = idx); + _jumpToLetter(_displayed[idx]); + } + }, + child: Container( + width: 20, + decoration: BoxDecoration( + color: colorScheme.surface.withValues(alpha: 0.7), + borderRadius: const BorderRadius.all(Radius.circular(10)), + ), + child: Column( + mainAxisAlignment: .spaceEvenly, + children: List.generate(_displayed.length, (i) { + final letter = _displayed[i]; + final isCurrent = letter == currentLetter && !_hasFocus; + final isHighlighted = _hasFocus && i == _highlightedIndex; - BoxDecoration? decoration; - if (isHighlighted) { - decoration = BoxDecoration(color: colorScheme.primary, shape: BoxShape.circle); - } else if (isCurrent) { - decoration = BoxDecoration( - color: colorScheme.primary.withValues(alpha: 0.3), - shape: BoxShape.circle, - ); - } + BoxDecoration? decoration; + if (isHighlighted) { + decoration = BoxDecoration(color: colorScheme.primary, shape: BoxShape.circle); + } else if (isCurrent) { + decoration = BoxDecoration( + color: colorScheme.primary.withValues(alpha: 0.3), + shape: BoxShape.circle, + ); + } - Color letterColor; - if (isHighlighted) { - letterColor = colorScheme.onPrimary; - } else if (isCurrent) { - letterColor = colorScheme.primary; - } else { - letterColor = colorScheme.onSurface; - } + Color letterColor; + if (isHighlighted) { + letterColor = colorScheme.onPrimary; + } else if (isCurrent) { + letterColor = colorScheme.primary; + } else { + letterColor = colorScheme.onSurface; + } - return SizedBox( - height: letterSlotHeight, - child: Center( - child: Container( - width: markerSize, - height: markerSize, - decoration: decoration, - alignment: .center, - child: Text( - letter, - style: TextStyle( - fontSize: fontSize, - fontWeight: (isCurrent || isHighlighted) ? FontWeight.bold : FontWeight.normal, - color: letterColor, + return Semantics( + button: true, + selected: isCurrent || isHighlighted, + label: letter, + excludeSemantics: true, + onTap: () { + setState(() => _highlightedIndex = i); + _jumpToLetter(letter); + }, + child: SizedBox( + height: letterSlotHeight, + child: Center( + child: Container( + width: markerSize, + height: markerSize, + decoration: decoration, + alignment: .center, + child: Text( + letter, + style: TextStyle( + fontSize: fontSize, + fontWeight: (isCurrent || isHighlighted) ? FontWeight.bold : FontWeight.normal, + color: letterColor, + ), + ), ), ), ), - ), - ); - }), + ); + }), + ), ), ), ), diff --git a/lib/screens/libraries/alpha_scroll_handle.dart b/lib/screens/libraries/alpha_scroll_handle.dart index cac1ba734..d47fcdce8 100644 --- a/lib/screens/libraries/alpha_scroll_handle.dart +++ b/lib/screens/libraries/alpha_scroll_handle.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import '../../i18n/strings.g.dart'; import '../../media/library_first_character.dart'; import 'alpha_jump_helper.dart'; @@ -141,88 +142,117 @@ class _AlphaScrollHandleState extends State with SingleTicker _scheduleHide(); } + int get _semanticLetterIndex { + if (_helper.letters.isEmpty) return -1; + final index = _helper.letters.indexOf(_dragLetter ?? widget.currentLetter); + return index < 0 ? 0 : index; + } + + void _stepSemantics(int delta) { + final currentIndex = _semanticLetterIndex; + if (currentIndex < 0) return; + final targetIndex = (currentIndex + delta).clamp(0, _helper.letters.length - 1); + if (targetIndex == currentIndex) return; + final letter = _helper.letters[targetIndex]; + _show(); + _scheduleHide(); + widget.onJump(_helper.indexForLetter(letter) ?? 0); + } + @override Widget build(BuildContext context) { - return AnimatedBuilder( - animation: _opacityController, - builder: (context, child) { - final opacity = _opacityController.value; - // Prevent stealing taps when fully hidden - if (opacity == 0.0) return const SizedBox.shrink(); + final semanticIndex = _semanticLetterIndex; + return Semantics( + label: t.accessibility.alphabetNavigation, + value: _dragLetter ?? widget.currentLetter, + hint: t.accessibility.alphabetScrollHint, + increasedValue: semanticIndex >= 0 && semanticIndex < _helper.letters.length - 1 + ? _helper.letters[semanticIndex + 1] + : null, + decreasedValue: semanticIndex > 0 ? _helper.letters[semanticIndex - 1] : null, + onIncrease: semanticIndex >= 0 && semanticIndex < _helper.letters.length - 1 ? () => _stepSemantics(1) : null, + onDecrease: semanticIndex > 0 ? () => _stepSemantics(-1) : null, + child: AnimatedBuilder( + animation: _opacityController, + builder: (context, child) { + final opacity = _opacityController.value; + return IgnorePointer( + ignoring: opacity == 0.0, + child: Opacity(opacity: opacity, child: child), + ); + }, + child: LayoutBuilder( + builder: (context, constraints) { + final trackHeight = constraints.maxHeight; + _trackHeight = trackHeight; - return Opacity(opacity: opacity, child: child); - }, - child: LayoutBuilder( - builder: (context, constraints) { - final trackHeight = constraints.maxHeight; - _trackHeight = trackHeight; + final fraction = _isDragging && _dragFraction != null + ? _dragFraction! + : _helper.fractionForLetter(widget.currentLetter); + final usableHeight = trackHeight - _handleHeight; + final handleTop = usableHeight > 0 ? (fraction * usableHeight) : 0.0; - final fraction = _isDragging && _dragFraction != null - ? _dragFraction! - : _helper.fractionForLetter(widget.currentLetter); - final usableHeight = trackHeight - _handleHeight; - final handleTop = usableHeight > 0 ? (fraction * usableHeight) : 0.0; - - final colorScheme = Theme.of(context).colorScheme; - - return SizedBox( - width: _touchTargetWidth + _bubbleSize + _bubbleMarginRight, - height: trackHeight, - child: Stack( - clipBehavior: Clip.none, - children: [ - // Handle pill with touch target โ€” only around the pill's position, - // not the full track, so it doesn't steal scroll gestures. - // Extra vertical padding makes it easier to grab. - Positioned( - right: 0, - top: handleTop - _touchTargetVerticalPadding, - child: MouseRegion( - cursor: SystemMouseCursors.resizeUpDown, - child: GestureDetector( - behavior: HitTestBehavior.opaque, - onVerticalDragStart: _onDragStart, - onVerticalDragUpdate: _onDragUpdate, - onVerticalDragEnd: _onDragEnd, - child: SizedBox( - width: _touchTargetWidth, - height: _handleHeight + _touchTargetVerticalPadding * 2, - child: Align( - alignment: .centerRight, - child: Container( - margin: const EdgeInsets.only(right: 2), - width: _handleWidth, - height: _handleHeight, - decoration: BoxDecoration( - color: colorScheme.onSurface.withValues(alpha: 0.5), - borderRadius: const BorderRadius.all(Radius.circular(_handleRadius)), + final colorScheme = Theme.of(context).colorScheme; + return SizedBox( + width: _touchTargetWidth + _bubbleSize + _bubbleMarginRight, + height: trackHeight, + child: Stack( + clipBehavior: Clip.none, + children: [ + // Handle pill with touch target โ€” only around the pill's position, + // not the full track, so it doesn't steal scroll gestures. + // Extra vertical padding makes it easier to grab. + Positioned( + right: 0, + top: handleTop - _touchTargetVerticalPadding, + child: MouseRegion( + cursor: SystemMouseCursors.resizeUpDown, + child: GestureDetector( + excludeFromSemantics: true, + behavior: HitTestBehavior.opaque, + onVerticalDragStart: _onDragStart, + onVerticalDragUpdate: _onDragUpdate, + onVerticalDragEnd: _onDragEnd, + child: SizedBox( + width: _touchTargetWidth, + height: _handleHeight + _touchTargetVerticalPadding * 2, + child: Align( + alignment: .centerRight, + child: Container( + margin: const EdgeInsets.only(right: 2), + width: _handleWidth, + height: _handleHeight, + decoration: BoxDecoration( + color: colorScheme.onSurface.withValues(alpha: 0.5), + borderRadius: const BorderRadius.all(Radius.circular(_handleRadius)), + ), ), ), ), ), ), ), - ), - // Letter bubble (only while dragging) - if (_isDragging && _dragLetter != null) - Positioned( - right: _touchTargetWidth + _bubbleMarginRight, - top: handleTop + (_handleHeight - _bubbleSize) / 2, - child: Container( - width: _bubbleSize, - height: _bubbleSize, - decoration: BoxDecoration(color: colorScheme.primary, shape: BoxShape.circle), - alignment: .center, - child: Text( - _dragLetter!, - style: TextStyle(color: colorScheme.onPrimary, fontSize: _bubbleFontSize, fontWeight: .bold), + // Letter bubble (only while dragging) + if (_isDragging && _dragLetter != null) + Positioned( + right: _touchTargetWidth + _bubbleMarginRight, + top: handleTop + (_handleHeight - _bubbleSize) / 2, + child: Container( + width: _bubbleSize, + height: _bubbleSize, + decoration: BoxDecoration(color: colorScheme.primary, shape: BoxShape.circle), + alignment: .center, + child: Text( + _dragLetter!, + style: TextStyle(color: colorScheme.onPrimary, fontSize: _bubbleFontSize, fontWeight: .bold), + ), ), ), - ), - ], - ), - ); - }, + ], + ), + ); + }, + ), ), ); } diff --git a/lib/screens/libraries/tabs/library_recommended_tab.dart b/lib/screens/libraries/tabs/library_recommended_tab.dart index ef508b2a0..5826a7800 100644 --- a/lib/screens/libraries/tabs/library_recommended_tab.dart +++ b/lib/screens/libraries/tabs/library_recommended_tab.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; import '../../../focus/hub_vertical_navigation.dart'; +import '../../../focus/locked_hub_controller.dart'; import '../../../i18n/strings.g.dart'; import '../../../media/media_hub.dart'; import '../../../media/media_item.dart'; @@ -50,9 +51,18 @@ class _LibraryRecommendedTabState extends BaseLibraryTabState> _hubKeys = []; final _tvBrowseRailKey = GlobalKey(); final TvSpotlightController _spotlight = TvSpotlightController(); + HubFocusMemory _hubFocusMemory = HubFocusMemory(); void _setSpotlightItem(MediaItem item) => _spotlight.select(item); + @override + void didUpdateWidget(LibraryRecommendedTab oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.library.globalKey != widget.library.globalKey) { + _hubFocusMemory = HubFocusMemory(); + } + } + @override void dispose() { _spotlight.dispose(); @@ -305,6 +315,7 @@ class _LibraryRecommendedTabState extends BaseLibraryTabState _getHubIcon(hub), onFocusedItemChanged: _setSpotlightItem, onRefresh: updateItem, diff --git a/lib/screens/livetv/tabs/whats_on_tab.dart b/lib/screens/livetv/tabs/whats_on_tab.dart index 7409cdb8d..70c400b99 100644 --- a/lib/screens/livetv/tabs/whats_on_tab.dart +++ b/lib/screens/livetv/tabs/whats_on_tab.dart @@ -6,6 +6,7 @@ import 'package:material_symbols_icons/symbols.dart'; import 'package:provider/provider.dart'; import '../../../focus/hub_vertical_navigation.dart'; +import '../../../focus/locked_hub_controller.dart'; import '../../../i18n/strings.g.dart'; import '../../../media/media_hub.dart'; import '../../../media/media_item.dart'; @@ -39,6 +40,7 @@ class WhatsOnTabState extends State Timer? _refreshTimer; final Map> _hubKeysById = {}; List> _hubKeys = []; + final _hubFocusMemory = HubFocusMemory(); bool _refreshRequested = true; bool _tickerEnabled = false; bool _appRefreshActive = true; @@ -210,6 +212,7 @@ class WhatsOnTabState extends State return HubSection( key: _hubKeys[index], hub: hub.mediaHub, + focusMemory: _hubFocusMemory, icon: Symbols.live_tv_rounded, cardSizing: HubCardSizing.grid, episodePosterModeOverride: EpisodePosterMode.seriesPoster, diff --git a/lib/screens/media_detail_screen.dart b/lib/screens/media_detail_screen.dart index 00b9e63f6..e692356f6 100644 --- a/lib/screens/media_detail_screen.dart +++ b/lib/screens/media_detail_screen.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:math' as math; import '../media/ids.dart'; -import 'dart:io'; import 'package:cached_network_image_ce/cached_network_image.dart'; import 'package:flutter/material.dart'; @@ -23,6 +22,7 @@ import '../focus/dpad_select_long_press_controller.dart'; import '../focus/focusable_action_bar.dart'; import '../focus/focusable_wrapper.dart'; import '../focus/hub_vertical_navigation.dart'; +import '../focus/locked_hub_controller.dart'; import '../focus/key_event_utils.dart'; import '../focus/input_mode_tracker.dart'; import '../widgets/cast_member_strip.dart'; @@ -288,6 +288,7 @@ class _MediaDetailScreenState extends State bool _hasLoadedExtras = false; bool _hasLoadedRelatedHubs = false; final _tvDetailRailKey = GlobalKey(); + final _hubFocusMemory = HubFocusMemory(); PageRoute? _route; RouteObserver>? _routeObserver; late final ScrollController _scrollController; @@ -361,6 +362,7 @@ class _MediaDetailScreenState extends State late final FocusNode _playButtonFocusNode; late final FocusNode _ratingChipFocusNode; + late final FocusNode _backButtonFocusNode; final _extrasSelectLongPress = DpadSelectLongPressController(); // Context menu key for the three-dots button @@ -687,6 +689,7 @@ class _MediaDetailScreenState extends State _extrasFocusNode.addListener(_handleExtrasFocusChange); _playButtonFocusNode = FocusNode(debugLabel: 'play_button'); _ratingChipFocusNode = FocusNode(debugLabel: 'rating_chip'); + _backButtonFocusNode = FocusNode(debugLabel: 'media_detail_back'); _overviewFocusNode = FocusNode(debugLabel: 'overview'); _infoRowsFocusNode = FocusNode(debugLabel: 'info_rows'); _loadFullMetadata(); @@ -881,6 +884,7 @@ class _MediaDetailScreenState extends State _focusedExtraIndexNotifier.dispose(); _playButtonFocusNode.dispose(); _ratingChipFocusNode.dispose(); + _backButtonFocusNode.dispose(); _overviewFocusNode.dispose(); _infoRowsFocusNode.dispose(); _extrasSelectLongPress.dispose(); @@ -1190,20 +1194,23 @@ class _MediaDetailScreenState extends State required ImageType imageType, Alignment alignment = Alignment.center, Widget Function(BuildContext, String, dynamic)? errorWidget, + Widget Function(BuildContext, String)? placeholder, }) { if (!widget.isOffline || _metadata.serverId == null) return null; for (final artworkPath in artworkPaths) { - final localPath = _offlineArtworkLocalPath(context, artworkPath); + final localPath = _offlineArtworkCandidatePath(context, artworkPath); if (localPath == null) continue; return OptimizedMediaImage( client: null, imagePath: null, localFilePath: localPath, + cacheMissingLocalFile: true, fit: fit, alignment: alignment, imageType: imageType, + placeholder: placeholder, errorWidget: errorWidget, ); } @@ -1211,11 +1218,9 @@ class _MediaDetailScreenState extends State return null; } - String? _offlineArtworkLocalPath(BuildContext context, String? artworkPath) { + String? _offlineArtworkCandidatePath(BuildContext context, String? artworkPath) { if (!widget.isOffline || _metadata.serverId == null) return null; - final localPath = context.read().getArtworkLocalPath(ServerId(_metadata.serverId!), artworkPath); - if (localPath == null || !File(localPath).existsSync()) return null; - return localPath; + return context.read().getArtworkLocalPath(ServerId(_metadata.serverId!), artworkPath); } String _syncRuleKeyForMetadata(BuildContext context, DownloadProvider downloadProvider, MediaItem metadata) { @@ -2235,6 +2240,7 @@ class _MediaDetailScreenState extends State artworkPaths: [posterPath], fit: BoxFit.cover, imageType: ImageType.poster, + placeholder: (context, url) => const PlaceholderContainer(), errorWidget: (context, url, error) => const PlaceholderContainer(), ); topImage = SizedBox( @@ -3044,6 +3050,7 @@ class _MediaDetailScreenState extends State final backButton = AppBarBackButton( style: BackButtonStyle.plain, onPressed: () => Navigator.pop(context, _watchStateChanged), + focusNode: _backButtonFocusNode, ); final loading = ListenableBuilder( listenable: FullscreenStateManager(), @@ -3219,6 +3226,7 @@ class _MediaDetailScreenState extends State HubSection( key: _relatedHubKeys[i], hub: _relatedHubs[i], + focusMemory: _hubFocusMemory, icon: _getRelatedHubIcon(_relatedHubs[i]), inset: true, onVerticalNavigation: (isUp) => _handleRelatedHubNavigation(i, isUp), @@ -3294,6 +3302,7 @@ class _MediaDetailScreenState extends State AppBarBackButton( style: BackButtonStyle.circular, onPressed: () => Navigator.pop(context, _watchStateChanged), + focusNode: _backButtonFocusNode, ), context: context, )!, @@ -3353,6 +3362,7 @@ class _MediaDetailScreenState extends State AppBarBackButton( style: BackButtonStyle.circular, onPressed: () => Navigator.pop(context, _watchStateChanged), + focusNode: _backButtonFocusNode, ), context: context, )!, @@ -3365,6 +3375,7 @@ class _MediaDetailScreenState extends State child: TvBrowseRail( key: _tvDetailRailKey, hubs: detailHubs, + focusMemory: _hubFocusMemory, iconForHub: _getTvDetailHubIcon, onFocusedHubItemChanged: _handleTvDetailFocusedRailItemChanged, onRefresh: (source) => unawaited(_refreshItemInPlace(source)), @@ -3399,7 +3410,9 @@ class _MediaDetailScreenState extends State item: metadata, client: _getArtworkMediaClient(context), showInfo: false, - localArtworkPathResolver: widget.isOffline ? (path) => _offlineArtworkLocalPath(context, path) : null, + localArtworkPathResolver: widget.isOffline + ? (path) => _offlineArtworkCandidatePath(context, path) + : null, allowNetwork: !widget.isOffline, ), _buildTvDetailRevealGate(revealContent, handleBack), @@ -3642,6 +3655,7 @@ class _MediaDetailScreenState extends State fit: BoxFit.contain, alignment: .centerLeft, imageType: ImageType.heroLogo, + placeholder: (context, url) => titleFallback(context), errorWidget: (context, url, error) => titleFallback(context), ); if (localArtwork != null) return localArtwork; @@ -4184,7 +4198,7 @@ class _MediaDetailScreenState extends State fallbackImagePaths: heroArtPaths, client: _getArtworkMediaClient(context), localArtworkPathResolver: widget.isOffline - ? (path) => _offlineArtworkLocalPath(context, path) + ? (path) => _offlineArtworkCandidatePath(context, path) : null, allowNetwork: !widget.isOffline, width: size.width, diff --git a/lib/screens/profile/borrow_connection_screen.dart b/lib/screens/profile/borrow_connection_screen.dart index 8559bc3db..6ccc427d9 100644 --- a/lib/screens/profile/borrow_connection_screen.dart +++ b/lib/screens/profile/borrow_connection_screen.dart @@ -60,7 +60,22 @@ class _BorrowConnectionScreenState extends State { _candidatesFuture = _loadCandidates(); } + void _retryCandidates() { + setState(() { + _candidatesFuture = _loadCandidates(); + }); + } + Future> _loadCandidates() async { + try { + return await _loadCandidatesUnchecked(); + } catch (error, stackTrace) { + appLogger.w('Borrow candidate load failed', error: error, stackTrace: stackTrace); + Error.throwWithStackTrace(error, stackTrace); + } + } + + Future> _loadCandidatesUnchecked() async { final pcRegistry = context.read(); final connRegistry = context.read(); final profileRegistry = context.read(); @@ -159,7 +174,59 @@ class _BorrowConnectionScreenState extends State { return FutureBuilder>( future: _candidatesFuture, builder: (context, snapshot) { - final candidates = snapshot.data ?? const <_BorrowCandidate>[]; + late final Widget candidateSliver; + if (snapshot.connectionState != ConnectionState.done) { + candidateSliver = LoadingIndicatorBox.sliver; + } else if (snapshot.hasError) { + candidateSliver = SliverFillRemaining( + child: ErrorStateWidget( + message: t.profiles.borrowLoadFailed, + onRetry: _retryCandidates, + actionAutofocus: true, + actionUseBackgroundFocus: true, + ), + ); + } else { + final candidates = snapshot.requireData; + if (candidates.isEmpty) { + candidateSliver = SliverFillRemaining( + child: EmptyStateWidget( + message: t.profiles.borrowEmpty, + subtitle: t.profiles.borrowEmptySubtitle, + icon: Symbols.share_rounded, + iconSize: 48, + ), + ); + } else { + candidateSliver = SliverList( + delegate: SliverChildBuilderDelegate((context, index) { + final cand = candidates[index]; + // M3E connected-group geometry: large outer corners, small + // inner corners, hairline gaps between tiles. + final tokensRef = tokens(context); + final tileRadii = BorderRadius.vertical( + top: Radius.circular(index == 0 ? tokensRef.radiusLg : tokensRef.radiusXs), + bottom: Radius.circular(index == candidates.length - 1 ? tokensRef.radiusLg : tokensRef.radiusXs), + ); + return Padding( + padding: EdgeInsets.fromLTRB(16, index == 0 ? 4 : tokensRef.groupGap, 16, 0), + child: FocusableWrapper( + autofocus: index == 0, + disableScale: true, + borderRadii: tileRadii, + onSelect: _busy ? null : () => _borrow(cand), + child: Card( + shape: RoundedRectangleBorder(borderRadius: tileRadii), + clipBehavior: Clip.antiAlias, + child: _BorrowTile(candidate: cand, borderRadius: tileRadii, onTap: () => _borrow(cand)), + ), + ), + ); + }, childCount: candidates.length), + ); + } + } + return FocusedScrollScaffold( title: Text(t.profiles.borrowAddTo(displayName: widget.targetProfile.displayName)), slivers: [ @@ -169,44 +236,7 @@ class _BorrowConnectionScreenState extends State { child: Text(t.profiles.borrowExplain, style: Theme.of(context).textTheme.bodySmall), ), ), - if (snapshot.connectionState != ConnectionState.done) - LoadingIndicatorBox.sliver - else if (candidates.isEmpty) - SliverFillRemaining( - child: EmptyStateWidget( - message: t.profiles.borrowEmpty, - subtitle: t.profiles.borrowEmptySubtitle, - icon: Symbols.share_rounded, - iconSize: 48, - ), - ) - else - SliverList( - delegate: SliverChildBuilderDelegate((context, index) { - final cand = candidates[index]; - // M3E connected-group geometry: large outer corners, small - // inner corners, hairline gaps between tiles. - final tokensRef = tokens(context); - final tileRadii = BorderRadius.vertical( - top: Radius.circular(index == 0 ? tokensRef.radiusLg : tokensRef.radiusXs), - bottom: Radius.circular(index == candidates.length - 1 ? tokensRef.radiusLg : tokensRef.radiusXs), - ); - return Padding( - padding: EdgeInsets.fromLTRB(16, index == 0 ? 4 : tokensRef.groupGap, 16, 0), - child: FocusableWrapper( - autofocus: index == 0, - disableScale: true, - borderRadii: tileRadii, - onSelect: _busy ? null : () => _borrow(cand), - child: Card( - shape: RoundedRectangleBorder(borderRadius: tileRadii), - clipBehavior: Clip.antiAlias, - child: _BorrowTile(candidate: cand, borderRadius: tileRadii, onTap: () => _borrow(cand)), - ), - ), - ); - }, childCount: candidates.length), - ), + candidateSliver, ], ); }, diff --git a/lib/screens/profile/pin_entry_dialog.dart b/lib/screens/profile/pin_entry_dialog.dart index df25dd4d9..fd9a693ce 100644 --- a/lib/screens/profile/pin_entry_dialog.dart +++ b/lib/screens/profile/pin_entry_dialog.dart @@ -421,12 +421,15 @@ class _TvPinInputState extends State<_TvPinInput> with ControllerDisposerMixin { } } - return KeyEventResult.handled; + return KeyEventResult.ignored; } void _onMobilePinChanged(String value) { final digitsOnly = value.replaceAll(RegExp(r'\D'), ''); - final pin = digitsOnly.length > 4 ? digitsOnly.substring(0, 4) : digitsOnly; + final pin = switch (digitsOnly.length) { + <= 4 => digitsOnly, + _ => digitsOnly.substring(0, expandToGraphemeRange(digitsOnly, const TextRange(start: 0, end: 4)).end), + }; if (pin != value) { _mobileController.value = TextEditingValue( text: pin, diff --git a/lib/screens/settings/hotkey_recorder_widget.dart b/lib/screens/settings/hotkey_recorder_widget.dart index 47e2b4dac..d9066af1c 100644 --- a/lib/screens/settings/hotkey_recorder_widget.dart +++ b/lib/screens/settings/hotkey_recorder_widget.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:plezy/widgets/app_icon.dart'; import 'package:material_symbols_icons/symbols.dart'; @@ -11,7 +13,7 @@ import '../../widgets/dialog_action_button.dart'; class HotKeyRecorderWidget extends StatefulWidget { final String actionName; final HotKey? currentHotKey; - final Function(HotKey) onHotKeyRecorded; + final FutureOr Function(HotKey?) onHotKeyRecorded; final VoidCallback onCancel; const HotKeyRecorderWidget({ @@ -29,6 +31,8 @@ class HotKeyRecorderWidget extends StatefulWidget { class _HotKeyRecorderWidgetState extends State { HotKey? _recordedHotKey; bool _isCapturing = false; + bool _hasPendingEdit = false; + bool _isSaving = false; final _recorderFocusNode = FocusNode(debugLabel: 'HotKeyRecorder.record'); final _clearFocusNode = FocusNode(debugLabel: 'HotKeyRecorder.clear'); final _cancelFocusNode = FocusNode(debugLabel: 'HotKeyRecorder.cancel'); @@ -50,6 +54,7 @@ class _HotKeyRecorderWidgetState extends State { } void _startCapturing() { + if (_isSaving) return; setState(() => _isCapturing = true); _recorderFocusNode.requestFocus(); } @@ -57,6 +62,7 @@ class _HotKeyRecorderWidgetState extends State { void _handleHotKeyRecorded(HotKey hotKey) { setState(() { _recordedHotKey = hotKey; + _hasPendingEdit = true; _isCapturing = false; }); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -65,115 +71,139 @@ class _HotKeyRecorderWidgetState extends State { } void _clearShortcut() { + if (_isSaving) return; setState(() { _recordedHotKey = null; + _hasPendingEdit = true; _isCapturing = false; }); _recorderFocusNode.requestFocus(); } + void _cancel() { + if (!_isSaving) widget.onCancel(); + } + + Future _save() async { + final canSave = (_recordedHotKey != null || _hasPendingEdit) && !_isCapturing && !_isSaving; + if (!canSave) return; + + final hotkey = _recordedHotKey; + setState(() => _isSaving = true); + try { + await widget.onHotKeyRecorded(hotkey); + } finally { + if (mounted) setState(() => _isSaving = false); + } + } + @override Widget build(BuildContext context) { final hasShortcut = _recordedHotKey != null; + final canEdit = !_isSaving; + final canSave = (hasShortcut || _hasPendingEdit) && !_isCapturing && !_isSaving; final recordLabel = _isCapturing ? t.hotkeys.recordingShortcut : t.hotkeys.pressToRecord; - return AlertDialog( - title: Text(t.hotkeys.setShortcutFor(actionName: widget.actionName)), - content: SizedBox( - width: double.maxFinite, - child: SingleChildScrollView( - child: Column( - mainAxisSize: .min, - crossAxisAlignment: .start, - children: [ - Text( - t.hotkeys.currentShortcut, - style: Theme.of(context).textTheme.bodyMedium?.copyWith(fontWeight: .bold), - ), - const SizedBox(height: 6), - Row( - children: [ - Expanded( - child: FocusableWrapper( - focusNode: _recorderFocusNode, - autofocus: true, - onSelect: _startCapturing, - onBack: widget.onCancel, - onNavigateRight: hasShortcut ? _clearFocusNode.requestFocus : null, - onNavigateDown: (hasShortcut ? _saveFocusNode : _cancelFocusNode).requestFocus, - semanticLabel: recordLabel, - descendantsAreFocusable: false, - useBackgroundFocus: true, - child: GestureDetector( - onTap: _startCapturing, - child: Container( - width: double.infinity, - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - decoration: BoxDecoration( - border: Border.fromBorderSide(BorderSide(color: Theme.of(context).dividerColor)), - borderRadius: const BorderRadius.all(Radius.circular(6)), - ), - child: HotKeyRecorder( - initalHotKey: _recordedHotKey, - enabled: _isCapturing, - placeholder: Text(recordLabel), - onHotKeyRecorded: _handleHotKeyRecorded, + return PopScope( + canPop: !_isSaving, + child: AlertDialog( + title: Text(t.hotkeys.setShortcutFor(actionName: widget.actionName)), + content: SizedBox( + width: double.maxFinite, + child: SingleChildScrollView( + child: Column( + mainAxisSize: .min, + crossAxisAlignment: .start, + children: [ + Text( + t.hotkeys.currentShortcut, + style: Theme.of(context).textTheme.bodyMedium?.copyWith(fontWeight: .bold), + ), + const SizedBox(height: 6), + Row( + children: [ + Expanded( + child: FocusableWrapper( + focusNode: _recorderFocusNode, + autofocus: true, + onSelect: canEdit ? _startCapturing : null, + onBack: _cancel, + onNavigateRight: canEdit && hasShortcut ? _clearFocusNode.requestFocus : null, + onNavigateDown: (canSave ? _saveFocusNode : _cancelFocusNode).requestFocus, + semanticLabel: recordLabel, + descendantsAreFocusable: false, + useBackgroundFocus: true, + child: GestureDetector( + onTap: canEdit ? _startCapturing : null, + child: Container( + width: double.infinity, + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: BoxDecoration( + border: Border.fromBorderSide(BorderSide(color: Theme.of(context).dividerColor)), + borderRadius: const BorderRadius.all(Radius.circular(6)), + ), + child: HotKeyRecorder( + initalHotKey: _recordedHotKey, + enabled: _isCapturing && canEdit, + placeholder: Text(recordLabel), + onHotKeyRecorded: _handleHotKeyRecorded, + ), ), ), ), ), - ), - if (hasShortcut) ...[ - const SizedBox(width: 8), - FocusableButton( - focusNode: _clearFocusNode, - onPressed: _clearShortcut, - onBack: widget.onCancel, - onNavigateLeft: _recorderFocusNode.requestFocus, - onNavigateDown: _saveFocusNode.requestFocus, - autoScroll: false, - child: IconButton( - icon: const AppIcon(Symbols.backspace_rounded, fill: 1, size: 18), - onPressed: _clearShortcut, - padding: .zero, - constraints: const BoxConstraints(minWidth: 24, minHeight: 24), - tooltip: t.hotkeys.clearShortcut, + if (hasShortcut) ...[ + const SizedBox(width: 8), + FocusableButton( + focusNode: _clearFocusNode, + onPressed: canEdit ? _clearShortcut : null, + onBack: _cancel, + onNavigateLeft: _recorderFocusNode.requestFocus, + onNavigateDown: _saveFocusNode.requestFocus, + autoScroll: false, + child: IconButton( + icon: const AppIcon(Symbols.backspace_rounded, fill: 1, size: 18), + onPressed: canEdit ? _clearShortcut : null, + padding: .zero, + constraints: const BoxConstraints(minWidth: 24, minHeight: 24), + tooltip: t.hotkeys.clearShortcut, + ), ), - ), + ], ], - ], - ), - const SizedBox(height: 8), - Text( - recordLabel, - style: Theme.of( - context, - ).textTheme.bodyMedium?.copyWith(color: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.7)), - textAlign: TextAlign.center, - ), - ], + ), + const SizedBox(height: 8), + Text( + recordLabel, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.7), + ), + textAlign: TextAlign.center, + ), + ], + ), ), ), + actions: [ + DialogActionButton( + focusNode: _cancelFocusNode, + onPressed: canEdit ? _cancel : null, + onBack: _cancel, + onNavigateUp: _recorderFocusNode.requestFocus, + onNavigateRight: canSave ? _saveFocusNode.requestFocus : null, + label: t.common.cancel, + ), + DialogActionButton( + focusNode: _saveFocusNode, + onPressed: canSave ? _save : null, + onBack: _cancel, + onNavigateUp: _recorderFocusNode.requestFocus, + onNavigateLeft: _cancelFocusNode.requestFocus, + label: t.common.save, + isPrimary: true, + ), + ], ), - actions: [ - DialogActionButton( - focusNode: _cancelFocusNode, - onPressed: widget.onCancel, - onBack: widget.onCancel, - onNavigateUp: _recorderFocusNode.requestFocus, - onNavigateRight: _saveFocusNode.requestFocus, - label: t.common.cancel, - ), - DialogActionButton( - focusNode: _saveFocusNode, - onPressed: hasShortcut ? () => widget.onHotKeyRecorded(_recordedHotKey!) : null, - onBack: widget.onCancel, - onNavigateUp: _recorderFocusNode.requestFocus, - onNavigateLeft: _cancelFocusNode.requestFocus, - label: t.common.save, - isPrimary: true, - ), - ], ); } } diff --git a/lib/screens/settings/keyboard_shortcuts_screen.dart b/lib/screens/settings/keyboard_shortcuts_screen.dart index 01f3f6c1e..ab34ccc18 100644 --- a/lib/screens/settings/keyboard_shortcuts_screen.dart +++ b/lib/screens/settings/keyboard_shortcuts_screen.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import '../../i18n/strings.g.dart'; import '../../models/hotkey_model.dart'; import '../../services/keyboard_shortcuts_service.dart'; +import '../../utils/app_logger.dart'; import '../../services/shader_service.dart'; import '../../utils/dialogs.dart'; import '../../utils/snackbar_helper.dart'; @@ -58,11 +60,11 @@ class KeyboardShortcutsScreen extends StatelessWidget { borderRadius: BorderRadius.circular(tokens(context).radiusSm), ), child: Text( - keyboardService.formatHotkey(hotkeys[action]!), + keyboardService.formatHotkey(hotkeys[action]), style: const TextStyle(fontFamily: 'monospace'), ), ), - onTap: () => _editHotkey(context, action, hotkeys[action]!), + onTap: () => _editHotkey(context, action, hotkeys[action]), ), ], ), @@ -79,37 +81,42 @@ class KeyboardShortcutsScreen extends StatelessWidget { if (context.mounted) showSuccessSnackBar(context, t.settings.shortcutsReset); } - void _editHotkey(BuildContext screenContext, String action, HotKey currentHotkey) { + void _editHotkey(BuildContext screenContext, String action, HotKey? currentHotkey) { + final actionId = action; + final actionName = keyboardService.getActionDisplayName(actionId); showScopedDialog( context: screenContext, builder: (BuildContext context) { return HotKeyRecorderWidget( - actionName: keyboardService.getActionDisplayName(action), + actionName: actionName, currentHotKey: currentHotkey, onHotKeyRecorded: (newHotkey) async { final navigator = Navigator.of(context); - // Check for conflicts - final existingAction = keyboardService.getActionForHotkey(newHotkey); - if (existingAction != null && existingAction != action) { - navigator.pop(); - showErrorSnackBar( - context, - t.settings.shortcutAlreadyAssigned(action: keyboardService.getActionDisplayName(existingAction)), - ); + if (newHotkey != null) { + final existingAction = keyboardService.getActionForHotkey(newHotkey); + if (existingAction != null && existingAction != actionId) { + navigator.pop(); + showErrorSnackBar( + screenContext, + t.settings.shortcutAlreadyAssigned(action: keyboardService.getActionDisplayName(existingAction)), + ); + return; + } + } + + try { + await keyboardService.setHotkey(actionId, newHotkey); + } on PlatformException catch (error, stackTrace) { + appLogger.e('Failed to update keyboard shortcut', error: error, stackTrace: stackTrace); + if (screenContext.mounted) showErrorSnackBar(screenContext, t.common.error); return; } - // Save the new hotkey - await keyboardService.setHotkey(action, newHotkey); - + if (!context.mounted) return; navigator.pop(); - if (screenContext.mounted) { - showSuccessSnackBar( - screenContext, - t.settings.shortcutUpdated(action: keyboardService.getActionDisplayName(action)), - ); + showSuccessSnackBar(screenContext, t.settings.shortcutUpdated(action: actionName)); } }, onCancel: () => Navigator.pop(context), diff --git a/lib/screens/settings/mpv_config_screen.dart b/lib/screens/settings/mpv_config_screen.dart index 515e92e67..5c4e6d057 100644 --- a/lib/screens/settings/mpv_config_screen.dart +++ b/lib/screens/settings/mpv_config_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:plezy/widgets/app_icon.dart'; @@ -9,6 +11,8 @@ import '../../i18n/strings.g.dart'; import '../../mixins/controller_disposer_mixin.dart'; import '../../models/mpv_config_models.dart'; import '../../utils/dialogs.dart'; +import '../../utils/app_logger.dart'; +import '../../utils/debouncer.dart'; import '../../utils/platform_detector.dart'; import '../../utils/snackbar_helper.dart'; import '../../mixins/settings_effect_mixin.dart'; @@ -35,27 +39,145 @@ class _MpvConfigScreenState extends State with SettingsEffectMi ); final _savePresetFocusNode = FocusNode(); final _textFieldFocusNode = FocusNode(); + final _saveDebouncer = Debouncer(const Duration(milliseconds: 400)); + String _persistedText = ''; + int _revision = 0; + int _persistedRevision = 0; + _QueuedMpvConfig? _pendingSave; + _QueuedMpvConfig? _activeSave; + Future? _drainFuture; + bool _isLeaving = false; + bool _allowPop = false; + bool _disposing = false; @override void initState() { super.initState(); - // Sync the editor when the pref is mutated externally (e.g. loadMpvPreset). - // Skip when the listener fires for the same value the controller already - // holds โ€” avoids fighting user-typed text mid-edit. - bindEffect(SettingsService.mpvConfigText, (v) { - if (_textController.text != v) _textController.text = v; - }, fireImmediately: false); + _persistedText = _textController.text; + _textFieldFocusNode.addListener(_handleTextFieldFocusChanged); + // Keep a clean editor synchronized with imports, reset, and other + // settings producers without allowing a completed local write to replace + // a newer queued edit. + bindEffect(SettingsService.mpvConfigText, _handlePersistedText, fireImmediately: false); } @override void dispose() { + _disposing = true; + _saveDebouncer.dispose(); + _textFieldFocusNode.removeListener(_handleTextFieldFocusChanged); + if (_pendingSave != null || _drainFuture != null) { + unawaited(_flushPending()); + } _savePresetFocusNode.dispose(); _textFieldFocusNode.dispose(); super.dispose(); } - Future _saveText() async { - await _settingsService.write(SettingsService.mpvConfigText, _textController.text); + bool get _hasUnsavedWork => _pendingSave != null || _activeSave != null || _drainFuture != null; + + void _handleTextFieldFocusChanged() { + if (!_textFieldFocusNode.hasFocus) { + unawaited(_flushPending()); + } + } + + void _handlePersistedText(String value) { + final active = _activeSave; + if (active != null && active.text == value) return; + if (active == null && _pendingSave == null && _textController.text == value) { + _persistedText = value; + return; + } + + // An import/reset/other producer wins when observed. An in-flight local + // write cannot be cancelled, so queue the external value behind it to + // ensure that obsolete write cannot become the final persisted value. + _saveDebouncer.cancel(); + final revision = ++_revision; + _persistedText = value; + _persistedRevision = revision; + _pendingSave = active == null ? null : _QueuedMpvConfig(text: value, revision: revision); + _textController.value = TextEditingValue( + text: value, + selection: TextSelection.collapsed(offset: value.length), + ); + _notifySaveStateChanged(); + } + + void _queueTextSave(String text) { + if (_disposing) return; + if (_activeSave == null && _pendingSave == null && text == _persistedText) { + _notifySaveStateChanged(); + return; + } + + _pendingSave = _QueuedMpvConfig(text: text, revision: ++_revision); + _saveDebouncer.run(() => unawaited(_flushPending())); + _notifySaveStateChanged(); + } + + Future _flushPending() { + _saveDebouncer.cancel(); + final existing = _drainFuture; + if (existing != null) return existing; + + late final Future drain; + drain = _drainPending().whenComplete(() { + if (identical(_drainFuture, drain)) { + _drainFuture = null; + _notifySaveStateChanged(); + } + }); + _drainFuture = drain; + _notifySaveStateChanged(); + return drain; + } + + Future _drainPending() async { + while (true) { + final next = _pendingSave; + if (next == null) return true; + + _pendingSave = null; + _activeSave = next; + try { + await _settingsService.write(SettingsService.mpvConfigText, next.text); + } catch (error, stackTrace) { + _pendingSave ??= next; + _activeSave = null; + appLogger.e('MPV configuration save failed', error: error, stackTrace: stackTrace); + if (mounted && !_disposing) showErrorSnackBar(context, t.settings.saveFailed); + return false; + } + + _activeSave = null; + if (next.revision >= _persistedRevision) { + _persistedRevision = next.revision; + _persistedText = next.text; + } + } + } + + void _notifySaveStateChanged() { + if (mounted && !_disposing) setState(() {}); + } + + Future _flushAndPop() async { + if (_isLeaving) return; + _isLeaving = true; + _notifySaveStateChanged(); + + final saved = await _flushPending(); + if (!mounted || _disposing) return; + if (!saved || _hasUnsavedWork) { + _isLeaving = false; + _notifySaveStateChanged(); + return; + } + + setState(() => _allowPop = true); + Navigator.pop(context); } Future _showSavePresetDialog() async { @@ -68,16 +190,21 @@ class _MpvConfigScreenState extends State with SettingsEffectMi hintText: t.mpvConfig.presetNameHint, ); - if (name != null && name.trim().isNotEmpty) { - await _settingsService.saveMpvPreset(name.trim(), _textController.text); - if (mounted) showSuccessSnackBar(context, t.mpvConfig.presetSaved); - } + if (name == null || name.trim().isEmpty) return; + if (!await _flushPending() || !mounted) return; + + await _settingsService.saveMpvPreset(name.trim(), _textController.text); + if (mounted) showSuccessSnackBar(context, t.mpvConfig.presetSaved); } Future _loadPreset(MpvPreset preset) async { - await _settingsService.loadMpvPreset(preset.name); - // Controller text is updated reactively via the bindEffect above. - if (mounted) showAppSnackBar(context, t.mpvConfig.presetLoaded); + _textController.value = TextEditingValue( + text: preset.text, + selection: TextSelection.collapsed(offset: preset.text.length), + ); + _queueTextSave(preset.text); + final saved = await _flushPending(); + if (mounted && saved) showAppSnackBar(context, t.mpvConfig.presetLoaded); } Future _deletePreset(MpvPreset preset) async { @@ -97,15 +224,20 @@ class _MpvConfigScreenState extends State with SettingsEffectMi listenable: _textFieldFocusNode, builder: (context, _) { return PopScope( - canPop: PlatformDetector.isHandheldIOS(context) && !_textFieldFocusNode.hasFocus, + canPop: + _allowPop || + (PlatformDetector.isHandheldIOS(context) && + !_textFieldFocusNode.hasFocus && + !_hasUnsavedWork && + !_isLeaving), onPopInvokedWithResult: (didPop, _) { - if (didPop) return; + if (didPop || _isLeaving) return; if (BackKeyCoordinator.consumeIfHandled()) return; BackKeyUpSuppressor.suppressBackUntilKeyUp(); if (_textFieldFocusNode.hasFocus && _savePresetFocusNode.canRequestFocus) { _savePresetFocusNode.requestFocus(); } else { - Navigator.pop(context); + unawaited(_flushAndPop()); } }, child: FocusedScrollScaffold( @@ -154,11 +286,12 @@ class _MpvConfigScreenState extends State with SettingsEffectMi final sel = _textController.selection; if (sel.isValid) { final text = _textController.text; - _textController.value = TextEditingValue( + final value = TextEditingValue( text: text.replaceRange(sel.start, sel.end, '\n'), selection: TextSelection.collapsed(offset: sel.start + 1), ); - _saveText(); + _textController.value = value; + _queueTextSave(value.text); } } return KeyEventResult.handled; @@ -187,7 +320,7 @@ class _MpvConfigScreenState extends State with SettingsEffectMi contentPadding: const EdgeInsets.all(12), ), style: const TextStyle(fontFamily: 'monospace', fontSize: 13), - onChanged: (_) => _saveText(), + onChanged: _queueTextSave, ), ); } @@ -244,3 +377,10 @@ class _MpvConfigScreenState extends State with SettingsEffectMi ); } } + +class _QueuedMpvConfig { + const _QueuedMpvConfig({required this.text, required this.revision}); + + final String text; + final int revision; +} diff --git a/lib/screens/settings/services_settings_screen.dart b/lib/screens/settings/services_settings_screen.dart index 81ea61a13..0db542aa4 100644 --- a/lib/screens/settings/services_settings_screen.dart +++ b/lib/screens/settings/services_settings_screen.dart @@ -151,8 +151,8 @@ class _ServiceHubRow extends StatelessWidget { subtitle: Text(username != null ? t.services.connectedAs(username: username!) : t.services.notConnected), trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), onTap: onTap, - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), ); } } diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 2f5c634f8..a3cee2afc 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -31,6 +31,7 @@ import '../../providers/trakt_account_provider.dart'; import '../../services/keyboard_shortcuts_service.dart'; import '../../services/settings_service.dart' as settings; import '../../services/update_service.dart'; +import '../../utils/app_logger.dart'; import '../../utils/dialogs.dart'; import '../../utils/snackbar_helper.dart'; import '../../utils/platform_detector.dart'; @@ -57,11 +58,22 @@ import 'settings_utils.dart'; import '../../widgets/loading_indicator_box.dart'; class SettingsScreen extends StatefulWidget { - const SettingsScreen({super.key, this.downloadDirectoryWritableChecker}); + const SettingsScreen({ + super.key, + this.downloadDirectoryWritableChecker, + this.settingsExporter, + this.settingsImporter, + }); @visibleForTesting final Future Function(Directory directory)? downloadDirectoryWritableChecker; + @visibleForTesting + final Future Function()? settingsExporter; + + @visibleForTesting + final Future Function()? settingsImporter; + @override State createState() => _SettingsScreenState(); } @@ -345,8 +357,8 @@ class _SettingsScreenState extends State with FocusableTab, Moun subtitle: Text(currentPath, maxLines: 2, overflow: .ellipsis), trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), onTap: () => _showDownloadLocationDialog(), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: false, + visualDensity: VisualDensity.standard, ); }, ), @@ -542,8 +554,8 @@ class _SettingsScreenState extends State with FocusableTab, Moun _checkForUpdates(); } }, - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: false, + visualDensity: VisualDensity.standard, ), _buildAutoCheckUpdatesOnStartupTile(), ], @@ -590,8 +602,8 @@ class _SettingsScreenState extends State with FocusableTab, Moun DialogActionButton(onPressed: () => Navigator.pop(dialogContext), label: t.common.cancel), DialogActionButton( onPressed: () async { - await _selectDownloadLocation(); - if (dialogContext.mounted) Navigator.pop(dialogContext); + final changed = await _selectDownloadLocation(); + if (changed && dialogContext.mounted) Navigator.pop(dialogContext); }, label: t.settings.selectFolder, isPrimary: true, @@ -601,55 +613,65 @@ class _SettingsScreenState extends State with FocusableTab, Moun ); } - Future _selectDownloadLocation() async { + Future _selectDownloadLocation() async { try { String? selectedPath; String pathType = 'file'; if (Platform.isAndroid) { - final safService = SafStorageService.instance; - selectedPath = await safService.pickDirectory(); - if (selectedPath != null) { - pathType = 'saf'; - } else if (PlatformDetector.isTV()) { - if (mounted) { - showErrorSnackBar(context, t.settings.downloadLocationSelectError); - } - return; + final safStorage = SafStorageService.instance; + if (!safStorage.supportsDirectoryPicker) { + showErrorSnackBar(context, t.settings.downloadLocationPickerUnavailable); + return false; } + selectedPath = await safStorage.pickDirectory(); + if (!mounted) return false; + if (selectedPath != null) pathType = 'saf'; } else { - final result = await FilePickerService.instance.getDirectoryPath(dialogTitle: t.settings.selectFolder); - selectedPath = result; + selectedPath = await FilePickerService.instance.getDirectoryPath(dialogTitle: t.settings.selectFolder); + if (!mounted) return false; } + if (selectedPath == null) return false; - if (selectedPath != null) { - if (pathType == 'file') { - final dir = Directory(selectedPath); - final isWritable = - await (widget.downloadDirectoryWritableChecker ?? DownloadStorageService.instance.isDirectoryWritable)( - dir, - ); - if (!isWritable) { - if (mounted) { - showErrorSnackBar(context, t.settings.downloadLocationInvalid); - } - return; - } - } - - if (!mounted) return; - await context.read().setDownloadLocation(path: selectedPath, pathType: pathType); - - if (mounted) { - // ignore: no-empty-block - setState triggers rebuild to reflect new download path - setState(() {}); - showSuccessSnackBar(context, t.settings.downloadLocationChanged); + if (pathType == 'file') { + final dir = Directory(selectedPath); + final isWritable = + await (widget.downloadDirectoryWritableChecker ?? DownloadStorageService.instance.isDirectoryWritable)(dir); + if (!mounted) return false; + if (!isWritable) { + showErrorSnackBar(context, t.settings.downloadLocationInvalid); + return false; } } - } catch (e) { - if (mounted) { - showErrorSnackBar(context, t.settings.downloadLocationSelectError); + + await context.read().setDownloadLocation(path: selectedPath, pathType: pathType); + if (!mounted) return false; + + // ignore: no-empty-block - setState triggers rebuild to reflect new download path + setState(() {}); + showSuccessSnackBar(context, t.settings.downloadLocationChanged); + return true; + } on DownloadStorageException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Download directory selection failed', error: error, stackTrace: stackTrace); + return false; } + showSettingsFailure(context, operation: 'Download directory selection', error: error, stackTrace: stackTrace); + return false; + } on PlatformException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Download directory selection failed', error: error, stackTrace: stackTrace); + return false; + } + showSettingsFailure(context, operation: 'Download directory selection', error: error, stackTrace: stackTrace); + return false; + } on FileSystemException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Download directory selection failed', error: error, stackTrace: stackTrace); + return false; + } + showSettingsFailure(context, operation: 'Download directory selection', error: error, stackTrace: stackTrace); + return false; } } @@ -699,14 +721,27 @@ class _SettingsScreenState extends State with FocusableTab, Moun Future _handleExportSettings() async { try { - final path = await SettingsExportService.exportToFile(); - if (!mounted) return; - if (path == null) return; // user cancelled + final path = await (widget.settingsExporter ?? SettingsExportService.exportToFile)(); + if (!mounted || path == null) return; showSuccessSnackBar(context, t.settings.exportSettingsSuccess); - } on SettingsExportException { - if (mounted) showErrorSnackBar(context, t.settings.exportSettingsFailed); - } catch (_) { - if (mounted) showErrorSnackBar(context, t.settings.exportSettingsFailed); + } on SettingsExportException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings export failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings export', error: error, stackTrace: stackTrace); + } on PlatformException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings export failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings export', error: error, stackTrace: stackTrace); + } on FileSystemException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings export failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings export', error: error, stackTrace: stackTrace); } } @@ -717,22 +752,20 @@ class _SettingsScreenState extends State with FocusableTab, Moun message: t.settings.importSettingsConfirm, confirmText: t.settings.importSettings, ); - if (!confirmed) return; + if (!mounted || !confirmed) return; await _handleImportSettings(); } Future _handleImportSettings() async { - // Capture providers before any awaits so we don't reach through `context` - // after the widget may have been unmounted. - final themeProvider = context.read(); - final hiddenLibrariesProvider = context.read(); - final librariesProvider = context.read(); - try { - final result = await SettingsExportService.importFromFile(); + final result = await (widget.settingsImporter ?? SettingsExportService.importFromFile)(); if (!mounted) return; if (result == null) return; // user cancelled file picker + final themeProvider = context.read(); + final hiddenLibrariesProvider = context.read(); + final librariesProvider = context.read(); + // Import wrote directly to SharedPreferences, bypassing `write`. Push // fresh values into active listenables before providers re-read settings. _settingsService.refreshListenables(); @@ -750,10 +783,24 @@ class _SettingsScreenState extends State with FocusableTab, Moun if (mounted) showErrorSnackBar(context, t.settings.importSettingsNoUser); } on InvalidExportFileException { if (mounted) showErrorSnackBar(context, t.settings.importSettingsInvalidFile); - } on SettingsExportException { - if (mounted) showErrorSnackBar(context, t.settings.importSettingsFailed); - } catch (_) { - if (mounted) showErrorSnackBar(context, t.settings.importSettingsFailed); + } on SettingsExportException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings import failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings import', error: error, stackTrace: stackTrace); + } on PlatformException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings import failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings import', error: error, stackTrace: stackTrace); + } on FileSystemException catch (error, stackTrace) { + if (!mounted) { + appLogger.e('Settings import failed', error: error, stackTrace: stackTrace); + return; + } + showSettingsFailure(context, operation: 'Settings import', error: error, stackTrace: stackTrace); } } diff --git a/lib/screens/settings/settings_utils.dart b/lib/screens/settings/settings_utils.dart index 1ea1147bf..8443923df 100644 --- a/lib/screens/settings/settings_utils.dart +++ b/lib/screens/settings/settings_utils.dart @@ -1,5 +1,8 @@ +import 'dart:io'; + import 'package:flex_color_picker/flex_color_picker.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:material_symbols_icons/symbols.dart'; import '../../focus/focusable_text_field.dart'; @@ -7,6 +10,8 @@ import '../../focus/input_mode_tracker.dart'; import '../../i18n/strings.g.dart'; import '../../services/settings_service.dart' as settings; import '../../utils/dialogs.dart'; +import '../../utils/app_logger.dart'; +import '../../utils/snackbar_helper.dart'; import '../../widgets/app_icon.dart'; import '../../widgets/dialog_action_button.dart'; import '../../widgets/focusable_list_tile.dart'; @@ -39,6 +44,18 @@ typedef _SettingsDialogContentBuilder = typedef _SettingsDialogActionsBuilder = List Function(BuildContext dialogContext, StateSetter setDialogState); +/// Reports a recoverable settings persistence failure without swallowing +/// programming errors or other unexpected exception types. +void showSettingsFailure( + BuildContext context, { + required String operation, + required Object error, + required StackTrace stackTrace, +}) { + appLogger.e('$operation failed', error: error, stackTrace: stackTrace); + if (context.mounted) showErrorSnackBar(context, t.settings.saveFailed); +} + void _showSettingsInputDialog({ required BuildContext context, required String title, @@ -89,8 +106,16 @@ class _SettingsInputDialogState extends State<_SettingsInputDialog> { } Future _save() async { - final shouldClose = await widget.onSave(context); - if (shouldClose && mounted) Navigator.pop(context); + try { + final shouldClose = await widget.onSave(context); + if (shouldClose && mounted) Navigator.pop(context); + } on PlatformException catch (error, stackTrace) { + if (!mounted) return; + showSettingsFailure(context, operation: 'Settings input save', error: error, stackTrace: stackTrace); + } on FileSystemException catch (error, stackTrace) { + if (!mounted) return; + showSettingsFailure(context, operation: 'Settings input save', error: error, stackTrace: stackTrace); + } } @override @@ -347,7 +372,16 @@ Future _showColorInputDialogStandard({ }, actionButtons: const ColorPickerActionButtons(okButton: true, closeButton: true, dialogActionButtons: false), ); - if (selected != initial) await onSave(colorToHex(selected)); + if (selected == initial || !context.mounted) return; + try { + await onSave(colorToHex(selected)); + } on PlatformException catch (error, stackTrace) { + if (!context.mounted) return; + showSettingsFailure(context, operation: 'Color setting save', error: error, stackTrace: stackTrace); + } on FileSystemException catch (error, stackTrace) { + if (!context.mounted) return; + showSettingsFailure(context, operation: 'Color setting save', error: error, stackTrace: stackTrace); + } } void _showColorInputDialogTV({ diff --git a/lib/services/keyboard_shortcuts_service.dart b/lib/services/keyboard_shortcuts_service.dart index c949ad1b5..84585e771 100644 --- a/lib/services/keyboard_shortcuts_service.dart +++ b/lib/services/keyboard_shortcuts_service.dart @@ -16,7 +16,8 @@ class KeyboardShortcutsService extends ChangeNotifier { static KeyboardShortcutsService? _instance; late final SettingsBindingOwner _settingsBinding; - Map _hotkeys = {}; + Map _hotkeys = {}; + Future _shortcutMutationTail = Future.value(); int _seekTimeSmall = 10; // Default, loaded from settings int _seekTimeLarge = 30; // Default, loaded from settings bool _settingsInitialized = false; @@ -55,7 +56,7 @@ class KeyboardShortcutsService extends ChangeNotifier { final changed = !_hotkeyMapsEqual(_hotkeys, hotkeys) || _seekTimeSmall != seekTimeSmall || _seekTimeLarge != seekTimeLarge; - _hotkeys = Map.from(hotkeys); + _hotkeys = Map.from(hotkeys); _seekTimeSmall = seekTimeSmall; _seekTimeLarge = seekTimeLarge; @@ -64,32 +65,49 @@ class KeyboardShortcutsService extends ChangeNotifier { if (notify && changed) notifyListeners(); } - bool _hotkeyMapsEqual(Map a, Map b) { + bool _hotkeyMapsEqual(Map a, Map b) { if (a.length != b.length) return false; for (final entry in a.entries) { + if (!b.containsKey(entry.key)) return false; + final value = entry.value; final other = b[entry.key]; - if (other == null || !_hotkeyEquals(entry.value, other)) return false; + if (value == null || other == null) { + if (value != other) return false; + } else if (!_hotkeyEquals(value, other)) { + return false; + } } return true; } - Map get hotkeys => Map.from(_hotkeys); + Map get hotkeys => Map.from(_hotkeys); HotKey? getHotkey(String action) { return _hotkeys[action]; } - Future setHotkey(String action, HotKey hotkey) async { - await _settingsService.write(SettingsService.keyboardHotkeys, {..._hotkeys, action: hotkey}); + Future setHotkey(String action, HotKey? hotkey) { + return _serializeShortcutMutation(() async { + await _settingsService.write(SettingsService.keyboardHotkeys, {..._hotkeys, action: hotkey}); + }); } Future refreshFromStorage() async { _settingsBinding.refresh(); } - Future resetToDefaults() async { - final hotkeys = SettingsService.defaultKeyboardHotkeys(); - await _settingsService.write(SettingsService.keyboardHotkeys, hotkeys); + Future resetToDefaults() { + return _serializeShortcutMutation(() async { + await _settingsService.write(SettingsService.keyboardHotkeys, { + ...SettingsService.defaultKeyboardHotkeys(), + }); + }); + } + + Future _serializeShortcutMutation(Future Function() operation) { + final result = _shortcutMutationTail.then((_) => operation()); + _shortcutMutationTail = result.then((_) {}, onError: (Object _, StackTrace _) {}); + return result; } @override @@ -175,6 +193,7 @@ class KeyboardShortcutsService extends ChangeNotifier { for (final entry in _hotkeys.entries) { final action = entry.key; final hotkey = entry.value; + if (hotkey == null) continue; if (physicalKey != hotkey.key) continue; @@ -470,7 +489,8 @@ class KeyboardShortcutsService extends ChangeNotifier { // Check if a hotkey is already assigned to another action String? getActionForHotkey(HotKey hotkey) { for (final entry in _hotkeys.entries) { - if (_hotkeyEquals(entry.value, hotkey)) { + final assignedHotkey = entry.value; + if (assignedHotkey != null && _hotkeyEquals(assignedHotkey, hotkey)) { return entry.key; } } diff --git a/lib/services/plex_client.dart b/lib/services/plex_client.dart index 911b384d1..1f370978b 100644 --- a/lib/services/plex_client.dart +++ b/lib/services/plex_client.dart @@ -296,6 +296,15 @@ class PlexClient @override ApiCache get cache => _cache; + /// Snapshot the profile identity used by a cache-first request before its + /// cache lookup can yield. [PlexConfig] is immutable, and [headers] returns a + /// fresh map, so both the token/client headers and cache namespace stay bound + /// to the same profile even if [applyProfileUpdate] runs on a cache miss. + ({ServerId cacheScope, Map headers}) _captureCacheFirstRequestContext() { + final requestConfig = config; + return (cacheScope: profileScopeId.cacheServerId, headers: Map.unmodifiable(requestConfig.headers)); + } + /// Whether to operate in offline mode (use cache only) bool _offlineMode = false; @@ -886,9 +895,9 @@ class PlexClient Future isHealthy() async => (await checkHealth()) == HealthStatus.online; /// Get running background tasks (thumbnail generation, credit detection, etc.) - Future> getActivities() async { + Future> getActivities({AbortController? abort}) async { try { - final response = await _getWithFailover('/activities'); + final response = await _getWithFailover('/activities', abort: abort); final container = _getMediaContainer(response); if (container == null) return []; final activityList = container['Activity'] as List?; @@ -904,6 +913,10 @@ class PlexClient } } return activities; + } on MediaServerHttpException catch (e) { + if (e.isCancellation) rethrow; + appLogger.e('Failed to get activities', error: e); + return []; } catch (e) { appLogger.e('Failed to get activities', error: e); return []; @@ -1557,14 +1570,29 @@ class PlexClient bool forceRefresh = false, }) async { try { - final fetch = forceRefresh ? fetchWithCacheFallback : fetchWithCacheFirst; - final data = await fetch>( - cacheKey: '/library/metadata/$ratingKey', - networkCall: () => - _http.get('/library/metadata/$ratingKey', queryParameters: {'includeChapters': 1, 'includeMarkers': 1}), - parseCache: (cached) => cached as Map?, - parseResponse: (response) => response.data as Map?, + final requestContext = _captureCacheFirstRequestContext(); + final cacheKey = '/library/metadata/$ratingKey'; + Future networkCall() => _http.get( + cacheKey, + queryParameters: {'includeChapters': 1, 'includeMarkers': 1}, + headers: requestContext.headers, ); + Map? parseCache(dynamic cached) => cached as Map?; + Map? parseResponse(MediaServerResponse response) => response.data as Map?; + final data = forceRefresh + ? await fetchWithCacheFallback>( + cacheKey: cacheKey, + networkCall: networkCall, + parseCache: parseCache, + parseResponse: parseResponse, + ) + : await fetchWithCacheFirst>( + cacheScope: requestContext.cacheScope, + cacheKey: cacheKey, + networkCall: networkCall, + parseCache: parseCache, + parseResponse: parseResponse, + ); final metadataJson = _getFirstMetadataJsonFromData(data); return _parsePlaybackExtrasFromMetadataJson( metadataJson, @@ -1696,11 +1724,14 @@ class PlexClient /// for the cache-only readers ([fetchPlaybackExtrasFromCacheOnly], /// [fetchCachedMediaSourceInfo]). Future?> _fetchRawMetadataJsonCacheFirst(String ratingKey) async { + final requestContext = _captureCacheFirstRequestContext(); final data = await fetchWithCacheFirst>( + cacheScope: requestContext.cacheScope, cacheKey: '/library/metadata/$ratingKey', networkCall: () => _http.get( '/library/metadata/$ratingKey', queryParameters: {'includeChapters': 1, 'includeMarkers': 1, 'checkFiles': 1, 'includeStreams': 1}, + headers: requestContext.headers, ), parseCache: (cached) => cached as Map?, parseResponse: (response) => response.data as Map?, @@ -3833,10 +3864,18 @@ class PlexClient } @override - Future resolveDownload(MediaItem item, {int mediaIndex = 0}) async { - final playbackData = await getVideoPlaybackData(item.id, mediaIndex: mediaIndex); + Future resolveDownload(MediaItem item, {int mediaIndex = 0, String? mediaSourceId}) async { + final playbackData = await getVideoPlaybackData( + item.id, + mediaIndex: mediaIndex, + selectedMediaSourceId: mediaSourceId, + ); final subtitles = []; final mediaInfo = playbackData.mediaInfo; + final requestedSourceId = mediaSourceId?.trim(); + if (requestedSourceId != null && requestedSourceId.isNotEmpty && mediaInfo?.mediaSourceId != requestedSourceId) { + throw StateError('Requested Plex download source is no longer available'); + } if (mediaInfo != null) { for (final subtitle in mediaInfo.subtitleTracks) { if (!subtitle.isExternal || subtitle.key == null) continue; diff --git a/lib/services/settings_export_service.dart b/lib/services/settings_export_service.dart index 3fff2bb5b..13f3987ba 100644 --- a/lib/services/settings_export_service.dart +++ b/lib/services/settings_export_service.dart @@ -4,17 +4,20 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import '../models/shader_preset.dart'; import '../utils/app_logger.dart'; import '../utils/formatters.dart'; import '../utils/platform_detector.dart'; import 'file_picker_service.dart'; import 'settings_service.dart'; import 'storage_service.dart'; +import 'trackers/tracker_constants.dart'; class ImportResult { final int keysImported; @@ -64,8 +67,7 @@ class _StoredPreferenceValue { /// Serializes / restores user-facing SharedPreferences to a JSON file. /// -/// Strategy is allow-by-default: every key is exported unless it matches an -/// exact denylist or a prefix denylist of auth/cache/internal keys. User-scoped +/// Only preferences in the closed portable registry are exported. User-scoped /// keys (prefixed with `user_{uuid}_`) have that prefix stripped on export and /// re-applied with the current user's prefix on import, so preferences follow /// whichever account is signed in on the target device. @@ -193,12 +195,20 @@ class SettingsExportService { SettingsService.keyboardHotkeys, ]) pref.key: _PreferencePolicy(_storageTypeFor(pref)), + for (final service in TrackerService.values) + for (final pref in >[ + SettingsService.trackerFilterModePref(service), + SettingsService.trackerFilterIdsPref(service), + ]) + pref.key: _PreferencePolicy(_storageTypeFor(pref)), }; + static const Set _jsonStringListPreferenceKeys = {'hidden_libraries', 'library_order'}; + static const Map _userScopedPreferences = { - 'hidden_libraries': _PreferencePolicy(_typeStringList, userScoped: true), + 'hidden_libraries': _PreferencePolicy(_typeString, userScoped: true), 'library_filters': _PreferencePolicy(_typeString, userScoped: true), - 'library_order': _PreferencePolicy(_typeStringList, userScoped: true), + 'library_order': _PreferencePolicy(_typeString, userScoped: true), }; static final List<(RegExp, _PreferencePolicy)> _dynamicUserScopedPreferences = [ @@ -269,7 +279,7 @@ class SettingsExportService { final policy = _policyFor(baseKey); if (policy == null || policy.userScoped != sourceIsUserScoped) continue; - final entry = _encodeValue(prefs.get(fullKey), policy.type); + final entry = _encodeValue(_portableExportValue(baseKey, prefs.get(fullKey)), policy.type); if (entry != null) prefsOut[baseKey] = entry; } @@ -282,6 +292,11 @@ class SettingsExportService { }; } + static Object? _portableExportValue(String baseKey, Object? value) { + if (baseKey != SettingsService.globalShaderPreset.key) return value; + return value is String && ShaderPreset.fromId(value) != null ? value : ShaderPreset.none.id; + } + static Map? _encodeValue(Object? value, String expectedType) { return switch (expectedType) { _typeBool when value is bool => {'type': _typeBool, 'value': value}, @@ -331,12 +346,26 @@ class SettingsExportService { continue; } - final type = rawEntry['type']; - final value = rawEntry['value']; + var type = rawEntry['type']; + var value = rawEntry['value']; + // Early format-v1 exports described these JSON-backed values as native + // string lists. Normalize that narrowly admitted legacy shape to the + // String representation consumed by StorageService. + if (version == 1 && + _jsonStringListPreferenceKeys.contains(baseKey) && + type == _typeStringList && + _isValidValue(_typeStringList, value)) { + type = _typeString; + value = jsonEncode((value as List).cast()); + } if (type is! String || type != policy.type || !_isValidValue(type, value)) { skipped++; continue; } + if (baseKey == SettingsService.globalShaderPreset.key && value is String && ShaderPreset.fromId(value) == null) { + skipped++; + continue; + } pending.add( _PendingImport(targetKey: policy.userScoped ? '$userPrefix$baseKey' : baseKey, type: type, value: value), @@ -362,8 +391,7 @@ class SettingsExportService { } catch (rollbackError, rollbackStackTrace) { appLogger.e('Settings import rollback failed', error: rollbackError, stackTrace: rollbackStackTrace); } - appLogger.e('Settings import failed', error: error, stackTrace: stackTrace); - throw const SettingsExportException('Could not apply settings import'); + Error.throwWithStackTrace(error, stackTrace); } return ImportResult(keysImported: pending.length, keysSkipped: skipped); @@ -436,7 +464,7 @@ class SettingsExportService { /// the user's choosing. Returns the saved path, or `null` if the user /// cancelled the picker. /// - /// Throws [SettingsExportException] on failure. + /// Platform and filesystem failures retain their original exception types. static Future exportToFile() async { final prefs = (await SettingsService.getInstance()).prefs; final storage = await StorageService.getInstance(); @@ -444,8 +472,8 @@ class SettingsExportService { try { final info = await PackageInfo.fromPlatform(); appVersion = info.version; - } catch (_) { - // best-effort; tolerate platforms without PackageInfo + } on PlatformException { + // Best-effort metadata; platforms without PackageInfo still export. } final exportMap = buildExportMap(prefs, currentUserUuid: storage.activeUserScope(), appVersion: appVersion); @@ -459,18 +487,13 @@ class SettingsExportService { return _writeToAppDocuments(fileName, bytes); } - try { - return await FilePickerService.instance.saveFile( - dialogTitle: 'Export Plezy settings', - fileName: fileName, - bytes: bytes, - type: FileType.custom, - allowedExtensions: const [fileExtension], - ); - } catch (e, st) { - appLogger.e('Settings export failed', error: e, stackTrace: st); - throw const SettingsExportException('Could not write export file'); - } + return FilePickerService.instance.saveFile( + dialogTitle: 'Export Plezy settings', + fileName: fileName, + bytes: bytes, + type: FileType.custom, + allowedExtensions: const [fileExtension], + ); } static Future _writeToAppDocuments(String fileName, Uint8List bytes) async { @@ -483,8 +506,9 @@ class SettingsExportService { /// Prompts the user to pick a settings JSON and writes its contents into /// SharedPreferences. Requires a signed-in user. /// - /// Returns `null` if the user cancelled. Throws [SettingsExportException] on - /// malformed files or unsupported versions. + /// Returns `null` if the user cancelled. Malformed files throw + /// [InvalidExportFileException]; platform and filesystem failures retain + /// their original exception types. static Future importFromFile() async { final storage = await StorageService.getInstance(); final uuid = storage.activeUserScope(); @@ -501,30 +525,29 @@ class SettingsExportService { final file = picked.files.first; String contents; - try { - final bytes = file.bytes; - if (bytes != null) { + final bytes = file.bytes; + if (bytes != null) { + try { contents = utf8.decode(bytes); - } else if (file.path != null) { - contents = await File(file.path!).readAsString(); - } else { + } on FormatException { throw const InvalidExportFileException('Could not read the selected file'); } - } catch (e, st) { - appLogger.e('Settings import read failed', error: e, stackTrace: st); + } else if (file.path != null) { + contents = await File(file.path!).readAsString(); + } else { throw const InvalidExportFileException('Could not read the selected file'); } - Map data; + final Object? decoded; try { - final decoded = json.decode(contents); - if (decoded is! Map) { - throw const InvalidExportFileException('Invalid export file'); - } - data = decoded; - } catch (_) { + decoded = json.decode(contents); + } on FormatException { throw const InvalidExportFileException('Invalid export file'); } + if (decoded is! Map) { + throw const InvalidExportFileException('Invalid export file'); + } + final data = decoded; final prefs = (await SettingsService.getInstance()).prefs; return applyImportMap(data, prefs, currentUserUuid: uuid); diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 24d40a56f..0ec700265 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -304,13 +304,19 @@ Map _defaultKeyboardHotkeys() => { 'screenshot': const HotKey(key: PhysicalKeyboardKey.keyS, modifiers: [HotKeyModifier.control]), }; -Map _decodeKeyboardHotkeys(dynamic raw) { - final result = {}; +Map _decodeKeyboardHotkeys(dynamic raw) { + final result = {}; for (final entry in (raw as Map).entries) { - final hk = SettingsService.deserializeHotKey(entry.value as Map); - if (hk != null) result[entry.key] = hk; + final value = entry.value; + if (value is! Map) continue; + if (value['disabled'] == true) { + result[entry.key] = null; + continue; + } + final hotkey = SettingsService.deserializeHotKey(value); + if (hotkey != null) result[entry.key] = hotkey; } - return {..._defaultKeyboardHotkeys(), ...result}; + return {..._defaultKeyboardHotkeys(), ...result}; } class SettingsService extends BaseSharedPreferencesService { @@ -500,10 +506,12 @@ class SettingsService extends BaseSharedPreferencesService { ); static const mpvConfigText = _MpvConfigTextPref(); - static final keyboardHotkeys = JsonPref>( + static final keyboardHotkeys = JsonPref>( 'keyboard_hotkeys', - defaultValue: _defaultKeyboardHotkeys(), - encode: (v) => json.encode(v.map((k, hk) => MapEntry(k, SettingsService.serializeHotKey(hk)))), + defaultValue: {..._defaultKeyboardHotkeys()}, + encode: (values) => json.encode( + values.map((key, hotkey) => MapEntry(key, hotkey == null ? const {'disabled': true} : serializeHotKey(hotkey))), + ), decode: _decodeKeyboardHotkeys, ); static final mediaVersionPreferences = JsonPref>( @@ -672,13 +680,6 @@ class SettingsService extends BaseSharedPreferencesService { await write(mpvPresets, presets); } - /// Load a preset (replaces current config text). - Future loadMpvPreset(String name) async { - final presets = read(mpvPresets); - final preset = presets.firstWhere((p) => p.name == name, orElse: () => throw Exception('Preset not found: $name')); - await write(mpvConfigText, preset.text); - } - static const _modifierMap = { 'alt': HotKeyModifier.alt, 'control': HotKeyModifier.control, diff --git a/lib/services/shader_asset_loader.dart b/lib/services/shader_asset_loader.dart index b4747dbbf..56a272523 100644 --- a/lib/services/shader_asset_loader.dart +++ b/lib/services/shader_asset_loader.dart @@ -1,3 +1,5 @@ +import 'dart:async' show unawaited; + import 'dart:io'; import 'package:flutter/services.dart'; @@ -15,6 +17,10 @@ import '../utils/app_logger.dart'; class ShaderAssetLoader { static const String _shaderAssetBase = 'assets/shaders'; static String? _cachedShaderDir; + static final RegExp _customShaderFileNamePattern = RegExp(r'^[A-Za-z0-9-]+\.glsl$', caseSensitive: false); + static final Map _verifiedBuiltInShaderPaths = {}; + static final Map> _inFlightBuiltInShaders = {}; + static int _cacheGeneration = 0; /// NVScaler shader file static const String _nvscalerShader = 'nvscaler/NVScaler.glsl'; @@ -42,13 +48,12 @@ class ShaderAssetLoader { 'downscale_post': 'anime4k/Anime4K_AutoDownscalePre_x4.glsl', }; - /// Get the shader cache directory path, creating it if necessary. + /// Get the application-owned shader cache directory, creating it if needed. static Future _getShaderDirectory() async { if (_cachedShaderDir != null) return _cachedShaderDir!; - final cacheDir = await getTemporaryDirectory(); + final cacheDir = await getApplicationCacheDirectory(); final shaderDir = Directory(path.join(cacheDir.path, 'shaders')); - if (!await shaderDir.exists()) { await shaderDir.create(recursive: true); } @@ -59,30 +64,102 @@ class ShaderAssetLoader { /// Extract a single shader file from assets to the cache directory. /// Returns the absolute file path of the extracted shader. - static Future _extractShader(String assetPath) async { - try { - final shaderDir = await _getShaderDirectory(); - final fileName = path.basename(assetPath); - final subDir = path.dirname(assetPath); + static Future _extractShader(String assetPath) { + final generation = _cacheGeneration; + final operationKey = '$generation:$assetPath'; + final active = _inFlightBuiltInShaders[operationKey]; + if (active != null) return active; - final targetDir = Directory(path.join(shaderDir, subDir)); + final operation = _materializeBuiltInShader(assetPath, generation); + _inFlightBuiltInShaders[operationKey] = operation; + unawaited( + operation.whenComplete(() { + if (identical(_inFlightBuiltInShaders[operationKey], operation)) { + _inFlightBuiltInShaders.remove(operationKey); + } + }), + ); + return operation; + } + + static Future _materializeBuiltInShader(String assetPath, int generation) async { + File? pendingFile; + try { + final verifiedPath = _verifiedBuiltInShaderPaths[assetPath]; + if (verifiedPath != null) { + if (await File(verifiedPath).exists()) return verifiedPath; + _verifiedBuiltInShaderPaths.remove(assetPath); + } + + final shaderDir = await _getShaderDirectory(); + final targetDir = Directory(path.join(shaderDir, path.dirname(assetPath))); if (!await targetDir.exists()) { await targetDir.create(recursive: true); } + final targetFile = File(path.join(targetDir.path, path.basename(assetPath))); + final data = await rootBundle.load('$_shaderAssetBase/$assetPath'); + final bundledBytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - final targetFile = File(path.join(targetDir.path, fileName)); - - // Only extract if not already cached - if (!await targetFile.exists()) { - final fullAssetPath = '$_shaderAssetBase/$assetPath'; - final data = await rootBundle.load(fullAssetPath); - await targetFile.writeAsBytes(data.buffer.asUint8List()); + if (await _fileMatches(targetFile, bundledBytes)) { + if (generation == _cacheGeneration) { + _verifiedBuiltInShaderPaths[assetPath] = targetFile.path; + } + return targetFile.path; } + pendingFile = File('${targetFile.path}.pending.${const Uuid().v4()}'); + await pendingFile.writeAsBytes(bundledBytes, flush: true); + if (!await _promotePendingShader(pendingFile, targetFile, bundledBytes)) { + return null; + } + if (!await _fileMatches(targetFile, bundledBytes)) return null; + + if (generation == _cacheGeneration) { + _verifiedBuiltInShaderPaths[assetPath] = targetFile.path; + } return targetFile.path; } catch (e, st) { appLogger.w('Failed to extract shader $assetPath', error: e, stackTrace: st); return null; + } finally { + if (pendingFile != null) { + try { + if (await pendingFile.exists()) await pendingFile.delete(); + } on FileSystemException { + // The pending path is never returned and can be reclaimed with cache. + } + } + } + } + + static Future _promotePendingShader(File pendingFile, File targetFile, List bundledBytes) async { + try { + await pendingFile.rename(targetFile.path); + return true; + } on FileSystemException { + if (await _fileMatches(targetFile, bundledBytes)) return true; + } + + try { + if (await targetFile.exists()) await targetFile.delete(); + await pendingFile.rename(targetFile.path); + return true; + } on FileSystemException { + return _fileMatches(targetFile, bundledBytes); + } + } + + static Future _fileMatches(File file, List expected) async { + try { + if (!await file.exists()) return false; + final actual = await file.readAsBytes(); + if (actual.length != expected.length) return false; + for (var index = 0; index < expected.length; index++) { + if (actual[index] != expected[index]) return false; + } + return true; + } on FileSystemException { + return false; } } @@ -194,6 +271,14 @@ class ShaderAssetLoader { return shaders; } + /// Whether [fileName] is a direct managed GLSL shader basename. + /// + /// UUID names generated by current builds and alphanumeric names generated + /// by older builds are both accepted. + static bool isValidCustomShaderFileName(String fileName) { + return _customShaderFileNamePattern.hasMatch(fileName); + } + /// Get the custom shader directory path, creating it if necessary. /// Uses app support directory (persistent) rather than temp/cache. static Future _getCustomShaderDirectory() async { @@ -210,29 +295,31 @@ class ShaderAssetLoader { /// Import a custom shader file into the custom shaders directory. /// Returns the stored file name (UUID-based to avoid collisions). static Future importCustomShader(String sourcePath) async { - final customDir = await _getCustomShaderDirectory(); - final ext = path.extension(sourcePath); - final uuid = const Uuid().v4(); - final storedName = '$uuid$ext'; - final targetFile = File(path.join(customDir, storedName)); + if (path.extension(sourcePath).toLowerCase() != '.glsl') { + throw ArgumentError.value(sourcePath, 'sourcePath', 'Custom shaders must use the .glsl extension'); + } - await File(sourcePath).copy(targetFile.path); + final customDir = await _getCustomShaderDirectory(); + final storedName = '${const Uuid().v4()}.glsl'; + await File(sourcePath).copy(path.join(customDir, storedName)); return storedName; } /// Delete a custom shader file from the custom shaders directory. static Future deleteCustomShader(String fileName) async { - final customDir = await _getCustomShaderDirectory(); - final file = File(path.join(customDir, fileName)); - if (await file.exists()) { + final file = await _resolveManagedCustomShaderFile(fileName); + if (file != null && await file.exists()) { await file.delete(); } } - /// Get the absolute path for a custom shader file. - static Future getCustomShaderPath(String fileName) async { - final customDir = await _getCustomShaderDirectory(); - return path.join(customDir, fileName); + static Future _resolveManagedCustomShaderFile(String fileName) async { + if (!isValidCustomShaderFileName(fileName)) return null; + + final customDir = path.canonicalize(await _getCustomShaderDirectory()); + final candidate = path.canonicalize(path.join(customDir, fileName)); + if (!path.equals(path.dirname(candidate), customDir)) return null; + return File(candidate); } /// Get shader paths for a given preset. @@ -250,16 +337,19 @@ class ShaderAssetLoader { if (preset.anime4kConfig == null) return []; return getAnime4KShaders(preset.anime4kConfig!); case ShaderPresetType.custom: - if (preset.fileName == null) return []; - final shaderPath = await getCustomShaderPath(preset.fileName!); - if (!await File(shaderPath).exists()) return []; - return [shaderPath]; + final fileName = preset.fileName; + if (fileName == null) return []; + final shaderFile = await _resolveManagedCustomShaderFile(fileName); + if (shaderFile == null || !await shaderFile.exists()) return []; + return [shaderFile.path]; } } /// Clear cached shader directory reference. /// Call when clearing app cache. static void clearCache() { + _cacheGeneration++; _cachedShaderDir = null; + _verifiedBuiltInShaderPaths.clear(); } } diff --git a/lib/utils/initials_palette.dart b/lib/utils/initials_palette.dart index 6f526eb46..6e82b4632 100644 --- a/lib/utils/initials_palette.dart +++ b/lib/utils/initials_palette.dart @@ -4,8 +4,7 @@ import 'package:flutter/material.dart'; String initialOf(String name) { final trimmed = name.trim(); if (trimmed.isEmpty) return '?'; - final first = trimmed.runes.first; - return String.fromCharCode(first).toUpperCase(); + return trimmed.characters.first.toUpperCase(); } /// Deterministic colour for [name] from a curated palette. The palette is diff --git a/lib/utils/search_relevance.dart b/lib/utils/search_relevance.dart index f67f3011c..78d443bb1 100644 --- a/lib/utils/search_relevance.dart +++ b/lib/utils/search_relevance.dart @@ -1,85 +1,98 @@ import 'dart:math' as math; +import 'package:collection/collection.dart'; import 'package:string_similarity/string_similarity.dart'; +import 'package:unorm_dart/unorm_dart.dart'; import '../media/media_item.dart'; const int defaultMediaSearchLimit = 100; +final RegExp _searchSeparatorPattern = RegExp(r'[^\p{L}\p{N}\p{M}]+', unicode: true); + List rankMediaSearchResults(List items, String query, {int? limit}) { - final normalizedQuery = normalizeSearchText(query); - if (normalizedQuery.isEmpty) { + if (limit != null) { + RangeError.checkNotNegative(limit, 'limit'); + if (limit == 0) return const []; + } + if (items.isEmpty) return const []; + + final searchQuery = _NormalizedSearchQuery(query); + if (searchQuery.text.isEmpty) { return limit == null ? List.of(items) : items.take(limit).toList(); } - final ranked = <_RankedMediaItem>[ - for (var i = 0; i < items.length; i++) - _RankedMediaItem(item: items[i], score: mediaSearchRelevanceScore(items[i], normalizedQuery), originalIndex: i), - ]; + if (limit == null || limit >= items.length) { + final ranked = <_RankedMediaItem>[ + for (var i = 0; i < items.length; i++) + _RankedMediaItem( + item: items[i], + score: _mediaSearchRelevanceScoreNormalized(items[i], searchQuery), + originalIndex: i, + ), + ]..sort(_compareRankedBestFirst); + return [for (final entry in ranked) entry.item]; + } - ranked.sort((a, b) { - final scoreComparison = b.score.compareTo(a.score); - if (scoreComparison != 0) return scoreComparison; - return a.originalIndex.compareTo(b.originalIndex); - }); + final retained = HeapPriorityQueue<_RankedMediaItem>(_compareRankedWorstFirst); + for (var i = 0; i < items.length; i++) { + final item = items[i]; + final score = _mediaSearchRelevanceScoreNormalized(item, searchQuery); + if (retained.length < limit) { + retained.add(_RankedMediaItem(item: item, score: score, originalIndex: i)); + continue; + } - final result = ranked.map((entry) => entry.item); - return limit == null ? result.toList() : result.take(limit).toList(); + final worst = retained.first; + if (score > worst.score || (score == worst.score && i < worst.originalIndex)) { + retained + ..removeFirst() + ..add(_RankedMediaItem(item: item, score: score, originalIndex: i)); + } + } + + final ranked = retained.toList()..sort(_compareRankedBestFirst); + return [for (final entry in ranked) entry.item]; } -double mediaSearchRelevanceScore(MediaItem item, String query) { - final normalizedQuery = normalizeSearchText(query); - if (normalizedQuery.isEmpty) return 0; - final fields = <({String? value, double weight})>[ - (value: item.title, weight: 1.0), - (value: item.titleSort, weight: 0.98), - (value: item.originalTitle, weight: 0.96), - (value: item.grandparentTitle, weight: 0.9), - (value: item.parentTitle, weight: 0.8), - ]; - - var best = 0.0; - for (final field in fields) { - final candidate = normalizeSearchText(field.value); - if (candidate.isEmpty) continue; - best = math.max(best, _scoreNormalizedField(normalizedQuery, candidate) * field.weight); - } +double _mediaSearchRelevanceScoreNormalized(MediaItem item, _NormalizedSearchQuery query) { + var best = _scoreWeightedField(item.title, query, 1.0); + best = math.max(best, _scoreWeightedField(item.titleSort, query, 0.98)); + best = math.max(best, _scoreWeightedField(item.originalTitle, query, 0.96)); + best = math.max(best, _scoreWeightedField(item.grandparentTitle, query, 0.9)); + best = math.max(best, _scoreWeightedField(item.parentTitle, query, 0.8)); return best; } -String normalizeSearchText(String? value) { - if (value == null) return ''; - return value - .toLowerCase() - .replaceAll(RegExp(r'[\u0000-\u002f\u003a-\u0040\u005b-\u0060\u007b-\u007f]+'), ' ') - .replaceAll(RegExp(r'\s+'), ' ') - .trim(); +double _scoreWeightedField(String? value, _NormalizedSearchQuery query, double weight) { + final candidate = normalizeSearchText(value); + if (candidate.isEmpty) return 0; + return _scoreNormalizedField(query, candidate) * weight; } -double _scoreNormalizedField(String query, String candidate) { - if (candidate == query) return 1000; +/// Produces an accent-sensitive search key where canonical/compatibility +/// equivalents and Unicode typography compare alike. +String normalizeSearchText(String? value) { + if (value == null) return ''; + return nfkc(value).toLowerCase().replaceAll(_searchSeparatorPattern, ' ').trim(); +} - final queryWithoutArticle = _withoutLeadingArticle(query); - final candidateWithoutArticle = _withoutLeadingArticle(candidate); - if (queryWithoutArticle.isNotEmpty && candidateWithoutArticle == queryWithoutArticle) return 980; +double _scoreNormalizedField(_NormalizedSearchQuery query, String candidate) { + if (candidate == query.text) return 1000; - if (candidate.startsWith(query)) return 900 + _lengthCloseness(query, candidate, 50); - if (queryWithoutArticle.isNotEmpty && candidateWithoutArticle.startsWith(queryWithoutArticle)) { - return 880 + _lengthCloseness(queryWithoutArticle, candidateWithoutArticle, 50); - } + if (candidate.startsWith(query.text)) return 900 + _lengthCloseness(query.text, candidate, 50); - if (candidate.contains(query)) return 800 + _lengthCloseness(query, candidate, 50); + if (candidate.contains(query.text)) return 800 + _lengthCloseness(query.text, candidate, 50); - final queryTokens = _tokens(query); + final queryTokens = query.tokens; final candidateTokens = _tokens(candidate); if (queryTokens.isEmpty || candidateTokens.isEmpty) return 0; final candidateTokenSet = candidateTokens.toSet(); final matchingTokens = queryTokens.where(candidateTokenSet.contains).length; - final sortedQuery = _sortedTokens(queryTokens); final sortedCandidate = _sortedTokens(candidateTokens); - final tokenSimilarity = StringSimilarity.compareTwoStrings(sortedQuery, sortedCandidate); - final rawSimilarity = StringSimilarity.compareTwoStrings(query, candidate); + final tokenSimilarity = StringSimilarity.compareTwoStrings(query.sortedTokens, sortedCandidate); + final rawSimilarity = StringSimilarity.compareTwoStrings(query.text, candidate); final fuzzyScore = math.max(rawSimilarity, tokenSimilarity) * 650; if (matchingTokens == queryTokens.length) return math.max(700 + tokenSimilarity * 100, fuzzyScore); @@ -95,13 +108,6 @@ String _sortedTokens(List tokens) { return sorted.join(' '); } -String _withoutLeadingArticle(String value) { - for (final article in const ['the ', 'a ', 'an ']) { - if (value.startsWith(article)) return value.substring(article.length); - } - return value; -} - double _lengthCloseness(String query, String candidate, double maxBonus) { final longest = math.max(query.length, candidate.length); if (longest == 0) return 0; @@ -110,6 +116,26 @@ double _lengthCloseness(String query, String candidate, double maxBonus) { return maxBonus * closeness; } +int _compareRankedBestFirst(_RankedMediaItem a, _RankedMediaItem b) { + final scoreComparison = b.score.compareTo(a.score); + if (scoreComparison != 0) return scoreComparison; + return a.originalIndex.compareTo(b.originalIndex); +} + +int _compareRankedWorstFirst(_RankedMediaItem a, _RankedMediaItem b) { + final scoreComparison = a.score.compareTo(b.score); + if (scoreComparison != 0) return scoreComparison; + return b.originalIndex.compareTo(a.originalIndex); +} + +class _NormalizedSearchQuery { + _NormalizedSearchQuery(String value) : text = normalizeSearchText(value); + + final String text; + late final List tokens = _tokens(text); + late final String sortedTokens = _sortedTokens(tokens); +} + class _RankedMediaItem { const _RankedMediaItem({required this.item, required this.score, required this.originalIndex}); diff --git a/lib/widgets/app_bar_back_button.dart b/lib/widgets/app_bar_back_button.dart index 9c95a732d..28c9a4d1f 100644 --- a/lib/widgets/app_bar_back_button.dart +++ b/lib/widgets/app_bar_back_button.dart @@ -1,7 +1,11 @@ import 'package:flutter/material.dart'; -import 'package:plezy/widgets/app_icon.dart'; +import 'package:flutter/services.dart'; import 'package:material_symbols_icons/symbols.dart'; +import '../focus/focusable_wrapper.dart'; +import '../i18n/strings.g.dart'; +import 'app_icon.dart'; + /// Defines the visual style of the back button enum BackButtonStyle { /// Back button with circular semi-transparent background (used in detail screens) @@ -31,13 +35,15 @@ class AppBarBackButton extends StatefulWidget { /// [style] determines the visual appearance of the back button. /// [onPressed] is called when the button is tapped. If null, defaults to Navigator.pop. /// [color] overrides the default icon color. If null, uses white for circular/video, theme default for plain. - /// [semanticLabel] provides accessibility label for screen readers. + /// [focusNode] allows callers to connect this control to an explicit focus graph. + /// [semanticLabel] overrides the localized back-button label. const AppBarBackButton({ super.key, this.style = BackButtonStyle.circular, this.onPressed, this.color, this.semanticLabel, + this.focusNode, }); final BackButtonStyle style; @@ -49,6 +55,7 @@ class AppBarBackButton extends StatefulWidget { final Color? color; final String? semanticLabel; + final FocusNode? focusNode; @override State createState() => _AppBarBackButtonState(); @@ -90,6 +97,12 @@ class _AppBarBackButtonState extends State with TickerProvider } } + KeyEventResult _handleKeyEvent(FocusNode _, KeyEvent event) { + if (event.logicalKey != LogicalKeyboardKey.space) return KeyEventResult.ignored; + if (event is KeyDownEvent) _handlePressed(); + return KeyEventResult.handled; + } + @override Widget build(BuildContext context) { final theme = Theme.of(context); @@ -123,33 +136,44 @@ class _AppBarBackButtonState extends State with TickerProvider break; } - final buttonWidget = MouseRegion( - cursor: SystemMouseCursors.click, - onEnter: (_) => _onHoverChange(true), - onExit: (_) => _onHoverChange(false), - child: GestureDetector( - onTap: _handlePressed, - child: AnimatedBuilder( - animation: _backgroundAnimation, - builder: (context, child) { - final currentColor = Color.lerp(baseColor, hoverColor, _backgroundAnimation.value); + final semanticLabel = widget.semanticLabel ?? t.common.back; + final button = FocusableWrapper( + focusNode: widget.focusNode, + semanticLabel: semanticLabel, + onSelect: _handlePressed, + onKeyEvent: _handleKeyEvent, + autoScroll: false, + disableScale: true, + descendantsAreFocusable: false, + borderRadius: 20, + child: Tooltip( + message: semanticLabel, + excludeFromSemantics: true, + child: MouseRegion( + onEnter: (_) => _onHoverChange(true), + onExit: (_) => _onHoverChange(false), + child: GestureDetector( + excludeFromSemantics: true, + onTap: _handlePressed, + child: AnimatedBuilder( + animation: _backgroundAnimation, + builder: (context, child) { + final currentColor = Color.lerp(baseColor, hoverColor, _backgroundAnimation.value); - return Container( - margin: const EdgeInsets.all(8), - width: 40, - height: 40, - decoration: BoxDecoration(color: currentColor, shape: BoxShape.circle), - child: AppIcon(Symbols.arrow_back_rounded, fill: 1, color: effectiveColor, size: 20), - ); - }, + return Container( + margin: const EdgeInsets.all(8), + width: 40, + height: 40, + decoration: BoxDecoration(color: currentColor, shape: BoxShape.circle), + child: AppIcon(Symbols.arrow_back_rounded, fill: 1, color: effectiveColor, size: 20), + ); + }, + ), + ), ), ), ); - final button = widget.semanticLabel != null - ? Semantics(label: widget.semanticLabel, button: true, excludeSemantics: true, child: buttonWidget) - : buttonWidget; - return widget.style == BackButtonStyle.circular ? SafeArea(child: button) : button; } } diff --git a/lib/widgets/cycling_media_backdrop.dart b/lib/widgets/cycling_media_backdrop.dart index b5ff232a6..f77125ce7 100644 --- a/lib/widgets/cycling_media_backdrop.dart +++ b/lib/widgets/cycling_media_backdrop.dart @@ -7,6 +7,9 @@ import 'package:flutter/material.dart'; import '../media/media_server_client.dart'; import '../services/device_performance.dart'; import '../utils/media_image_helper.dart'; +import 'optimized_media_image.dart'; + +Future _defaultLocalFileExists(File file) => file.exists(); /// Displays server artwork and rotates through multiple backdrops in order. /// @@ -25,6 +28,7 @@ class CyclingMediaBackdrop extends StatefulWidget { this.localArtworkPathResolver, this.imageProviderResolver, this.allowNetwork = true, + this.localFileExists = _defaultLocalFileExists, this.active = true, this.fit = BoxFit.cover, this.alignment = Alignment.center, @@ -41,6 +45,10 @@ class CyclingMediaBackdrop extends StatefulWidget { /// Overrides provider construction for deterministic widget tests. @visibleForTesting final ImageProvider? Function(String artworkPath)? imageProviderResolver; + + /// Overrides local file checks for deterministic widget tests. + @visibleForTesting + final Future Function(File file) localFileExists; final bool allowNetwork; final bool active; final double width; @@ -220,7 +228,7 @@ class _CyclingMediaBackdropState extends State with Widget _restartRotationTimer(); } - ImageProvider? _providerFor(BuildContext context, String path) { + ImageProvider? _providerFor(BuildContext context, String path, File? localFile) { final providerOverride = widget.imageProviderResolver; if (providerOverride != null) return providerOverride(path); @@ -234,12 +242,8 @@ class _CyclingMediaBackdropState extends State with Widget imageType: ImageType.art, ); - final localPath = widget.localArtworkPathResolver?.call(path); - if (localPath != null) { - final file = File(localPath); - if (file.existsSync()) { - return MediaImageHelper.boundedDecode(FileImage(file), memWidth: memWidth, memHeight: memHeight); - } + if (localFile != null) { + return MediaImageHelper.boundedDecode(FileImage(localFile), memWidth: memWidth, memHeight: memHeight); } if (!widget.allowNetwork) return null; @@ -262,17 +266,22 @@ class _CyclingMediaBackdropState extends State with Widget }); } - @override - Widget build(BuildContext context) { - final path = _currentPath; - final provider = path == null ? null : _providerFor(context, path); - if (path != null && provider == null) _reportMissingProvider(path); + Widget _buildCrossfade( + BuildContext context, + String? path, { + required LocalFileResolution localResolution, + File? localFile, + }) { + final pending = localResolution == LocalFileResolution.pending; + final provider = path == null || pending ? null : _providerFor(context, path, localFile); + if (path != null && provider == null && !pending) _reportMissingProvider(path); final fadeDuration = _disableAnimations ? Duration.zero : DevicePerformance.reducedDuration(widget.fadeDuration); return _BackdropArtworkCrossfade( artworkKey: (widget.mediaKey, path), imageErrorKey: path, image: provider, + pending: pending, duration: fadeDuration, fit: widget.fit, alignment: widget.alignment, @@ -280,6 +289,27 @@ class _CyclingMediaBackdropState extends State with Widget onImageError: _handleImageError, ); } + + @override + Widget build(BuildContext context) { + final path = _currentPath; + if (path == null) { + return _buildCrossfade(context, null, localResolution: LocalFileResolution.missing); + } + + final localPath = widget.localArtworkPathResolver?.call(path); + if (localPath == null) { + return _buildCrossfade(context, path, localResolution: LocalFileResolution.missing); + } + + return ResolvedLocalFile( + path: localPath, + cacheMissing: true, + fileExists: widget.localFileExists, + builder: (context, resolution, file) => + _buildCrossfade(context, path, localResolution: resolution, localFile: file), + ); + } } class _BackdropArtworkCrossfade extends StatefulWidget { @@ -287,6 +317,7 @@ class _BackdropArtworkCrossfade extends StatefulWidget { required this.artworkKey, required this.imageErrorKey, required this.image, + required this.pending, required this.duration, required this.fit, required this.alignment, @@ -297,6 +328,7 @@ class _BackdropArtworkCrossfade extends StatefulWidget { final Object? artworkKey; final Object? imageErrorKey; final ImageProvider? image; + final bool pending; final Duration duration; final BoxFit fit; final Alignment alignment; @@ -310,7 +342,7 @@ class _BackdropArtworkCrossfade extends StatefulWidget { class _BackdropArtworkCrossfadeState extends State<_BackdropArtworkCrossfade> with SingleTickerProviderStateMixin { late final AnimationController _fade; late Object? _currentKey = widget.artworkKey; - late ImageProvider? _base = widget.image; + late ImageProvider? _base = widget.pending ? null : widget.image; late Object? _baseErrorKey = widget.imageErrorKey; ImageProvider? _incoming; Object? _incomingErrorKey; @@ -328,6 +360,11 @@ class _BackdropArtworkCrossfadeState extends State<_BackdropArtworkCrossfade> wi super.didUpdateWidget(oldWidget); _fade.duration = widget.duration; if (widget.artworkKey == _currentKey) { + if (widget.pending) return; + if (oldWidget.pending) { + _transitionToIncoming(); + return; + } if (widget.image != null && widget.image != _base && _incoming == null) { _base = widget.image; _baseErrorKey = widget.imageErrorKey; @@ -336,12 +373,27 @@ class _BackdropArtworkCrossfadeState extends State<_BackdropArtworkCrossfade> wi } _currentKey = widget.artworkKey; + if (widget.pending) { + if (_base == null && _incoming != null && _fade.value == 1) { + _base = _incoming; + _baseErrorKey = _incomingErrorKey; + } + setState(() { + _fade.stop(); + _dropIncoming(); + }); + return; + } if (widget.image != null && widget.image == _base) { _baseErrorKey = widget.imageErrorKey; _dropIncoming(); return; } + _transitionToIncoming(); + } + + void _transitionToIncoming() { setState(() { _fade.stop(); _fade.value = 0; diff --git a/lib/widgets/desktop_app_bar.dart b/lib/widgets/desktop_app_bar.dart index 95bb7ab90..6ec9b6eb8 100644 --- a/lib/widgets/desktop_app_bar.dart +++ b/lib/widgets/desktop_app_bar.dart @@ -52,11 +52,7 @@ class DesktopAppBarSections { final canPop = parentRoute?.canPop ?? false; if (canPop) { - effectiveLeading = AppBarBackButton( - style: BackButtonStyle.plain, - onPressed: () => Navigator.of(context).pop(), - semanticLabel: MaterialLocalizations.of(context).backButtonTooltip, - ); + effectiveLeading = AppBarBackButton(style: BackButtonStyle.plain, onPressed: () => Navigator.of(context).pop()); } } diff --git a/lib/widgets/focus_builders.dart b/lib/widgets/focus_builders.dart index 3035a1c31..b38a99a4e 100644 --- a/lib/widgets/focus_builders.dart +++ b/lib/widgets/focus_builders.dart @@ -29,6 +29,8 @@ class FocusBuilders { required FocusNode focusNode, required KeyEventResult Function(FocusNode, KeyEvent) onKeyEvent, required VoidCallback onTap, + required String semanticLabel, + bool? selected, required EdgeInsetsGeometry padding, required Color backgroundColor, double borderRadius = 20, @@ -39,15 +41,22 @@ class FocusBuilders { return Focus( focusNode: focusNode, onKeyEvent: onKeyEvent, - child: ClickableCursor( - child: GestureDetector( - onTap: onTap, - child: AnimatedContainer( - duration: duration, - curve: Curves.easeOutCubic, - padding: padding, - decoration: BoxDecoration(color: backgroundColor, borderRadius: BorderRadius.circular(borderRadius)), - child: child, + child: Semantics( + label: semanticLabel, + button: true, + selected: selected, + onTap: onTap, + excludeSemantics: true, + child: ClickableCursor( + child: GestureDetector( + onTap: onTap, + child: AnimatedContainer( + duration: duration, + curve: Curves.easeOutCubic, + padding: padding, + decoration: BoxDecoration(color: backgroundColor, borderRadius: BorderRadius.circular(borderRadius)), + child: child, + ), ), ), ), diff --git a/lib/widgets/focusable_filter_chip.dart b/lib/widgets/focusable_filter_chip.dart index e976d80b7..8c2afb921 100644 --- a/lib/widgets/focusable_filter_chip.dart +++ b/lib/widgets/focusable_filter_chip.dart @@ -104,6 +104,7 @@ class _FocusableFilterChipState extends State with Focusabl focusNode: focusNode, onKeyEvent: _handleKeyEvent, onTap: widget.onPressed, + semanticLabel: widget.label, padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), backgroundColor: backgroundColor, child: Row( diff --git a/lib/widgets/focusable_media_card.dart b/lib/widgets/focusable_media_card.dart index a58fff678..1bb72c3b7 100644 --- a/lib/widgets/focusable_media_card.dart +++ b/lib/widgets/focusable_media_card.dart @@ -16,6 +16,9 @@ class FocusableMediaCard extends StatefulWidget { /// Either a [MediaItem] or a [MediaPlaylist]. Typed as [Object] because /// Dart has no nominal union type. Forwarded as-is to the inner [MediaCard]. final Object item; + + /// Optional row/column position announced with this card. + final String? semanticValue; final double? width; final double? height; final void Function(MediaItem source)? onRefresh; @@ -78,6 +81,7 @@ class FocusableMediaCard extends StatefulWidget { const FocusableMediaCard({ super.key, required this.item, + this.semanticValue, this.width, this.height, this.onRefresh, @@ -134,6 +138,7 @@ class _FocusableMediaCardState extends State { child: MediaCard( key: _mediaCardKey, item: widget.item, + semanticValue: widget.semanticValue, width: widget.width, height: widget.height, onRefresh: widget.onRefresh, diff --git a/lib/widgets/focusable_tab_chip.dart b/lib/widgets/focusable_tab_chip.dart index 38aa88704..bbf26ed51 100644 --- a/lib/widgets/focusable_tab_chip.dart +++ b/lib/widgets/focusable_tab_chip.dart @@ -174,6 +174,8 @@ class _FocusableTabChipState extends State with FocusableChipS focusNode: focusNode, onKeyEvent: _handleKeyEvent, onTap: widget.onSelect, + semanticLabel: widget.label, + selected: widget.isSelected, padding: hasImage ? const EdgeInsets.all(8) : const EdgeInsets.symmetric(horizontal: 16, vertical: 8), backgroundColor: backgroundColor, borderRadius: hasImage ? 12 : 20, diff --git a/lib/widgets/hotkey_recorder.dart b/lib/widgets/hotkey_recorder.dart index ffc0d3f46..bcb78e83e 100644 --- a/lib/widgets/hotkey_recorder.dart +++ b/lib/widgets/hotkey_recorder.dart @@ -49,6 +49,7 @@ class _HotKeyRecorderState extends State { bool _handleKeyEvent(KeyEvent keyEvent) { if (!widget.enabled) return false; + if (keyEvent.logicalKey.isBackKey) return false; if (keyEvent is KeyUpEvent) return false; final physicalKeysPressed = HardwareKeyboard.instance.physicalKeysPressed; diff --git a/lib/widgets/hub_section.dart b/lib/widgets/hub_section.dart index 234a49d74..1475720c4 100644 --- a/lib/widgets/hub_section.dart +++ b/lib/widgets/hub_section.dart @@ -46,6 +46,7 @@ enum HubCardSizing { /// - Focus never "escapes" to random elements class HubSection extends StatefulWidget { final MediaHub hub; + final HubFocusMemory focusMemory; final IconData icon; final void Function(MediaItem source)? onRefresh; final VoidCallback? onRemoveFromContinueWatching; @@ -94,6 +95,7 @@ class HubSection extends StatefulWidget { const HubSection({ super.key, required this.hub, + required this.focusMemory, required this.icon, this.onRefresh, this.onRemoveFromContinueWatching, @@ -199,7 +201,7 @@ class HubSectionState extends State with MountedSetStateMixin, Skele final clamped = index.clamp(0, _totalItemCount - 1).toInt(); _focusedIndex = clamped; // Remember this position for this specific hub - HubFocusMemory.setForHub(_focusMemoryKey, clamped); + widget.focusMemory.setForHub(_focusMemoryKey, clamped); _notifyFocusedItemChanged(); _scrollToIndex(clamped); _hubFocusNode.requestFocus(); @@ -211,7 +213,7 @@ class HubSectionState extends State with MountedSetStateMixin, Skele /// Request focus using the stored memory for this hub void requestFocusFromMemory() { - final index = HubFocusMemory.getForHub(_focusMemoryKey, _totalItemCount); + final index = widget.focusMemory.getForHub(_focusMemoryKey, _totalItemCount); requestFocusAt(index); } @@ -286,7 +288,7 @@ class HubSectionState extends State with MountedSetStateMixin, Skele setState(() { _focusedIndex--; }); - HubFocusMemory.setForHub(_focusMemoryKey, _focusedIndex); + widget.focusMemory.setForHub(_focusMemoryKey, _focusedIndex); _notifyFocusedItemChanged(); _scrollToIndex(_focusedIndex); } else if (widget.onNavigateToSidebar != null) { @@ -303,7 +305,7 @@ class HubSectionState extends State with MountedSetStateMixin, Skele setState(() { _focusedIndex++; }); - HubFocusMemory.setForHub(_focusMemoryKey, _focusedIndex); + widget.focusMemory.setForHub(_focusMemoryKey, _focusedIndex); _notifyFocusedItemChanged(); _scrollToIndex(_focusedIndex); } @@ -708,7 +710,7 @@ class HubSectionState extends State with MountedSetStateMixin, Skele setState(() { _focusedIndex = clamped; }); - HubFocusMemory.setForHub(_focusMemoryKey, clamped); + widget.focusMemory.setForHub(_focusMemoryKey, clamped); _notifyFocusedItemChanged(); _scrollToIndex(clamped); _hubFocusNode.requestFocus(); diff --git a/lib/widgets/media_card.dart b/lib/widgets/media_card.dart index 26866fe0e..8274395ac 100644 --- a/lib/widgets/media_card.dart +++ b/lib/widgets/media_card.dart @@ -119,6 +119,9 @@ class MediaCard extends StatefulWidget { /// Either a [MediaItem] or a [MediaPlaylist]. Typed as [Object] because Dart /// has no nominal union type โ€” runtime `is` checks select the variant. final Object item; + + /// Optional collection position announced with the card. + final String? semanticValue; final double? width; final double? height; final void Function(MediaItem source)? onRefresh; @@ -148,6 +151,7 @@ class MediaCard extends StatefulWidget { const MediaCard({ super.key, required this.item, + this.semanticValue, this.width, this.height, this.onRefresh, @@ -298,13 +302,14 @@ class MediaCardState extends State with ContextMenuTapMixin _handleTap(context, item), onTapDown: storeTapPosition, onLongPress: showContextMenuFromTap, @@ -316,9 +321,21 @@ class MediaCardState extends State with ContextMenuTapMixin with ContextMenuTapMixin with ContextMenuTapMixin with ContextMenuTapMixin with ContextMenuTapMixin _navigateToFocusedDetail(context, item, isOffline: widget.isOffline), ) else - Text( - item is MediaPlaylist ? item.title : (item as MediaItem).displayTitle, - maxLines: 1, - overflow: .ellipsis, - style: const TextStyle(fontWeight: .w600, fontSize: 13, height: 1.1), + ExcludeSemantics( + child: Text( + item is MediaPlaylist ? item.title : (item as MediaItem).displayTitle, + maxLines: 1, + overflow: .ellipsis, + style: const TextStyle(fontWeight: .w600, fontSize: 13, height: 1.1), + ), ), // Subtitle if (item is MediaPlaylist) @@ -498,7 +524,6 @@ class MediaCardState extends State with ContextMenuTapMixin _navigateToFocusedDetail(context, mi, isOffline: isOffline), ) else - Text('S${mi.parentIndex}', style: style), - Text('$episodeNum ยท ', style: style), + ExcludeSemantics(child: Text('S${mi.parentIndex}', style: style)), + ExcludeSemantics(child: Text('$episodeNum ยท ', style: style)), Expanded( - child: Text(episodeTitle, maxLines: 1, overflow: .ellipsis, style: style), + child: ExcludeSemantics( + child: Text(episodeTitle, maxLines: 1, overflow: .ellipsis, style: style), + ), ), ], ); @@ -699,26 +725,28 @@ class _MediaCardList extends StatelessWidget { child: Row( crossAxisAlignment: .start, children: [ - SizedBox( - width: _posterWidth(), - height: _posterHeight(), - child: Stack( - children: [ - _clipPosterImage( - context, - item, - _buildPosterImage( + ExcludeSemantics( + child: SizedBox( + width: _posterWidth(), + height: _posterHeight(), + child: Stack( + children: [ + _clipPosterImage( context, item, - isOffline: isOffline, - localPosterPath: localPosterPath, - episodePosterModeOverride: episodePosterModeOverride, - cardShapeOverride: cardShapeOverride, + _buildPosterImage( + context, + item, + isOffline: isOffline, + localPosterPath: localPosterPath, + episodePosterModeOverride: episodePosterModeOverride, + cardShapeOverride: cardShapeOverride, + ), ), - ), - if (item is MediaItem && _showsWatchedIndicator(item as MediaItem)) - WatchedIndicator(item: item as MediaItem), - ], + if (item is MediaItem && _showsWatchedIndicator(item as MediaItem)) + WatchedIndicator(item: item as MediaItem), + ], + ), ), ), const SizedBox(width: 12), @@ -734,22 +762,26 @@ class _MediaCardList extends StatelessWidget { onTap: () => _navigateToFocusedDetail(context, item as MediaItem, isOffline: isOffline), ) else - Text( - _displayTitle(), - maxLines: 2, - overflow: .ellipsis, - style: TextStyle(fontWeight: .w600, fontSize: _titleFontSize, height: 1.2), + ExcludeSemantics( + child: Text( + _displayTitle(), + maxLines: 2, + overflow: .ellipsis, + style: TextStyle(fontWeight: .w600, fontSize: _titleFontSize, height: 1.2), + ), ), const SizedBox(height: 4), if (metadataLine.isNotEmpty) ...[ - Text( - metadataLine, - maxLines: 1, - overflow: .ellipsis, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: tokens(context).textMuted.withValues(alpha: 0.9), - fontSize: _metadataFontSize, - fontWeight: .w500, + ExcludeSemantics( + child: Text( + metadataLine, + maxLines: 1, + overflow: .ellipsis, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: tokens(context).textMuted.withValues(alpha: 0.9), + fontSize: _metadataFontSize, + fontWeight: .w500, + ), ), ), const SizedBox(height: 2), @@ -761,13 +793,15 @@ class _MediaCardList extends StatelessWidget { _buildEpisodeSubtitle(context, item as MediaItem), const SizedBox(height: 4), ] else if (subtitle != null) ...[ - Text( - subtitle, - maxLines: 1, - overflow: .ellipsis, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: tokens(context).textMuted.withValues(alpha: 0.85), - fontSize: _subtitleFontSize, + ExcludeSemantics( + child: Text( + subtitle, + maxLines: 1, + overflow: .ellipsis, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: tokens(context).textMuted.withValues(alpha: 0.85), + fontSize: _subtitleFontSize, + ), ), ), const SizedBox(height: 4), @@ -776,39 +810,43 @@ class _MediaCardList extends StatelessWidget { SettingsService.instance.read(SettingsService.hideSpoilers) && (item as MediaItem).shouldHideSpoiler) && _summary() != null) ...[ - Text( - _summary()!, - maxLines: _summaryMaxLines, - overflow: .ellipsis, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: tokens(context).textMuted.withValues(alpha: 0.7), - fontSize: _summaryFontSize, - height: 1.3, + ExcludeSemantics( + child: Text( + _summary()!, + maxLines: _summaryMaxLines, + overflow: .ellipsis, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: tokens(context).textMuted.withValues(alpha: 0.7), + fontSize: _summaryFontSize, + height: 1.3, + ), ), ), ], if (showServerName && item is MediaItem && (item as MediaItem).serverName != null) ...[ const SizedBox(height: 4), - Row( - children: [ - BackendBadge( - backend: (item as MediaItem).backend, - size: _metadataFontSize + 2, - color: tokens(context).textMuted.withValues(alpha: 0.6), - ), - const SizedBox(width: 4), - Flexible( - child: Text( - (item as MediaItem).serverName!, - maxLines: 1, - overflow: .ellipsis, - style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: tokens(context).textMuted.withValues(alpha: 0.6), - fontSize: _metadataFontSize, + ExcludeSemantics( + child: Row( + children: [ + BackendBadge( + backend: (item as MediaItem).backend, + size: _metadataFontSize + 2, + color: tokens(context).textMuted.withValues(alpha: 0.6), + ), + const SizedBox(width: 4), + Flexible( + child: Text( + (item as MediaItem).serverName!, + maxLines: 1, + overflow: .ellipsis, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: tokens(context).textMuted.withValues(alpha: 0.6), + fontSize: _metadataFontSize, + ), ), ), - ), - ], + ], + ), ), ], ], @@ -1001,13 +1039,15 @@ Widget _buildPosterImage( class _MediaCardHelpers { static Widget buildPlaylistMeta(BuildContext context, MediaPlaylist playlist) { if (playlist.leafCount != null && playlist.leafCount! > 0) { - return Text( - t.playlists.itemCount(count: playlist.leafCount!), - maxLines: 1, - overflow: .ellipsis, - style: Theme.of( - context, - ).textTheme.bodySmall?.copyWith(color: tokens(context).textMuted, fontSize: 11, height: 1.1), + return ExcludeSemantics( + child: Text( + t.playlists.itemCount(count: playlist.leafCount!), + maxLines: 1, + overflow: .ellipsis, + style: Theme.of( + context, + ).textTheme.bodySmall?.copyWith(color: tokens(context).textMuted, fontSize: 11, height: 1.1), + ), ); } return const SizedBox.shrink(); @@ -1028,25 +1068,31 @@ class _MediaCardHelpers { if (mi.kind == MediaKind.collection) { final count = mi.childCount ?? mi.leafCount; if (count != null && count > 0) { - return Text( - t.playlists.itemCount(count: count), - maxLines: 1, - overflow: .ellipsis, - style: subtitleStyle, + return ExcludeSemantics( + child: Text( + t.playlists.itemCount(count: count), + maxLines: 1, + overflow: .ellipsis, + style: subtitleStyle, + ), ); } } // For albums, show the album artist if (mi.kind == MediaKind.album && mi.albumArtistTitle != null) { - return Text(mi.albumArtistTitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle); + return ExcludeSemantics( + child: Text(mi.albumArtistTitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + ); } // For tracks, show "Artist โ€ข duration" if (mi.kind == MediaKind.track) { final parts = [?mi.trackArtistTitle, if (mi.durationMs case final durationMs?) formatDurationTextual(durationMs)]; if (parts.isNotEmpty) { - return Text(parts.join(' โ€ข '), maxLines: 1, overflow: .ellipsis, style: subtitleStyle); + return ExcludeSemantics( + child: Text(parts.join(' โ€ข '), maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + ); } } @@ -1063,33 +1109,43 @@ class _MediaCardHelpers { style: subtitleStyle, onTap: () => _navigateToFocusedDetail(context, mi, isOffline: isOffline), ), - Text('$episodeSuffix ยท ', style: subtitleStyle), + ExcludeSemantics(child: Text('$episodeSuffix ยท ', style: subtitleStyle)), Expanded( - child: Text(episodeTitle, maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + child: ExcludeSemantics( + child: Text(episodeTitle, maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + ), ), ], ); } - return Text( - 'S${mi.parentIndex}$episodeSuffix ยท $episodeTitle', - maxLines: 1, - overflow: .ellipsis, - style: subtitleStyle, + return ExcludeSemantics( + child: Text( + 'S${mi.parentIndex}$episodeSuffix ยท $episodeTitle', + maxLines: 1, + overflow: .ellipsis, + style: subtitleStyle, + ), ); } // For other media types, show subtitle/parent/year if (mi.displaySubtitle != null) { - return Text(mi.displaySubtitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle); + return ExcludeSemantics( + child: Text(mi.displaySubtitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + ); } else if (mi.parentTitle != null) { - return Text(mi.parentTitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle); + return ExcludeSemantics( + child: Text(mi.parentTitle!, maxLines: 1, overflow: .ellipsis, style: subtitleStyle), + ); } else if (mi.year != null) { final edition = mi.editionTitle; - return Text( - edition != null ? '${mi.year} ยท $edition' : '${mi.year}', - maxLines: 1, - overflow: .ellipsis, - style: subtitleStyle, + return ExcludeSemantics( + child: Text( + edition != null ? '${mi.year} ยท $edition' : '${mi.year}', + maxLines: 1, + overflow: .ellipsis, + style: subtitleStyle, + ), ); } @@ -1097,6 +1153,12 @@ class _MediaCardHelpers { } } +/// Whether the card renders any pointer detail link for this item. +bool _hasPointerDetailLinks(MediaItem mi) { + if (_hasClickableTitle(mi)) return true; + return mi.isEpisode && mi.parentIndex != null && mi.parentId != null; +} + /// Whether this media item has a clickable title that navigates somewhere. /// Episodes/seasons navigate to their parent show; movies navigate to their detail page. bool _hasClickableTitle(MediaItem mi) { @@ -1111,7 +1173,8 @@ void _navigateToFocusedDetail(BuildContext context, MediaItem item, {bool isOffl } /// Text widget that shows hover underline + pointer cursor only in pointer mode. -/// In keyboard/dpad mode, renders as plain text with no interaction. +/// Keyboard/dpad mode keeps plain visual text while screen readers retain the +/// separately invokable detail action. class _ClickableText extends StatefulWidget { final String text; final TextStyle? style; @@ -1130,27 +1193,32 @@ class _ClickableTextState extends State<_ClickableText> { Widget build(BuildContext context) { final isKeyboard = InputModeTracker.isKeyboardMode(context); final baseStyle = widget.style ?? const TextStyle(); + final text = Semantics( + label: widget.text, + hint: t.mediaMenu.viewDetails, + button: true, + onTap: widget.onTap, + excludeSemantics: true, + child: Text( + widget.text, + maxLines: 1, + overflow: .ellipsis, + style: isKeyboard + ? baseStyle + : baseStyle.copyWith( + decoration: _isHovered ? TextDecoration.underline : null, + decorationColor: baseStyle.color, + ), + ), + ); - if (isKeyboard) { - return Text(widget.text, maxLines: 1, overflow: .ellipsis, style: baseStyle); - } + if (isKeyboard) return text; return MouseRegion( cursor: SystemMouseCursors.click, onEnter: (_) => setState(() => _isHovered = true), onExit: (_) => setState(() => _isHovered = false), - child: GestureDetector( - onTap: widget.onTap, - child: Text( - widget.text, - maxLines: 1, - overflow: .ellipsis, - style: baseStyle.copyWith( - decoration: _isHovered ? TextDecoration.underline : null, - decorationColor: baseStyle.color, - ), - ), - ), + child: GestureDetector(excludeFromSemantics: true, onTap: widget.onTap, child: text), ); } } @@ -1204,6 +1272,7 @@ class _CardTapRegion extends StatelessWidget { Widget build(BuildContext context) { if (!PlatformDetector.isDesktopOS()) { return GestureDetector( + excludeFromSemantics: true, behavior: HitTestBehavior.opaque, onTap: onTap, onTapDown: onTapDown, @@ -1214,6 +1283,7 @@ class _CardTapRegion extends StatelessWidget { ); } return InkWell( + excludeFromSemantics: true, mouseCursor: SystemMouseCursors.click, canRequestFocus: false, onTap: onTap, diff --git a/lib/widgets/optimized_media_image.dart b/lib/widgets/optimized_media_image.dart index 7e2d3ae6b..3e4e1e0da 100644 --- a/lib/widgets/optimized_media_image.dart +++ b/lib/widgets/optimized_media_image.dart @@ -43,6 +43,7 @@ class OptimizedMediaImage extends StatelessWidget { final IconData? fallbackIcon; final ImageType imageType; final String? localFilePath; + final bool cacheMissingLocalFile; const OptimizedMediaImage._({ super.key, @@ -61,6 +62,7 @@ class OptimizedMediaImage extends StatelessWidget { this.fallbackIcon, this.imageType = ImageType.poster, this.localFilePath, + this.cacheMissingLocalFile = false, }); /// Generic constructor for optimized images. @@ -81,6 +83,7 @@ class OptimizedMediaImage extends StatelessWidget { IconData? fallbackIcon, ImageType imageType, String? localFilePath, + bool cacheMissingLocalFile, }) = OptimizedMediaImage._; /// Named constructor for poster images with default fallback icon. @@ -199,16 +202,27 @@ class OptimizedMediaImage extends StatelessWidget { Widget build(BuildContext context) { final path = localFilePath; if (path == null) { - return _buildResolved(context, _LocalFileResolution.missing, null); + return _buildResolved(context, LocalFileResolution.missing, null); } - return _ResolvedLocalFile(path: path, builder: _buildResolved); + return ResolvedLocalFile(path: path, cacheMissing: cacheMissingLocalFile, builder: _buildResolved); } - Widget _buildResolved(BuildContext context, _LocalFileResolution resolution, File? localFile) { - if (resolution == _LocalFileResolution.pending) return _surfacePlaceholder(context); - final hasLocal = resolution == _LocalFileResolution.present; + Widget _buildResolved(BuildContext context, LocalFileResolution resolution, File? localFile) { + if (resolution == LocalFileResolution.pending) { + return placeholder == null + ? _surfacePlaceholder(context) + : _buildPlaceholder(context, imagePath ?? localFilePath ?? ''); + } + final hasLocal = resolution == LocalFileResolution.present; if (!hasLocal && (imagePath == null || imagePath!.isEmpty)) { + if (errorWidget != null) { + return errorWidget!( + context, + localFilePath ?? '', + FileSystemException('Local image file is unavailable', localFilePath), + ); + } return _buildFallback(context); } @@ -484,22 +498,43 @@ class _FadeInNetworkImageState extends State<_FadeInNetworkImage> with SingleTic } } -enum _LocalFileResolution { pending, missing, present } +enum LocalFileResolution { pending, missing, present } -class _ResolvedLocalFile extends StatefulWidget { - const _ResolvedLocalFile({required this.path, required this.builder}); +typedef LocalFileResolutionBuilder = Widget Function(BuildContext context, LocalFileResolution resolution, File? file); + +Future _defaultLocalFileExists(File file) => file.exists(); + +/// Resolves local file availability without blocking the build isolate. +/// +/// Results are scoped to this widget state and keyed by [path]. Present files +/// are always cached. Missing files are cached only when [cacheMissing] is set, +/// allowing consumers that expect late file creation to retry on rebuild. +class ResolvedLocalFile extends StatefulWidget { + const ResolvedLocalFile({ + super.key, + required this.path, + required this.builder, + this.cacheMissing = false, + this.fileExists = _defaultLocalFileExists, + }); final String path; - final Widget Function(BuildContext context, _LocalFileResolution resolution, File? file) builder; + final LocalFileResolutionBuilder builder; + final bool cacheMissing; + + @visibleForTesting + final Future Function(File file) fileExists; @override - State<_ResolvedLocalFile> createState() => _ResolvedLocalFileState(); + State createState() => _ResolvedLocalFileState(); } -class _ResolvedLocalFileState extends State<_ResolvedLocalFile> { +class _ResolvedLocalFileState extends State { + final Map _presentFiles = {}; + final Set _missingFiles = {}; + final Set _pendingPaths = {}; File? _file; - _LocalFileResolution _resolution = _LocalFileResolution.pending; - int _generation = 0; + LocalFileResolution _resolution = LocalFileResolution.pending; @override void initState() { @@ -508,28 +543,74 @@ class _ResolvedLocalFileState extends State<_ResolvedLocalFile> { } @override - void didUpdateWidget(_ResolvedLocalFile oldWidget) { + void didUpdateWidget(ResolvedLocalFile oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.path != widget.path || _resolution == _LocalFileResolution.missing) _resolve(); + if (oldWidget.fileExists != widget.fileExists) { + _presentFiles.clear(); + _missingFiles.clear(); + _pendingPaths.clear(); + } else if (oldWidget.cacheMissing && !widget.cacheMissing) { + _missingFiles.clear(); + } + if (oldWidget.path != widget.path || + oldWidget.fileExists != widget.fileExists || + _resolution == LocalFileResolution.missing) { + _resolve(); + } } void _resolve() { - final generation = ++_generation; + final path = widget.path; + final present = _presentFiles[path]; + if (present != null) { + _file = present; + _resolution = LocalFileResolution.present; + return; + } + if (widget.cacheMissing && _missingFiles.contains(path)) { + _file = null; + _resolution = LocalFileResolution.missing; + return; + } + _file = null; - _resolution = _LocalFileResolution.pending; - final candidate = File(widget.path); - candidate.exists().then((exists) { - if (!mounted || generation != _generation) return; - setState(() { - _file = exists ? candidate : null; - _resolution = exists ? _LocalFileResolution.present : _LocalFileResolution.missing; - }); + _resolution = LocalFileResolution.pending; + if (!_pendingPaths.add(path)) return; + + final candidate = File(path); + try { + widget + .fileExists(candidate) + .then( + (exists) => _complete(path, candidate, exists), + onError: (Object _, StackTrace _) => _complete(path, candidate, false), + ); + } catch (_) { + _complete(path, candidate, false); + } + } + + void _complete(String path, File candidate, bool exists) { + if (!mounted) return; + _pendingPaths.remove(path); + if (exists) { + _presentFiles[path] = candidate; + _missingFiles.remove(path); + } else if (widget.cacheMissing) { + _missingFiles.add(path); + } + if (widget.path != path) return; + setState(() { + _file = exists ? candidate : null; + _resolution = exists ? LocalFileResolution.present : LocalFileResolution.missing; }); } @override void dispose() { - ++_generation; + _presentFiles.clear(); + _missingFiles.clear(); + _pendingPaths.clear(); super.dispose(); } diff --git a/lib/widgets/server_activities_button.dart b/lib/widgets/server_activities_button.dart index 4a825c757..94b63333d 100644 --- a/lib/widgets/server_activities_button.dart +++ b/lib/widgets/server_activities_button.dart @@ -5,12 +5,14 @@ import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:provider/provider.dart'; +import '../exceptions/media_server_exceptions.dart'; import '../focus/key_event_utils.dart'; import '../i18n/strings.g.dart'; import '../theme/mono_tokens.dart'; import 'package:plezy/widgets/app_icon.dart'; import '../models/plex/plex_activity.dart'; import '../providers/multi_server_provider.dart'; +import '../utils/media_server_http_client.dart'; class ServerActivitiesButton extends StatefulWidget { const ServerActivitiesButton({super.key}); @@ -43,6 +45,8 @@ class ServerActivitiesButtonState extends State { OverlayEntry? _overlayEntry; final _panelNotifier = ValueNotifier<_PanelData>(_PanelData.loading); Timer? _pollTimer; + AbortController? _activeLoadAbort; + int _loadGeneration = 0; @override void deactivate() { @@ -60,6 +64,10 @@ class ServerActivitiesButtonState extends State { void _removeOverlay() { _pollTimer?.cancel(); _pollTimer = null; + _loadGeneration++; + final activeLoadAbort = _activeLoadAbort; + _activeLoadAbort = null; + activeLoadAbort?.abort(); _overlayEntry?.remove(); _overlayEntry = null; } @@ -84,10 +92,10 @@ class ServerActivitiesButtonState extends State { builder: (_) => _buildOverlay(right: right, top: top), ); Overlay.of(context).insert(_overlayEntry!); - _fetchActivities(); + _startRefresh(silent: false); } - Future> _loadFromServers() async { + Future> _loadFromServers(AbortController abort) async { final multiServer = Provider.of(context, listen: false); final serverIds = multiServer.onlineServerIds; @@ -95,7 +103,7 @@ class ServerActivitiesButtonState extends State { // Plex-only: `/activities` API is Plex-specific. final client = multiServer.getPlexClientForServer(ServerId(serverId)); if (client == null) return null; - final activities = await client.getActivities(); + final activities = await client.getActivities(abort: abort); return _ServerResult(serverId: serverId, serverName: client.serverName ?? serverId, activities: activities); }); @@ -103,32 +111,70 @@ class ServerActivitiesButtonState extends State { return rawResults.whereType<_ServerResult>().toList(); } - Future _fetchActivities() async { - try { - final results = await _loadFromServers(); - if (!mounted) return; - _panelNotifier.value = _PanelData(fetchState: _FetchState.loaded, results: results); - _startPolling(); - } catch (_) { - if (!mounted) return; - _panelNotifier.value = const _PanelData(fetchState: _FetchState.error, results: []); - } - } + void _startRefresh({required bool silent}) { + if (!mounted || _overlayEntry == null) return; - void _startPolling() { _pollTimer?.cancel(); - if (mounted && _overlayEntry != null) { - _pollTimer = Timer.periodic(const Duration(seconds: 3), (_) => _silentRefresh()); + _pollTimer = null; + final generation = ++_loadGeneration; + final supersededAbort = _activeLoadAbort; + final abort = AbortController(); + _activeLoadAbort = abort; + supersededAbort?.abort(); + + if (!silent) { + _panelNotifier.value = _PanelData.loading; + } + unawaited(_runRefresh(generation: generation, abort: abort, silent: silent)); + } + + Future _runRefresh({required int generation, required AbortController abort, required bool silent}) async { + var scheduleNext = false; + try { + final results = await _loadFromServers(abort); + if (!_ownsLoad(generation, abort)) return; + _panelNotifier.value = _PanelData(fetchState: _FetchState.loaded, results: results); + scheduleNext = true; + } on MediaServerHttpException catch (error) { + if (error.isCancellation || !_ownsLoad(generation, abort)) return; + if (silent) { + scheduleNext = true; + } else { + _panelNotifier.value = const _PanelData(fetchState: _FetchState.error, results: []); + } + } catch (_) { + if (!_ownsLoad(generation, abort)) return; + if (silent) { + scheduleNext = true; + } else { + _panelNotifier.value = const _PanelData(fetchState: _FetchState.error, results: []); + } + } finally { + if (identical(_activeLoadAbort, abort)) { + _activeLoadAbort = null; + if (scheduleNext && _isCurrentGeneration(generation)) { + _schedulePoll(generation); + } + } } } - Future _silentRefresh() async { - if (!mounted) return; - try { - final results = await _loadFromServers(); - if (!mounted) return; - _panelNotifier.value = _PanelData(fetchState: _FetchState.loaded, results: results); - } catch (_) {} + bool _ownsLoad(int generation, AbortController abort) { + return _isCurrentGeneration(generation) && identical(_activeLoadAbort, abort); + } + + bool _isCurrentGeneration(int generation) { + return mounted && _overlayEntry != null && _loadGeneration == generation; + } + + void _schedulePoll(int generation) { + _pollTimer?.cancel(); + if (!_isCurrentGeneration(generation)) return; + _pollTimer = Timer(const Duration(seconds: 3), () { + if (!_isCurrentGeneration(generation)) return; + _pollTimer = null; + _startRefresh(silent: true); + }); } Future _cancelActivity(ServerId serverId, String uuid) async { @@ -142,10 +188,7 @@ class ServerActivitiesButtonState extends State { return; } if (!mounted || _overlayEntry == null) return; - _pollTimer?.cancel(); - _pollTimer = null; - _panelNotifier.value = _PanelData.loading; - unawaited(_fetchActivities()); + _startRefresh(silent: false); } Widget _buildOverlay({required double right, required double top}) { diff --git a/lib/widgets/setting_tile.dart b/lib/widgets/setting_tile.dart index 56ccea0ab..f8af24c23 100644 --- a/lib/widgets/setting_tile.dart +++ b/lib/widgets/setting_tile.dart @@ -49,8 +49,8 @@ class SettingSwitchTile extends StatelessWidget { title: Text(title, style: settingsOptionTitleStyle(context)), subtitle: subtitle != null ? Text(subtitle!) : null, value: value, - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), onChanged: enabled ? (v) async { await svc.write(pref, v); @@ -93,8 +93,8 @@ class SettingNavigationTile extends StatelessWidget { subtitle: subtitle != null ? Text(subtitle!) : null, trailing: AppIcon(trailingIcon, fill: 1), onTap: onTap ?? () => Navigator.push(context, MaterialPageRoute(builder: destinationBuilder!)), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), ); } } @@ -134,8 +134,8 @@ class SettingNumberTile extends StatelessWidget { title: Text(title, style: settingsOptionTitleStyle(context)), subtitle: Text(subtitleBuilder(value)), trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), onTap: () => showNumericInputDialog( context: context, title: title, @@ -192,8 +192,8 @@ class SettingSelectionTile extends StatelessWidget { title: Text(title, style: settingsOptionTitleStyle(context)), subtitle: Text(subtitleBuilder(value)), trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), onTap: () async { final picked = await showSelectionDialog( context: context, @@ -241,8 +241,8 @@ class SettingRegexTile extends StatelessWidget { title: Text(title, style: settingsOptionTitleStyle(context)), subtitle: Text(subtitle), trailing: const AppIcon(Symbols.chevron_right_rounded, fill: 1), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), onTap: () => showRegexInputDialog( context: context, title: title, @@ -341,8 +341,8 @@ class SettingColorTile extends StatelessWidget { border: Border.all(color: Theme.of(context).colorScheme.outlineVariant), ), ), - dense: settingsRowDense(), - visualDensity: settingsRowVisualDensity(), + dense: settingsRowDense(context), + visualDensity: settingsRowVisualDensity(context), onTap: () => showColorInputDialog( context: context, title: title, diff --git a/lib/widgets/settings_section.dart b/lib/widgets/settings_section.dart index 6fdc40c90..8d8fd6fc5 100644 --- a/lib/widgets/settings_section.dart +++ b/lib/widgets/settings_section.dart @@ -6,21 +6,19 @@ import 'expressive_button_group.dart'; /// Standard settings-option title style. /// -/// Matches Flutter's dense ListTile title size so custom controls and -/// ordinary settings rows keep the same hierarchy. TV retains the larger -/// body style used for D-pad readability at distance. +/// Mobile uses Flutter's compact ListTile title size. Desktop and TV retain +/// the larger body style used for pointer and D-pad readability. TextStyle? settingsOptionTitleStyle(BuildContext context) { final style = Theme.of(context).textTheme.bodyLarge; - return PlatformDetector.isTV() ? style : style?.copyWith(fontSize: 13); + return PlatformDetector.isMobile(context) ? style?.copyWith(fontSize: 13) : style; } /// Standard settings-row density, paired with [settingsOptionTitleStyle]: -/// compact rows everywhere except TV, where full-height rows keep D-pad -/// readability. -bool settingsRowDense() => !PlatformDetector.isTV(); +/// compact on mobile and full-height on desktop and TV. +bool settingsRowDense(BuildContext context) => PlatformDetector.isMobile(context); -VisualDensity settingsRowVisualDensity() => - settingsRowDense() ? const VisualDensity(vertical: -3) : VisualDensity.standard; +VisualDensity settingsRowVisualDensity(BuildContext context) => + settingsRowDense(context) ? const VisualDensity(vertical: -3) : VisualDensity.standard; class SettingsSectionHeader extends StatelessWidget { final String title; diff --git a/lib/widgets/tv_browse_rail.dart b/lib/widgets/tv_browse_rail.dart index 88cacf4ea..56827ccb4 100644 --- a/lib/widgets/tv_browse_rail.dart +++ b/lib/widgets/tv_browse_rail.dart @@ -306,6 +306,7 @@ enum TvRailTrailing { none, loading, error, viewAll } class TvBrowseRail extends StatefulWidget { final List hubs; + final HubFocusMemory focusMemory; final IconData Function(MediaHub hub, int index) iconForHub; /// Whether to show each hub's originating server name in its header. Used when @@ -354,6 +355,7 @@ class TvBrowseRail extends StatefulWidget { const TvBrowseRail({ super.key, required this.hubs, + required this.focusMemory, required this.iconForHub, this.showServerName = false, this.onFocusedItemChanged, @@ -774,7 +776,7 @@ class TvBrowseRailState extends State { final currentHub = _activeHub; if (currentHub != null) _rememberFocus(currentHub); final nextHub = widget.hubs[next]; - final remembered = HubFocusMemory.getForHubOnly(_hubKey(nextHub), _totalItemCount(nextHub)); + final remembered = widget.focusMemory.getForHubOnly(_hubKey(nextHub), _totalItemCount(nextHub)); // No setState: the active-hub change is observed through _focusModel // selectors (cards, headers, row dim), so a hub move repaints only the // two affected rows instead of rebuilding every visible card. Section @@ -857,7 +859,7 @@ class TvBrowseRailState extends State { } void _rememberFocus(MediaHub hub) { - HubFocusMemory.setForHub(_hubKey(hub), _itemIndex); + widget.focusMemory.setForHub(_hubKey(hub), _itemIndex); } void _scrollToItem({bool animate = true, Duration duration = _navigationScrollDuration}) { @@ -1354,7 +1356,7 @@ class TvBrowseRailState extends State { }) { final isActiveHub = hubIndex == _hubIndex; final totalCount = _totalItemCount(hub); - final inactiveIndex = HubFocusMemory.getForHubOnly(_hubKey(hub), totalCount); + final inactiveIndex = widget.focusMemory.getForHubOnly(_hubKey(hub), totalCount); final focusedIndex = isActiveHub ? _itemIndex : inactiveIndex; final scrollController = _scrollControllerForHub(hub, metrics, railViewportWidth, scale, focusedIndex); _metricsByHub[_hubKey(hub)] = metrics; diff --git a/lib/widgets/tv_virtual_keyboard.dart b/lib/widgets/tv_virtual_keyboard.dart index 1b3ae1389..893a0d60c 100644 --- a/lib/widgets/tv_virtual_keyboard.dart +++ b/lib/widgets/tv_virtual_keyboard.dart @@ -398,7 +398,7 @@ class _TvVirtualKeyboardDialogState extends State<_TvVirtualKeyboardDialog> { } } - return KeyEventResult.handled; + return KeyEventResult.ignored; } bool _handlePhysicalKeyboardTextInput(KeyEvent event) { @@ -564,22 +564,15 @@ class _TvVirtualKeyboardDialogState extends State<_TvVirtualKeyboardDialog> { void _backspace() { final value = widget.controller.value; final (:start, :end) = _selectionRangeForEdit(value); + if (start == end && start == 0) return; - if (start != end) { - _replace( - value.copyWith( - text: value.text.replaceRange(start, end, ''), - selection: TextSelection.collapsed(offset: start), - ), - ); - return; - } - if (start == 0) return; - + final codeUnitRange = start == end ? TextRange(start: start - 1, end: start) : TextRange(start: start, end: end); + final range = expandToGraphemeRange(value.text, codeUnitRange); + if (range.isCollapsed) return; _replace( value.copyWith( - text: value.text.replaceRange(start - 1, start, ''), - selection: TextSelection.collapsed(offset: start - 1), + text: value.text.replaceRange(range.start, range.end, ''), + selection: TextSelection.collapsed(offset: range.start), composing: TextRange.empty, ), ); @@ -588,23 +581,15 @@ class _TvVirtualKeyboardDialogState extends State<_TvVirtualKeyboardDialog> { void _deleteForward() { final value = widget.controller.value; final (:start, :end) = _selectionRangeForEdit(value); + if (start == end && start >= value.text.length) return; - if (start != end) { - _replace( - value.copyWith( - text: value.text.replaceRange(start, end, ''), - selection: TextSelection.collapsed(offset: start), - composing: TextRange.empty, - ), - ); - return; - } - if (start >= value.text.length) return; - + final codeUnitRange = start == end ? TextRange(start: start, end: start + 1) : TextRange(start: start, end: end); + final range = expandToGraphemeRange(value.text, codeUnitRange); + if (range.isCollapsed) return; _replace( value.copyWith( - text: value.text.replaceRange(start, start + 1, ''), - selection: TextSelection.collapsed(offset: start), + text: value.text.replaceRange(range.start, range.end, ''), + selection: TextSelection.collapsed(offset: range.start), composing: TextRange.empty, ), ); diff --git a/lib/widgets/video_controls/models/track_controls_state.dart b/lib/widgets/video_controls/models/track_controls_state.dart index 0180da1f6..57e3a49e8 100644 --- a/lib/widgets/video_controls/models/track_controls_state.dart +++ b/lib/widgets/video_controls/models/track_controls_state.dart @@ -47,8 +47,8 @@ class TrackControlsState { final VoidCallback? onToggleAlwaysOnTop; final Function(int)? onSwitchVersion; final ValueChanged? onSwitchQualityPreset; - final ValueChanged? onSwitchAudioStreamId; - final ValueChanged? onSwitchSubtitle; + final Future Function(int)? onSwitchAudioStreamId; + final Future Function(PlaybackSourceSubtitleChoice)? onSwitchSubtitle; final Function(AudioTrack)? onAudioTrackChanged; final Function(SubtitleTrack)? onSubtitleTrackChanged; final Function(SubtitleTrack)? onSecondarySubtitleTrackChanged; diff --git a/lib/widgets/video_controls/parts/track_controls.dart b/lib/widgets/video_controls/parts/track_controls.dart index 6cbc2966b..d117162d5 100644 --- a/lib/widgets/video_controls/parts/track_controls.dart +++ b/lib/widgets/video_controls/parts/track_controls.dart @@ -1,5 +1,7 @@ part of '../video_controls.dart'; +final Expando> _subtitleVisibilityWrites = Expando>(); + extension _PlexVideoControlsTrackMethods on _PlexVideoControlsState { void _toggleSubtitles() { final currentTrack = widget.player.state.track.subtitle; @@ -19,6 +21,8 @@ extension _PlexVideoControlsTrackMethods on _PlexVideoControlsState { void _setSubtitleVisibility(bool visible) { final targetPlayer = widget.player; + final coordinator = _subtitleVisibilityWrites[targetPlayer] ??= LatestAsyncWrite(); + final writeToken = coordinator.begin('sub-visibility'); final generation = ++_subtitleVisibilityWriteGeneration; _setControlsState(() { _subtitlesVisible = visible; @@ -26,12 +30,25 @@ extension _PlexVideoControlsTrackMethods on _PlexVideoControlsState { unawaited(() async { try { - await targetPlayer.setProperty('sub-visibility', visible ? 'yes' : 'no'); - if (!mounted || generation != _subtitleVisibilityWriteGeneration || targetPlayer != widget.player) return; - _confirmedSubtitlesVisible = visible; + final committed = await coordinator.commitIfLatest('sub-visibility', writeToken, () async { + await targetPlayer.setProperty('sub-visibility', visible ? 'yes' : 'no'); + if (mounted && targetPlayer == widget.player) { + // Preserve every successfully executed mutation as the rollback + // baseline, even when a newer optimistic toggle is queued. + _confirmedSubtitlesVisible = visible; + } + }); + if (!committed || + !mounted || + generation != _subtitleVisibilityWriteGeneration || + targetPlayer != widget.player) { + return; + } } catch (error, stackTrace) { appLogger.w('Failed to update subtitle visibility', error: error, stackTrace: stackTrace); - if (!mounted || generation != _subtitleVisibilityWriteGeneration || targetPlayer != widget.player) return; + if (!mounted || generation != _subtitleVisibilityWriteGeneration || targetPlayer != widget.player) { + return; + } _setControlsState(() { _subtitlesVisible = _confirmedSubtitlesVisible; }); diff --git a/lib/widgets/video_controls/parts/visibility.dart b/lib/widgets/video_controls/parts/visibility.dart index 5783539ba..d9fe39ac0 100644 --- a/lib/widgets/video_controls/parts/visibility.dart +++ b/lib/widgets/video_controls/parts/visibility.dart @@ -47,7 +47,12 @@ extension _PlexVideoControlsVisibilityMethods on _PlexVideoControlsState { } /// Controls hide delay: 5s on mobile/TV/keyboard-nav, 3s on desktop with mouse. + /// Maestro builds extend the delay because accessibility-tree queries can take + /// longer than the production timeout on physical devices. Duration get _hideDelay { + if (const bool.fromEnvironment('PLEZY_MAESTRO_E2E')) { + return const Duration(seconds: 30); + } final isMobile = (Platform.isIOS || Platform.isAndroid) && !PlatformDetector.isTV(); if (isMobile || PlatformDetector.isTV() || _videoPlayerNavigationEnabled) { return const Duration(seconds: 5); @@ -82,6 +87,15 @@ extension _PlexVideoControlsVisibilityMethods on _PlexVideoControlsState { widget.chromeController.toggle(); } + void _toggleControlsFromSemantics() { + if (_showControls) { + widget.chromeController.hide(); + return; + } + widget.chromeController.show(restartAutoHide: false); + widget.chromeController.cancelAutoHide(); + } + /// Apply preferred orientations for the given lock state. Wired to /// [SettingsService.rotationLocked] via [bindEffect] so any change โ€” from /// this toggle or from the settings screen โ€” fires the same SystemChrome call. diff --git a/lib/widgets/video_controls/sheets/track_sheet.dart b/lib/widgets/video_controls/sheets/track_sheet.dart index c6bf68968..b43a4f0f7 100644 --- a/lib/widgets/video_controls/sheets/track_sheet.dart +++ b/lib/widgets/video_controls/sheets/track_sheet.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:material_symbols_icons/symbols.dart'; @@ -135,7 +137,7 @@ class TrackSheet extends StatelessWidget { class _SourceAudioColumn extends StatefulWidget { final List tracks; final int? selectedStreamId; - final ValueChanged onSelected; + final Future Function(int) onSelected; final bool showHeader; const _SourceAudioColumn({ @@ -151,6 +153,7 @@ class _SourceAudioColumn extends StatefulWidget { class _SourceAudioColumnState extends State<_SourceAudioColumn> { final _initialScroll = InitialItemScrollController(); + bool _selectionPending = false; @override void dispose() { @@ -158,6 +161,17 @@ class _SourceAudioColumnState extends State<_SourceAudioColumn> { super.dispose(); } + Future _select(int streamId) async { + if (_selectionPending) return; + setState(() => _selectionPending = true); + try { + await widget.onSelected(streamId); + if (mounted) OverlaySheetController.of(context).close(); + } finally { + if (mounted) setState(() => _selectionPending = false); + } + } + @override Widget build(BuildContext context) { final selectedId = _effectiveSelectedStreamId(); @@ -167,6 +181,7 @@ class _SourceAudioColumnState extends State<_SourceAudioColumn> { return Column( children: [ if (widget.showHeader) SheetColumnHeader(label: t.videoControls.audioLabel), + if (_selectionPending) const LinearProgressIndicator(minHeight: 2), Expanded( child: ListView.builder( controller: _initialScroll.controller, @@ -179,10 +194,7 @@ class _SourceAudioColumnState extends State<_SourceAudioColumn> { key: index == 0 ? _initialScroll.firstItemKey : null, label: track.label, isSelected: isSelected, - onTap: () { - OverlaySheetController.of(context).close(); - widget.onSelected(track.id); - }, + onTap: () => unawaited(_select(track.id)), ); }, ), @@ -214,6 +226,7 @@ class _SourceSubtitleColumn extends StatefulWidget { class _SourceSubtitleColumnState extends State<_SourceSubtitleColumn> { final _initialScroll = InitialItemScrollController(); + bool _selectionPending = false; @override void dispose() { @@ -221,6 +234,17 @@ class _SourceSubtitleColumnState extends State<_SourceSubtitleColumn> { super.dispose(); } + Future _select(PlaybackSourceSubtitleChoice choice) async { + if (_selectionPending) return; + setState(() => _selectionPending = true); + try { + await widget.trackControlsState.onSwitchSubtitle!(choice); + if (mounted) OverlaySheetController.of(context).close(); + } finally { + if (mounted) setState(() => _selectionPending = false); + } + } + @override Widget build(BuildContext context) { final selectedChoice = _effectiveSelectedChoice(); @@ -231,6 +255,7 @@ class _SourceSubtitleColumnState extends State<_SourceSubtitleColumn> { return Column( children: [ if (widget.showHeader) SheetColumnHeader(label: t.videoControls.subtitlesLabel), + if (_selectionPending) const LinearProgressIndicator(minHeight: 2), Expanded( child: ListView.builder( controller: _initialScroll.controller, @@ -241,10 +266,7 @@ class _SourceSubtitleColumnState extends State<_SourceSubtitleColumn> { context: context, key: _initialScroll.firstItemKey, isSelected: selectedChoice.isOff, - onTap: () { - OverlaySheetController.of(context).close(); - widget.trackControlsState.onSwitchSubtitle!(const PlaybackSourceSubtitleChoice.off()); - }, + onTap: () => unawaited(_select(const PlaybackSourceSubtitleChoice.off())), ); } @@ -253,10 +275,7 @@ class _SourceSubtitleColumnState extends State<_SourceSubtitleColumn> { context: context, label: track.labelForIndex(index - 1), isSelected: track.id == selectedId, - onTap: () { - OverlaySheetController.of(context).close(); - widget.trackControlsState.onSwitchSubtitle!(PlaybackSourceSubtitleChoice.source(track.id)); - }, + onTap: () => unawaited(_select(PlaybackSourceSubtitleChoice.source(track.id))), ); }, ), @@ -372,6 +391,7 @@ class _SubtitleColumn extends StatefulWidget { class _SubtitleColumnState extends State<_SubtitleColumn> { final _initialScroll = InitialItemScrollController(); + bool _selectionPending = false; @override void dispose() { @@ -379,6 +399,17 @@ class _SubtitleColumnState extends State<_SubtitleColumn> { super.dispose(); } + Future _selectSourceSidecar(int streamId) async { + if (_selectionPending) return; + setState(() => _selectionPending = true); + try { + await widget.trackControlsState.onSwitchSubtitle!(PlaybackSourceSubtitleChoice.source(streamId)); + if (mounted) OverlaySheetController.of(context).close(); + } finally { + if (mounted) setState(() => _selectionPending = false); + } + } + @override Widget build(BuildContext context) { final selectedSub = widget.selection.subtitle; @@ -401,6 +432,7 @@ class _SubtitleColumnState extends State<_SubtitleColumn> { return Column( children: [ if (widget.showHeader) SheetColumnHeader(label: t.videoControls.subtitlesLabel), + if (_selectionPending) const LinearProgressIndicator(minHeight: 2), Expanded( child: ListView.builder( controller: _initialScroll.controller, @@ -444,10 +476,7 @@ class _SubtitleColumnState extends State<_SubtitleColumn> { context: context, label: sourceTrack.labelForIndex(trackIndex), isSelected: false, - onTap: () { - OverlaySheetController.of(context).close(); - widget.trackControlsState.onSwitchSubtitle!(PlaybackSourceSubtitleChoice.source(sourceTrack.id)); - }, + onTap: () => unawaited(_selectSourceSidecar(sourceTrack.id)), ); } diff --git a/lib/widgets/video_controls/video_control_button.dart b/lib/widgets/video_controls/video_control_button.dart index 5b9b5927c..7c9402f21 100644 --- a/lib/widgets/video_controls/video_control_button.dart +++ b/lib/widgets/video_controls/video_control_button.dart @@ -23,6 +23,12 @@ class VideoControlButton extends StatelessWidget { /// If not provided, falls back to tooltip. final String? semanticLabel; + /// Optional current value announced after [semanticLabel]. + final String? semanticValue; + + /// Optional checked state for toggle-style controls. + final bool? checked; + /// Whether this button represents an active state (e.g., a feature is enabled). /// When true, the icon color defaults to amber instead of white. final bool isActive; @@ -45,6 +51,8 @@ class VideoControlButton extends StatelessWidget { this.color, this.tooltip, this.semanticLabel, + this.semanticValue, + this.checked, this.isActive = false, this.focusNode, this.onKeyEvent, @@ -64,9 +72,8 @@ class VideoControlButton extends StatelessWidget { constraints: const BoxConstraints(minWidth: 40, minHeight: 40), ); - Widget result = semanticLabel != null - ? Semantics(label: semanticLabel, button: true, excludeSemantics: true, child: button) - : button; + final effectiveSemanticLabel = semanticLabel ?? tooltip; + Widget result = button; if (focusNode != null) { result = FocusableWrapper( @@ -75,12 +82,25 @@ class VideoControlButton extends StatelessWidget { onKeyEvent: onKeyEvent, onFocusChange: onFocusChange, autofocus: autofocus, - semanticLabel: semanticLabel, + semanticLabel: effectiveSemanticLabel, + semanticValue: semanticValue, + checked: checked, borderRadius: 20, // Circular for icon buttons autoScroll: false, // Video controls don't scroll useBackgroundFocus: true, // Use background highlight for video controls child: result, ); + } else if (effectiveSemanticLabel != null) { + result = Semantics( + label: effectiveSemanticLabel, + value: semanticValue, + button: true, + enabled: onPressed != null, + checked: checked, + onTap: onPressed, + excludeSemantics: true, + child: result, + ); } return result; diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index f982ed720..bd306e446 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -61,6 +61,7 @@ import '../../utils/player_utils.dart'; import '../../theme/mono_tokens.dart'; import '../../utils/provider_extensions.dart'; import '../../utils/snackbar_helper.dart'; +import '../../utils/latest_async_write.dart'; import 'icons.dart'; import 'player_chrome_controller.dart'; import 'playback_extras_loader.dart'; @@ -802,6 +803,9 @@ class _PlexVideoControlsState extends State @override void didUpdateWidget(PlexVideoControls oldWidget) { super.didUpdateWidget(oldWidget); + if (oldWidget.player != widget.player) { + ++_subtitleVisibilityWriteGeneration; + } if (oldWidget.chromeController != widget.chromeController) { oldWidget.chromeController.removeListener(_onChromeChanged); _lastControlsVisible = widget.chromeController.controlsVisible; @@ -827,6 +831,7 @@ class _PlexVideoControlsState extends State @override void dispose() { + ++_subtitleVisibilityWriteGeneration; HardwareKeyboard.instance.removeHandler(_handleGlobalKeyEvent); widget.chromeController.removeListener(_onChromeChanged); widget.hasFirstFrame?.removeListener(_onFirstFrameReady); @@ -977,13 +982,21 @@ class _PlexVideoControlsState extends State const Positioned(top: 0, left: 0, child: LinuxKeepAlive()), // Also handles long-press for 2x speed. Positioned.fill( - child: GestureDetector( - onTap: _handleOuterTap, - onLongPressStart: (_) => _handleLongPressStart(), - onLongPressEnd: (_) => _handleLongPressEnd(), - onLongPressCancel: _handleLongPressCancel, - behavior: HitTestBehavior.opaque, - child: const ColoredBox(color: Colors.transparent), + child: Semantics( + button: true, + label: _showControls + ? t.videoControls.hidePlaybackControls + : t.videoControls.showPlaybackControls, + onTap: _toggleControlsFromSemantics, + child: GestureDetector( + excludeFromSemantics: true, + onTap: _handleOuterTap, + onLongPressStart: (_) => _handleLongPressStart(), + onLongPressEnd: (_) => _handleLongPressEnd(), + onLongPressCancel: _handleLongPressCancel, + behavior: HitTestBehavior.opaque, + child: const ColoredBox(color: Colors.transparent), + ), ), ), // Mobile double-tap zones for skip forward/backward diff --git a/lib/widgets/video_controls/widgets/circular_control_button.dart b/lib/widgets/video_controls/widgets/circular_control_button.dart index 199e128f8..ab2e111ba 100644 --- a/lib/widgets/video_controls/widgets/circular_control_button.dart +++ b/lib/widgets/video_controls/widgets/circular_control_button.dart @@ -27,6 +27,8 @@ class CircularControlButton extends StatelessWidget { child: Semantics( label: semanticLabel, button: true, + enabled: isEnabled, + onTap: onPressed, excludeSemantics: true, child: IconButton( icon: AppIcon( diff --git a/lib/widgets/video_controls/widgets/content_strip.dart b/lib/widgets/video_controls/widgets/content_strip.dart index 691d70b99..f8cb894f1 100644 --- a/lib/widgets/video_controls/widgets/content_strip.dart +++ b/lib/widgets/video_controls/widgets/content_strip.dart @@ -104,6 +104,18 @@ class ContentStripState extends State { if (!identical(oldWidget.player, widget.player) || !identical(oldWidget.chapters, widget.chapters)) { _bindChapterIndexStream(); } + _normalizeActiveTab(); + } + + void _normalizeActiveTab() { + if (_activeTab == _StripTab.chapters && !_hasChapters && _hasQueue) { + _activeTab = _StripTab.queue; + _lastAutoScrolledQueueItemID = null; + _lastAutoScrolledQueueIndex = null; + } else if (_activeTab == _StripTab.queue && !_hasQueue && _hasChapters) { + _activeTab = _StripTab.chapters; + _lastAutoScrolledChapterIndex = null; + } } void _bindChapterIndexStream() { diff --git a/lib/widgets/video_controls/widgets/sync_offset_control.dart b/lib/widgets/video_controls/widgets/sync_offset_control.dart index 8a68d9767..ba14126da 100644 --- a/lib/widgets/video_controls/widgets/sync_offset_control.dart +++ b/lib/widgets/video_controls/widgets/sync_offset_control.dart @@ -69,6 +69,7 @@ class _SyncOffsetControlState extends State { late double _currentOffset; late double _confirmedOffset; int _writeGeneration = 0; + int _bindingGeneration = 0; Timer? _longPressTimer; @override @@ -85,6 +86,7 @@ class _SyncOffsetControlState extends State { widget.player != oldWidget.player || widget.propertyName != oldWidget.propertyName) { ++_writeGeneration; + ++_bindingGeneration; _currentOffset = widget.initialOffset.toDouble(); _confirmedOffset = _currentOffset; } @@ -93,6 +95,7 @@ class _SyncOffsetControlState extends State { @override void dispose() { ++_writeGeneration; + ++_bindingGeneration; _longPressTimer?.cancel(); super.dispose(); } @@ -104,16 +107,26 @@ class _SyncOffsetControlState extends State { final coordinator = _syncOffsetWrites[targetPlayer] ??= LatestAsyncWrite(); final writeToken = coordinator.begin(propertyName); final generation = ++_writeGeneration; + final bindingGeneration = _bindingGeneration; unawaited(() async { try { - // Convert milliseconds to seconds for mpv. - final offsetSeconds = offsetMs / 1000.0; - await targetPlayer.setProperty(propertyName, offsetSeconds.toString()); - final committed = await coordinator.commitIfLatest( - propertyName, - writeToken, - () => persistOffset(offsetMs.round()), - ); + final committed = await coordinator.commitIfLatest(propertyName, writeToken, () async { + // Convert milliseconds to seconds for mpv. Keep the native write and + // persistence on the same per-player/property queue so an older + // native write can never complete after a newer one. + final offsetSeconds = offsetMs / 1000.0; + await targetPlayer.setProperty(propertyName, offsetSeconds.toString()); + await persistOffset(offsetMs.round()); + if (mounted && + bindingGeneration == _bindingGeneration && + targetPlayer == widget.player && + propertyName == widget.propertyName) { + // A write may finish successfully after a newer intent was queued. + // Keep it as the rollback baseline without replacing the newer + // optimistic value currently shown by the control. + _confirmedOffset = offsetMs; + } + }); if (!committed || !mounted || generation != _writeGeneration || @@ -121,7 +134,6 @@ class _SyncOffsetControlState extends State { propertyName != widget.propertyName) { return; } - _confirmedOffset = offsetMs; } catch (error, stackTrace) { appLogger.w('Failed to update playback sync offset', error: error, stackTrace: stackTrace); if (!mounted || diff --git a/lib/widgets/video_controls/widgets/track_chapter_controls.dart b/lib/widgets/video_controls/widgets/track_chapter_controls.dart index 235abbbcf..72efae644 100644 --- a/lib/widgets/video_controls/widgets/track_chapter_controls.dart +++ b/lib/widgets/video_controls/widgets/track_chapter_controls.dart @@ -9,6 +9,7 @@ import '../../../mpv/mpv.dart'; import '../../../media/media_source_info.dart'; import '../../../services/sleep_timer_service.dart'; import '../../../utils/platform_detector.dart'; +import '../../../utils/quality_preset_labels.dart'; import '../../../i18n/strings.g.dart'; import '../../../widgets/overlay_sheet.dart'; import '../models/track_controls_state.dart'; @@ -18,6 +19,7 @@ import '../sheets/queue_sheet.dart'; import '../sheets/track_sheet.dart'; import '../sheets/video_settings_sheet.dart'; import '../../../services/shader_service.dart'; +import '../../../utils/track_label_builder.dart'; import '../video_control_button.dart'; /// Row of track and chapter control buttons for the video player @@ -154,12 +156,16 @@ class TrackChapterControls extends StatelessWidget { required bool isMobile, required bool isDesktop, String? tooltip, + String? semanticValue, + bool? checked, bool isActive = false, }) { return VideoControlButton( icon: icon, tooltip: tooltip, semanticLabel: semanticLabel, + semanticValue: semanticValue, + checked: checked, isActive: isActive, focusNode: focusNodes != null && focusNodes!.length > buttonIndex ? focusNodes![buttonIndex] : null, onKeyEvent: focusNodes != null @@ -203,7 +209,9 @@ class TrackChapterControls extends StatelessWidget { buttonIndex: 0, icon: Symbols.tune_rounded, isActive: isActive, + checked: isActive, tooltip: t.videoControls.settingsButton, + semanticValue: _versionQualitySemanticValue(), semanticLabel: t.videoControls.settingsButton, isMobile: isMobile, isDesktop: isDesktop, @@ -250,28 +258,36 @@ class TrackChapterControls extends StatelessWidget { // Combined audio & subtitles button { final currentIndex = buttonIndex; - final hasSubtitleControls = trackControlsState.hasSubtitleControls(tracks); - final selectedSub = player.state.track.subtitle; - final hasActiveSubtitle = selectedSub != null && selectedSub.id != 'no'; - final isHidden = hasSubtitleControls && hasActiveSubtitle && !subtitlesVisible; - final icon = hasSubtitleControls - ? (isHidden ? Symbols.subtitles_off_rounded : Symbols.subtitles_rounded) - : Symbols.audiotrack_rounded; buttons.add( - _buildTrackButton( - buttonIndex: currentIndex, - icon: icon, - tooltip: t.videoControls.tracksButton, - semanticLabel: t.videoControls.tracksButton, - isMobile: isMobile, - isDesktop: isDesktop, - onPressed: () { - onCancelAutoHide?.call(); - OverlaySheetController.of(context) - .show( - builder: (_) => TrackSheet(player: player, trackControlsState: trackControlsState), - ) - .whenComplete(() => onStartAutoHide?.call()); + StreamBuilder( + stream: player.streams.track, + initialData: player.state.track, + builder: (context, selectionSnapshot) { + final selection = selectionSnapshot.data ?? player.state.track; + final hasSubtitleControls = trackControlsState.hasSubtitleControls(tracks); + final selectedSub = selection.subtitle; + final hasActiveSubtitle = selectedSub != null && selectedSub.id != SubtitleTrack.off.id; + final isHidden = hasSubtitleControls && hasActiveSubtitle && !subtitlesVisible; + final icon = hasSubtitleControls + ? (isHidden ? Symbols.subtitles_off_rounded : Symbols.subtitles_rounded) + : Symbols.audiotrack_rounded; + return _buildTrackButton( + buttonIndex: currentIndex, + icon: icon, + tooltip: t.videoControls.tracksButton, + semanticLabel: t.videoControls.tracksButton, + semanticValue: _selectionSemanticValue(tracks, selection), + isMobile: isMobile, + isDesktop: isDesktop, + onPressed: () { + onCancelAutoHide?.call(); + OverlaySheetController.of(context) + .show( + builder: (_) => TrackSheet(player: player, trackControlsState: trackControlsState), + ) + .whenComplete(() => onStartAutoHide?.call()); + }, + ); }, ), ); @@ -358,6 +374,7 @@ class TrackChapterControls extends StatelessWidget { icon: _getBoxFitIcon(boxFitMode), tooltip: _getBoxFitTooltip(boxFitMode), semanticLabel: t.videoControls.aspectRatioButton, + semanticValue: _getBoxFitTooltip(boxFitMode), isMobile: isMobile, isDesktop: isDesktop, onPressed: onCycleBoxFitMode, @@ -375,6 +392,7 @@ class TrackChapterControls extends StatelessWidget { icon: isRotationLocked ? Symbols.screen_lock_rotation_rounded : Symbols.screen_rotation_rounded, tooltip: isRotationLocked ? t.videoControls.unlockRotation : t.videoControls.lockRotation, semanticLabel: t.videoControls.rotationLockButton, + checked: isRotationLocked, isMobile: isMobile, isDesktop: isDesktop, onPressed: onToggleRotationLock, @@ -410,6 +428,7 @@ class TrackChapterControls extends StatelessWidget { tooltip: t.videoControls.alwaysOnTopButton, semanticLabel: t.videoControls.alwaysOnTopButton, isActive: isAlwaysOnTop, + checked: isAlwaysOnTop, isMobile: isMobile, isDesktop: isDesktop, onPressed: onToggleAlwaysOnTop, @@ -427,6 +446,7 @@ class TrackChapterControls extends StatelessWidget { icon: isFullscreen ? Symbols.fullscreen_exit_rounded : Symbols.fullscreen_rounded, tooltip: isFullscreen ? t.videoControls.exitFullscreenButton : t.videoControls.fullscreenButton, semanticLabel: isFullscreen ? t.videoControls.exitFullscreenButton : t.videoControls.fullscreenButton, + checked: isFullscreen, isMobile: isMobile, isDesktop: isDesktop, onPressed: onToggleFullscreen, @@ -441,6 +461,62 @@ class TrackChapterControls extends StatelessWidget { ); } + String? _versionQualitySemanticValue() { + final values = []; + if (availableVersions.length > 1) { + final index = selectedMediaIndex; + if (index >= 0 && index < availableVersions.length) { + values.add(availableVersions[index].displayLabel); + } + } + if (serverSupportsTranscoding) { + values.add(qualityPresetLabel(selectedQualityPreset)); + } + return values.isEmpty ? null : values.join(' / '); + } + + String? _selectionSemanticValue(Tracks? tracks, TrackSelection selection) { + final values = []; + final audio = selection.audio; + if (audio != null && audio.id != AudioTrack.off.id) { + final index = tracks?.audio.indexWhere((track) => track.id == audio.id) ?? -1; + final visibleIndex = index < 0 ? 0 : index; + final label = TrackLabelBuilder.audioLabel( + title: audio.title, + language: audio.language, + codec: audio.codec, + channels: audio.channelsCount, + index: visibleIndex, + ); + final fallback = 'Audio Track ${visibleIndex + 1}'; + values.add( + label.primary == fallback + ? _joinTrackLabel(t.audioTracks.track(n: visibleIndex + 1), label.secondary) + : label.joined, + ); + } + + final subtitle = selection.subtitle; + if (subtitle != null && subtitle.id != SubtitleTrack.off.id) { + final index = tracks?.subtitle.indexWhere((track) => track.id == subtitle.id) ?? -1; + values.add( + TrackLabelBuilder.subtitleLabel( + title: subtitle.title, + language: subtitle.language, + codec: subtitle.codec, + forced: subtitle.isForced, + index: index < 0 ? 0 : index, + ).joined, + ); + } + + return values.isEmpty ? null : values.join(', '); + } + + String _joinTrackLabel(String primary, String? secondary) { + return secondary == null ? primary : '$primary ยท $secondary'; + } + /// Calculate total button count for navigation int _getButtonCount(bool isMobile, bool isDesktop) { int count = 1; // Settings button always shown diff --git a/lib/widgets/video_controls/widgets/video_controls_header.dart b/lib/widgets/video_controls/widgets/video_controls_header.dart index 4597459c9..1c7060ba5 100644 --- a/lib/widgets/video_controls/widgets/video_controls_header.dart +++ b/lib/widgets/video_controls/widgets/video_controls_header.dart @@ -48,11 +48,7 @@ class VideoControlsHeader extends StatelessWidget { final itemTitle = metadata.title ?? t.common.unknown; return Row( children: [ - AppBarBackButton( - style: BackButtonStyle.video, - semanticLabel: t.common.back, - onPressed: onBack ?? () => Navigator.of(context).pop(true), - ), + AppBarBackButton(style: BackButtonStyle.video, onPressed: onBack ?? () => Navigator.of(context).pop(true)), const SizedBox(width: 16), Expanded( child: style == VideoHeaderStyle.singleLine diff --git a/lib/widgets/video_controls/widgets/volume_control.dart b/lib/widgets/video_controls/widgets/volume_control.dart index 45ccd9699..4b63e2247 100644 --- a/lib/widgets/video_controls/widgets/volume_control.dart +++ b/lib/widgets/video_controls/widgets/volume_control.dart @@ -128,6 +128,8 @@ class _VolumeControlState extends State { final muteButton = Semantics( label: isMuted ? t.videoControls.unmuteButton : t.videoControls.muteButton, button: true, + enabled: true, + onTap: widget.volumeController.toggleMute, excludeSemantics: true, child: IconButton( icon: AppIcon( diff --git a/pubspec.lock b/pubspec.lock index 4c68a0510..ba6f39bc2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1296,6 +1296,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.7" + unorm_dart: + dependency: "direct main" + description: + name: unorm_dart + sha256: "0c69186b03ca6addab0774bcc0f4f17b88d4ce78d9d4d8f0619e30a99ead58e7" + url: "https://pub.dev" + source: hosted + version: "0.3.2" url_launcher: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index c75fbfd59..f507dafc9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -81,6 +81,7 @@ dependencies: freezed_annotation: ^3.1.0 xml: ^6.6.1 string_similarity: ^2.2.0 + unorm_dart: ^0.3.2 dev_dependencies: flutter_test: diff --git a/scripts/check_codegen.py b/scripts/check_codegen.py index e2582891c..e6103daf3 100755 --- a/scripts/check_codegen.py +++ b/scripts/check_codegen.py @@ -10,7 +10,12 @@ import sys import tempfile from pathlib import Path -EXPLICIT_GENERATED = {"server/relay_protocol_gen.go"} +EXPLICIT_GENERATED = { + "lib/data/ducet_order.dart", + "lib/data/hid_key_labels.dart", + "lib/data/iso_639_data.dart", + "server/relay_protocol_gen.go", +} DEPENDENCY_STATE = ("package_config.json", "package_graph.json") @@ -95,7 +100,7 @@ def _dirty_generated_paths(root: Path) -> set[str]: "-z", "--", "lib", - "server/relay_protocol_gen.go", + *EXPLICIT_GENERATED, ).stdout ) return {relative for relative in changed + untracked if _is_generated(relative)} diff --git a/scripts/codegen.sh b/scripts/codegen.sh index 0424944b7..24b99cc83 100755 --- a/scripts/codegen.sh +++ b/scripts/codegen.sh @@ -7,6 +7,9 @@ if [[ "${1:-}" == "--check" ]]; then exec python3 scripts/check_codegen.py "$@" fi +dart run scripts/generate_ducet_ranks.dart +dart run scripts/generate_hid_key_labels.dart +dart run scripts/generate_iso_639_data.dart python3 scripts/generate_relay_protocol.py dart run slang dart run build_runner build --delete-conflicting-outputs "$@" diff --git a/scripts/data/FractionalUCA-651afecf9ccf1541a49306993e8210fa2209aa0b.txt.gz b/scripts/data/FractionalUCA-651afecf9ccf1541a49306993e8210fa2209aa0b.txt.gz new file mode 100644 index 0000000000000000000000000000000000000000..a0c9cce83e82fa5b76525d4a3422817d855b47d4 GIT binary patch literal 590413 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 ^JRb zr@LB*KlGBa7Fw?mvR+19bxn+P9Cz6*hm{H0e7_1xMdK~gKHGPNXWX5ZeZMd_W`3)Y zz_HENf7HSjg{BFwf7E;X(bc}}$6ExH{vI=qVmZH|M~U;+PT%zFZw)_Yh41|VHLYqHF}+A%bp^>*+h(;C0^ z7w4;9KPF}G-)qP3EPgxTxmoR&?eDvJPi0YIN#6 zXC$;mHpczoow^rFU-B2^=+q@<|9P{n`^CPE4xeinXWNCmE6H2@{KMZz*Ngu==Komb zw#RLIfZ{cWP;qv4tGTx?1nE3(TD_=;b(S)BzSPV{r!6XR_CI9onJSl`%VkNdT&S0I z>^9$f!@>=E_v*AJL}*Qj$Wq|G;lQ?Gt5fOrR&PAe*w*ASQM_8% z`^a1IN2aqHIbA05Co@(y&HkXBe^1ckp~m_{Ry+6V#OZfjuQ9gCoxLH_%+h0nM!>$S zRc)Jh&3sb^yS29QO<3~7 zhWg~qJ3A|%d(1a^ROm3j`}&RlpN@G}D6Bc=w1V^9L;H^Fr++X>?fKL%8uKDgr(mm_ zYY?-ld+$-h#z(!6zDkR$zAW3gK|jbr>^Q5CNsPyysp?ZiK~&K7)v9ha;Zk99VL1iFn#%nQv};+|=G?mvpcBchS|ZCENL- zUeTlij@wnoN*hys!uXHAW^R1q@sTa3vqe;T9^!(yT^=Sy*8^NLn4CJBBah9` znDLQmcb!P?)_Di#Z|p2~U`tkKTbdKApzXJ(_RTuSgKKQvS@m@~^>?@)%j9~@y0=Sz zLhetVdy#S4NsAc*C6|lNxh>5U8T9CFQ}?aAw~%8%b#D|WwGx3~Cu!Yl>mWjO^O#O|8TxNxS?d;)X+;yV-f{*2laE0`a@D?8$+ z`Ojm{jgJi2K1KFCee4#vV8esm>+O&8OLZ;Ho^1dANc5liJlu=(g}ra6%{(l)V_}d& zP?FB(-3AG|AyHfB9gMsEWc3M#*>fi6Hu~r^TC_OMo?8BY(~Lb|d9qdCKiOdZP_!=S;;HKnE77pz4mcep>JYk-O&*> z4_gY~IV9doT>c>ZZc|B~qrrQh4|_RkZEg#`pJ#SPzP7gd(cL@Ge=us?V|csgkZKmI zpmkMt7{`Hifvjr-gics~;J-Vw@Vbt8_-aY*EhZB@^YR^+Y(G(RVTX^jdBh<}#gc07 zPp3|WtzeBZi|a1m5MGelw(*c-YvvYLHDyTWgTzo<*AklwNT&>>R>ws(sR!oEpcd5b^XSFyd}+@Zo< zMGE%>JNB91iA%_D^nGU|@P31GCHulhzfUZ&sLFltE}fb4HruMN(kD)u#VJjHBe|6` zM|8*XQ^!_Su$Q)bNwQ^qk=9pl_!977Uhv0vTX(k=1$xXiiVM1}q<*{NXA z+gFG@U^epk_^!8t-7{_4?ndQn$Gr0nO<0j*+Z?-@b?t_&O852(YfMbsvxLpz*T%EE zE#K%`@bDff<%w3$|qzySe43=eX&dSy7X_XVLHJs=1XaD|(b2&&@qP zWk&iV+hqa^y{yL`BoIZpYpTTJz=Hjv0(Am@K}`|37>mr z6ZYhu4VFK!ZJ%>)eR{OS4Rh)9ca5HjpHx0(ZIv{^IOSnopV6FBzI7qR@7{3TN!RL0 z6=$`$Yh+^gdZ`4*wTKgunulYb-)US}&0c%Z?zwF|>+|ZHOCsKXHf?8mmy)=rY~r58 zJGo ztEq=et}m3G@HJu2@%;%O_btCv-OsXNt#7&PsYicryD>h@`spPxL4dhBpSi1k-q~kC zO~#&VbI!B1Jh64{X7XWeocd1hdhhP!LkGOlH}QUPQRF`8u&Ke+U+k?gj6=7rZaw>VtOz)!pyb>sGYB_nY)!qCw)N8T@xk zHFkd&F}nBB`n>Yy&u>IT1YdDX^SvQa@XE4WQ?*>2<<2f9_dPt*R1E}tw?CVCqfOf_ z=g!{5{N#-;o)XXBO*(K>&vE;!YOSziN5gkcY|cME%iSVDPH1;8??E%OzycAg^7+Db zkuyHro^@J}Yqb>5wDp(Fdw*;+&Htpkp)%m$1|IW8#nTsF+MUnZSHQXD{495|Q#Q7z zZdiPH#ZxWaC3$@MhtmQju11@B4!;-Ua=d-}g5(bIMLho(7mK%@i2Wh`Z02!R{WIUT zFzoBy;@JHB!S?suHK*^jan@ZIduE-uY4wqVTKjBo8$A6oOP))(y0rLeth~6|4G!-k zTGMZYZjxV-_+i$JxuHgPwcI$Z1p9V;J80{+_?DIM3uz4g6oAl3g(_&cAhP) zYNq?nGoguxKAHC4DLu09dg9MZE6fT`T|4Beow~zm?(UNCJF()=HX8WfDV?$Fb;O^F zmTL_=Gx86&+-T!GcsL?ecy80|Gr#V}#urUw&6fz#VY@1B{;VL*s@$AoyJi88OGJ6> zl6|{Rv>5Wd(u*^*;Xi)J#;HkdYm;)p4d)1By-$feak@DQ6@g}sy=w}%@37rX-K1)x zp7BUx_D#?+M=m$8)totZS2t1d`iZJXO7h1ZDB2!wVKOUk`Fh25YSiH;4Ie^_ z^|-D{*&Iy$P%&+%w$2R`o8Z(3GL!b6b!=anH!1S$v9Q?bX##3ZMl zJ-}5m-R(uJgsxaEli0SG9}I8YmZ@VoDUezI&S`a|$(91!4SRdd5we)r$4o;nXM1qrh-{H5<5B<9AD%O)Y(Y%tas5&y@gL}js>8K4U zg)RySi;fR_~PrGj_#9M)%9ClBdT^5${d|_T&(DyL&OcshzmzqZy3ishNDloHJB#HF)qp>CE`4R6*ZE0J%u z<+7icj4z~JzMimo;kRAAyZ)KI>Yb)rwP5Y;LrwJ;<%+Kd>hg8UACuzkG}Q~tkr$QA z;g}by_4r=~yX(q1AMdyJ@;2G(<#=fHNhmx%oWQoPF{V75(M`O+WUwPg%W7);!DhNS~OvwP5bVy=Nb~^>FP8I(AbwT_$_Fah>~(3#-2+mowjf zzIr{14ixP_l{|F`0D=2uB` z8{Iu>ZZ;{4tA3pOvHDQk$*#?6Y}qc-uR}5n^b0m_{Tp;3yHWelUEUc6uX(c9t>^x| zb$8=7hwW>MEv|o$UE(cab2RAz*KeaaFVFpGIp8VOy#1QA^!J!0UJ@Q|hGtS;!m5(} z7J}bypJ%mIkQSN5+ruxB)m(Ptm~-OcBX?(rnyKV6&zs6?!l|^4@x5?de!lb42>+Jc zT_@TMW^88UZCJvQ-28ZRBO{~n<|CUoZdA#Mz7e5OX}-0w>E$^K*DHc%Gl~{36eyVF zceVdeocm@Ao`Uw?WaH!Bt9aQauXHxMp%<|0IKl2-ETsNle-uOVt^3aWh%^NIq?-Wi{Ps~Z!-)OP0_0{ihW_vOpf3fPjFK))M zfW_>^wOa?mGOOJ$96r2b>PE*hw@cT5Feg4XOlcCgmp(UR!@>s@uZ|vADPH}%d4nP= zpXKeDV&C>{SlBG{&iKLd?P42}Wz^jhkMPIJ7#Yc^nH@Zymp{2@@vDT#dwF@y{7H^dF59=>MIqBOZ+=R=>4+Lpkl+izA^Xsuw8Wu<4& zNiw)`(siTRGo|Ds4_pti)o6*mdOLk#(CG`y&RK-K`?05?-fK8n!q)_9CJ8~wpq-IzTvNX;M$Fa zHV(V{^f_hz3uX&ctE`$-z3oM9`qZ>L^Rhp(#mp1bdE8Z=E|d1kLZ$MmYV^jG&5oPd ze%+N+zpvN5HB$UwNpo8dWAb92(D-flIOm87eJRZ?-hE=}fhzrL^SZWLiaVA}kJ;w? zti5lenB0yB7Rj@BOK7^TPU022DJ4;KH+4eQ>=?D@GuIxk$l3gT)AfuieBpU_rUxE- zmH6hu!p^AEsd}>35{+{;#V=;3?|G=TN97N<#g5I}epuH1`WJlczZrP2D)p@^MLV zU$Vx8vqAI3Q(suV;TL2#DO-6WApD+%qGeAkck8pavT<8CG&ipn(-G}nbn5KI9jXOw z4pZVgjmm_c<_6jo$ll26I3v0H$*NeB+Ud79^3SP?yT`MB-&t+-H?nU|>&)|W*Eue^ zoi$HM;Aw5+lah`9BG$<7-qCQkbiu<2jhhD!ay({{(_~}TnG(Cb{6)jv#+OG*x8?-O zWW4Fk=TZsi{wlk%?uFHfi;W3V@)>Lkb2hemw|wN@c98Gx3hO7*OHM?dNRvO_ms}IQ zCi(QCdsMwxae(uM< zhF7A}r<0hiU-t5TEWGCGamdx-;0^W73wKRCdP-4D=AYP}ShMA)-TvO+bkPHE34eBqg%7S@tvJ4tMkD|HEP>KKk4Tk zb2wzS37?y^yYoram40)+ofEAOJu7_3tU2-X&cjYD)&#N*`16J81R&Sj%QD znKwV@@Rkez)YJ&bmocn<&LO?VRp(}RN>bXdcLyT7lh^b0-Lro4aUHk(_Jhs)**=}s zog%uuJi-4~#DaHs6FeBNB}E#^wj{gzp&pLQ1Zq^7s0OP5bLdVqPo*`oVCnKsJ| zD|`MvRa(lh>h`f~k{1oxclMpz_k+XG{@FXBpO3%sm3%%o(Sfo4@eJ>OhB0~F5&mTx z-n>aT-_iX0m|^p^;~orgE(vMR7bj?NKL0Ye+W6hG&u+d4_P&pP=+J6>tmOSZ2H_h5 zKGou!b>HPU*x9ZtbuU@?ZRg(8kDsns{q9b+hRhpRv;6LU|5%w)G?G! zeszb~4fA&G<^I}dyzAWF$iCA}4rgmOT58+n?Vhb4^W*AT*J&=v4<$u-HkMbqWsCnQ z?EmN`>LmU+JV%2Nteas z%a6EwseV1mnKYw&&7!W^JKw~nZF?j(!APm`oNb%*yIgLWUBa^?9A}E=&q?Utc4Bcx z_l>^yN!ks+t>47T#olO5KD5lmQT+a51K&S-X8lK=Z9JfRDk(dv=Ffw?bvp`vNUP82 z6kZe9eP^Y5)V6L(!|)qi}`y%Ms$eBOyE8{(^{14^LMNFw3JE<{!u4IcC+>))@HLv>d7Cij zf`3;~&NsdF4;)q2=NNB3Z+2A7k0aN=D_5l>$G)KOZgY3`PTqO_rglmSXM>!@*70nv zWN+wQ^*dEAOz-fvl7ibijW_CSTYki>=>E3ca^dQJU7v^U9~ys3&pw$IYf+kb@Mm7V zLU!^+jbiEGw!oJ@7tR}g412(*ztQ+*o?;81`Tn2MyORI)O--D*yt8ok%Clb&{cFhG z>uayojLXTwoX%+W^paO{=x5=p&uE! zTh2aZEp%=dUvDkE?S|vEbMKrt{%-HqUKZQ4{ik(FpC#MzyF>icFdH4-S23tT}o) zDEr0?pMt_!Hw1QXPWmp$pd&s#Vn>1etmF^RXKvrvnUruTs!8>0BYT2f0{4!x_A4J| z`x$IbO7ebCvgn6_YJqm+j}I4)uGtyATj5w#;=O~jHXSL7^$y_Cam-)5rlzvDF4#qQ zE@$2o^>0VoGe0s)ui-zfx9rkgD>lWbw0o_cyIRgZ=X!IWKjj|(hAG!7L=t$TDwE=C z4tRZId}1JOC$n?M>jOtcC7;Ef*>0KlkiG5NCHWd_#)?yXtXEEF2V579Iic2fls!R# zXRGs zn)usp-#_-ue@D(6{ZH7x(6+#0(;l|1eBGyK?$P}w*S%L=Z%(M1@Yb`OI%XP0xsNSU zCBL^$72H{(_P)bb#NkHuvqKw9W}4*s32=0?pI^AXF;RWv692w#+mzjJbRRvgtb5*j zBU-5X!Mx7xf7IP8Bj5bh{1)&~+B4!A%Wo6L@C%okx@SA}SQcou-%nwEz|a2Uz1;ss zjZ?R}cK>bX=AUwM-mJ;{O}R|3_mwB{?`yS{@ZI5YXyzXEZ(&E|raWWUxhucnh<{SO zou%ft3Ga5ZuRp=QCSY=~%vQ;b?JIuIdwA$;veC?2b6i#wbWUHVf3R}bp^wMh>iNTd zOP&2_x?=Om-%Dzg3O@KRn77%IbM3w(+Sdx1j^BH%xyP2}t3Yq5+Wb$m*B_Dla`2ve zxwP|Nk^B2kUw2T|zbM-EDbcLE>$Zhrq}z^bGgJ63J(+gks9;jP(*uU3mX^)(Ytq(8 zrRh38u3`B9Ca~dqg50`9?ye1MjXj^u{iE?M@ywgYp~VVK(_$8V-OQ4^%RRb)|5tIB zUGfzFo5%OOvlsro!T0<8-5-o+PM-0|^OGdEfo|f5ZxOed9>4MlZ1+FgUHeCV-nYNz z@4ngW^H!VPvYE^LQ>1rC^xKOrx0^fL4iri%CZ%UJmYhzKKfI^^Xkurna{=f4z3$OD z{l3TNO*q;%cjfjZ`LHW?5nnCU9$K!MX*;dqhV#GABDR}@+itW+-M(M&@ZF|)hrMnl zziqUAaaMEk{QQnu_cw<{D*I|*PibD}s1vy1#>_)yLgKX+!MBs-mAh5byO=NSuy*fw z^;mXef6wN>bL-bAyu3W;i9k|AS?rH%XFNZd3O#;ntMrcR&gTTbAl=1%C6&FsPnds9 zo9`^{`*!Dzf|+xCgiV*|hInrOuJPtX(X3nIzg_B&pWnb7x42-+(SLUTJPqd@QTt%| zX6n|`jr9uO_+#$~CN28JTQ_&dj`dekc4ic3`Mi|CJFz5nlj=i43sop^ig!WYNol+=SaObb&uU;To=M<=Err)a9neI^?L`IhG_m{AEH+1h;6E~d;92?d@nU*0oq%|82bdJSLj^PkR*Oz&P6P+IUXgnsqtC_Uz32 zM-En(OD|*F)B23Z^yV4a!iFhb%%|_hm2X^bp1z_YO|F}HO+S08xOJ8IJC)*Robt^F z({D_cG%|jc9J|2e_cuPdJ&%HC#Q#oybU<*$k$t^yVt3S^ku-YEv#79S%-B#~-!}j7-5qRc$GABAJ1Xa2u9fFxSaCm4Z?X37 zcjw-}J2#`7cW32%qY`=RWkzy$kIkR`$2_d_ueIK{Z))caXMFdM$+_bz7iCbmIcjIm zF(;Wq|5-mD#65lxC=_;-(dae*0X_Z)nVN^c%sAGTB$fa8YWnYp3(IC2+uJJgT?oAL z)J$GMsMXr$w9eJQXU}Vn#T{yKvgAsi_4=gAny%U(`~mrgW_Sdb2&d;?^VkQ>AlxzaIG5cS@bT{l#m=6aNI*-5)Vb{?hR6L9;s3 z(szM#4%K{^^8d)3DVdy8mw(_tcY;}Kvt{Gsduo0uGxmJQkiWOo$gJ@4>qi2@-y1%4 z{BF^?GO1*l`4Pos8HesZyy1{l;5fmU*Yr<=&wqw>!Bh5Hurxm|lljc3E^>?U`>83X z`K6?I^*`wIgrxjX^J)ffK>7oOOD@j_~B*%OW#n=?!=oql-0 zF#YDINTXYQ-1~cWZ*Hi+_t?0kJ;Uk+b7ok zK|%IW^@WtpGLs_DX?zkr?SE8J=rUjY4(s(XJF?G2a_RW#O$oetc;-FP_JUio`$``6 z78Y7hKDn7kjZgc=?+sZ6>q8{B+MW8aO;M^Znzbw}wjw9);hg55$65AwynSsqv-eby z{{uV5!i-%X&hN0^FeQ@bx{GD# z^rOzNyge~6piYnP;IV{T_8B>w=G?X0Htl!!BLT;2&IKG5)6)gcxaX*T`+fPh-W|(l z%2Dk78|Kcl6KJ2Iw8Zp{!%jP+9~Is*PKzCX+CF;ph2vT2&sK|;x~eVb>kk(k5)FO& zX_H0Ew!}=+&mTh$+gvj((eQi{qH}tNt6mGdQ07HWY6>enawrcV)}gKODQny)Qj>wR`qxn@)iF z7Y-@$wRLBf_NMNdC(LsA#H(nvRrxo6|IrE)xO45b&tZ}Ic0wAwS$4;+*c{8NmFH=c zvwL>vyTt6@FOwTrEp)%&(9gO1`62aGyL;m9!c14?&K!^UC0AS&*P-n3C;8i?&7Yop zKPDHnc=n?YEU`9%?w22RSWVfjH1Fx{_LFwZ{I~38nJ}x`Hz#wSPrP_8;NbZOt``;? zPv&hX5xFDo?lIf0$*#gkt#5;*eG`Z6K>>%Hi)++P6z3`A{g`9hwp%uwXSV-|BQ`7y z-q&jmwX%F;e4S$Z+@aZ<|E{dW)g2yZQl75)>$cbN_vc27s-Eq3V($L`J_>yeIkn@{ zjT$D^Zz<2@_2nHe&Aaowdf}tAWk)Us7n(eOr*Nj@k^QsDk#$VVl};V8FqUXZ*R#oZ zChYe{xJdlA%f;G5KMjuv^2}STDlTXCnREIN^=zi=88iJ)J$m8aczVkj^*h@hwR9O9 zD+m1g_%{E+*6JF*+@3{7saIxcPS>?LzGZ<_PiK}vem!&d!khW^)|oG)&K_%jl))Ms zE$GhCs&Mxuo}Fp18ixuiYoy zUH&9vPOstobsze_KRQuZo~UXQ`_z8t6s4}HV+sy;`pfRbes~t#EuY)1ykl?wg$JDC z_gp?}UYD1#F?+sYuF-Rg(>K0P*(f>lpi-mroM$p>jBAYC56-E+VW6<(LE2HlYfqJ3 zo}d15Z^45;%l7mM5*WQS&2Kzjv4H7k^fO}yGmq#AW~byIRlF+x^Po8A_qUys4DR#I zjCp3fr|8z*+9&T8eLjDT)#k2tN5@QyV+nS%1&&7?EWCH%Ng`9uU!OTF2J_E$B$s@b ztbf;?{G~7Q&9lwNd*3g;<_W5wo<2FKKCxGXF1r@Rd^OKk`wz=Ho^CxX(;` zK5eu(mT)-z;GE*mlGmGr3;$fX`&3zv_56+xH6kmXEA>6U8(Y)l`bToDmYR}soXtk>9@V?YpGH z?wqr!{%1+sY>Q7x58E_nFRjhV@jb2cGT1HbqTwBpKh(&lw5Z@YKG ztSBw6BROYPzap!C%$<2TMvkYC_jd-6Zo1lUD34swqqkwbf%Nr>5A2xvKk?XAzkcVmQFnr?c*3{! z#tUUj8|FxI*!eWE&icdi`@yoJ>iM~eS9?ll@EhkJ{W#IWuI%AXGszobWznR+i%O zCg-dzm+16uyldMQ|F>mwYKL&e$pXV&d(U5LxlwOzyv)LJ#SHQF3-)c>dw#M$`<$4T z#`KIS=ht)#r?~k&U^V%=Q@v%8<$~25*Bz{keP+zMDWpF6QOjMaB8MgioAP@@128*~tGu-C~A#!L->n zB}sZkB8laCdY!^E`nun|>$Gr8c);?ePj&u5?qb10u9WE(#up@aT)Y~y!3ZB}@Z_8eLUhc4eWxdZF9j=)F zNw)3je;=G@%bK;*{|IMR`@yC8N^27J4(>nnWSWtd)y(eI@AP<_j;Nk-y?j)4*E6Ni ze@gFe|G9iLw`+&iMVFGpF-vAO|G!<+vvfjUPVvh=i-S>{T3pjRFY|LoH^oKG%BZoG z?*G}^FLbmk=T61r4_o#hzP+?Se|NFGaqa$zEo}FL3!6kgr?}49Q&K3oxbrsWo95KQ zLyXL;9eNTHKJhUXcLw)0E1uX~{LY^<zjQq_m|wX z72Br0TK?}py-t`JZo1+-ou8boSxaqzCb@?K$HlF6h5x7We)&A?(kW#}`_2{Nzt; z`DIbF&}7NduLmx8*xA}F;(gBb^T2*KrvD-xs>+S>`LX{Kzg%12_ zR(F2ervF(p^6&9qtv>6_&EF)tRzG^XVAIw2*KB#dnN&;Ud^5Q6CUM8j!ycR4FQ)M) zpOrf{+t$aVdPdH-fb4GuSKlP=x_Q`Vb9>e1_Or)~ujJS`W2HWFyY3A*^Wtc|_AAxB z6`tq+M0=eV>-x2yx4~cfrpc5S&rYA@W?pQ6|HBOZIX+tw_e}`o^GW37kKE>x`wLJg zkI5gqO(ge|Ol3^|*li}cpLlA;zm@YYZrTttYsJirZJ*yCtJ3>&Z`ZF_h1$=@=j$)w zZgyUvQOTusqpY-tRewqS-miZnXJuF~72}S5@we{F?E@FCM%&L(^x0Ay{=-S%XU94Z zCGjoM_IE6tg)-Bvjw}-YwXUvK+o0s_vHx6C-0CfU@2l7$TgdZX`tL6uPmL)#?#$M2 zu1DAN^Yq>Op=MB%TVgWd|GQ^r4}92v*zaonzOuhO5jtWy>}{<7U)A^38MWt1&)qX& zSJmU&o8MAo7{iR_es8OQ@K~1_~Cba{fjP@iiIVAk8M5h;C%RccCY<) z^}=s{oL=i-U%_;y=&e1|((LW~IKRa2?%cnwxty*3=fCF;@7G?GZv1ogzZ5S|{Qgp2 z`I=__yt-mr1DjuW*E&4=^`gAdMpC!<^X+KHx3|v9Gwn6cKM{YQ&1?UI<|}J2W;4j{ z74?Yy{cgEG%kJg5-Ol0%4$Lpei5AMr-t_xLechtULvNp$$n7+!`TKf4bA0c;A65ao ze!f1t+3EV_KL1A-xtkXY>}p(X|4()iU#>~P-}d#)hws<@&s~uJ<=9z=SJSg69J`pm z|5*I}qCNYid6&4=|I-Wj!`~C~|Hb!;Z?E~cGaa3MeIM@<_x-;alfQMY^Z0V))>cKf zxWE6j?tS{J-`IFjdU4~Itrz7#h$Yk;{+hpdhWVaVAO7B7IDLKWUQvxdU*3l9d3DUc z@zD0g>6V%joZD{uA4@#@ujp~ug7@N1_kO**rJj7ZY?6?;UT@s~zGZ(uaM%6)5}fcs zOY+?-^Z#-e_Wk@fd0R_U?s2`ao<9_`eDKC ziGHyjcmI4$dvL0>BjOJ3ID6Uq;Gh3e!{J2 z`xt(nyT2s&udCIs|I2Y9zWxChlWXDU+q3_C^?h*a>VN*dJIY=!KX78Z!1MioE54>Z z$hZIdY5zGcFP&S{ijBm-!$Pn^455!zt`*SR;x{# zxNWt2j5>47@&$j7#M_(SQ2Lm&+h5o=*PeIVUz01}E*ISPSI)KX-S*ey+PBLUxBZ24 z?R~fX4axqUx$5omm)qv2-Kx7)RwtbM-27%)-DEPT@NDb-QMZ3yy>)K=wX(Xc+di+} zIyZjp+do;k&+$l^UoEQ(&V5cgb+@eUa_)0;lBvsOb;h~R%}J%g-|w6tEhBYe>G>Ax zFA3ex7mA%ftUJ#=%BDX~LN9A)W6ZwoA1l`!{an%gyi@G_WZik$y7QJt+4yg-n3wr6 zCjX<&?LU><*aiJ<=U!%$l4qZ7&u3aMllRZ!(x1XDKOaYYKK}7pzwlXk_1X5Y|yRT~zspWe3hQNe-Ld=t$7uqpP!lP4Xl){htWn5|(|c>9-e@04q8DcsF-KZdyNpW@8r zvTK68o>KC{3Ew-MwT>K~&OOOujmw?zD|^e`Lr!dNow#VpyPo5ps`MWPO#gB~@)~E^ zv4W-AKTF~_PSEd}!nE^DgS%At)Lw_I1ry#)mzcXTDeCm{(v!OnrkLx?UNPP|(b02x z>9z9{LozMQZH(T0HMn~7v|pvcT|q~^{*+cn{r}HQCa*MGEGe(BJZ9-{$CUcic6GOcT#MyYy+I%Nw6*8|_}4y>)qJKyz<<<~AkY{XYAS&F}Iw)!g(=F$cH~sVunX@X{+YLcXPihcByA^OEP@Vm9}< z+}2!`)O4Y>ycg{sWFA?Llw_EG;+k&(lWWU5pzPkK*{?``e()?+f!sfFs zK2Tj5GjH!PYe&l!?E5qvW{cXt?!2O_?UUiOWV5Z)FE2y$hCG&EZl7icx-*Kaq3BTm3f}GeX+Bw`uMJM zW56?&T&JZkkLs)DZmPbexHe>F(c0=q+E(9^miTJ+h*`y`RwgEe0miAq>JU(;%okPc(yu1&}o$TjX=I}C7d83v4&-lrc z)EHKG>{1MSuKqv!RL(+!Ir<6AN4EuUKKkm;Q`!9%-bV#i7tbvBvFx}j?YVfa#Nu9N zRrhFbQN2dTq=UxFcWdTJ-M2M3@c-~Uo($$&Q|WDE&YEHDe#rsv^1XJzKdv*yERA1MejSb{~ z@?f`|W>NrqLZ;Vz0k>6lkWy(YY4E(s6SjGA!0b0G5gDF2}wD1&JLBnxO*yZ?!e)*b$;PJtiOP40XMIu*|!=WSs; z@v8aDqL=e(rTbfUFKDf{Yq)UCpk@+t5O-+r_6n6p+-x^_TTi!imNN!>@IHAU_U(|) z);5(8!K_@5vPJ`opi@gdmy|kAxfGDuxcf)Nw<$hysX6-=JpaudQN8cNr|^UTr#V8B zroKgyyM2;eU5g~uQ$GGkDpYY5am^N5#eQWqTPT!gyxy|`%!q1fMc>!C4UzNY+w7t^GI{oC-Hn)sklNm*w>%yKTx|B)Y zU3zI<)*YAd)0{HiB6Hz?Hy zEmvQB&~H&y$H&75udEg=?qRrmXX+c1rXHKFNF%9Fjf5Htz ztlAatIj!HqrgG)zzkS-uk`}Kzr+#SUu{7>UglN0zde2{yEB0@1o-}t?6EFX+CElNMu0LrmeNuWeM7G3b zQn;JqgzH-vrg!DUdW9~RSZY(`U~H1MsWdZaZV>;H;;j$8kL*_4-{hOzYj^kV>%CEt z&OB}`RW}Y`?6sKj^KN(yAiXrYRSE>S+BLf#x^;r6)ySwJuGaqzFXJ5{p=I(`G>o8uF8p6_$-VS7?`xQSjk;UuA3dqFZSKk>Ru7|?YxEv&iQk*9ZtJl zxiagy6=Ut5;<7K>ejeUgcVm&v)SN}xk_TtSRTl^O-n`oQVBX>obvc7$Y=&8qJhN?t zJr5aYz0>FX-1_IJ7njKjTcy+dc_(tbv^+h$d$ck= zUjJKbWmIBhv%~vW$oKVm3;fHS>{-eq)Q&IE`<5^@!&YJ+)5MqixF1YRGMxUfrv1yi z>Hv4S*DqUQesyIB%W{`FO-{AUe`oo+=&$FUiP`4U+lx*FYPA(x#5(LMC@)za9df~K z*J9bEIKdN1chCE%n)tn{_%0mmKKDgNPw`P9eh$%>Tx*p5Ru!bm?!9)i;_K5OoB1WF z0zZ3PUtK&sBfEcfvMi?<--QbIC9{&3?9O!4&D>ydVy&O3^5szLsD=`i16XFyL zCsoh6J+bPvcty)|ox)}3b}OwuxUJ|>sw2;G%RbSm7uX~MMKiA^mEQjT?%V<%WyKvI zWw;JB+4Y~OVUh^SjeWZ2Y~+z&0b-{g{CjG-z-s+|^KV8E-B$CbtbBOk@A9kdo313h z_|EKeL%*lw2cyO#;STmgox)$cn~VP+>HK*_^XWgg89U-7B2G@K6|!qA$tqz|tz|Nt z-fA(+$WQfnkh0e){Zkx)m+At4r6wEIC4Lfe`_65wlDMfZv8(0ew;!!LrzrRAy7h6J z;dB#=?Jw3gXWqDcbK;4GiO;4cG8@K}w**GrIGEsn_aj?m*{+|TuJ#KbuHD&I%(TE) z`%>8Vpo0Z-dDTuwl^3is=HKtMS4-XN4u4nAV+NIn>@IEj43oaFK61@vSp2hbqShP@ z&3KKSr$mEO zrRriH{qKB-nza`StqSmYyo&MYrcyTT(>>dLm`p~Niw|;nu6eREp;a~P z*!3Nm%0U5p-tf(IX7so#o>J!UdTmeSHTwxN8!Gzi6)dAZE~sD7!NT>Ey~}GsAIk@x z3CneZcd6a9kqc~CFl`N^%hcNjb1tho`E2A2{k5Zr+l$%6jd5Z?juWrK$~$cf_bm$h zWVJ|h+af-tr{2~T&o8S6+!7b?nPGD09V_S5kIOfH`QyRrVc&1I@xh}7?bE-uw)ldeqzj|%oS^jzbcFVf&*W(%<>Mx9# z!NT>M$!Ui7YDd>U4!jpXtaivOeQM)%|K5-FVb8xjh}j)8<>=o%!UvDuS+ImpE090Q z-1+n8N2xix+X`Cz(+z?q%M~nYJI7sWVg5j|?XO~5p~=!4OBPQ2oRu+aWucH!Ri3Wx z(Vm}&)=XQY7_=vPiO%{L>sq@7ZSWis((x+QXXCIptITl^slE7t<39Q2 z|5bfl8jpH0UJ;pUBhaHYae6^Y?Eh7lnq~;OR538UWjrFv5Wqa|>+ii%>xEPo_8D0) z#Ttbi^wcV4Up{~H^2Mt(6BPpe?T>n_+`c$3=kh7tk7m(RMLm;JL)?BCu|)*E=DNZx zb)F+^srl-@fUA`YMEw%_O|fOS6*Y*@bCH7 zSG%OURwQlT@XqOCG0PhHmK&9i=E=71_%ArEZL!FWfJZX3qS&X~v>&@Dv9@em_StFg z4*RVTk&rr>rtRyc>2yW+;KD6RZkZ}~<1^i^-{RS~by6Jbqm$*Fi+?w*bo;_Eb-1vR_q6z5dH5>PhKjAwEsTD>q#pZV+-hD)(uZU|{o!uiwH1cZE4ctvjKe zsdswC!;b5dXK-=soLv9>NtEcjr~tN)-}aq)b>F}^Gu~sW?_!rzKb%(0&yMBgG}oZqJJ&4O`Kw`N@?MWK z?0$z|9I0gx)vHtz_58t-nGzrN7wDo%wZOrTqLAi7>+|NHTb9|I4`cbRZ=e7Eb zij8vh73u5-VsGl?mxOybdoAJhTNe?*%PiOxbtJsowWi6$OmkIF*we2OXT)8Siyvi0 zSo~T(-^{}?v{vZQZ>P!C_acHMSD#A{VtpMI{`Bh>ku?$5Pp#yyw)4EXck;LV9h-KW zDSuoic_jLDQ0tkgSu(xb{wwT}ayEKf9pM+W=(p(hfSp=vgp5DBsonf~!az}C^OS>` zo_jTng}0{MlJ|&cO8L|1qSEn>Uq#Dt(?5qKmW#WtO+D(Q%DlC(VC#f>1+1Tm@pWoE5bnN-H-;n+FFie06D=jG=O zPYTPQ$xN{McI`al$;a>CSSmCg{OS_hyZPX1^L?39PaM5ve`D9T?7zx8cl9hkwa{VB z*PoMIxaV<4vFeoYB}|?CRxaU(O;osTlcu2Z^UL>*S6ux3`iJC`8upI^i?AFBpWSBTR4w%UE0)=PQRBa ze?_L$I3^2*p7*@RscOCSTi5nEs@JXZN;(DqOfsLnvhTQ9YMLLr*J#VB;F zrV4ktr<#A#WP?kx3vH@>cV$d3vB~w_6;WPd6YsmJVtUFZ88%MgyMk3u^*v_1=?j>) zTVd|CoeDf6d(6soicU;BH+Rxf>u|lLLhBcuxPHX+&c-(noAU3p)p*_5_(Jifv}$Kp z`n}n2Yvx|`<~{ARWVtji^WO8_M@=lJPwY!AY~a*canyXu*cf{L zJ|rWS;+Z&tKwEymDk+P>v}HA#Yv+^V_LM7jAU2TzdoxqZx0;hjCOgQH3^Sx2Qw>{z-dy|RGBU?Lx zB{v1WFP2|&5lo&0lTrP@FY*WZAN%`)JyYihh|~g;8emclOsarMr6aqI1q;%W9(er~ zl6@axeT8d7sQ9gl>E8}6fB!B*TcKwD$9p#?N;$m!YqGBO)13DQ=bc+O>)_YO~b z-L&eH+_V_+kg4A{JlVBi)t+|M>#U(qZFP3)tK2{GbSt=M>>F=?wd&Q}0r=nPw(0js@UMsEogsKH>)Do~!UqD`%4EDk$kiGs@ zAbUMemIj7a`g^VGUUjNEs3oU1n-k|NjtG`8;FK_1c%K|4a{EHvNxy zaM?9>)&EDQ?EUI^vfePYyf)xdyier6=1KpPPJMdsstqDr!Q@de$*KbqaRrmDVDc!K zWYqOBIP114L+gkRxo)KOtKn+#ld7N zm^=z5S&f81=7Y&rFnJVAvKoWM!DK6#JPIaRO~B${vK34o1(U3%U~w?n3MP+&NmjE- zAoIawE0{bACRxqF;$X5BOdbW3tQKH#Fxd(wkAg{7ORzYYYz31?!6d7d$=4Lyll8MU z{i$Ba=NtKNZ$$eto&RwgoP(#;>)%?ad3wM2y9-mE-tR8YIQ8j0tBpzO&+kfdAmxhu zAmuZ_$}fPGzXB`&23B4TR&Eyray^)AwF`Rna@VB)AQ4u35a|jgTfyW}`=C>nyW{>S zFP*dHHHZ@l;cNqQDj}R5AdVy`9hHEHO{cz0`hUq5OgcVoDL+~Na)Qy`C;PV)?b|2* z-($7<8}EPK+UakqKlX1aIt3EaKD}T3zXyrr2@Q}g0^|z$n-l*`51dx7|8F9RA6Q+&Yyqe)XlvrVWOW^IWiAdYqfrdO{8=i(9-!Vree#Z=tF2Kv`luY(vxqwsb0&Mrqaaq4;&N(vv2Myn0zgC)!9@jcAZD6`lZ}que02=pKfVe_ifI>-%D0Mutx>e)hXI|r#~%qV1w4wLa;a2DDXGp<%#69}xVG}j+OOf8W=43%t;~{NuYK}bm2>vW+O`P0x)lwj zYR8YM*eto0G&8Gd%E`>Cz-#N=qm{mLy#2YY>1vqVp0G!}%;9Z?*~~Xr9Qa;wty1Bp zl;o!OW9#o|M1j`?P*7IF01OqYnSV< zFO<2kj^T{F$ZS%yc6z~0&;m!ZIb=n?@ylriv zIWZH`Z9Yxok;vPoXCk7rns@bf-dAF)4=J5h+&jtsuG1lo^YddF563ai%Uk%$z~=KL zk6B!kwj9{|J3YH*g~^Y4>!sIged9tG>~Vh5^;wPepz)hM#%J$7TGF-C=l#nWE>qaV zmu01%4ms?(^1&BTHtro_Ezi7oHP$jM;pKT$Cj8!u;l%~1S>;UIqfPRY7mF6|-L^+! zeVbUwGnbvs*%4P4d2O0@^j?FS;)}-z7hVeFGW9=sWPSoM|r+ECG4 z6+z49qOxY`yzB=4OpV}`yifK`vNn2j^zTE_U)>Q8F7B^*q9Z)DZtvIcVjij&vNP{k z1isS#ni*~~$$hul^zc;$u6m*ATB5eyK|8*_&fuQnWLWMx`FqNoEcrR_EKeK!yd=NKy8I%{?`R8QXWZ{HmDMcR!Iigedr>RKbz za4q~)hQj$T8WX2)IjGIL!|s964yD8usK? zHk(gDYvrw3OY0_{>NW84GMj$>QU6127LL_l-xSRY-#mSfYm0@T>giQ8q@^Y-^5#$# zjon@4z23`y!X>+q9N_~#QHB2k|C(Rk@s>600(;oubLzU<5p{}gwJUv3}X#&YI>n@u|#@3#$PP;Dj>ZF$D^H*oPLuYKMyLQd; zbrawALdWODqB1e=^S`BfRu{X^>G9|O&vnRC;*FfI{pqXCi_O<MNTbS9(e{UOL5V^>y2o14dd2S4+3F zEn2;xAis!BeRWgt?v(9q!mk1kPAq>uk1=T07PskTyxzeFS5wEcXrGHjLpeofN%;PD$hs1JaSi{9 zwib&RM!8Q{9nZK4@9T9xx2W#Xrv5plH^tq5JxqN!neTtZ^(&=(|Ffhwr60BWfA{Qc z-GEPjH?%xl?tUPV;oaSNN7Uam^IkI7?O=bIkZz+tTi3~V?z=3;#ijhkD<`aLP0X@b z`L3|4bY@WbuH)B&yqNxM?+&eHVo_bVch2j#N8cuv-jeq4^7dwo^U8l5dHCbz4JM7j z(II=RFD0B6_g}uwq~~l|Z2MFbPRA4@_vnnJtZVMAj&(e>Wa<`2&GmD)sZ9>M2g4Im>J8@ay6OU*CWPE#JF0Z`AYZR>x(px??mqHq_a+D(WZe zJtIc_^8t)9HJ0sDo{7ZREpJplq#d0kyYThDo`shKKUkl+%K7?Y)wypw{@;4BRxBVw zrn@yrevj0=+`lWQI-ZYvb9w5cs@GE&ZB1X_HRErIsom>ioqt+)zY@`U$G+;>I;*4J zKM#Js6S_P>(mvr*Y-!ih-v=jEHl#Cbu452XcxQdI>)VfmSrOF*3zXLFNT_0uJU373 z;JK}b@^pjE4_}lzC$&qyI;j$JVM)ccMwL*9OU$h$|DVQq z{%7$EZfssUJDW4Im$&5R*<;o(UVof2t76p^+uq3b=|O1|x{lf0cKbE`tMP*QKc+99 z|7&`-wbuDv>m25sl-gItCHR|Ldre-Hu~tNt+~lZLYFqgYgr;5m%UGGG%9Q$-(XpFH z?33iV`16%tcu!aF+HbO8>Mst-Pd87Sl=W9Kwf<%N`a1m5ErCX*e+@R}0+U`8B&?bw zraU)nerxq4QQk{N+ihg>r5NPg_`>6M-<4E*g;}aZTXLtDVgr8?P4ENmW2|1lCmiSk{_Gin-Yt13ql_$((XDa!t zSG3P&emU)q%5a-Im(9XoaB1`>AC(&=Z&`MqxHH|&z+Vz9a7D>}aodB; zg(cq0I=A?0+8q73!~E`~Vx@^;)BJf48Na@yE2$=wTWPVV?cv(4m(zHJJ4=fWycRis zx$Nb%Il`UWPtCP54YzeXu_bMR%j(H)%O&K5)1r!fH>Li%s@Y+Fede`0i?-%?%su*M z(+)jt2zR(owe?s3Q*|up3*B!|@!PDzn=SFQV-4<*wdi&bqrf)CV`qjB?T9L6T5rMjPm!s4*aZDPP&H8Zw>ToO;;IJe>R8uUsQzWz9 zq~(6C3s?9=zw^oUO(MDNUzWBx+o(FZt_q0SqZ+b?Rpit6{VHx-x(aux)HVs`_Zh|< zdgRssbR`L}#Q`zs_P5*g} zKZ&k&abOU=811w)>WqIP!*T5o8=na?`!r{ArEt4WS-R8ZNQkK6wA{`ac^3~(ywYLr zwNUHC%aiZ?9gK9B*-W3_F4Q2jX3>%+-M}wlMsdw6=XfxjdAaL9r_VM^AGg;_-T4;?Oi>9?M@((Rq{l!D!M$ob3gU)OzgCa^yJ`N zZQJR^CaG}PG*Z9UY~Gg6xvQM#d}36+As~J7^sk2JPp9=s&rOj0pCGjS+WCw{s(w3c z`%GrsFz_uiel7n|WbLL0znnfdG=(mx*rXb;o!4vrpB06v6eIB{2vRJqlq40l#kb2-z zOH(U*$*uqAZ#92C@kyAF>HV+TpEk0WbA6~i$iuea@=M8u5u)BxH%a}S@H}Lzm%G-~ zfJuJwyw8sJ7sk(d_D(R+A%5$pRgV{2W|~NOE{@#0;QBS0Yf1*;E2<8Pb4gUns9DT? z#$$UbGi}TK;wik^^Ea_P-C}&I;BHK1NGI1v*070-bc9}))+v`S5Mc^9`uL6;>rbYY zrvif7CqDUg(0<+Z8EWo^B8T5RWZLz7*|H$zbR8PS- z$#W}%?tJS>@KaC+cHD0?DDR|#^MuPtz#JW zoV(btpqOpdybaMZ{})$!CB90{>00|g&nQ|XkSYBVZ>h0@$ zDJn77Ex3zsY0Afo8)taMsxmKg+Ww_fF3Idk&85Y`I~Y<*K5aN|l3-)y+%Q{q?w@rR z9a$PK8s570C1bzX#fye}nHFEp>e~B9BJk9Y7ZE<860u8}t*k)Lp;0@0cn5@I-k)>7um#$zi)!?cSpO z?dbxMv{gKut3#0n23qQV+b$5N&=)~-uk+#M3)PlfXgIBCwOCQxUG{>`Et1T&g^y;HoTDbkb;p&LLe^i#0HgKA=~>mu3= zADp`^aFru_`<1WGOM~22%5|&`H!kvh+FmzZ;Om?_zkhy?|NpD&&!3;aZ2cW~U)!DM z=y}9dyi3~RIQM-yqjh2!)EmFYsQk` zoF%L+{3g=DZp?F!u}2vs6tIam_7q!5rT=?fFvB)+LZYAhVI7af=S&yJEXvC=zSaHa z$A`6BgdN$e+IoIjIRA>+q>wUYBFD3*kN^KRZmLXtfBo;R-K)idomj4gyb6>$Aobr?3-Sx>-nf<3N%QeR**SXmRcrz}fu9y6o z@^0t7z604ew;xLlKfi^+8k<9`VLgec1fz0Sz9fbUv0QE?WyLmEO)KIi)x(>Z@J*v`yxe|Ea|u;k>aSsDGe`nT<2 zebsp<>sQ09soQ2rsu(}Yk}LPuwCcZIwJ!SWn+wN}U0T?s&z5T}<{PKPswce1IW)2F zfVSqh1zU3uv#$-5vplr0cCIwzYdO|Q0u?Qp+l@|ky}sj-Iyt0YL6+&Fe@^I9wuTaB zu7w;f&(=Sl5)+)`alYeH`;_nY4*3@M7ti7PHRXv$i=x11+of$OtXz@;9e?L}1$PN8 zo{;k8-%jQ9=fzoPS6tY#T&36e%ypAl7q4h2b4zNieNf$TNWsRd?C(E@_lvgAxt=BW z&uI3O$u=E{`}0nA9`0znDAw9LuX6n#zgH&Bf>Q#INiLf_W#;SoLM28MwN6zWJ~t=j z_}=R)c;*Hz;R_T>vg^!rYdoiM>4@aB$!up=T>R{c}r& z{`12xzKceL1s{=!SM}efT+^8BYj~IM%JsfCn(oGu6B4_geVM;cHQ7J4`{1q=u4m=*_mw61 zn>to%9=hFpiLH|_tJdMnyjy&%X&eET@_ub5bG4W&zRhI({dw|s-#2T{CVklPt>DY2 zAHA0}UXOT`=Y&;-;u+?+jQ-TfGAtv-7)6x71ZRldY6c9d=$Eq_20*K z_8gf9l4tHkTf8gy_BHKQ!92kWVLnnHZ+Xs}X(KZ|Q${mTX6BK%*Y+NLDwQsu(Nl1D zPD#E^%EF0j+$NT6W4?c5ecIYp|BY1qJHM{8|MTl+vQ_l?dB^h)9g&;zZli5T!lOB# z`1)2KVGFs-DCL{{K;Z02t0{+>&i&if7{&7E`qqD?ju+$k53WDz+5e+-aeeI98|yQL z{z#p=HJ87-Vo&y>4J@m!YDE9cXz_Y{_h6FGji#Vpm1Ep5?f>2Op61jFW|$zn5XKop@+|u=ll2lYc-g+e)-+f&0GqxB9G=b1-%goalZ2GuU*Fp z|1WLpeVEeEr{81__$p+kz}MgL^W6tEx3@`$1;hdhR`@ZpUad7TW1D^7E`gCm|HdcA!zm+Ozmp8qsruLL&i_|JR(?){BgZ9hMYixfXh6;Cy6y(?I>SaxtlpPm4dHgFDKd$R5 zUYsnkrkCT>=Y079HWs6O%C!v_cS_j$REW7GuQxa<9X_{6`RwAbH?Lpk-&kVP=orWP zH%Me+-Oc(x@;=Gm3ew~RGEye!+t(kpd%nqT?YijrB zS#bKb{*0+joE2QhmYr1Ib*=sEs`b<0=tD^;?5 z`S*2uy~2X;8)C|y*j{l6&9q+lgDpnMDtlu=;H9{y7e9Y}b~=Cl#mLGwPS(}dDN!8P z9v$hKRlCY6>QZrur@6TBJ>hp@Q?Krs{_5~7j+`fYPYTNqDo>mdp}btteGZ#}hqPh6 zV%Hp#z@QDYp56HMhU@Cl7Af6@7o}X}+K;(?`t&jU&Ep?RAJ=>_{UsE?{-cT70+#>9 zVsAVpUT?V=H2?VYs{Sj-U2gsT^*z0XWqO)Y^JBeZU7n?UxjTz%cHa9e^C>y#)={^F zCv8tUq>JvxJrro&B+I^(ziCO#{fTYUCiYkV<-UB`c;`HY(o;`Ge%f6!oA_ROr<&!X zSqG#IPV|2MbLMT5(A$;k*UuN2`pPe5YqyV_!qF6|pB9x@j(_yb^iliui+fq{gB`hL zDqdYDO+J-<+Ob`D!HWWWt*qGxUv@+tyzuhGW54!(tv61Yfy&pF`*+AOF7K{+c7pNb zW4?}lt+#cD=AM(kAXj`>Kt5D-V&R?IpA9d??rW@G`shk`RYDD4ll4S*7pa}Xmhb$2 zBu%t2TJG-W+Gi~qnD#Yy<|jY#qLl)H*XL~ysNXE+Rv`8I;k(QF^$BdnuGgeH)^$lS z-E#ev^!?TS$rat)Dx2HcIR!)HXUi+w>(2jld5T!0cWTT&Mc3F>OrDSNe zI}F4(Mdv$n^m-b7n%1>q`;#E9o=>-Bj`}`VuRJ!nyLLgzfkm4t`DTc&+pfLzXwRPY zOkei}{QMPh-}8gLc!Mlwvb=|D(DY-|N1Q<$j+MURE1C ze*Rk6M_%J6^TEz*C#>dw|DNu1v;2Yn+Y_2UEHt)C9&9Pqx*NEqRO|bPKXqH5iHf}L zsLPG7uXYWs<#nIBYjODp@fXL8zlS7mQ~46YeI&T`vepWfd1byX^Uu|@wi}(xa5UO> zVB-{pQ@;!|N_3JP^A+8uuVUWw^=0b;--yX2f|39JedSg=efk^2GY*}%CoW7<`xSfW zXJ2;WgPQ0`n_0IlnfN@`N0zH=$swI(7VCFB`cc`smaA#KjG%|rhmVEjG8N*&zt>It z9_O;RoPF}KC6YVexn3zPH#E$2J69%HzD?F|n)t>#K0dAP7miE2U$(Ch{N0eWXR}xP zl;b?#PCV8Z=$ALXK4*5~o%(Y{vOl|&E+sC`brHPjwnJdn5udNu{a36k`zFA*{LQb3 z?ez{@58QRIn4{HS;I_M6X7=h;P+iG>f@?zJRB2ar)15i#j9z7NiHBd7~4PARU=-KK`HE^@hXT zXC@x*a88yoxHVPe#=0Y_rKv8{59xXe-k)SKXJ3b8Q-OVu&s+DHsA#uL`-SIz|EqqN zdNgCh{=n#^Uo>_9{Ow&VsJd%^uYB%c+qkYW=Q|#1Eoj9*=Xn(&b z=~B;~KSuAKX?K13)b4SeL*M?M>AdOu%LN2n+^XI^FrWBdh_CL??ilv?deI->OPBQ9 zFBCbx-`=ob^SV1rul;t<7vk7&W5;Q;e-CqD*d6`zN_T&UCoDP5x&M#krxTz1E@pDr zO!7JYN7b!JrnqoQ+AlYIk^RgiRxwAkt@t_Ys-%7%yWp-LD1WzMQJVX%7l9MrFLG8@ zsk73X^F`6@SL5WkMSifvhqdh73Xq| zz*Z5ys+tWk?01tst;prSd(G(GwkV&4%-3UjzC=HHhH+;mwS`!%DNH|LwMOjH zw}~@NJ{fx7Ile_>(L9SEY3@5_1cux>T2hgFhY&V#nWL(~V?$0jG`%aSDH2Rli;o_sgnUw zR*N>ux4u@1yQ8s*r70>?;p|4=^7*|!NfP^cMZ;#W8SZANt@=7;Px-q^2Q`Z7AG>JO zNBm?uf6>fFM#SNihqKsoDOOPl4!)BQugLH{wODy^$r?w`rz|f!JN2_omt_R{n6~a* z!#Bs-WVw>Y@_A3@T$^(_)9>=aIcZ(Y^|5*d87C7%4(Alk5nOXL;e-13iwR6I7OSu8 z+*+*DwDG~T6xDT}3)U=@v^e(0wDbR)72CtIy!jqgw#XXo{p9fJi3sZj3kSYwd~;jB z9Fz2VA;=`JYWrR>zo3sPLWUtU`{|1pFZm)XxkZdB1a|CPmb3foGqty-%XAHSylu|N zbshP1vB6gCVxm%O@cU<sxwn?bX|+yDO5NI=<~xoSf4ew28AzVuqr*v$e^M zs|u&x+u1&q3fru&ERLC55i-@w!+MJU%9*aS69UuT$)4cebDB}!y@Ofwc%Qc8!da7o zrvxd9Xz2Vo^nHWYTWyC^a;+i30=fcoTCdCsHGZ>c^3{)<1=8=X`YNI`{}!V)Z=&xT zlP6EB?jDG)KGCvoe~jhIt17b+zAszTJFzVM#CqSI^JiV?B|ed$DZq>vd5Z%@bNB_Mgh%x<1lA zmDx)(X$tS{NU!CZsZBwrBv|Fn9TuLoDmYW8A>g(Z*ZjY__Y-vIt(~vdKTKBALaWdClbz#xm31>gt;+eX3-o&>x0*gWe zue|5T^4b#DF)cH0`r<{V#*1=qM4k{!|J%1=S<3IY6VtNi={lQET03_#Z(nX}LE(+} z964S)wma=``rIZY+IOb+w>WG zQy=%n^fz6|cDlQerA=^wnPj@b*$mB75{r7yItsD*zNl)MpvLLOpsC=|oWT;chFd9v zhiTHPkB_fB_Da#OI=$`IN6}R4t=n(e@G^6qUSy!|+OlwEV3SUfq}S=iTjn`--Z{;2 zBRgT@;sZ)tEdfboQXgkL3%zz@PgVNN%tsC$JyzVwS!WV34ziIc#lY z#?FKl@%?>e46jYr9B*=YxX&moeB%DA;+>qj-C5TfZml;7Q!KEE@we;J>}^XaRqZ;p z;a^wnin?=roUgT}%y_IS-}{d>w7W4TyC`z;6Qxy+zhD3Q#FV(XpltWkC2o_mu4paU z$hBd^RJ*300^I|CHl+#+qI$EUMMSk(xLfBd@?OZiYj0fKH2>8aKH0d_5^~3*pR@G| zoS%MJa?!nWCOmU&N^XDUf3WyO-Jibc=C!~6&#T~*x$Abn@*vM~{cXJ2S&9q2^~Ias zSA3n@E*R9cXD6@X>J5|rHo9|cG&S60!}BZe#qTej&ky|G|KPuz-`&!?zQwWyDpPF# zem@`o|HtQ--`CsM*ZuwV{jz-hzPi7k`u~yO=I@GUN$mTVZ>L z;Uw!@`)@g?H6xX}`WRi8b$``(UoSf4)bft|^LH|Hq!+0-1{|K7mVD$rQ{Zoof6)(r z?v(jgf6y{{Zsq^>1`|6M4Hb*B&flv|4%Sa?_gk*AB=oVMl;HjEmtQ|OTqy9d_WUCg z46QrxqS(b`qH^KUdZ2bunnA-?q2U)d-{C)*Uc;97Szq*HQ%cH zcclZ%PM=gx5yMvbsT*`yPEWDUxR-R4cPhuthx?`0GbhcQQmt_O7{_|l{=ftP@<83OLLCxwi4n;`>~uZDY1ae-L~4apTexr_-h%D(JG-(rdcgQQ&s;D35uP zOTHCD;g(knDOV?GD6DO%wK{lA{t^Rs?DTbP`e$>@*75E7u`MIMWJW~hTB!v$j=ZXI z4UkHe?6k3c)U(mL_>Y3bmGm`neIL#-1?e8LW(!!M@?-Dns}J8Zw|??mbBbB$uxE2b zmP;Z-Khx9s(x!K7&v(`Q{WJU6mw)UNg>6>GA2!{pQu{qN%Huqf#6oMo`1;?@$us&J zch_4mK2rRoFTlu9dEva+jZnS~rHx7=zP#5SF#BrUnz;Yx^Kjq$jbf^D)C& zGg4~D&p$JMYue00Gcq^mKbk4GmP03;yLMW_e*SGP zm)@7zEeesEoZ1oV$K3w>&%0CS7ffMj{a4xe*CyirPyW;MvQ9oI~yR zIlQO53bd^x! z+q)lZrYBsuzvkM8^tO7*`tu8}sQ6C^JT=MUvh75vwpCvYRU8dh?oztRSM;}s(bZOC ztIG3vzdE}DK4ot{FlTjFz^B`D9+j+%E!Jj9`e9r%mU9+7Z{nPUO5YH;t_{&x} zRr2fm&0PQYCeQnlAN+lLW!Jy5iK&wU@iG#R#Wo@xqp z5&dGw@G-8DnS+gkXP;(JieQMMLA@b&kM{k`hZYAfmtS%_&i$@yCkOxBBj-N+VR=3` zpYy-?%E+0Y?!3OiIYY^GVbR=g*#;$#R{sdjwg`E|9V15&QV#O1f(3 zqAIncK6!3VEo)>m8KT-wO=r}4ui+rh`sL5N3$}f$SNTnp>T!9j!nTq1&zXbGFW)Ok ztm!|baOd->`-O9CV|2Y73g;|$SftT-h&3!iRP{kE%e-Z?m^4>eGe1jT3LNdaI9R^HefOu4S#faKUd5<>1CMLJm2pH zwuZa;i*S+{*dM-F|Wsx61`g&e?Fdm>ZbBHOhHmYaELdA{R}+!DGCmvV8}SUfWZz?m&O@ z<$>3aHa6r2?|NgsbY0@>+#7>%mJ3 z*SoVteAr-I-WdLDySqCdTnwi)D*GI7s|Fa& z;r!`nV0>CdVzN%syZH-?N=J^(P{`g+s(#&$<-*X%*Al+rqhoa4Ab_v zRK~51kK?d8Ha$6I>%KJxdWUx`X@2~Cd-nOP6D}!SHWhaz}~nwwZbpvL`@N~|8s%ouj>u5Rc{R2IQOxBmHcvU>4$4(A18zt zG6_GoeNrp-v8iDGd3}}Fape=2n?1^1k<{w``dhAs>h8ayzp{9Dmae}px?kgJdSza&t@&?i!ICkpR z@>F4y@284=yiPY+gE<+|&x=-4xn$;gw^li|8!b=Q+Ex zj;G&F4%6yx(F!YA@h39hVYPvi_a4r^3lY&q&D>5=6^Y)h-1_1!iQXMY_OD6SI_B?i zpe5R@Wc$AkG zb?Ieh=8uh?k?yw-sjJPMH{%pb&$E=}?t-x`RVjXKD|%9+{4cV0D7N=53|Sgj`9@-e z)P$X~i?kLmyAc$kesS>vfe`guP61EWEcBZ`=L*Yli3drqCLX)<&dNFFjKh&FSGV() zW*m_@9Q@qyurQyRY=>*5Sx?>1SnJMG!Fdzq5+8NkZvMOV@#2f?{d?k+zMQ*IJNenA z)0S5H%Y_~vcDd#5cc zZ*$a3Ya8EtzwhzO6J2+NR?08=(H$r8D&cI9r9g*u|a8{YJ;Hy>I!Q#|OPn-Mcm;ca>(+Y?}Zjd6UJ3;-v`>-*_5XEPSW$u07}T z>4etJJRSS>W89jJpBPWyYg6AQV`sCAQSA7cpOt2cO`DCX&Q7oU%=+v9*T zPn~qN?LW_5-H}b!RXCCLycx9=7K#*s`x8%QHZ@HQU zE;$`IZEdgZ+K>qev7(+PeG_V)DAld|%^tmT)(5X=hrX#*9hu0YG=;5om7Cq%&Va04 zGdWbJN2s0=iauhQ_2P!*Ck5v`g@tSq$5(X5y{JCrnQ~{UsL6aCLNxZ71~`9{P{`Zu4 zyS@9LUVnW2`^>777u@Dcdw3*l{~6of+xbOlz46y+YmPF@+*XoO(W#raWolHJvCg?= zyl=Jy3$Pives^)W(&Kda+byp46)e!0?y}Gl|=ORByGQ{q?5j3j@V-p zi{rxFK?lm&o=eYvd;I=Z@e6EhRj2zleE<0V--+46Do=j+O$`b?AjLc>QsK&z<{H=4 z(+?-6KUgBjsV#cva`)rq;d_^CZ)9!1B6a?`xx12njKahceUGh*Kh;jEUeuh_*DmB> z!F^#@lkCkcwI0#=m2qYBx)jP*20s6l9Ju>fz#^e@`@1uY*IM5*xgX)aSl0G#fMir^ z+tI7s*JrxeG37PS-Q;mj%TR?!s%-M+yzA4s-RTjjUNW3B2| ziIsDd4{lx1Ajr&}wugE3vV`;^!%3xLVaXe+7=5^|Pd)QV;t}uUv`?pmjNYze%`(ua zZ`-}1?Af=^NBn$zWV6^WhgUy;H+jO!-Tn&ppB4BLZa(~SzC9+){A82&&Cj#sTTfcY zo&1z$`uEGK^RqZ)Wn=CO$iaI&|7NT2>a{zPvZR`NVSls-g=A*aSU% z*39Afy1=En>A>dKN~aCt8b9fHwkmi`O7C%b8|BJnKH2Z>tq;K~FTZcDzjxR>Uo)ZN zQMy;YrOfT0&b@_MQyzDRPCT{lZ}a<(decN{lRY8UvN26@FT6uPs<~w-wN5Uj+5f*z8Zc*Hi=AH@CSftV z-kk-UXHz)bdsmps$9nSc+1`6!Y!bPir0Va7Bxmh1Z@xo!0(#TVCH!cign=>H8%yLUWZP zWlSyV^`Acaby6YG;`m)7$-+C)5&Z`xn1c1ynbS-o)_yGyI#=p#e`Hu2tEoz`L)b^r5<$p?g-_^#aA@XFwI)4V%6dk)=jjPsDwJoGw4==i>( z@2$bR?`U=GZ&&*N&pH17MjamC`}kNWnPGP5=) zR%I9^1zJb_le=vBPGZuJ!uHqMPG!2cGylE2q`Fk%WEX4b4VH7?X74{*Qh1XoMvX79 z8(v@u&NWT9ZtLnQM%)yQ$bwgAiHw);#-^ zwZY3aA6PfP{Xiby1b301k3Ux0YzR3odPDci1-GIXz2UYBEAw?WM9fm$(EMxZZH^@- zYYymHx9j;Z|1{H^_$i3%O<(bX#ebRt`-@drVV!*B0tVK-ti&Np;Z0b3O#ObUY&wz4Xdog zt7E6PZe*v2CZ%REoMK}Z>j-+4E`Ce%$h}*siIz;W z^V9w=mSeGc!OtBWedEARoi!c?eMh;CHZzuOxFL4)5zR8cLglwp`S^ssr)d91ukA6N6J?_8% zZ$7Wgp&gT%_ed;y9eAJ7P&-R|QGMCh$MW@=Ni$Ms9^!l!<+8t0|NBn&gG<||&Yr)Z z?@0TxpxY9MrM$(>#ZtZr>ZUAX{eR(fu442ZrZa8N58umI+^!q2ruEM^u{TwRr8Rw& z|1r+I?NL~*yk}2)?d~;qjNcrL5PKG?cAQzih-GE)&*q5_u0L$%{eJ!6Y{B-!pB1#X zFYnTMYtJ39L-4u#TrG{)?XMp``kj0$BTR7d&-+Z_?TlyttPp;_(sg&=n!oiNaXXGr zQ~4lqe~aO~sCCKttxukB3%tj5q-L?aklV>$WoF;HJSKU@1id(KuCypx>|@vWX1k56 zwAaM%)`%^6FC$mCNG-2-C;Q76Q`faKwDNEyx6Y|pW-X=qRP_qW>(h3NraXK5l4E(y z^jS%Bk0*I`exBkSW$dHLzDC9=M)T^fODZRxw@J<`?R#OlH077nmXiXWhk4HSEfIcj zrzA5t;Q>!&%j(7Y{;y@b8$<7#3A+B*I8YgqG-dhkZ3iok?r1xyA}qwCp?oRfm1LU7 zx92++B^PhJT;dab_{qtGGV>3npL$?E<5OGb)T4JEU979tuuz$|jMwu(LA*{|&xReR zJC1#6yLmyvuUJmL&*Qi%a)2x(rlb+GnbZv{x z@yu?m13fHe^SWQ2`nCUG@coy~Er0B{cK-C=_4V)c1=Al+Rg%#cet$J-TI<)%KBwRR z+!ANMUcaXJ^wJm0mwJ58R}}nn_ny+jf4g4)m^SXr5P7} zyYJyw)<5U9WB1JS9hNo9hV9lzT8!0opY?d2xsm09i(eU@Y*X!vgHt~Y#!*OC&~-tLh2 z9(DC$nc;zsBFz&KUDdtMa@~SF7tUR%r*wSo=I3V88czk(CY*LuF1nNXId5}e5MSOS zhaNMvHb22>$w_mPlX$jw9?VXAe^%|yq0J?e-aqiN_bur3DBJFmveIRW%ysccCs^i+ z-0XZ&{5aZr_jXBNc~FY}lKHdm-SVvcnxGzd(Nj|I;@Y`S zJWBG_1MhiGTsx!At2$eK_Gb) zo<1c(jou~E>XkxwZ+qS;nB2j7q17$#?UF}x?83vgAN;x^7=o3a9P`t< z%x?WMvLvY0yChrP5~S_?p2RUms6soK#{XMTd=nT__-&Q9p<0|9T zb6wO0;hJuN+|i)4bNytwGPUiCCR>4IUP@a`j=tw9$Q^L!x%yJi-wEn(UDN|(7D-#5 zociLP->r{+T@ekB?CejjT~Zsb{?=9fE66HvfE?j>^*F*L^8Kf0Ug_T7RxcH-Iv)z% zz2*7yv2;uwn|G4f13P=owQ{j{`xZ@R1KG8*s;1QX6UgOn)kU{=Ua@(l{`Y{jrguT7 zNAY%-?`4@tALa4tb6wPz?r_z?5k zJz4cG_Rf9cRg$kBTd59_nLd)WsA(el=}sf7PA$F6yB> zT+G+ytpmBz8Wb%B^XE?q?awQy7nvLKSm^F5&#NF`%icPwbD;LQXXM`%^S>xrtvm=y zb+3;9Rgv?*0FtQ-x@J?w^&ze#s2dc^rv3Ao_Waj7Kk3A)u-mh^1VXH*Wqsw+G)W2) zeVMDiL;K^AH<_F365Dyj+s<+^*N1)GK4EP^e8hb%?K`iVwq(Xc6)ms$D*Nco^*6ho zZ{pd!$>vh=SMwK^imTr2(9zS`8@%foU#8w`-raEyGfZZRKASi%d!OTZ&&bs4PXjZ* zdLNj5RJpvPxT*2Zr+MD#sg+BfpMYvs(#t7ZUUFCV(i?|avhR1~giUj|TKAhxR^4T) zZ1}NO-FH*^?kS!XTw?jD?=(o`;}_;HEI_tu>E#qJFL}e4dG7V$nct%gwNEMkJ+{wr zf1zjU_N#@F?_*^0tXV@2eVF=c=J#kz?bFPEpLLg|@8=A3J$_V=?bxAfTfe8D`r|Ko z=CJ3#^y|0m<$rBDpkkW&;r`$I=}&!sZ#(-?W&X#*v&*#lZtqWLe zSy?DO`R+@Bdu1w1?*{9g4=jMsc1i%wDsuYNu5sZ z*iTsf+M1dU?=ZW2*_D;)>ksm3EMZ)7=!~mwL8Qvx!;eHy?maDblk=iS%$8YpdQr8{ zH?f{9{h{iuqrl~|`qyz@kE{1H9gZ-U3h1uOH?5cbm$3e-QsqtCZM}1jTr+sTXj7?; z`HSXFjF0_pm+kzfAG2+Rd)(ADH6dnUU0odCPpIWh-2B33#j7Qi5u2h^R_%4(bk}jt z(`S-OQNMXzc3)PE7ks!swKitU8|g1mW$EkpTFX@3%MLuhBI`%kSI3JDh3`!)0_5II zytpFAq`qQj(t#bDZ*%OJ8nbQ1&lQt1x94`|I2WzIZMMcgX>C_kZfTgkjUZdX9m^%| zY$scP7EN_$-?~oj{%M}8d#fcU#=l>CN9)POr(5!VHg9Er%6x3@C)o!X|CPeptn^}U z+UwojYh7J+I8W*Js#}}3aZan-*11%U@6uW}0rR_A z9GsWdx)u0b7d5nKdpxIRb+QOckAeKuhx5(-c1SUsDNcBFK;d!Lo8YfkE?JmA&FYAr zR8)G0t!Lx9^_LcTPP-k!RT{Xl`Fi&P>9WSabId-|9?Xacx+`#^7NmUb7G^D&MX3v-d;Y6{&`2ua+75N|mNGNY3`Q zTI;cR-V(+M4-ZT{C{vpH`0z2YzIzL&B*ydoidp-$Xi9wDzvJ_(j{MrNFO|J}+8N=0 zUutUWtYSH?*w)kuKGj-Nx+r;`$ZXvw6E{D2X_q>q<}geDb*{S~eurt#mnxa0@agGE zC%NhRYoosIRpIu!C{tJUca6)L<|jYf)8oAB5?HRW1@B&dsq>e`O4-Rv3L<+_ik|)U z;8+nR9oUq5|NQ5hqV8c( zRtHPFmISBJz~%=6S4rQC@yC+`0k>t}JzK&kDIRE7@e} zC)rirwpz2^`@a5kB)0iSB%kKCbA2;oY)osdLV_j#ZQNJ0tFOjg!2X1z>-6b0vtZo=z2HcO zuCr5>W(yj#g_boY2``PvYFJ;bah`Q*C2MFTch}h&NgH{;Z8#Mbkn>99sZ-*?$2V*a zCLcTfkfS{~z%l02)p@;1yW&HuNw@5)-u_yI#s)8-b67GR_)(+7h9cKl%QR-hkMG^w}D$_ zm27Y2GBTVh-X-(kh0H2R;~Ty^LQ*TMeS%M`T-#`TW7ev3sWa-PW#;tlZOl6D{z1)( zX>0q9vc1vqE&HyAeAPVsW%HRu!d$FIyhpxl=HWIk-Y)qs@%x;jT%PS88p4>58pP^$ zb8gxF&h19l4vA%3QZ3cXUaY+8vvvy4#45R--@fvS}9>LsK^e*s9$MIQ^m_tK9s%B=a2+M+c!ZviEzW_pb&x&eV5EqZ)xxhUy$-X7 z9B$XRTK9X)1+UZWKBrfwu-Pl`yHFxD$HU@LxaO_PiGm()87lt7ecZVCj@Du8+CXL> z(}uZI!WvoQ4L^NLb?o)oKh<$-(_G~+*ELgFw;JtDOZga=WMtc8zbxjL;l_QFo>p~w zwj2EG%K8}Y@^j{+Ds_K@4VM6 zNEKbboy%?Y@rAq8H(E^-4Js|2bxTX@uuE^{74a3P>e_Z4e=XSO5i?D}=~`g8)N@Vl zxrtv}U(evLRm!eAQ+;FY`R4*Fe2T&nnB3;R;7nTOdc8`dL`2l>Y4F zmX;ZM*DeNg%goT+JuC56#PM_5XIeStRQ-5(3S8QhL!-!^$Z z3x{ENigktj>a?Q1nJ0HiPF_-@JZ08V%QV5)2b5MRPuLNY_3haV*)^UbZ5?5nQrq5L z4}8teDEj`y>7OrOZOl4)DD1mc-tR{n+zxIq-7{~6$=lxtb%K{^9v6F4wd%|k{?oiX zS2rZSdUoKx%2UrvcN)1h3d${iOu2Y*=Te>hY<%B~E0^UIHTrg{&D?WWqPDu4KmW@| z*GI{2&p(M3A3mD<;j6;he^ohR=9=p!E@pgPdn4n3PR`GUqu(DYR4$h~?Bh1s_r-sY zl4qBX-JN^);@uT*vI2Dsn6DlYbFJL=x*+d~KI{A96IT@u+>E(RQ3s zkAKgH=!f&ye`VRc(zk?HzP|olu}4$Uq4)j5p{&*3GDkmH9FabxddzmgRo-ZhSwj1N z$#Bm7z2V~)?R@#I8PPFCsZ+RfZf36PtiCq!MXSHG|L#|P|Bj{jZ}mMoZRs+%^T)Se zcs0wZV2gI$y`KjP&)*MBmd)+2Z=AJ2b=MA)ACWbGgje{>^dGP_?4Epo!LdCq)92hc zDpE9w^I_25ereWumOBhS@U%W#%P;G?z_gsjSZVFYl8q`q+Eh+R@c&;a(K`L)f=A2d zo|CvQVBcY($2!l(PS$9z&W=ZwmO^6P=JS;kH}3fIoA-|O`u45TTz}iRRb9?KQkwmT zg}+1QnR-RUlQyo2uVkjkd*BT(EDV*_1_%1fe|M|vVvi43=l|RjxM9m-X;$yY zr|mzkT)g7tvv~n^Z;ZsMT=`XY$sbWxTpSl0_4~la1>YuJ@rnH zg^%}X?yb&#V7_DFE9sK%7t46~f6bAIe(SYJdRb@0SmC#xd7g7iS_bk?8m!5 z2`rwn>d=%`Yd>B-An5Zlr1w>baiPQW%L)36d3@$3%F4ZwI^V zt>xfQy1*>5dKbgdf+>%Ae@Oi63p?Aa=D4qu<=KQeiJSM><^TA6^TGDT=L_qkYxHGj zmkZ_}n{D&t^=o?*lMM$JY`8nCOQg#G(WTb->+uz9ELWCXaewTq^6UHccvGDXho0+J zR^MPgSEv3*eCdB)vrdnMrt|G@ckS=me(9k9@#fg1=Cz7{d{niE?@krOKfgm?vIoYEUUbp?E0*tKf$|n&DBN0lYAV% zJe*gr|F*tsY+1`xk2bKK%ape8KyQTA|e*4oMa#f6DbA(p`E?;7riBK<}5u3nokmi@UOG zL*Q|T$Qim8iBTf8%ir41FLjknTD0e(|I8O1>`E)Awk8zs@;;{IctR`Xm~G6@mQ9mZ z`YA~&MNU8GA$HK|uGZCbmf7jC8@_yf@-xy#+N0zL|G~6S@%u>9|`Ep#>do35s<;8jtOZBb`$NzuZp1FT|!fHqHV}_2a zc(-Q@$#Py@*d?sPChHTFXw|#*wZZS(TNfX5?aHn5NYGs6Y#n0A#Js1yMjXd1Pe! zWqX|Av_JD#KJC+wO^5Hy)YF*swpDEurVA*E( z&_%uTEZ?}?+4ieV?rKx#@ttuWtmUJ2Mydb09Psx=L7L9Gdyd-K7n4_u^YR}^Y4{nX z(rlmOc_KJ$;qhq(x7;heyhK(%3+rE-HpR7kechgYhl7pRxtr#8bZPS6V0E1P(!l5L zuLExm6btTfexM#Lz{hIsxKaE1axtFZt#+<{y!?;8TlIA%-nzza#;%uS_DOYqdmz^_ z1J>8YDOVjUve*oLR{u(R5-R)4^vvSJVPEoA^;jLgvO<6HdyFS|vYmm)^~W3w)owJr@)Z6%DI#a{gO#~qZ(LuoAIx6Nx4P#2 zezgsGD>jtYUN%{<%h>ARjc-2r9y@&QK3qG+^K2_)=zKoagU_uLOl8?Z@?WTQ^#8No zxIb{Q{eoY@=fw;5ImO-mdo%LdOuk^r0N11wk52d(ntw3KR~B(>=iphP$GchP=h9dA zeb=8XSgQBSDr7>WkzHIFOZJuXhPDZs--^|{S!5WEkFK1coFMkgUSHj!yW#BqX{ws3 zU8nRa4tnmZ`{!%ymVW8Og}(W#1UGz|ewnc(w!rGBqQr6si=6Tp!GHh4`s^35wJwra zb;RYB)rQI0*S%ZjOx!iy#x$b#&+%~6`kOCG)dL=!yi)3~AAa^%Bae)mFz4s{QC>5q ztew{?`%v^6Khrerh_-{XB5(XOD0mRcq|K^hkYLSy$NBFkQON}o^Dgu|o{mWLFzT*( zrdFVu(YnY~Vr{fj^A=J4>^kOfb+6jXA69<*`F{QXD`yV0%uN&%I8|&Hzr%cwSmxVT zOExbNQ~nw#RB?5-u72n#ap%IK_|xHhP0v<$c_&{s@yLD6P|dx@@PPquNSv|gk!2~< zUikLjeVs2aQpgd1@vx)f!}j(v8-*xl3O2*`?XiFE0A8$W^wz=Fx4M zbcfwNREqgaaz%_nB-aLeR^uX-k1x}UoZ=Xkd-HMXdJ|FZ|{{P=q(VS-r&)=J5TdB5u>-!Zay2UT? zL`6o(%uwg#5(%Gk{B>n%O!0oc1TXbJ&%f#ExF()|!ePi>u&!1}WhwtZ=j!QG7OIp! zU=uLa`uDg>e3E~?w2js~#bE9CKOA*i|84&DZn4}w8_u5mEuiu!re5cf3#3uJ3%Du~ui&ewjGCe_2bo z*Y_Sstk~C9>n5H0^Kbf>+4t>c{NvAg-uCAE5_QED*X8E?@A~)WbN+l2jULzN_llEx zD)jEK`59JAOcZ~Yw8`n`?|<39PA|Vc-_+=i*!mNmJ!z`H73 zW`AugKeD|#Q#@-^*uUti>2B(ov#%zWKYit2^)&mb?}KG=asU4=Z)?q5)c92_YgvQz z_Sbv?Z@)48-z>J};H9XZW6LsUAD;E!e%=Mki_TJ>3A&NNoQtkkTfAyE-ZuT~=gaRT z`+ok`{;$up#-?eG(t{GMU=#bSXYF!QHFaup*;ZT5Hs+b**Lc)$%P}Vl1(u*S9_w#r z9TVj|c24catg6NZPt*BV_w4?Es7IXI_WS()*f7I`ug*#TNK##K zV5R5d{U^!_pNix;-)l%|PZz(bt^J~UrrxGm(*lg=UteVHKS3u(MgIL%{rH4kv#tq0 zxciTFQf;xN^SXO~MOUmcn_SGW?Dx;q-J*^fNpCDC|MIC+7EfJvwICbAIbJ8`%)QMgpXHT-E{%3k_%C_`OVCSkb^Ttiat($|ETBxqNRpPgXVTH&t zm#NiS*8e;Ab3JX}nI5rk-dpwMS=+&n7uIw23cPey1ZE@c7slddV!LkLz&Lb%`RWE-mWw-J+q0`+hvVl`py?q z_pUKuJ-aMNUuJH{k}KAyg3oo`;$m90CapCy%Ph6!;S^ z{4ALpkH0_AEPrCl@_NN{ja{D={bSd!R$j8iLuc2~3s-rf$}1cEc&$!2Jzwxza*HYZ zq?wUvy@s<@eJoE~7;X1xQ@pL}QCppOqE+#?dV=0e9mV{EvrDTNZb|5B+}-+1VQJmr z`}e;*!27UW=Z`b1|J;Ao!*4Y6Q-RFA8K#o| zw4R$yyLWv?ZfnHrhx2=Pu1zuDu5|NS&5vhSQlA%^Rd`ryEZi>o$9(0J$jcAqJ9h3# z;?#d^6LmYEzwb!g*N4^f`h&dZw>*Ea(thpR>1^x?d@H*q$IM+?neXt=@cOsM@7YYM zHkP$qJ$Ab@_{4>OeH;ryZ!SC5a8^fP+4F}R3U`KC|D7(Nw>|a*>jJL-ZeJA8-ec3^7m+4o1H$C_&a>mtSk*LAlW|8KLo)V20 z_>TFDKdcrF{4RUA{V)3bSvuJaCfBK5ApxNQF3l@# zA1!zlM5i4w2(omIl8s|oVWM#VaiQZ?krnniWhuH5Q&R(bLj5=TR7~0TveCdq>B5x- zwfm2`noqvJdh6otDoqn_X$q+dxvso=^FZ-W@A$pX5|(FL?v;PkE?p^;sm*`>-S&rRjfU(?-^D5G^l-|O~ z>wh?}Ek9wi1E1KJ)u*-0oEm&| zHyxaCRB6d6qm6bKbtk_$vx&VYRxfGyl{*2o{D+o?onG;;gK_tUH*(3>yKh+Uv&;MG zYxR6uTePUe_Q)fpTNZA-z}LL(^a2CXBMVJ*bKd{j=k)#MbbAw%GeP|24`+Wa-CS2y zZt=Cuce=yvrTeNMFj@0tJPv+R$*-H^|La|2_hRmXKReW47G=M$dEW5nH-GIe`D-r~ z@^AhW;&=4R4e^j&*4z-`E$bs7_L3nsvU%t8#@Y8;c4=&td86|6F7tFtog}^o*XOxt zs3*Mr^F@}0JzBkc!!@Vw;{97q4VptW?q?TBdy1PGEsK8pNxpvfmmJMlrL}FPnr&yq z6)TrX960sTDrDO2ggZ%s)BVGRx3NauiPC+?cK_(#ujRdbJa0eh+>315ys0V2FnjVp zPwk@Xx3=D{w|?ogI&($eM(K@jx%{eoV*NL_GaoVgaBr&m*$D=(YNi$Jp7WcZHMXKy zIHp=|?$q7iec#QWe@3D&CT!iNjWhK5wru)!{z{BOCzE6fTcY~>>DS8aHaxiS^YVU^ z{E$z1uKUx6?Rni;p-U3|d4z5ds#?~4*ECm8c@eiVI6`_59U z6}J{iv?UdW{0XkM-SeS^MKsT$<@2KF7HhT}`0Ux>(bo2no%{9QtK#~nI~A8L-T$Ee zqOzdariKGs-Y@1Zo_4$c>*J`{D6yrji)TH(vSE`<^3%X+`~0O9bHD#&oTj&_Luqky zw20V@>ayDZAM3wN(_7=dq5YMaQvR%t>3Uw)40Q`-!~JQ*~&YVRZb_YX10;AnW?Dbb^CGMgnn;j!CAHDc`C;0 zDFKZu&PqF}tagap{Vy_;usVmC1RQJB}ZCo15@E zb`xi|?B6-sdBQ1~<*x27?gpRKtk!hCWBV)D-@upCqE>b0*!Gf4VY8(H7rIRU*{1!u zU6-kya6o^f+nZSjHkd9<^_HIaJTs{E?Tp*4O^MvD)^{$m+~;uilI@V(J#R+VnRSXh z(as)4{>e%2pKT8l4HIm8aPt-W-t$U}(^uO*@;2*x|7N+~i~WC=^xr$QWuxtSL4oI6 zpM`X5O?&wF&#Ludhk7>Jx>O%vcW(J_`hhEYTI3w{d-wKyKYMu2#_AWlO20^k&Ek9Z z>NvkZ-QPc}m-Rm4P!L^Ip7wCf%7!(&VtVT*vrIQzeg4@k10N3V-Nm2szHWKc|6|F7 zeE#%#*9z1p_PTD9*c8{&!Ya8&D0wc+b~c$5=7IxfWoE1^w>dONGqE%En#AVVZ-28F zJ$a)uInifRi)Du4*N?gif2C!_Z=O}GS9x@1SJK+ICm-DWew_dR+QO0$o>{ypcRzE~ z%Gz(O^Hw?kE$PF9+Yi55^#ApE*b|rag7K5s65AMw=q2yV{(iarKjX=X3wH1C&%LHJ zyXW2$#*?p-1%5xAz&7Vd@cKiFA0BFCZhPI-!0-K9Xiiz$Zd2Qwqc`<059Vx<(>Y(B7q|b_?z09vHF9heSA9P9S@QFd%Yx_x>5pTE!D=e37F(_gUhh~D$~mX5|+*2nxS_i{efwhGyr==|pU`FQ(( zP53z+& zF0k%OEJNl=<`WerSti^6a~xmoknwcEjDW;n%uYX-o?|er{S)7(>S)}k&G!DXn`4B| z+lh}_QrA~T%==N8U4JLZUTyJ~7^}xZHG8sbeK*9HFH~M4od1z|&&B@#pZ|w+eqL_y zf8{EN&gnMm<}ud%E^3_q%`H)KcHW`TyVA2C+*=)xld-gao0Hh~Air%&Z#}F|IB(b> zIkUVr&^Tq&Ol5zkVw(?he4WfYvUFz$tO;aQoz2_3Tx>H-$nHlkkK1fM`gYzm<10<= zUmX-qEA06#l2r0)`_&`uEZV;xN+#|78F=Z!*KgN#lfE80vT9Sgxz=t)gSKkPFp}Rw;SC~JaY5eBDnY{^Chp4iI3L`Y!UVEOgy;h@3Yw&+dECJ zeYWM_&*UVpy1;h6o{`d=x8G{+C-+V`+B+pfdDrvbjG3zUKEG5FPKx5Jny0pHqtxr4 zI;%eGaeNB9@p86N%CEM}Msu415bv}4*UPyOZ-^-ZzGmqWk*G*e56TEZZ zoc6ZIm$es97TqzTc+R2jZ0Q{uqJtz`-?@CFu&muh~4lzuhY={eoUm&w#N7AJWm9R z8fT?$T+eGzvEe<#Z^>$whc0{*BbCZNTs(i{%;i@M!v8$?U41G!jrWrMo05sfZox-B zSQ>XmzSZ3DS=KDs_Tj#VM{Kn#a#*Y@)D|mMs3mmE8GPxHm34mWF!e^J)ahqztG>_d zP5mZO+^G6>#@fWN8}FuzdjBeQ*>?GIzvugXfBv~nPS1J8-T(e+pw6R;hznc4pMI0V zyXdm)pPtOt^2_Hn;@7rVZhNy?^6;tJvQ*EnoaZzI=iEM7Jgvn4$ZGkIZ|0=`-Rg1X z%jU8;@ndp#CrB7&eUqH2-v00TgebkV|B>eBWvw4Nr=7gvbl`=J<)aS%osNsWnO;v{ zuvCqw^=TqEQ}X7th3#{FUmW0B>bTgOSz2u2)q9y&oKm9?OzTqIxwQ2{yj0d@rd>rm zFPXTPpZl_T;YNp?n-XbfHmveov~FjGUc%`k*SZsr@sz)j^qC!L$}&wtXIBzW@id7( z_L_|Jg*PS{PVr8;`YbkJ<-$eX#{$lFzcO6g`(--!bj#$T%CkQl56o!1I^&>h8qd3j zCyWnBF50@?G%dgVo7ijC;}HUqnJfMYs~t=Jcm7e6@fne`4<`LDcp}NpZJO=ZXB)xjdEOuHU+ShhKbMyD56l z++>}@AI|n3`d=WLVSPKId*SV9)$knak8Lc;lckT^d2X58=-j(-cl6P)9BWDTwv8_z z*{<*NH>)@t3_<;aD@lg^%(@YR(nywGhD zxl6v!^ulbmO)}XEdrJd$Mt@}E+WY3uwi&tI3Aw4K+r=|e4c0!s>RI9?YC3gOGmY&( zaO~YulB4M@UUf&XD)oivwnsxx^{1zE}K20$oZn% zluUgC-g9Cy=Kk9zXzq^t^5SB~#IrX_H9St7`*g6q_y^;gE1L|b8)=Jgew)d-IISNlTgOS8`$wyMF&F1~(m^w~cA<0$Sg1mfTZu>s7S!rKxinliQED zwn?T7Drm{SzL6BJm0|L7iqjOq=N@l_54YU1eO#y#v`Ocxw8G!wIQiIk>&ZOsj)o;1 ziJO|;WK2?Tf0l~VW!Niwx%BExNvrkcvP=0>SOec{Z+oV`z;*GTrcFF;@ghG$9`I>? z;5;9{EB-y@o_q{B)6<*(%Z!!{D<%J z6R-Ex7B|ly`TX^(ynnjo{)h^TMZ4$Rnh-_8uHn)jUd*O6~!ZpV2$?(to& zUCq|Vek?!Tbydjihcdx82{X-uKn*)@`m6A83s|3OLMQEXZdvP!=`466LAzT+ zv{#!3m39ZdbXv92{#}T>`J>x6FQ`N~|NYB*Q(tM@LaFQyU(=Le)yS9D+^G^J5o}v0 z1u^G(vqY&}zU+L*e%EYm_IzD8Z^N2h9$QP9Z;LPYUUO8%vh94{(dd_JQ`K1xKM$^` zjI=GeqPHlvYhst?q^iWDZyR}^4NQIou8EG+~dTkZFx=ObuA;`1ANny;Tl@0sfEHwkwOd8^m-zs$gUL=)meRSMlfa zM|vxrJl$`IMyyVcpxhsB==VgkPuR8KbO4_Z)Krs_r`76tR~*e&CIZj^XRbV`s0vWOcmd8JXC& zr6+3LT8;TB7G+*xGgNgKw{@rQcyjW(?6kQPP1Af&uXx&|{2?yoj#6Xl(-3RR>@!`V zCuK~x^qx6)QOYaY z1<%qt@%Jgy@;6d9JR<#P9bOZwJR^2>!R~Kj_wF*ja_LxcAlLrt`Rl4(1=()6nd;aO&uM9%?CmvoV;Fh+$ zdP4r|_wifz%Pc$B=CxhmDgVjFd5XFM_Q6cQmkBd6UE~s9a=obIuTzp*N7*d)m0M(# zqCL*AUOe|rA%B{)jF=F&-83?-vdhliJ6!n7OHKJ<<`F;fH0^m$t}QWc`xrFG z{M=qnA8RA$PQ%Tfk`GTj__Rp*ar+U!Er~IOVT{YOR@lUm5aBjmFGn}9M#Xye0cL(_B7um+d55-&svezJ$3)f`|;J0 zs$%Enr}hSDX@|c)U3ib_V3b2wQoiEf15clxn9_fK_0-wFw*88d*%8@QI9v6O?v=BJ zJGMSGlMr8-;QN4&PjAb-qmI32+>c#eZtEOwvzPIszn}3DGvkD_3aaZ;T@5u3{JoOj z@YCn|B85%+a@kVi5>MnwPMRJi=94wk_SllsGoHWpQ>bq45$Om&QOC!bcCOB1^ASGf zO|CAV?>0NSoods5vf;&U(>ckX4<$vj+*X;q^m%oKVEPt~?UNOP7Dj!%G<#V-d$jBh zW5dtp`8mR-*N&tJz7c)=t$nkVb%5yMhz{F(F%LhrPG=HSu(mNxtDc?2X7VefxQip? z%ssP?y-RCeHdc#oZhZ7~`@K(x{p14Y&X{9*AkV=0c8K@QXu-Us8)d3l2Ew+BeFKw#-dUDC{LEN zTITY9A4-1BNn(yrt z&WH#m_MEpN{WGtc#cosc)Kzh31Vu^JzYV%fRDv9m8cWyBw_kPaeLgl7i54NmYQ*KnT zZOXoX-`d&QZ+=zy?Ym#hi}e}byZUoB0dewjTddwDa`Gqq6q?n&#uI3tgA|rbR#NSDxn*A@P8%**loW{aK;k5}Eaq5!c0TC){{B>uP|; zGlOSl)2tI>b~R`(e$-*PFrz6)Q*V9zfo5*Mx@E!7x7i!p7d*TyUi(BaZI_yM-4T_{ z{GU4uPOn+@LRTz|GeWJd7G|$MWk>*x&0Jm6qY! zcJY$t!)w{xr*+pHO}NRjCYf)I!3Lv)2|q>NRNaV<%FHx%(_XeuSghK6wN7v1mZG+A z$K*MzPp%Sj4lDM^H+l1Am4@4z=NtZL}jR!mK@?4aja*v6f$0NPr-i#ZnOV%1B*t36WI}){b+wqQ^ceC%lG>YK% zFyQuBrt^UH-plt|=?r$xSY zH++5lY?M9k=41Uy$JWm_t&>X2l|Pyjzx~X&%tfZPwrRh1xi0f(Ui5zYM#y2cjw%_tdsqX?aZ6f?lbe)qE?$HgsqQG`f74sYA>U4)m@>* z%PVg^+v>P2cl!1d&oUn*G_Gjq_L;|07Mj(tQvT@IU#sg1<(55tdm_y4$lciUpEg9Y zb9W_K$4-q*>o+*;vRh-aW?J5ix>HWmXX>TIiEiF-hA%mdd!~z__u((bPj;TEu@u&_ zm}jzU(+e?Yaqf%RN7wLf_Ap4>84_a~)(bkPCd%qx)rKhUREaHdS}Xt6BrQnobet{i z_Il>W8mr9k=&M?qYqM<{=J=hl&PWL3)Dgx)Wwr3BS2x2^BXs=5~D_?j`h>F)KGS3{=fZ1c+Ph_j<@?LOt-O~Bcz4M4^I0zB4&HL< z@JH8uOG4ArooBs#y6w2c&l!qA;+{8KWNxub7`P>D_MhO+b6*Iyk{JINQ8Fbp8uhG)ZuwHU(LXy6;s-_N~hpVo|zt2~=CM5|f zCSD4;q20mG5ynv)drtEPXUPohP&IaY!wS8-r#IPT-C(^?7pl`gw_?87Gq2Y5QSyp9 zlVq;jtb3zjai(a)=H~{kuO^DGf2aDK6GBHcTV(y4 z?Ngj9Ou05bDHMv*o%-2T;q3;K88f+zr^xyLsnm2SI=SZ#!$Pqp$<+q>FE6${I`san zN}hqSsG6eb`dtjn>8}EQcE^7_Ag!y6mR8MPs$q5JFF9wZl*GR!$wWZ*2C zCjHg&&qW#amol}XeZ4ZW_d8aa*C+`dNqDrtv`IxnNt9z=d-Svb2eC> z^qJVpI5|XAwlzaLb8+dr{an$8ht4cd+R16R_p{_<|MwgHCWV;` zV+9vlOj@*Q)0wJIv%kLBKJUwKekpM#KfOb$TC2}xgoor>ItYAeeZ75>cHs9JDT@}@ z^qYhpU#Gh5>dc7JB{S9s6m8jOk;mO6#43HPpZnOl$)3q4w(?Xjy?pxdyFEGypS`4~ z9AoR8r1x6E(0f_8aOP$XS$V&skGI&zR>Z#0cwz8sb1###Yf_uUWL3P>-aOhZmh>XKUGygn0p?W8#?b;Av{4{`Y(6%pm#k*#fFpqD%& z;&|1W`^)9)XUhk?PK^HBxbkK7eD^<9{_``gEZ~0s%6eIL*~>+_%?3Ja=Fcdo|KF?_ z+BW^>G|k&{Pc6D+U}|mfGSrsH zC3I9v_n7CeR3~?t9Xav2fBF|{{CIqXC;U^y^|P|qW}B~NnmlL5TQ8>9$|qAMZ|jin zn{=i8?%Db0KmSyAo$Wn;-#-OghgsLQ-PPawFY1_1UBXAFqR`34xl50h+d0l|<>L%} zdTaH2gS$rxF1d?2s|1!_JpXQ6`L523Vv{ePz4eUqZD{lI-4cF#lN6sh$o>wTy!^F9 z++5aK&3D)D%ljhrNau!(+|RNfPo4%%5YOLKarV*Khxe?GI$d$R%q9GH%KeMe4;<=y zvexUqmQ9kDj`UbZ>nv{Sds8ohaitJ4=8 zZ|YjI@=*>X4g6Hb^rgC{`#1_lwDaSV#Z3X zsJ%@Jc5^4PN^vIZo;mb<`lcUN4+44SUi8q(EmhPN^Q3WzkO7JT4o)>T1B^sm9f5D;(FJ%wiYgRVn#;ZjRaA z?;neDssb;DKA*pS`RzsC%V*p9y*benDHM8HduovEk{SBmX|IafomOP7FpOUJ!f(Ea zapan$Wjcy0TbIY^@;<+NXW^9kq-!=d*GiZV`tCk+!vSWjUNPj@eKfQ~qijD_s9P$t~z7#dxJ?qix z*$)+gzKp?)2kT{}^YT}$Vbs?3wLasg zZn4JBU}xg-Hm`rH1n#Lvta~@(+m3X_Jt}iC&5ot;y>OlxN%-J>*1ewYO3!QnR|mh{++U8@NDP( zdAWCg&Er1F$^*-OKi+?5imCt9Wpi{}xlBK%d{+`}vsSe*csWPr&G#jL4ZZwND?j=f z@%a7q-;SJ`C(pm1y1_!YYWu`byT0uYIq@!!ydJJ&joIrG zJ1JqciT1`rTD~Ik=N@0}RnOZvCEz04(hK=v&tmHSfBBhtOyfdYBlBN}>dFtdHx_-`iB;9{9--v zbeDmOs8#K?hw_J1oO@^Y&b3=7H}Ah))rQUDn^YBlow@us{oMRNG1nGp#9wRJ6j3w9 z=T)W6zO}#Vf7*P%5PjCI?$7=IfB&o78b0c}ZuV(w4_Y`+B_mvB7q~q#v6OZVdVsdR2r!$!+2;l}CAs zx+#-tFSg}-N%5UFHSWGMwR!s1BhOyPdYEi9|6#by`&{MEP4zh}cWt-1u%?+COLcB3 zEC2h9C7Ulnx2~q*q5Zl;9&ca2)t$F0?!=duTmjQw?m6@N|G)qL-iN8#Tz&mQ=-FSN z@;aGwcb5hf`#<5U)J-{Fl4yHU?){ZKC-?Ri?oc<6l8{FM?4A1M&MEt>wu!uI2{`(? zC}UB;{)r!dG6u^hU1s9s`M&?(zq(%$8B1QSObS*x$tmwwKTk~O%k=468W-J=h&*)g zeyv)Azqr=4lMFHQXUtuny!lDl=0{a~>-O(eEBiksa+7D`?>^qwjX~Ky4;t2(7Oi!y z7qmK_Y@Ii+Yi4D(9Q%ef@=-b8@^=X+3BEXeW@_-WC(GvN+uxXHdfh9-=Sou_udo?h1Y^7L!@{d*MNO}qW?b;hN$|L%Od z`(LO&sB*eP@SnHtKkWZ1&D$-IwZG}B?!3pZy0hg)zyDr3Jxh4n;f&gv>%Q|@d!LpW z`xP)ZpZ--Xu5`ODJ(6ATL~rNoiBH}1w!b(Qt$Dq0+1bYz`;z6$=cEcg+*kSPLCJ>= zH#h8C>gFw-FDq-xv*zNauGLQeVqOL$-nnDZce$-vw<=QjXLjJ^*1r77SL7pgLZ!pjc>6!N?ewSMvRJo#my`>q z{Q{r&Q(F^f>LeQS6}-E>zJBl8gN?iM13vB3c6HNJsxkMn=uNBRsZD?DlDmTMJzssw z-=H%^1&?nnX_9!o+{o5B;78rQns}bAbAskheeuWdS<;6}_q`rJ{=U(j)tWUkjq&iB z8T0S0&;)WR6rAFP(ENaKVh5U#fk4Hw6@5-5A+>E--Z;)BNZw_f7mn56#wlYSbrm zc`n!5FELZw)`V|n+~?!-K>y|Lx94a4dR4|}q?~f2Z~7Vcf?qTI>{gcj_}g;dc=4OQ zqqZme?hF#;=D3<&#Q3Fb!5OOu!Y(`cZTdFd zwOF&nVf6~R{v*?V?PI7>EjjCwrtk4GTIQ^V#{o|3XDvpaj*~k6mA3F+VqECs^B_q6 zH>@AihyBWs8C7fkoy(3{ zE!5_&`lqh3mFvuMsX)fhN%Pkn*dIRM>2J&fDW*l5;f10+!rJb^&Jx>J->}pDy6Nch zt!`CI=Gk6SSY@+j^_x5SpLV_xcMZ|+@A~mqh}-nX=Re=R?px8Y-m&OYWB<|=GwwT# z(VDUgUG^{N)XcqgUpp*vV&A%ydtG0*ZeNte8~V(6_7c&$=NEHNvOD`rC&x9+?D6rx z*nh1i_VM}Ke~PV6++5e3`vK*6lTzHzRBw*?6w;~Gs^Mb!w>L1_} zJ2^#2&$}`DBlmu@pVvzmR6o1@kvRWe&v*X)RdM!S{JLgclQ@-Qv>G>8&t5l~g_WDt ztnbn;gWIh)cQ77VsB-Ag=4<_ji|6q!UmB?H%bscU+vQ$M(X`U8m`@Hb6&dgPZYIZ&QtzGcI zD&(%9N4PR?|)Zb5DWHI0Jgztm>+x(g2mprzesg|sJxBhNYvFOu>#U&aV!s#=% zfB*b-Tb5#M&_dmkJ0J60CHDzbD8-6S%(M(MTGts~^}+RQQ;W|T!~X9dIuA(latj;D zy5HmV{Mt}0DW;k7kN11^^tj(=>GX z)wbIwZL_jufBa6tMc%1ji)Ea9vLDQ}?G7-S>Hfp3=d^moS7!0~$}dIcY<66*NoUrH z7`fT(XY;o=@<)q>rpWbg68`z`wf3ujfBOsVIxihq#4eVT64d{tdcC{NdF{jN*u`4U zq?JABFFbO0{sKmExk#Q#KW(1vU92E#@}ORs+sUZeJ;K_icFlZtHM@-+7xs&kgeeuA z?wq;t%*}^>x83Vj?`IJYeK1YO)@~@{NhbP^)x#N3V+wbiO zoycVmPITwhMwsWQc^J4)^EChW`}F=ro1bUs&DUL;To5E$>^n2}@Y;^rBf9HfygfdN z<@2|?;|D538}t`Cah_>UmFizzzB~Hl)ys)o>yPb;c=q9dXIJWkGVMHlRo!22{_a~S z?)6(BxoL~`n^UW2e*ga6Y_;oGepSn;+TH7at!6U!zp%(dEdN*IwtdUR);tNBmL1VB z@u%lC-c5mT7Mx)6w%^FL?BE-(!1SZjS|w-BO9?%`NW*5@L3iny^Pl`Zy-$z-t%YdC znxsJYG!;&**Uk)n9Dd&Xf_axFB-AW7XEeX4y>Tv)YhiTixVzt46@)Gp+@Z}~L$M2{igoBZQD^snumQs=k&&f7cUv%NV) zTUsT|nkLLlUl)I^@3DYZg~s1GVFB;gJcw~xp|IxUhKtQ-q9;cM969}Qsfw$1_Pp$~ zF%c_F+2*$O2Bm1txw2-{wf0FOYfJyf2(QoXJ(zp`n7YySzKrZdXNgzea&{rQO2D0jU}Zozi%--F6-^dT^rBP)RFp_e`c}zy!un2IbK{_x-Re2 zTEr61vgq)EHWQYS%;b)c(E@kQMCrg|&`U{SS^J!TB_;JFm!07jdOaf0w3uig|MK;N zCSmEo+)Dyy_lvv#ZkBnInba&bvsdHvQ(?B)PfJ#Ily_>as&L8PX*TUsc!gxt%yk-% zUr5^f{gb)0rsRYdyV<#$DXLN79&J6zo)f>llr8>M{q(1Mgvg0D%h@&_vyV;i51i`q zGI+*a|ASp$_?wLSb1Y1zoPWR5#>jDD89*ClnJf)1 zkP_{FV#FVO>BQ_an$w%a6E8+DOY&06vo&0&w#I>%6E6> z?Mut&y2Xl3v^{a)o5sCVouJITWB(qq=6E(l-q}&_R@689FI$;gqhWG9LuSjbO2!?M zOAqz1w&}AZq)qu_l(!(^hh*|;b{8O7( z2FdiCd2F0ttsfZw(ztNt;XC`>ZIW^lHcsI(&JEa~Ez&oA-v7Be2Sp90axKUWww=ZG zhvVk2c`KS$JM;H1o-u2sT5!Sim6w{^k8ih0dH1kPBzm)_{S>tatd85%$(Pe$PFQV9RB7RwD$A$YcAD2)!!Pidg&n8VIL-n-b(`(r70gvMs8(=tvmIVY0X(^ea`U$}c*ZsGBouMvfNYZ4A;`$oP# zVH2t*5S8_GvuK@Fuyc3hsxzV?H&#sCU8ULHFnR5a!*aK6XPZht6+3mNs6XrY!`)w( z)qCkYNXbq+WYo=X-KajrTEjSg+R4&SS=`}Q15(9wC%<{(D!#5O?v}yjX_fh(7G3`F zt*l7q$c?oZT&2_Q8NKY4wySVBH|fv*DLzxG)o&Vc+vkN>K2Nb%|E!!K8P>(FVWe#@ zW|V&Ks!f{jQJGk^1B|nbRr^Y%?YqNHQUr4;J(5&c1e$!4jTN}j0 zX&XQDxbq@^3fJcsGrpfXVztS}KGg8<9#_MI#uBerOr2S}WPv@a%x7mA^@`TCf7+j4 zO^Hs`V-U* z7<@XUPulK4{U4S0=YQxJ9L-GNIwbNp=X0^*#GVg7-nNE0Ni5v0{4bmBp(P_XV^q7_ zx?6Yh^gMlg4t^`@lg&Bd)IN)ItLwrI5|c{ZUVQO!|1s;lt8SKY>eR;*SC&Li4Gk6A zakD!^ZPCe7oEO^tUQB3RC9W1?XYsY{U-h3Kf^ngbzE+AJ4SAw_VS`SL>YBO#U!JJb z>eueIPkUB3HKOd@^U}k0di+27%=GlbI#Zt4=iXf3n!RK7lE=?i@8*0ibtSe==GclW zX-nH?&hRn#T)D3;yY@a)%9$lr4|iwIn0zwFsD9qD`OSsj`5v$4G>V;;IdkgC9>e+h z^L!pN1xI}Tm^rJ+{9-`zJ+ewQc={0A0%q&PHRr?9N+NFxO-az471`zU zZd2JQozj+#225eQJ-h0T=>rXRmuDR>sguP;r{GDGkBM%RNmVa{^(J%yk|nFQln+3vb2*Y(+{182R!Oo zI>m&}JWye~U9;=#{`LIU%C5;}6Z4n9|C@2Id0CU%XWNro^|F6GIe7g#!)@+Ev103H zsC&7UM&8hV_Ezj4|(#nHc2aoPC+8pWGx^MNISxKjM z>28ke>{6S1WB!BrlXrx5IzCICDeYZW61lDXdCT=n8{CerDRiFtOkY3NW<^%S(xkAJ zU-It8ykEe}{&q&Q*S9aSZ=c3Rh8|9^PTR2R{#xB_=T=EQTRroqS43%~T&CK8lS0Nt zZQ9w-PGwEk*8k+2R(NA`+P5{w)Nj>H^*5QqFyHLV@~d_8r@eG>7Tl0?SZ8;2<)h8< z<=#Ka&e!a|{q*)vw*y6@dsaQXXIuO}Z+f-+3;(jiQfzrM8_R$5+FZG}tFm^(5h=C2 znVscd>k8w)F5u?ge&*2bXFIRWi`~=K&41?T?pVEfLNd$OuV|def98bs*4>6F|DLRB zoZWxs?C!kyv&oYaRQF~jyj0%&#qa%_`WLmlcWRRI?#)!c#ZtSzai;&7GrRxI+$SC~ zx&6B9uY!=R=S@D{c`p=mmizK6zUtjuUQ}vj%SSwTd2IQ=E;k$Tb(gp0lf~wS6vF^yr}F!&yhA?!I}inmKK{LSfwWR>`||rr{mB6F*I;OcYE1 zQg_-<<*3%e7jyCsH}%w=S{3{K^Xdl=-?&XRD2geRtvW2F|)0k**H6v?cL8%&jZG*G^c@>c2B9@tUo1_U6-T{x<$Pu{hRkrr5H(#+S|B z=H;I~uDy3#Q~vie+t1eB_j96j@x@4o*?OKwg#`w zcCYze(s$W_^|0KG#M!ZJwUxH)jyJxX$hq}qQ|9r8e}b<$^5tfl&yKy9bI&gR`eJw1 z?0GXxXUATf^C@rrm4|1AKc^YLt&PvlwD^2v&d&Oqch6 z$*&BH+?tlApLyo-?$=xMN;XYdsdzYM@BN%Rd!HMdb1zlXHa&A#RpjUM*C)?TebyZC zaBWn%!b_u5CF}h5wpx8I=G2k1KXlRUNQ{#fnX ztFKxzE#S-&-9)Xm{*Ec{qHP{uKKMe!*vk8Z*UMQ2A0{iXbqAk$q%ya{ugUtn$FoyA z@ATXM&0O)uTQ+BXvT{nNcG>+yl{Z^9Z0n1h?IO1OsKE4hhg(k93N&rZOv{-h_2<{? zs_w^smkPY`HLjj~BJTZ$`?blnbMx-sec0e%Uiswf@3+^VZ)%egOP_JnvoFu{N3Jr@ zdE+ym%?hH+CC=0e-?xu_cjf)Q5d}Xt{dN;EOGPau{FD6 zt3Il~e=hLuox{H0pIsb9^==r8-${r&pSU{X&pbEw(@}@Gbw4|0f9Lzutn}x+(f`RT z*AllZci1WM*VngxZ{^zrsX7Y-`zZop<=L;!Pww}euQo68>V|`jHy5xht?Q}3tH2;E zGn12Vw$29i|4MI<&gYD_5y;6;*{0sP=-m7{wRuYus(5DJ^xBdhaiqZat<}wJgVy!_ z<=c)~ezoNJWOAo3&?LI^+Z~Tx)4Gq>Hz}RzZ#22Rux`PRvVS|*q-;7kEyy&w^H-1Z zMQeUL$H`%vYnSY-`qVO^cv8>Sn_fSjhZX&O(W&v=^k%53CsXh1u);r=cHg;GU*VKl zQ894+(7pEOM?xy~ElIOT58JPkMd^!ZbdUQbXs6*$6jrG zwak_Mh0%BU*T;7)@_e|KXWmV(jhyYqZ4w3IWp2|e98!=Pp56R!>J^NnVuY44o( zF|?)cN&dHXcU@Da1>&Ln-Kh)ChE1|hHVm|w9{gh8>7)lcc&6XXyRjfXuh*96ao)$g z0RHyW6KBdyd{pKgqpMG|`)_TXvoJ`jynfciVLNj%}k{6~)&3pg6_}oja zA5hb6uqufJBca}8hW#vdw~6VGpr(er#hNlR$Slos!I^{WD!964>ZAAYDlFZAX2 znt1t{|2}^AF}cfd`hr!cirX=xRrkMLh&eN%J2NiAu=JzS*OIz9_9zLxeVG4G-^6IApQz!aK6x7#1z z?;oG&W_f70+p}1q`ki~O>a=fA-jkhluk^--D*a>bNBa#giMmBxJ+j7YlfHWUjdT0k zwSCV_Re5*m#uiI4kxAU8u2m@^3OowmuX10=oO-h+R!~y%>9SAfuKt*Qx}(o_x5Dzx zcN!~~q(pzq|0h#4V_EJ0lDz8A@AKML>K#9?IlJ+C+CI&f(*kev$G`Lb9{KA;Psk>{ z#anK(?$ypwJW~_uq`$b}#@4;swka>WZmvy9c$fJ~_l))wvqdIm2c}FpBirlGHM=O$ zR65P8EbZgPYez+jT7FzI3frjtNHaO})0yY93x8k!_EtvdMaay>H$)?+1UfzQDLOZ2 zqrT*<8=@O02RaCO%49#-w8EK{(~M!N%^9D*PF|CpPowYW7>DdX_2KY3jyXM(YG2y! z>2EGB{P=GAUUOl--Aa{4Ubn3;J@I9KYnH8@_GQxKotNV3u4pG#tWUb9T{u(w;aB&) zliK*TpB*OzEn;pq=F`~8>{#W%Dma`eo$UE+{U2E36nq4QlUE4w?G+)e0+ai?n zQ}UaLK(boJsWODb8^g!vvW?ZVY{5X#BJ+B&%CR8&ki$A zTle{s!(XQT$uHbg8z*UpwySey%>Kpt?%0Q3uSqK6UhgjdvG`x&&UyIfykD%-j#cz| zDXEHQ{rgZbp|RF*$>K>qCztl@7yO@@vqtDoccbi77azSXV%(kYL>`9wtq$FP;FQF> zK+iW%oXmB8`WVJn{hd_f6Z~%Rqz@-s!?xuFI&+6c9qwAyW?a0p&G}lAjfd*VDcri{ ztVdjz%Rk=pO-#gH!|49h6{nu2|E~H}eKG!{^6X7wkDXWTs$C%Z!K-wcOO{t>i0Sv8 z4k9J*zxC%YzWs-5&l0Q8N~TX;SIw%v_ki!A<&g#UN_8L2W$hNd5L|SoKYMSuiCpg* zY;bvPn~;5!+3>RK&oAAF+b1Be}6pl6BB28t<;9cp{`r-6Nr0@oGE z@RgeDf=u=MwItn_Ii7duudF!y_u}&6opbZzx8G!7cKX2%aq zU-k06#HI5;8$4@Uwi+H;n)RkREmE#(eSd*z+n$iK8y;uJti1Muji-L4nTFqN{*zZt zNRFIIYfmJVwvw-%onAb=R@kX=}VyPtJBc)GGdZ zV$QqS7OiLRoMfK%d}B(lz%h;)UYjiTu4MFTv9R0?Q^D`01N2H(PJ) za5{it*(8H=7c%$V(Q1i*Y-F}T~3wm;~FP3qzo*)#0UPYmh{$(FbK=C!F!rPlWF;pg)%$N#p| zjNW>ZRp!NNDfw$Z{TOw*5*GSxa*?+=xT;a)Nu-~DK z*nJV)nNtq_+UC+DCik#TQf>Od6YgG2?(+7>S1qlYa-eDTs`<5Dp`2#Z4_J73nexw9 zlyC7$SDw8m${x*Ezq!!>g2E zy6(14Wp3gU8#53%F;9cp7F7-EY5yDwQb^~2~%Eu-(D7QzPGmF zsIk(dptAbp=Vp!Pjm0Jf_1D(fHMNIxl&6cREPc0gxA2m`zZlX%oMpcsZ3&lu@VcjI z$*$x3_GJqEuw<5B`EJAZxu0)0Hygj3_^PjZcI20I3-f0AmFsTZKDEgF@McL?&(g2= z+|I3KoS(*_a@BPA@vKLzhgM7e_bC0or>d}P;@9jSriT?)`q^GzpBTB2CBkg6;>vZ^ zW=c!^o_Jdv+AS&QSz6_9d{O@khje;^%GH_ai_@}p2QaOf(>N*Qy8ZLGjGX~YZ{|## z9J0Os$i8>0+$*e-HCE-((`}wT-#UNvfH?C(yL|5YtsJ;$~^qg zvuw$i(~}#kzVfQ9pRW<*`SNh_{R6k``=wMbxLep+PKvB$R1+^qc<2@G¬j@ry=- zt6r@Acg81nS)0us8*2VNQc-KW_@rjET31%kuQ&yV^5u4OgLnB%xwGWUUXKkOI$w-u z1h8>u?7DrwUCjExPu=G&2Es>eG}nHw&szO^*XQCVEr!CacAB|z+pgZdH*4}qpD7$m zOa8x@d!L`v^7-bj-h3GXVE}v3)GrQtwK4W0x$K_Kj-}Gi5)n^QBbX+;b((bpa&S9t44F?{C zoC-N#$G%!fKwM(C*UY=d%oqIy#U;*p%~XHRzKG=r+p(QN&tBfxAZOHCBp@&G&1>fJ z$Ic67j&Qgg3|dy5wQ()dW$#LoL)4&cEkFD^@k-+Y+jMN`uJHT^T;43`Sqs{O<7yMz3Yw6 zhLWQ?cg=Q7yOxRm*qKz9cl&PcBx|miJ;{1`SLbbfvG*O5{`(ozZ^vG4v7WoEb#eBy z7h&(e-z&YI`S8sw%iX5_+a|wo(48|c@cfjw^K;ZL_D0RHeY{XJdw$N+D>I`cY#%Sy zw6;k+-o5eJqL~T5cqS}+^P@#m-!nQxBf?&Jxu&&k;@Q^|ow%Q;YnYnud9!U%k+UL) z!M<5ie7kv9-tp;R>Djfc?QveTP;ZOH0fn5b74!bQIOW@V;s8T#){6OmzMSH1(>VAb zH!EY_9|qUWiXjFiv!!meD;F1UY*h^JZa7$xn-y@rGyT8AoP-5trX{<#xX$pFZ2869 zx@o1O{o*;&DyagWE^WE=?4!+zyRW$fKCABjTo$*%+Bxxfj70Lrl?&^)Z4gi{imceg z)w*$p`HjD=H&0uBFq<_c;{^9+2XmWyIVXBArC7E_1Rvg!{9dVJt3a}0PDPE5NbibG za;i&v^>>>|H^;DBicLFq_;6-np4Hr^8mzfC?;`y8lh~4U?)6-CHZ+Ny|5f99&YJSK z6|9!rmSVog(!$qwFVoJlc9_>XVdLGs&D+-fnz2<=G&f}Ty{av)7v0rQY;G_t+ua|% z)+&en`O-HgCq?HqUVRr+y>G$wk`0lkd?sf++%C!W;M~q1R(tiXJXkzsh8pAHfX@zW z^VQgk3cOBvO`h^lLtL-?+|}KBEDtA4nXKk{*w~`_Zq^1jFZam?4_6rfw4Qsr>Y%Kq zYVKj-IGY!Dio9KaC@)>=xvU^$kCoMZ_k~>r9$dbYLms|7y?N6nCZCB)mzM>}afd1Y zNIG9rsHM7bK`vYJmNOE|gZQ{V1ts=OlU)3S^LX!x()eb^sI-Pj5_>An2}u>91&$4ewU)=s_=tvIzg&x`5FR<>oO3Q-c<*)``bmC#r_S?6|BNYA|! zq7C+enaz``!h*i~cush?*+hAH>7=C7OQsjE`0Cs`NyqEbnkCQXPibkFDhlkGdCgO0 zod#Ew@)nWHLH%33bd4OVQZC)Sd}*neXJkj!tw7WEgrBb`9{%4KG9;Pdv9&_}K}~$ce&s7v>e~n=W}?Gvji*`>eD4 z?_NyEKfUU@M&q~T3p;xGrpD>yTh4QisPy9O-lOu?U3vPM?x@HOXPe&4N>*RF$J=qf z{l`5KwH048>{n>7m~7~%?zz{ybXQfA(5@J!-S=*IHof20awti_>w?C?4MKf;TE4#O z$&jDC_2$uI?*g8r0lIHX|87+5YOV^gnM?((qn&7*{HH8$>xPRa*( zZtgwkC)C{iRoCM%_sypV*PY=JyYx_=Nq_Onhh1;ZC6uoz4=G>CS)VeUWw(*gjHH0s za%m^mv6dZQ6nXDrOYx@ehP#2b>(U?k9(2C>cmKN^w(H)8-8|%bbMO9lE94(f3!k;& z>c1<)BnHKy0b>FwbT<%jJqRZB<*M8i1{ZzOA!9!U$ zUH84Suv_;g$Y|%9Md9CfC0|UvYjOJN1-YhcyRu30P>D=b&zJs$LZZoRWX0@F_97yine{l;v|u(UeKwEF7&|r|2ZIo7L`K z_TBj5_cg}e9Umqsy)_NmC%4}5_oiq3TVveK3is+geN#B8DAhvn@`Ou$y0xL(EIFFz3@wG7M^4?5K`WAbx%X*WATgy_fkr&=1-1zxOCU{ z_J7%1*}^oIxGLrZ1pC&QJATn;H8q>FGXC9~E!;cxPG8KNzl4|FWA5n{kL>48@LK9A zS+|Evdbh{9f}n}lCKdg$(6xFzx#Xei`GuQoQ*H*hHnoY*opb6C$4ixfOKskJk7`>T z`E+#t3eH_0+^m$RJb9QDf1l&9^2;LuMIF<*En_5}c|LESj8(CG3!^#>%LLuKB2j!yeRptq~GnH4MA-c zFIDEx(2raiW3_Sq0pFK@*5BNrDXjZdYKPWbHnXgJ#-nyD)k`lsdYY8!{YsWxqZXk# z_rK|{i`qIZ>lNm`x%z2lLb6<^xRR5Az0;g)d+w|6>q~ard+Jrms~b0J-v$M&UwH0N ztBZ<$yX5!iy(b@)c-`#jKN7imyFhy2l9}H+#c#Q$mLAJ_d22dI@%sh$CZ?)*Ca7)H zPu2PqBs|&b)5aTKr&HDn)u?8LmQ2|)>6N0X!OBI7%OC4i@@qcTDhg7a;x#4fT}n@s z2k(SeGefG^hb7f(r|K3p=|=PCT;03N^B`x_EY7kTmY(v08NXao%aVASFXgT{^G~7A zTKfC++tYT{+Plc^P;Z`FA}#RQ>$yZ}!W5p&OSvCTzy5W`>4S@#-b=HNCsPANOCQwr z_+QH1apE=CS*HRkHszOQe;$`|pLHrQJtp(gY) zB3<@zm)mB6IbDg4yLcB=+;!V5kki#@zl*muV#~!fEYp*6`tzKnH7wmpHGO%`f?~FrVNK?SEbiMG*-o!B@jf_JB5m>Q1C8N9z85SHOptJ29Q>U( zQ>;nZFvxBBJL^k2EZ#{vJ$|+umPB&SJCY$jch`H*%>q814|S|e@4RQ+98|QlF-hCX z)b0i2<`8bpsFl0-g`9WN;x-g;y}tL(_Q{ben}s%?dRK7YKTUP+REfAnulx9UQl}YB zNXokz`dv0P?A5{}Z#J!#k2s~1x>+RItt9sIf#9^2j6r7%cYm9>@=R3nwIrL4b-S|z za<9x>a9C&a?$>_p8dD0k`*kqN?RvM)RyKVhbIXkQvS)SLXT6TEIdX$Hw*311Rgo*2 z1d7j`yZ7F2a}cj;+RVGm^|Piv@b5Wzp|t-`=Cmez!v{{+?|xq%$?@-q0QcOw2mYId z{&W_KSk+cM(Aq4*({)kEs&>zNEs*F$L91BXf~k>QY)2V5=B|_9aY~1^IcZL_pLu^w z>a`|k!!?e}-&=(kb03`d;$wPk{hujQ5(0YsF1&pAFGE!;v_OMR>BW{hgP5619|ZQ8 zU&t)3-(#eGaIr+_g3I5J2Sjq|9hG33yN&;t-DZ)TE=MLSTN|lAXQB+W+8AGasi^;A ztbK6#jokl!{`_tBn?>ey-F^H1%<1Nj=XF?DCx!pC{(NH9q_9t`CdS=+e};LzR}fp! zmZ<(STA5!XyYC)-e@1z`SCm-P85h;6l8t_1sh|Da{^-A7eo*zC$nnc-PkWSgW?OQ) zy*izer=7TDf9SKC?}x=LpDEq+{d;c3Ue{x;$J_fY7y3NAx9qq0sUyj1F)Otv-TnDq zW!;y+iC=ySZMh!!}|kYJaUwta?)v<B0`KW@Bi5Hd4G(}ic_w}YaFldw}~vN zF{#nI9b`S_6w|VlMep+B!ql837AuqpP558?seMiZQ`ufAXFcP(4cO7iW(*SqV5 zj+?ofam?jmzxegneB0-XOpf>+>v~c3S-*#O+xbq0Qxd{+m+aCrkF3u=a$TY6lJnI` zUw&1$>dA>PPT8ontL{eZvweo~%^asX#O6LZ^e=8W^-}O-b_8PRX});m5(;pjal_pjARytiw|NeAhn=Q^E>7we{+P|9X}DZOOaozb5D282~ep$ z_pW^YWRtvS_x3my>Ut>})zlzBBo6lpWl$}``c&hX5e3Ki;&qgf_F>~4Q z%{+JR)X3*Xnp{Wu_Wxb7KpM%!y8$eR@fai1lAkSS}BckrwCC|9@;p z!tW)rU1^7#7fRSL?q>5-l{>}to$b^FgZM?~RLyca45k>QX|TDz*SfI4!OTuV>s!a7 z7qP70b{?44%hxu`W?{~qSk@?!6K!nHol~|6=wCRw=hK9#qSA~!M=$({kYWtj$e_`= zcea}1C61CV)?EuN9BVYz3Y@bNJEyYIeEzoS5*vPQS>UwiRm7f2E8^Bk@*mZ7Q9Zk8 zlFFx|vlSLziqA5{id8D6XCGTE$YpqR!wjXFyJL*sMQOP399C*$d0*r!YAPsLB_^m+ zU+$=slrMMezVYMfBKN9Secs)^{QH^9sy*N5z54U*;q7TZx21f#7d-dA{h6Ca#nTGz zRj(@MZ(!y>)2O=W`@C0o*b_E0Z@#&4r}WNk3J&YJC(F(}+4uHtMc}p8!+mEGk1slG zC)BpT?@YYvjBq~Du0yhSN|WA2E&F6A)OOVGOp@xd?{Vz~zkkGv%&Wb&t0rvAF7->Ph*ER5@kvXJ&7kxCYn6T-uAZYG z%O>W&78MnVTKm| z^VGf5B7a}Gc>A36UY8$VtIk|feP|v#>wcH4!m*qhqwkV0xF5&fy>MTQZE?sMjphFo z0}@thpLWx~{K4jEOvt3>i>EUpqr*1obC=yPte@JG_}l81{hs}E&Zf>ds2Rs)cEd1z zYQw{jNHtFRD`z5AQ!SD{o6GpFXA{42B=jqH{5}0k8hdrtT-al9^YGl&wX7^lr?)Cf z9Zl)~?k?QTxv=K_2RCD*uU$R2%!DH~`DVY7R*SRWVJ_LSU0z9N^LC$Il_mX?G7j72 z9^G==efqBsvo%+wmaUb$b5qA#ddI7RgiCifzs%lnZ+k>n_tS$F?R`_1|1YeJcxr5L zKQW2bZX(Z%i*CygYLw+fR{p*Gv~zuJqykU9Ohn_i_{!#|p9EQ!&6;Ze$2xyY3}Z{* z%5+hQ|5MFl-X&_D+ffp{g>l(^z5j*$?*r_r{~bQP|1#sAM*BKNtMC^EDWXp3+5IcR9D93>RL)fy9=>_v>V)KEj+2}G&cEc`W`B3j6RFuo`{v$$X?(@*PkV&R z*<;n^k6$Cp9e&&Dw(XHz~FOPoJl`>gz)4Dw}Z=#KVPdo6s|6}{kpGR$H&c5{eU>)z~ zc+TDTUfK3o+0MCPpg!%->s&+c{OtyJ=1Jzwtd_m5xbE58vPF`fHH-!i=1Fci5`Ug^ zpI_d}6i2=P(>xQ@!%xKr%FfG~sqQWC?ary+UmjkXw)4wI{q?urO>EDOes*h8&)oaz zuP*=pYZ{lo{4=}K)Yf4BGb>faZhP)XFrQmjbGG*Ep+@#+2ZUPoip+eue){*<+q(-D zcJJJOFw_0nmPxI9gKDLHIch4GWF@XqHV)%Frl*y(Av1BQ@aCY-llSa?6-cI+Zz#CZ zX_-}8<_Ov{&&x@^E11>r){;}&#sp?JHqqb z@g9k_rxjkmJ{!~I#LfEbSg54v43Utq1e1)|sX;$~@=3E;aTt_O?Ra&2b@|KFU(5FG zVdtG|D)AuFTV?BOw};Ew>{GvKoV@((71ON;)?bcWK4Hue{&!-vf%ue`mx*^y-OxE~ za5lP&jDg-?aGr{Q1vcYijpIHcp&b8ha+VNc#S<^VdJS*G%Iy zI&=U7;;u~+zH2RX=jSu^0!PMg2P95MDJ@(muvYEN;wFhVO@&jpvN(Eg zjL`nU_E;m^vu>Wd*2Cu?c-y?MO?p2kM|HrM^v?~Yk%AHnsFTrmQatpzU)P|6UV(nKTbp`&AH3-=Wo%x`(`z* z4<~G8F^fNDpjs+C_w(5wJ{*^C|9oV)d-3hRY*%*J9;lFzh`es{@pziXGnR*rJ(Jd) ze)H_pgL9gP`Xp2$r{6rgrprLx&Ewix?@E!tNzK8AGMn=FO!@;n1(zLtaeSBMCK)T% zgUWBZFZO+HyYZ*p|MZ*ZrxMGqS*!Ehewu0tJL zm#EI}w~srVAN^=O^fc+T#Ic~x>?c!aq?^s2Ieq6DSu>uj zrh}@hCJHA#h}WHYbn?y^|NEe1_&NH*h6@R5nir3(+g>I7|8W@?7qiF=ZLdEYx*6Vo z?z(-|xAR^ScYoxHv@{LR!}Aw!eEg|UEyLjdM{D|90+qq$05>+&gW9{2!LvzAU2ulhgEt zME2Y_+Pw5BvD}%V(TiE@`Rf@ z@g07f#mVqb!ahI#;^XWiQpavw75e@A=eJVsiObqb4c4ujwj#dR^5{f&-optRvAQq! znSU;wDK9N|@Wak1rP}(Q_j<0;KTK;H1&g;H`4ROw@%eRL{e(F&x)=B6C+8T}{O;*l zt-9*_`O8n;{}|epyB)qd>HP1qSNaF%XV*O9X;`f~`TMJ|HTM1+4@%cO?x|j_+VwrF zZcd(Fk9y~q-s>V2t5ut?&pLnlr2ZWCMrD=^*(bZYzV8ZY)cQZ~V(wOzcXjjbJW&3( z>)864r&kntHHUA1^7CzfWuX?M=p4SsH($MLeZ8agt)ZDaw_=+0-A3-%bI%Qweg818 zKg_ejx=40<|I@F3B&Y0Jb0lEfuGQ~ME*_tAYoG51ru9c^R<7Q8Y57md+b2?F-8Np0 zHMDK4$h0k)5nZZ#{h;^e$d16A(&ak>>N1&2X0(>dUXR?f#ZcR@W9_>ybJY%c&t7ok z&RXLb&AnSn{@#0Su=sUXW%ZCai4u+Lad-G^#>(n*O_Y;3a-R1rM zsX0y6Lg4ZBSL=4nOS-?W>coLAi9KQEuG&JpEZRv=qV^tr`Ri2&Ta&P1-r8&J)+=Kc zvgjw>h+2C(ZcCPegrM`atk~S?a_jYO?O1H-$i#QVV`~&s$>klt9@lU$UM=?Su)@}; zNyX2Fc_NvP9e%N;iusIeueIKukS>3g*NGKTdmW#-t$h7*{cPh6OJ^N&KgF>%Dyg`B zmu{qaY3cG=y3?#h_64!6xH@T;^{hz(cEN4SuTGlz`)lDR@6~y_UyW|Xo1OV-us!TY zjO5ZV@3M7Q3f1lJbpDB-|M+{ew59ZZMXBuW{277STenqj?a$7wx!#k!S~Yfhc6fGf z&1;^V)vCGEv#)38*8J@$S*=<>J=;9{Z3-u^>isOvCr@v^jf!@jeKlIBYUj47?AdG1 zUf2;ORNZ~c-mU!Cla#w>u18)uxySXZ+^aJ?eG53VkX zM)oYs+p6-b&Pu(E|L3>Y*3)GbPs_wPRnKj@om%cU>J#M`=@u@eQ46wsx@EWl%~ukrpG66H?CQ z$UQr{`>##)%@3^QA57bvum0seZzCsqx$W|%RR*SRHdp^XoVa0qmKeY2wHFV2vR3_m zB#>WaoM^P{;$g`ZA>UmupW=G)u*YhZYGmogrvH^))jOr`&Y9@4Rb|<(RF(24)_L36Mn3B=LFhqT{3gm-l>_NUVlH9yLQLx)Xa(Qiw_&OEuS{w z(rW9~a_%iswX+K?wm#|oCA;Wf%Hi`DCrSnedpEogIoH${zj(Wm*|KQ@7vz&|@|OrE zNj?hlo|c|>C|q3d*>iWD)GJ=PALl$PtBc>U-|a?*Q?8~=*l>W5qxqshpqg2N< z9^I9yHlP2Le%@KaUMS$L>|~U(WLnCZ3jO=5WB*zznY;biXyNw4L{L*wD9HPh>cyUR z+5WYSiw&MEo|fWW-eQwuwUi<6fo9K>6{;&gUA3KTJ@ao_aeJr&OLk&{o9@rahkvgA zt}L=qb5g#_Hj(WsRAY@i*S2PHT(sKyNvcI!?N{=b72!KJZoQPdN$;^r*2(5GUY`=9 zGYrkAEI6(paL8wm4zuCZqZ0Q6yc-_7>DcG3+$PJF;Fl@+uPZz{J(NxRiqPpDJM52? z@|Mip>hQ;7bzEV^mutaCcjJIAMkF*S5FUwf+nAB zH%xQ-wdIJwt?i=DMj^_Oz)tv)k-Z&cT{%aeqD7}lNry~OrU z&&AJMT>kB}-7XPZT_N%Kai-_j-z9sG9Em@?Qi93fyI{UGlk~T{RTjd|cQZYo{l2`m zq_uXtoZpcdWl@{H-$|VJ)1{h!cH$Q+TaoZ9f3NN9o{_(NhwHt=krJEyytmBrUt8Q2 zAI8s|SYoBCSrxwh?ye~fg$5FHr(M|d|DRRujrIKnuhzCl8@!n_tzpmW7kSNdlJef~ zm~-o}l0=%Hx5~Y*IcwXe%-H@z@Q|EDu%Gw8*!*?L|7?32FFxL)a(Ah>Zhgp6Rw!sPFo+;;_-^@*u(b=SosqdnCo6F`S-=&e&4)5mfK2fj~w!sxbBk7Zq+r1t#$zJzTX?Gom$ zXVvTi37EeY<(0vrDBZo|+V}C(!$))WbNv0g{HLh@ncww0V(%om z#-vI{X&5`t>3Ys~$4f4}Ro5_J*1WFkCht}qS}q~z>)#fa{^9*4`QRRNPqrH(&hs)) z7DdO{2qb;bV6(kE>8e@Gp~Uj-NmHMvGOy`uJh$b@hNIlab|^H=o-k2N)IFLxrpxKP z%2ZvO<)6#<@9UVyv3Su8DsFyNEIF=!P^mryFYK37^hS&Cjrwk6YWidw=@z z^Y3g9T#|TjX3rG;S+V;TZSE~FYcn*~pUrD-{@5Ga7b9P;mn>XCl1_?_uWx1AHLOhFe#)7=pVt#CmXx8Xd^7s}v*Mq& z?ba986sB~TXNw2%&A`2Lih2#s=CvEU@r$~U|GY*EojxU zR9~$>^CDL)@%lN}PF^AI{Km^ZrPmTTRFypgE?0Cq7G!-$PU{!?T4K7~{J1Hvv`Fym z`tuT=Zl7i+`Fws`z-W2IQ`5sxe9Dt$ujQBTU@$NJVOVT+GRx{`=vn(`PbYh(GqPD5 z37vn^=NWVUv+Rs5Y(|nV44fy&EW2I9p3_umpfz#gfu;Xv_}gzN-}&oK=-#7EuUNDb ze<&(fdd*w;^vn@n_PMtIE&p*%=U>PXpSVX+d8X&(>AQWu{`@M}_t?)shxk zq1Qf_8JHXllE^qA!=JOfwrs`GZ%!&lRBj!9`bBbrM!VqN*^V7&+Imd>S)5JYb&%J4 zj=8#Warn%?f?mQ)FW#1%a6)Fa`qJMTz4?tBJI}Dq{o--UEwe_o$2~>G?d8HR0!u$W zG%%Pr(Pe4-rO(+%%8yQPaSNIv=j9(LHDB_vpk!xomBwFXugBHN8cNEJUi?er7n|&J zX;U-ei~}=lNgVL;sK+v&hWFwL!o7HF^aZ7mLh%{9(zL=qbkp z8XtC@DXaUI{N1}?={3P9oxYHx ztG%?RYOOZ-FnQval_$z|uB>Pi>lQ5i_~?lj>#u>b~~7GE71_8qG5UDh+ji)n+1TZYjjg{}WG_zi^IQjCNoLx26? z-yp=6WHd?i>%XVpT|? zgseI1#cFrRz{kyL;U~=}qR(z*s`?v>oJ>)X(7NWq^;KZe)S#l{cN!<9KeB1b5liY& zQ&tSz=$5*ZvFOalS-dBXTAp=EIwQn$Ek(uTl=|etw8`fZJ&tmAo%yfguC?EB;naz# zZAG(tTs-&w=6$Ojm6;=^bcRXQRqI`S&8*qdnyy^_A2xG1av#??*0a=L%CnSN9~*P- zShudSa+RyUlVs%aZbOqp1*YDe0;cg^Cg(Husb zbGwgUY05dX$Y6=Kkk;W_Jgm+$jn=Hvx$f8(IaeiYr}f|I_K)-?ojPOYJTYL|-8*cb zJkpBTU1SsY_3);utkaTRE$CGc-_~g)6ux!KY0RYs;mVa|+?OM9L~*Uqz3TB_R_QsCb<(`ZtmDwE5!rtOB$ret>i z{5efNiM2TSh34Y8it>oegO?>bPkC@%lPIpslU>v_)6i(@M4vT+AI_hBy*eSWCp1+> zEqm?u+L;E1Y#WS(<~^0*ThsKxfNhJ>s-5AE<;QXnoUr!;)ze@2sn4wAsv2ed?l-(9^Ad z3f^V$UszW9)_eWyb+2ZGN>-fq_!RzP-QwHjHK+AY$m@9hp8UK!-i7;-@R6Cts~6Tt zOK8nZyb-K5Juta)eaXV22Cm|)lN_^uS5}1xGKal#Ut!EW{mBNAuIaJ~e^Zy{%~$NO zZ7rAV6xQDVD<}N4-2}x>Th%H_Psz{e*Y1XWk^lH|w$6coIJZMb^E928d+#s)t0Op7M$xUaprW+hoqV>a}B#8 zMt1MbzN~)7e)nX@y7c;$_nqfgZcpjgU3~alP{NEJ<}{V*I_ExI^77}6PGK>){I#6j z|L3els~)!TFs1Esf0^s@_dz2MN1DpQoSo++ZU^*yyJRVJ^?F#&fHV~=-DfFh%(p&2I)`oDDS=eCNtd6^J|(Sbq18M^GB(EYj>bW2$vJ0UEGqvs zThH!l_#Ts|LI3wiU+=ET>iqP(t=1@L=ERt-p^p9D4SS8^W?noRn0`d|O}$8je)Dw6 z-1j11cCc6&I?s@d-E&D$zwJ%-2A>mKMAFi}obbB&TW99{OwDU&JY;4kH~p7noBDY7 z{v+@DH`MQI`+Iil7ejC3RWl9scia7#n!_3?=Iv9+Bi%Ud`_b%<%@s*q-E+9p(gd}oZu@EaepmJu>Bn;=gTFkHII)TER$t)x9!;xF zhu!C_JKfA6*_NXD@63!%&v$V?$!1AeG}q)x#0mq~dfjciPG<3Rr}&$QS8D{0~25&aETjuPXWOmv}XO^LBJI{5oeYOhDHhug#>CIPBUjnnaik+_nf|QD#;pnphWBP^Hs9~c>TvAYpQgg1 zH(|xT-M4m0`bubvWxbMDc%dv|Xf%6b$&MxW=jZqFeA~ehq0PK)=Dxd^6(R+vol?kK z7H)Im?8o|vY`>cKc+b!~ym#il>WBb8wzFN0>c)C=CI(p9U*3K9wS__Yv2Nqqi*sc6 zoY`fqeE&N4`J+Y&H+j_3e+6~jHMl4jZdta}bR~;zjIXS!D}ARbh8$l?IGpW%XlPgoUhERQ(F9bOU;K`f5(CvwspqaUi|1T z?TTeR_($^YIgc0flxw5&&-mK~_d6W;QSNr=$DQqeo=NMgs07RmHVt?)ccR9=kelka zRX?v`<2q(M%|LmY_{Z*Bq1Vz1Y?8gznfLiG-f6i;g|kVr#WWyb-bU5)@h_&abxKY& z4M>}}@zuV(jr(*}!!9#?T48FnV)KWTvvOaPX1`c-PNVAB zx9Th1y2%U9J(|2Vw1?tWvqrH-5GJ%{GtUNuFdbng6~2){=QeZ5tUB_qTj|q| zm#kL`*oCclH%2~iQ{_ttdDZ3FJa@O{lS$D_f0Vdu9Gf6j^Kr(9g+gKmuTEY3_@~AD zV1!FR%l9cBje!#z1Am`!J+SsMhbZTz4fBN@4ZOa85?J}!bN_%G7xZEZ_^gF8ZQmx}qtk;Z#8dlQ|TIcgMq#Zsk{j5Z6T96W- z+sc>wLL8>8W}Fwq#Lu?$<5M|r-DP(C&jtSI7=Ag#crB<&!0l@Dkrn(uojIip`X=t2 z>!P%)+M+J^y8Oful>}Hk+fq!)Fx%%HhachPoJb3uZ5Fk@^v0@F7BK3g;|`l#fM!oO4jp< zVc*%O#Z~ux9$2j8`6JaGb4X*6x02%fvT24B60d0|b}nrF+;yaA@++&y0ika7y{=k` zQ{KKm^-L-+!F{zVw{Szf=4FT{qH+-S?>aOvU<*9ELro zo~rbGj=EsF;`~1emHx<0iE7re<=&5)oMbZZDIE+Yw$h9ZJrh`Rw6G?r+)q-@iO^ro|ys zTdnHO$7R=7b`0{4i|V z1?TLPDE4by(x$VoYKi5kTraxJ`e$Kt>k|e~v0Rl`MZbTwKAT~hEtaG5rO5C^FTbve zy2mCDWy=|-`ByKQc~T%)&{xv5{AOw7KZZ)NWWGB~!>`rsKFiMC{6X-L&KZv-&vw1H zp7-|8)U-uMLY73i>DK<&j$LszAbH}Wgl{&R?pH6+t8O^0^=wo7znw`HKdcXwi++yf zd{ZNlTYJz^=G|?>@3uVq70*fY@4I6dKkd$Wb+0{_`!?j9)ro%Ocyz+I>O8ZEEoox9 zo(ngzJMhS@o$2l!mSMTUNysgCMqvJq1y2`n`C4pE^wVuzP~`Q%{_4}xmId6~-_4B9 z&sgv&TZ`-P=IUoRk3Xwxz1*=V;(#FNyb1Z+?56wUnQZPD@lQ{?a&Fxz8{luQ= zNA{`0T&_PppZF6QWS{z)({;wDBR-Lb?9AW3h!1+$(qwn2Uj5mAq3=60gKlk1>z9q| zdT~a>&Nd_V)?S_?k!Mvu6<@xPA*OgQ{UdWXpY)68Rl&k5bGT-ASveZlFzTdue0i?M z>#mo$d;Th6x5MHG4t20J9((ipe`$NId-vS4zsC9dp;u;v!lW}7 z<}Q75(p_V@tEG;OXVZ!tC7*56k3K2%&~SU26eYG!`_xz9>hrmBu?OFoZvMS%U$OO_RK>5m-T&o8 zY)n4z#?<)tF3p$isTZf(Wd4-O%b#)ETjf<$mftDWZP!Y8r<?18=9zUYGdRc5_*0*wo33QUzP*TErfHQl0kcD_ciI(Clt4TXvm$ zM&0Yn*B)&7-LZG^3%A&aU8&RJZvTE8JgK#n|IDG+4=<{GzZyHCxbppft}cVujWbJa zFTHKqnq(t9%TjVzTYCSQ&Dopw#NKncF@@o?+{{XEft(fl>{Z_S&pC3OqrTPIdHu6b zm3-|?rM%+vXLOshFO$6@_G;alrDl6-lH&9lH~J}REbWz9F8_}&Rd4IVXTrtBo&CPI z9Jw!TT(Pvw=(Drn6REAQYv1Zdr8F6>E#17{)$FR@A7S;n1VfKc=|5LbkyZWZzsIWE zLCDKnDrVnl7l*=2?qZcvyD}}gm!9$6cy{Btxf&XAb6n@Q<%in^t>0XA^w5MSH<$I- zYum~PHCHj0iZ!U*7F&E>_LuIL$Pbxs{iZDd`iNCtTTQbM^Uj>s_6@9zBT`n{w-L@!qABm;_jQB|MoAHQJc#t*e;YxdWk`~Fm7$DOW)1xHxVK59Dh$1Y<}9na+t?0;=U`Zgp+ z+{idvJU_kWOS`RxNdJzch?vaZ>i6IL`NF^dPyi!~++imF?E1%N?K74Hm@NuAzi84C z5&J(M=4aNptexk&w(QT`^7{R)PB%HSrm>oKy41b#^sg!DsG8<#`}LD`e9ewGPtKLJ z1PT0M6Z>=J;Yo9uWy=@IupDe;bu9g})_kWH+s1;FjRB$O_iefKSwW>wM`hKoa-G8Y znhFVhItgC;KF5XMdU%rSVoB1)5K(>c+XeU+#O?5iYR&>b{q^_RyTi^+e>tT|r~6b^ML|YN z+>%pASs(Hp(z)f8vBlf-aYE+w)T!OJF6l43Sc5$$^?k2;-zn9xiR0$pH`yIEoe`_; zR$tTk=2=j(&*e<~tX8e=jM#@WmisHWEl$lkp~c%B5qt7c>lqG7u?f3+8@YQmv$yEn zDq$6mTV0|bkhst#Xwmb@GgoI{JN%=ps(kvwL*aL26;3g=EOGn)cBXdmw_WE8Bty$L z_#D*1m0iF2=<13E-xctYPXtvG^)!HhIVMIX*#iXQs^&k*MLf-E45OWS-}?il8159b^KkMetjgvLQUAGkJ-1;Z&s=it_XuWKJ zQSFO|_cbh=S)Mf=kNMDeRMB(tzvcaN?ALInZcb2@y!`*e!r+UYA9p2Z}(;Xt}%zzj&p6?zJCTsZT8l;1^YeR;>DjGe&&|y z4y&zaUpZX+?qW0jPTt+ahebaZY(9BFZ`n1A1(y!bw0?GGQqo?(eKQQ->}tPUb|zDG zn^mUc(L*NIX|rrkI&O`!-uS`itWEHz6_YO%@v3GVG&C*t;hY~=I(2F6uC*!UHloRb z+}BOcn5vdkX};@I%3XgWZu`*#F1*Hpo{Rk^=vA8i`DLbW6CIIpUMECp#pD;yJgh?! z7u#+Q^qlLrs(X*mtwT<_n*&bH^0WG+F}<}nDs8cl`rNIbuG~Cit6S{v+5PSP_2$)^ z0zM>izm}O%>g86#rkci-(AO%KW?^7F#p1=*J4O3a6I+yxoje=98UIjS6&M|H_rw~% zL-VeO?%FlaV5jQ-+chA}Hp%_&;;Q|F5~-4=CE?SDtV%Js_l> z);a0Xo~Z8GrPuofr%ZOg<|`Nf8e;NWT2(%0bjI~1{0c5&8R@u1r{(_3X%`rEhk( z%-_1E)s4eYdfJUAUw+Sck|%Ry?b|O?eFM_2<@^>B|NdKI8;|%F>$w#Lerpon>2RL( z&YGcqbKYT*lC+;}fi-J+KWB8hm%TsSo4Rh@<(VJ++-v6P7N_k#dFhX-@40y~pAJ7f z-FEOuhyJG2dpawRug(pu|NZgoktc_{PoC;nKgF=My3?j^iFN;^Lt)8%<;r$(Zqn~m zS#MUpaDQWzm*YC0VZH$~&-Y1PZ|?j^iFaOfC4pIaU;HugcdA@BAMd(<{;>XZzgH>E z9_)f?6_ZNdgzN2l&e~gQplk79MX_Ly{T=?Z|CGF@Sx8Mes8g8nUX^(cyS2UjhVSOz zBBvyF{$7|d!FY>d#{oIX&K=XwJV{-3F6rol$vlpCyyHI2S=W+%$Vjqj$MhplF8=-T zDDds{+$t~ILzo@~|96HT1c z<8#M5rf6Z`i~yev0c@)8R84jU9BozDGg+{!`lR2tDHq@8t-kh0>T&QPG0Dk0rY}i3 z$rvy9e8z(|9*;ZTSw)v7o}MNgGjU+$UMllk5&Cof z@3fEY)t>Hk{rgQhKR&NNJttIYqW!+vr`PXkc>H`@cU^|ine&=PzY6p-Ph=l0xSXq6 z*`l&J)YCQ2``F0?UYncLio-ZP`)0+<*G)B;&lCM-&Fq#Z#fy4;?|7#eiO>Dr<|$ye z{*+9Z(v-!oY|eelH6 zo8+ANzE4`P=Sp$!&PmOM2A2x-Jx_k@ z=5HP+d9LpMaCA{ZagWWN{1YcOt>~X1dURiHt8Lu=x_M6@mWw#)M4o)1ym3|9IrUwC z;`j@!xs;|INSSX}u!m*(Y1cI-iRC@cIjRPge>+9=tIt1CD{lC0sIYPBn+dylH4pxTKOhr^U6U++?EW6`uwJj@&I=@I9h$dN6y@m#0jvJF#R zQXRs6Rb!t$)Ph&277N zuLf65<+L~7BJwR;bxVczugYH~@+B9n9s0vA*<9H@=YR9NX&%LXlP}h;Wf6MLaJT!#q)~gdUK<_neMy`S8P&h{vFjRJ8k_bS)c8Bi%LE-FI#Za@v_m`!?9;ArpM=; zoxw9RTl3y^FD}DPt;<7G%$1_|$TE9AyFJNCNA>#p<>#Av-e#*dMQ}ZfeehZLjJA>E zx}^^B+LA|tjB~@)PclwAb4ayG;{EZrUP&*F*KeEA)0wS#`MTGK4_+l3Z|n@1yWo^g zY*73E61OMnBGWspqjfIN=6ZHgVqaKO`(d+V&u7nGe&^D`$#3g6u1r|mb3I$NWrmi1 za}=w7>Y6z1jfd-UBs6ngK777j%W1VzhepR?f5~ary-sZ?PAj)fy18P5Z`+Nnlhk6W zN-k~Gs?b>cE~=AH?bA`cu!F&p9oOYf7|Q-)GY?do!m>WKCQke3!6%+UOkOsuHq#5M z-cFqJZesf?AJ+A$1##MrhgRoTX5JBvnZ{W8cH-_eAAac4Mon#fR1LL7G~J!X@Lb%l!;pcv?dJf?UE*IghXnVQx3K3bE(h zS@EWQX1M8|gY(2q*Cwvx*_5ryQL**K)|e%$A1?1%pRLMlv97pr>h#~my!@#dvDzQ^ zb8kG_va~JHsBhiW8~5KD>#+y#ZA6Wfga&m@=>&%^Dm+HjN@Ah)cG?MlW zbXzyI{XkMl<(hq z^<%>_4Te&)fV4c_m3udy`+QOLz1U~T9bdoL1YZzQy?blbzTotr1Iu!CP9?6>o4MDR zq4476M~zz+n5WpbZQnZSg7xcM`}Wp19FfmnPt|%SEjsOK^CK45XCEdV-W_)4y;kx$ z5!P$ByxwOYuK4G~ch=~YPhiN}sSoZxmHJ;cXEtYgS5Ri|)#;+sS58xmaGW5ycgf3h zZ#84qH%>KrvS#Xmn1v#;>lw2zQ9l7oMUy+{-bJO@9eGd{+I#gcOa=eWH{F#W_tKzxGPwjeL5_!||{e7m! zWfP1YpWMm~-I{%MQ4=6MFWjbGCh>kjf=BS72|65M#~Zi# z-}oT7qe(sT)#^I0^{U5rJ~-5;^EK37^;+NON%p;wmOd*cF5UYoDZKaN%{33)r~Ozp ze^KW3mEFy)I+52__btwBKHl~2ms-32zc)()-v1)Z6bLM-qiOChU zR`$Am|F3hrw&{7gV%=Use$G=XndTP@G#h1y8rDmO9^|<8b^BWrW z$4!)q`%`AF*|kJ}ri?*Gk_(qYq+>^L%KZLMnnyf;*(_;O+wjW5?%T=O!x;rH-W1Qe z{2}!DpY?k#*Ej?@AC4%MQOSAJw-tm2<%BHrM zh!3m!ij&17{aCp7ZrBqVn>xEaD_HYgvSHQc*XNrjGaTM9CsbDbsGYn)^I;2}7oKim4fdpF;$#Eq-0{Muq=3?Dl=>iCC-KW%JoH7Zn;p3#xI>Xn6X+4~3Kw;N|g z)U4_|oG4u1vws(F%+a8r(mDLI|3zQm`E&GAK8oYc;VWk=D?~rm#x$7f z?BdGb&K8s&xp>ztpS`!U8LH9^7w>wtov&Wu*mIV;^qGrx*}awdDka{OuDEE|xoyVW z%imu)Hu<4n%kS?O%inEk{1n-@V%_JvdmOLD{HWcR6Tldev0~lPZ|`TZZ~6Qp`^h4X z4JHAx;=A`JiuPI^IOI?oyG-`eFV>9bN*68#1jL4)WZz$O>o$+>h5G^d|J$Z`+ijcr zds{@%igmN^#&5no`}j7NTS=*F^UBwqJ#^vAcD;Z1k8R_=Z`Lh(b?cq|S=wjw)aN}+ru0@U+dymvC>Ig0b%bR&ADRwBKZ3{+v%-+uPii5KPOygv&e0Bi`d)k9Q>WH zZtL7@+Ycvsmfl@oXCO19@a-G#hRDC&!6A}AUUF%iPpe#NbuNha=I>bd#f)KWk0Y+` zWt&&$^89v!=W;8)Sl*g_HgU{i+LeW$vJO;PZIQDGyDDX*ySeVT`}sFQqD`p_URlha zdR^ucTNX>V+tstbqK}mS-XgC0(WBGoKu}QW<(!9)HtQ%>Pn)`G{^sa#{tuOL(TASt zn1-6qPX7Dh=($HO2d?T^gdP`M&;9AkrYg?X)sY3O@-miv{Ze=JSTgVK)V{dM6HL1O zuNLlk{Yc~bi~^(6!B=}dZ9KxbR9nt4g_X|vy{q)W7TF&&kFI;Qyx_(|+pe>lK7{ki zrEOeo#n&twZ^y~Ukcr^DBZ z-#-p9?{A5Xe7CA^bE5s5T>+P8?v|H&ywl*)yr!r~w$**XN$>fsr{?Suv08GfD6Djj zZAC1>Gr9{qJ)yJG-&i9X#|M8{+A+pPlxVg*E?~mL(>Dhu;7XM7G9?Xbn^5_rD zm3w^o{5qRSs?%RttTDAZp`OC4qRmvum0dFBytTB){7)L0*H-i?hb?A~UA%4HsUr7M znR&a4+^(MxN(mEqlyhaO@NT!Td1stFww}3WKX*P~?U9Ux8BbF8?R%GLbx!bdCC_Pz ztA#4Bww!g^VRPlViIduL`&kb$U8xrE7QMRZ$?;}$uYa;V{y9@j5<*UAy}og6 zf#iZSUkZO^R?NxHUch+XcFxhhteZKqAI;(z&ilx_FY!BG_x7;SE~BSw6Me-DS1na( z-{;@%7`bajpK@T~lhr}j3^cqYt_FQ(j%z=(P$w(oxaNwFg?9V5T`AD$mb-fCjqEEf zaj{g-B~jmQyYE)A;%(g&5VY2>x_viWn`5NH%CMW?J{}A8cV4bj8*-d;)p_>cF0HYV ze^&G@4qhI*^6_%>;huG>IIbyygSbMXKXs^Q6!mL$0XKYXWc`V?3Q?1Fd15Fb(52m=wu`jEeWB)a~ zervYKomaxfET;86CQmbUYC~QxFU|Y(*KUc`&3`iMSA370(WN%=m4)KhzrXBcZhzq2 z&HBRhK>hFam%rCUulS$#zxdBX+oCYFcMN87XM}u9=WMRp?)}DYc>sg>P4(JI%NA)a zv+9c~mDuk4rRAgKtgdAFDkm+ryFF}ZTiid`Km=l^x@?xVWkrf zTd%d5Q&jQR&8951=eOMX=b2hk*{i<(5_!3ZwOm&02~*0mUlx_6J11WMa`J%j&Mzs` z3RgYWxVAO<8E;5N!&HX9TMks*61)61+{Wqtnc15rhg=g2{G6=3HNS;*(W~W4uBE2e z{yK5iJzr~9->Sz8uDPDCoj1kof(p0W)$=>oDi&#pYk!x_Ik_lcYg}!=XyF6TX*H{M zU%ejIEiG1*d~^A(==z#+?#knikNzx3cn~GlwCb@**nZa2Y+{R24ldtSee21cbDcZ_ z+f|RwnQyYy)J?d*e^PPNlt$Oc4=ejVNB^xgJ@>Gco9(Z19RKP~FM?&$w-v3afA;oa zq*&Xk-C3!h9ZSBetCXDH6i_O2Y1f%QvD{TtY(q{z3MiGiy-Q40hVNaq$28SNuPnBe z=3aIwt&cP4yNS-}O@XEA-!Dq5v&>43T)8WFwQkRBO}+ChC8v^tN@bo}9lRDN z`^`X;+w*Gd_SWur*>3`x-kw(r`(EGr{qktn?hgl-w);i4ta|tBFWV#4if*$7QDUoC zJzjDB<(4y^E3#vGU!^jxzO`oW^K!{w=-mY+q!@6Cx#zO{ylrIX|Bib=PYw4&z|b9dv*2C z)qP=WFV@Wzje3`v-MOYu%zx#rAC*NpOk1X1oMn3J)ke{I+oqj=m7)DR)Ia&YD zbLZT(=a(~{I-ca@GIznwt$#w>^@1)2zn428S##as{@179+U~z@pL4L5w>Vx#();8? z!NX0un-k(c&$aw>uIMu#t5!2-blRbP507Xr)oOC;n8ay#uAg^dKYz6Ta=q8)H@apu zsH$#Gk_2jyKV5Vz zyK?`Rmj$PuPbgcxb7h~(b&vdI*7o*JzwuOGsy0kalX^>OukRfaf<+&UV$_Hvx5zXtD= zlodI(?k4vWdwsS3?y!z~Ua1|C}i_FNvj&FC06d*a2sS*MP-mzg}@(ybi%_TAQFN0Rpx`lu%uixuBW{rXL??RQO& z&xu~vIc1TXKYe0k&vG1Q*t|*Qir#A> zIm2gy)4E-Qn9NdlE{{zMl8b%v^N_xg%W0v2-D~WxoH}OO))ncLCGNiS-PaWh?@r`3 z-+bVT-ub@GKW8@YiCmT?ethpT^Bsjkij`u!Zaq!<-E}s);=f$u2OIDBw~q>L#D99O zvLwGw+-~~ZoXtMV{4azuKHV&EO|P%LmXEEoua@QTZ=IH{)u+1WZad!PR9GRsf=y@o z*3+-wUbdVTe~l(%ufq>)-AbraRBQnmecufAEiWc@r!Y+WNKZQ z{`k=xF}B~Ici(=jtdn7bOFk+#>bq37c9g*C+$mYYP|dG%Be*pp z)?(?K#RqswgYV0|3JyP;rLv}Zn)Lb3!`rqfYcO}%hIVw>->md|XQ?`ScBgUH;p0~4 z1s`nioM|!hn(X--{Tn!QEp|V04n3Q7Z*}vwZ1(M}x{Rs9s)agh-xk~NpQmQ#^G?- zWHG}mOOJaBWZxo&O_j|L1n_0`vO+P1F%$jy*6ZbzG7d^$( z(|lLixL>=J{M}e!9>2fWvy&Dl%bx$3f4f0fb#v;R%+<&Kb}c%n_2*C4z2@*)$;t*R zlGt>w@m6hF$rTrRW;JW=SJCTY>tAzC3q7-`@Y~xzyJk8sj5#|+TKzuT(P_mC6V8gn zn5_IN8sV`cSxE0k7Q?yLcI#&kEf~t{B2O<2*p%qimt4?n{(KI%zVx%F798dk`_Jzb zC_aBgM*Sh%`)8Koo8HY_^H|}|16|wahi=<`F1xt=Uix943r%*jcgLTdCi}8bLvQ!p zc{ikT%ATZ7tGRCb(7OM8#6``??A!fIn60!e3&r%zWO`pdRuB9f6ms9?{p=HwS34&c zPX9ei&GfNy-0!OfQP?76>YpzT= z{zmqaw!ePF+0MzO-}gv7%6<^}vQxP1`xl8v(*638oL!g8zUxRnihdBO+BLcSdy3?v zrN_h9s7<}QQBU44Z{1quFw>BzjZLEIAM@^W{`Nhz!E|+Mq2K#=yqoT89f{sND{yY# zUGv|)hmM8XxlROV`&Q3U*>H^$sgt^(sOTZjE&eZKKX_elfADQ}<8HqDOJeV*TX;=QTDmf8vi@CT`K_KCZ-tz^ zvift6d+wz*W}#Wtm7i@Kh1Sl=3z%-Q+Pg69L(xWK=EX{-Ym`E3j@8cYJ#=~Fq2QTs zQ?K&$G9^bec1~{E-oE0U;Mb3T|7qEaeHZTPN_1822%*}Fce?GSVG_CvkxZkH8MI3Hly!1P= zf6|=b1a=K=g+jIWI}W}0edF|-?GfJ!malu;S9QbukCaDQD}i%Nu_Q9~ZxW&WrcAPyhFuKce#F%(bUX@0&V3 z?9IhL98n9aB*JWOB{6^habV#>3yCn9TSc>5nVWxCKl^8~xPq~`KTBSjJL~<-Teqv4 zO>IwG-N<>DV|woT!C8BmrPm$uSnasD{n|UZS;tM~rf=MI>D1R>GG{n`Y<=n9Ewilh zyQO}4M*G#t-(E%+_MG0wTisJ9E%vytG?hb8W}{F#43B6;N0I$`N;c3UNT)=Bm6Jvi5! zS!Qy*jE#*ypQXclM%K;MbM$SP-zdL!ndw~2&K0~P=I_12Uo7P}4qWo%?pt$avzJ=- z&R-ud{5hD(ahfqXs&8^zd#1qUwKX3t)F1L0q&>CB{qd6f;A*z@ANF)*My}Iyr zICFf{y&oL!KQ^Y;eHJJv_4+_xr-_SeqzZ@T+yLP3SY{XC{~IWvr( zUNfI^vFXHBvj?Z!ej1&Vt}~aP&u@J@b$Q*rwtho5K9-vXj>i-apZ4F@9NI2blrvN2 zalymo{ac;odTtmgAKQ4yFXHi>I~7cS?=F@9zVS|0M4*xOv6+XqCtiM;_+>kHyRvHW zlBmBQiWt9INCX=uAFDj{d1GFJwMK|xtDP&Cb!A=5`{#zaZ*7j)oLha=x+285|5)as z{_@=T-dlSQ+V6i>VsX`R;VjJ%+qVwoTbUaZ`>#x7$j^Fq)+ zp2;bc+HiN$$Gl|6+>C1;4cn`pt+imfp~t=R=9;4)&o5j(@1<7X-`c-bmj3m&zcu51 z&y?27<|}-xn!7K1?&0M2{mXKXJKCGQ&iVEF-2c*JcO;g7^^+HlX)kcL_Ozet$Sg2< zkzHkV1?niv9zi*jy^MmE0?}=)neaF?_=Gts{cH?H_(I?`^KfgMDe5ds9Yje!A z|3?{IKPtFu{iU~-3!gRIeAqwp;-d$5_V?^IDsEcy_jc1sZNJlh6XU1H+>ICik-cn< zg<5!B%v+6WlY26()_*KNhtBEI-fjNba%2Oxss^tZ@&j0*bqH25m zfUIfp@nEC1?CV^gOZ-@pW_R(~gX3F12VAt5*nOJkr-_eUVZhq?srFX{o?J1oJnFga z;g$~zw=GyVZRKmr_t*A|TV4v`-@NrqPNBrQopax>`xkfr_@~>>1(P`S`u4G=NX`5r zFgImU_vYMOuXWn8wm!>eynMuR`}X5Hd;Z(9eB7_}u8V(9-B#WH=kp&Un?*YgR`CmJ zsU5O7UdH{e?yu$KhaN{|B#+qWN)l7%SKDTwZ@vr0KbBca!cn z|7?_d^mazYMs{`X>w{K5{67oq>(|Nrqn zEy-rp?z$VL`o;IFtZ%np5)7@pV)WS5rBnAxyZcoK%{HxV0oyF>^B!w>{SNHu_!R3L zv6FT4nx6-vHbfm;wJpLv?r;B;d0Wqv@kV}q)?Z`0|74>0?Suc%&e>@FL98q6|IhpX zbDtf(oNfMF^wEaHv$uHaZa1v@{P#G=X$E7SYk7xr{+#|>ZFZ^1Kbmb%o5@Uv)9$kv ze2r&$S(>$L+vG`plzLRcmM=M;t_80Fs_jnrPI>mK9uPXY|4`fTO_j*;?*M4iOPabb&Y1DP;M#&oWneTt8 zF-G*6aQGWN{OWnA*h0eJ@bOpAW5pI4{)SJ#W}YgxvG6y3{?+qbv4w}f@yoB7mx^s7 z)+b+keR<9EiVJbaw_I1xI?woUZ(qgvIg|E0FA$i&QbNzSrjPye%)XD8&OEOOh>tgj zTl7mt;N5Fc=4Ct2e@y!+8km=T!h6bmW+{f3jB2;eGgkATDPr@vdf#JCaxr_-=?=|* ztKFiWW&Z5EIO)&x0?Pu^!>T{eKV&IrdwA*3^NQBzos&L-BvcD#fd!^M7j60ok}<8A z^ik;V^M+pbX)YJkyg$u9y!C)7&-7>Z$0t89v`x?aS8VgNQuK52v={d5R~U>O!6HA_ zr~Nw(()A(!?4RkXzs@s0+~4+7-}~!*50MY?hyP4h?foyq$CNXZVe=No1&)8RFT%H#d6BeWhoe^Shck3%>s?T}5O%8Q18#N#0|mh-X73hKR?!TtHj#s$ny zZEYtF{AGEplyWj=@P58>ae=Z^yY1z~c{VaK6Ip9+7|TD?v|HnTYt3OJF9Y68Ppgt0 zG8R<@o@ON$4+|wHm(EjjKCXQrdDFScF)s>K3(j1voW&)({?nd0E3N#E7e2oFz%cZA zr&7s*W6Z3 zd!=PgT;afO!eHdt?ZRx8@V-%W@)i%#2Oe{nW7(A^Z}E`gw~}FrFlOx9@(~nRrp60A zr1`DnL~a^sd32i+nJnccfG~4@bSTR+s}y;EnHtTd`LWB6S3s1pp_gb zaK$<&xA0l~-q2-a<(%+HXCd=7hD*vmbJa?Y91}KP_Qoi8-i41*A7*SkeWcTgeTv)+ zm!{V`|o#Nz3_Uh4QAH=?#5#XQ8rF-=vcpz2@1Jc-#myvJN}B zxt)*GR%_XDt=eA&DP|uQC)KS9`g5bl#mA>-II&-mn_(DvJyWh^51-AlS5_CB_%dt^(ig20 zmVMD++i>P`=_*F|M{}lG3d~&gddbIyhg0R$XDoWX<>A7|PahcCUe8?Yd|Y^5xPjyK z&SqzJ9fp*yb(fE|^@Uf(os@}H=i`;#z%;>gm!FKJRl?gw(aR-stqe+zu(_zcQp=5b zQK4JmbH(@3h6{{|hi1*(;3*?&r4SNfENZs0*~z_yTl(1{wL+g44HFU%r`%Y=$0;jl zmNS!g_7%Z}%1-UNmlG%3D9B6{vdfvtKYPhf=k{iP)z68O&FWuNd{~%bmviYEzbwC9 z$eDKEM}HPFA8POVxxsU`eTmJF0AqQx&d=?99P(Mu4yzUZyTJJHaNo}jo^$O>Tz+gw zw#&H;*7;@z|Lr3`o!MLXc|Rx4wy1y607}U@!O!_+1?}F%4zKesDiVmCGmjEL*-nQdRPhsS2w8#9n?#SAkyfK3*Wn_--~edXu& zzKDhsOYW+jlebEE+1M1h+ZSXAm&>xZV3V``b!P0i{p6=}drm{jt7#yo->6DBc|{lG zl)$DFP)6g4C%TiL^UDTRryTtPmfOfY@n^K!d3h_9Hxb6xr$8pO$Yn2cpJ`WbVPyK} zhJpR5C12b5*lo>x`i*iK7d<}M$Gds4PjuspiV4Z5pJ)hASFlpJbHm8|)E3i@K6X>D zWo|Qfa9m_ebUS%QLpWT~O5w?Z@``SMQE_2WT2x3Ux1g***p)L~ zT7{~Mn4P+2c?K@kb1iYP*qH1W(wQwNE8z8JhEV9MBp3G94qQ{OMw!(|NVkW$3Fi1MzvqC6b#p=PDBW7L?xEoh`3xP7IT+*Xi zF6=tC2FcgLR(1=?Ze*I68NGC!SILoE!o_NNQ}^gxRFqbjxvTWiE*JJ3+W>>o*H>CQ z`!pO=UR_(MEi4;YnRM{U+R4+^td_7%dKtZZoo~qzK9^_tbN5(WRP1%1=JUX+vUHL2 zHwUBE*I%A?Dqm*z+7`Gg;e=20{1+9H6+REG3L6(OKa-0vZhU=2w2O}e)D^KR?OddM zsNeMSV!xQhFB(21AO5o(|7n?WPIp; z^3RQ>dLbn)KLU;H%T{WO$_mznoavAK6y)08A}{(mdHSxfi-Hf`kN&x#svlP3@gvaK zzU<^`QCXq7D`)y+e-#~_c=K?-EXcUHi;RjV`Zzav$8LDhVX!2z?M+a)j+K%~<_x9X zPgJ}4INhb5ozN>iyGYq-lI`S_>3cFRDkh$s7rDthZtIH)o7GZ9#3Yn1PuI0dV^*{F znY=6SqF}WDnHgt%KOJ&ypW^K2R*Lat7_!Vy-Z}`?z5u>cdtpHZI_>wbk8Yh(>8C? zYKUUfvUu_KSB1P8k7T4q?586Us_BxuGY`J5|Ece~{NmJLCJ|eO}%p#HM`tCeS21?T9tB~M_gS-FQIJl#JoH2Uj9nb`C;Z{ zIP2An7a(n4{-v3hZ2ov8|MSno38xJ1AGK^hJwIo6mHFWSf8L34^64^q3G&}cr%HNi ztf)Qcar4^yEx-Sjmd}1wCt0{+_1>f%HO$vb>cymdR74b!O}Q|Fz-ahws}NpWpXhpseEG7&A71|YB`&PRCBV}eeJwbB`|sPU?>=~SR5pckNt(yj zoBYdvpWQzxAh0IE-@o3RqOKfmXLK3wo!KD!s3Xf})ftH_ z@9J&yV&CRfUhdCz%$8Vte{Zc~;D042*N2Ua2G+Uvc5QRJrI&18zvr&|qEAOwB^}AR zZ(#npQ1)1T(Z82cF=;P!?yoL*m93%t+2LH!!^5+F8VFY>FYC6Q?aW@}9PiyKkgaxP z&5b=T{yu%EZ#CtHfofW`*Bd$WdVOh*jfqZYR=r(k8?#^{tL!$P_Q<&bK6N|06Bitu zmT7SN(t@cAT<;yP%Ybqd(!W16J{B2mANiDU*Io@q^cit%6zkecc&x)CX#+y${ z%LTpTV^hphJF@2fp36)UpqAZdT}iF(UxFc)%;IHdS}V6jcHO^YaqHdkteE@FY}U&T z)_6DT7fDP!zPOl~U+USxn$ykl{MJXd1Z=;4t)qp7cXC2pPWfwTwwY{VZ)UQ7E_%M~ zcj}!LyV_Z+(+<|$ZnA%y*7aHUQM}m;4SRzlZ*3K`f9@#R&N+kGqksL)+Bv&#HGZ&o zH!CejC!(U@*p#{3tslrA>$zRh&#!qfrtPTs0psT9MW65e%lsbkt77xw9}~lyj;qXD zJ@@cd=~egkwLPw#{QR76<_~iLt5Xs@JEQxioSJv(X2!p#&3!^_&QaU1n?5b*UAFp4 z#exK`^Jn=!9G&NE-TLO)KAp|1lQV7Jm(TdWu3%7YLv+$e8KaIC|p^_D z>t8NdyyM`6-Kt(U`Grqy3#*Cg`TucmdzjCQB=6~E!G~UNI9lUy*6QK+*h_)$5<1qJ z#fkfDu4m@Dv}UHs>U1AVjjfq}<@ghE%(r!vfO{ ztY21r+`XLNg(J{N@mOYu_oLgDck=2I99t%J8t^&AY?`90@%-QwW?rrkpT2x59YE zhGeatV!_2?ZO0dhf1hE`py+bAMdG-UUgKx(?(ZKZD;y4Wv`HHFxyC4ctTB0zaAY2s z^T_Va%|CO}mD!YfZWt>cJJ{j9$kytu%rwU~+sTPCT|a7Wd%U%paDUp$ZYFl;TgwEW zZ&%2=qgv^3&EXRBoiB^(YfUal`JbM#soPhbt@t+cde;8P-8a50dQ<0hf9BHVPtV+V zn)&-s+=Y)K8E0;$Zu8wezujE>^TSMj5ue*nmkAW+$OfFb_H-HF+ZDGa@_3xNl)CYH z3`#VVy9?GTr!(lzA^vIbLZxdS!sKUs(C7Q-fI@-xO>&7{OPiHZ{C;a>#<9f zTsOEob@r~$#_@gZcTFKOIx8#dXR=+ethsJ>JN5m|&7X~4e2+cT_GDeI5dZo5_LqCtc`J)o_#1r@*6~*-Pg)*XKI6wK z-;aA^#D&*S(^RlO`XoH`w$atYF*koK%3*M7n8mqa)%NNKUzh(r$n@{>nfj~C{vRth z+;^Je#QNk*w{VCLEY2xxvW#aC0Hg6CGtR@0Q7f z*|IFQ%i8Pq|D4pB#LOJESJS~b=5AzT-D_3hrEG0Gd|B-dT$(r4(ER$(Zpq(|tHm!rRD0)`GH>1KC6j)>ee=$G|NBXu zMa<4mma*J_^4IQr28f@;?0jn({zzXF6;Gjw+e^dbXnM_m>t~o&Fja;CHKoux^y-w`sSY( z-Q&MGsqVb0a4T!un!IWYJDp=QpFY|iV-y&YaN>5z{QBANLA|LA2xWi8v6 z7G1kP{^{dBKc1gged^9G`}6MD{zCZ*frP^>H=bB4_xAH!+UAH(h(G+~dd{i$SG!JS zuWI-arM55a`Nr~(lNL36k9xLu*`3Ls?|k>tSf6?-+idFf+x?a{yr(AnRG!`TDejH^ zzm|_)68=VyP0zl2Y5n_NkW+cr%XK%e+}(1haL(Nlj|hLm*QQ0k>t8`Q&Hw)`-&oJ+!S$cF&#v>h zR@QjSe*Ju9*1f5coDxAiOJmL{v&g2*WR`HM;`&)w*4`Aik>@|RMxj-rL*;*|d5?A3 zY!fAaiYFO$U5xK*>fYb;lUvhr=?%dX9tTz9(|)&#IBM$ahnE`^Z+yMjVZT6dK~Lcn zHjyd=)unrO#$TyAVYE%ZB}C-Yuj*abgl4oQX5D+cFHhOE@shEZv!<8ror4+uk!+t^ zXH1(vz!d)oV>$r_ryxYHfcBCDO@6H);m*YybL;QU~1f>V|M5DJ4ViJ?sHi@br&vqQpra<(-LjyUwjvkT}Ysyffk5`gmp5ra-W9%UAbtwOu@8P;}T} z@iGyX#WNE`#Lw6t(_ZpG{Oq4aJL2!D-_-oEG`TMD=P}s_etLf{8SY=fyMKqYgQI@i zOIK0p<3(o5Y*mIn`dzP|PPg8B!TbD|MLXhlT@2)^dO0&LWbeh|<NnU*}E%K9vD2#)SFrUwCcm3!jBD!r!L=wUdtwcB-DQTUYx3Pg%W&LG<}GH(Vm;sBKTV z*IRq?lI}vG0JB)J=O=X+&R_pL`bfyU$jz3UE&TOe) z|DJW9ZSCB!8>`cTGYWUyVc9q5|4)nZ=p2o;iNaZh=k6Stw=nxUPgnMhB~f!s#RKQ- zNA=#@dZwuQ=lTC1?b9<w`}5;lYWS;LCx1;ZKknEb#kQkWX7jP1Q^bDnPuHirB|hz4iZV&i1&CXVSR~lX%VVvCZ?-?l<{eTVSAPe8VYV z^R1I|-+aS8oHAq5*0(Mx>-}=uO;pEEY}I3t zu6o(5$3}^|Dlbhh8O)ZwckT1Lrdl!9)vZfH(`)bTyK;2jl8)a^Y!l>et=jYE^r_>2 zv$`20=BB6mthl>s-y8S9=O4MRGo&#jhxIF7Q7(yA2-aB~gXD*-Vnqx287FRhz;n^ z?R4?}4_?>i9o=;Cm&Ka18{gb`&UuaDnA_ySgxfW&ZQq0EdrRfzi}hYRzA^Xm`5K=1 zjk<|K24;0V&bMWJ+C*5nq;-yE=JpxYEKG`jaWcW=;vq8~k+uDYZ@pQr=luLv)n?YR z7LPkuOoOLIhF{~@czE6M?YCc-wv;w(jM!q=m-)M5>f!C`-yaH#*#5Klt$0*mW^(mGitifwo(D7N6*@y5q(ke?Yq}1#-E@5QX)}!+VX4174x+Z#9!b3Q|X|lj>p>m$@jt<)<64{ zc1PHiee(v6t#*Ai(Te*{9RINP!;zMRh@2?-<9pY}e%`#tlf5N5A|p!v`JS~5Z{5qU z$MbQV-|%FM9bZ{A<0?t^ha28(vEwU^K6rELtF(8P8~C^bUO&#*zI9zirN;5Y7VW9a zzZUMg&2|2pbLRdPd#u&ktaa?x_B-DToB8dU-2VJcC*(Z7U666#vv#h>%XQt2nwgWL z_UE5EeKS^s*>#f2);A?qs$XWkzP(|~tD}zTj?Z-b&pK^p>A!2&_C9_8n#QNQKi`x| zFkbNT<2&t5yW`IFo4f1SOiWoFnbf4XK7U>Gxr3(6>r?mCI^NTN{xc^`&g0Wnoee$~ z4$;Tv6g~eit1-g((LRN#hU<&x&itIswj}X{m8-aX-}Ndv&+yHAYHjz$1GUF3n^7T+?nVm_xnyLG(&fBb(t=Vbd+r*BXHd*~wD{h9wh|8D=Qkmqyqjs7#k zVMm*ctdd05y)x77r!dsIhPly>jzF=`|%lyxlYNw7G_3EaiW%}&? z5z~8tDJ$yP#?}ip{HxA?GkAY}epsNhs(EB%a_qBBk#FkH-0)abX1Kw3!lo1b?X}%s z41$^UJ{+w(XklYswp_R?=6sA4`-zq7_dmHXJLlE(vv$(=&+OKm(Vy6MKJj^wdPKzR zqtiNXoI960fBE6F2bZ=-FO^#t>yfuVed~M$Uv^y^n`Bo7zZr`^yw0yabN@{LzpVQ{ z^XhlJ=kP1GxOjnOHFx2&JAT4B!Dvk$=JW!s;EK-aZj|vE%UbZ?`z= z9C@v@6$(XUm;T?7e{#)6^`gfoo2E{*=;@pEKHmJdN8LZeh0zNl4Lc{lteC$=*vein z{lL<8@tg~?%dZ6fxPJU=``b^?cROn@xXEC{xB9kwdwB3-Ml*%}$*+H0-80kt<@&Ve zCsn0q9ak)yqGO*^b)?wcJfn&C+T#T4TP;8LUUGOZz2e3PTfbe4d24RTO!u5voO0NNqKU6Q zO@IA%C*zAfsaE2z4m?PD=JagR$(SXl?#R8DK2fkUMNd4osPcEs-=c_!7{l)FknZ{K z{hv#!g`at{$iD2fyRO62u9bT%WT$#vVOz3p=9TV{mG_^%KM-B8Gfhwb(-*GVYwJH7 zIzN(~Trp9rP+I!qWj`;TZ?De0_k38gFK_N4~I36vqS|q&g0+Y6))@``*-Kg-|g3K7BN$6^OM3!`<;0=tTCIqvTXm1?W?8r&V39Mi{4NavTW5}>3z9d zFIe8sYS`ozvg}q(#LP!4W-gz$hHGl-r^QD$2tQ^y$C!3>`I<@dAEbQHF>H^IEIE40 zFH*j`WwU?e`!uVItRL1qo3irOySGKRqp!?-UZ8W^;jEV5%vbrlubtca@IpbwS(&&~ zPyCXm`~T~3?_m;KKlA8mW?@}3?ZexjNHv_5PWv3B?tkUxuAi2Z6F;@h-1Fv=yw)${ z3ll0&r^GEg_2;;Nu+{Wb#?I|Nk5cFVIZ`CcU033nSa6ajZmHBCHT#-Q;S1YRZmrv- z{5kp?bLa9$3JHZLb>f~LPrtY*OriAXlDMT_cl-3)_VT(HFmBXV`=%B8=6%_ZM=Jz& zrzNdF^=Bk_wVe!q~dS73g7!q?p?(%ede(uh?O;I{;r%oXHH+Z zz5G2<7MqrF@TFP(mwO$>B{v+FwcnAqdh&V`<6G$y5sIt) z+mFQtGRsOOd|h#lZ(4dx(Bqeu+ODN_728fcdfR;Wic7y*MBu8U2Q}AkXtbP|lhJT> z@h*=#>qqx{&fQFzrX9h$s{j1L-^KRoQ+aE`I$jbawZ_APA^UB1h& zzCLBTod5C_3^PQR@3Or1Tee<`^~}b!ZH<$rF1Nb+VcX~L+a+Td&u|6n^85PuFJJQQ zLD$tKR#)F{n{|s>uDiY2ykYaCkk`rYOKR0K52m@UeAjo@z0!;&-uU44XD=o*eArNP zRwsUW)V;d-2K$pW6u-Bf+-s@oUvkrN-NyMREZ0x}P<43Ey(LwDKYe|~?Z&xuyU)wB z^Lftyz1emlTJ4M5pM$~2?l`b6-0t(jch!Y+IkzMjTqWbX6Kw|-5%zIwk_#@_U(e1G=Ufh!(x<-MPI`}Ug~{t+M2kA?>x zNjq_#f8L^q3AVQu?01y0@hnvSdeVH-#;B`e$Lmh0upK{tAbsg7UH*R^uFRHF2}@V4 z?bA84q2%|Wly|GPe)uzI>PoZ9cYh`08P0cw-j-RtMSJa(eWC}o!fwmeC7Zrpv92Lq zb@f#DxUkxJ$B(Q3UUtYd;5Qpr*!HNe>b!sENo8DMSRK38?ovao+@2df{O}|&I)B3b=Xon_cO|9z zESuK2{@xz`cDvXMd>LVfQ_5Iu{mZTd)Stbg|2g?|gp9<#^)ufuwb)X1NWO&mthvu; zqtMTfjSfED-NZI4f5x-a$~RBbuQ1u%H#mR#RR;HGol54@+s}O3Walye>x}~+b&L1p z^sRgOv1CWA(e~43GwpmAnFQ=g@tXe0qrEVqBgSx|_tbxW_lqCqAN`{{`LFGg7u800 z*3R6WI^D)N@Ac;`OZGHwG7a8la?;!IoU_-Y+JL>c(`9a-*b=g|agXWb?Qi-`ldh-x zD)8yUVV9^*_)+%_vuGBUa(dxnJSxeRPX+T?K>2I+%?$0`cH&&+1W#Pk4$IV zW$yFcOC~x{#_!bjfV%Tj)^{b>{Qi>Q9CuFtoAH9eIhAruHFpday0X5AWDR(FKa=mZ zP4tzfc~_Z2RZpMX`s_rp?25%XcP7Nht4zM!cCgET-m1k0cQ;&p7Jp^cd-8`jL`XemefDwfZEN6ZU6|#SytY1@`ZmNv5YIwtaYHAalLs z-lgP>hES_mx%X2J`k$!fHeFq6wN+uyO^Gx5)uH=q@2op){^qbaPu>Z&K-sJ?*^=5V zlD`Ft;xf5S7p9pyn!DeAb>_N(`<4uj(glg74%_R$EWQ@yESnJ_d*M??_BXYjb8=Zu zr?Z;E>Mxx65W8s3Er-U8$i@r53Z%0ol>6@ALT59k<1W05x;(;Mw^-hK z;AO3$)+H)@SAJiv{-r#{eHrYot{WF!nmg(G#FO%mUv9o!oveJgY4%RV5Q(E&KGS96 z12)~0;Oa|bUGA-Gv6pw-#`0Bv)hcU#@$RQCFcT)2JqMn>-I3q)I$u547gBHAAP z@{n}cLcY>9e5Fq>zDpA?tZAL=yHHFrtb3RJYFB^Xg>sT%{kwkozn?EEtSO>;xGU)T z68k5$`~2STJAAXKwdu;{rYl?PFP$*pe;Vzm_$pHIRm!I=+xGmm+nxFIC3DC8%gO)t zO!vL-Qh7De`qhE${B?_x?%hjMxE#NLzb@2pbM*Oh5r5z8vj44;A}3~Ztj~0=YUj5I z-M42petT0qvG%{|n%O@Kl)qH|mbvY5?p4P1|C!2lio5Q|FHf|*dGq9)KGV;7)4wM^ zpDnPaVAdP|de7%AL@Sd7|arZ4*EBTi=x2>{i#lplxZz?P;s_U%X@!{N%ep zR>Yz0xhw3hO^AJ@UhiYP{_vclh~K(4m|wnNN)0{^Y2!#+?d$t^8TGp@2}v^zml&wO5dz9|IRD2aF(dz zWI6r9-KX;FYxnxhy1c@PceT?pYZm!wL4Kxwi=UaSc_vZZQTJb>Xo`&N(PgPekICqm zJ%8x?#l&s9v+?eb-)8&eu4-86YFqt1xX8FC>rJmw4{Q7X{U7TJdl&xk2&?EG4uVByory?HUVBFcxm0@w3( zCqI6*&_*(B-mfd4z9cPsxN)X;WjoW=%}iIzkAHZVZfT<>;@k1w_gD6!#EEZie%<$Q zw^;a!KY7f${yp!1+h-ryb0Sl+^?u`mr4K*ed|9$ZR7dBdwa^w5FFWg0_n(JK*%{aAT*(v+HtQl)~q)yi+>+G_#4t1BFY+m2_M~*}H?56X6U+0@{*yGfi-_d#} zefcwf>8Q8`Lb{&Uf_^X8b-lj)Q|`uyKX0b&Ta|N5`rXr`2eS`IvxT4h@bB}lPevkB zUtW;DQ0?Z==PDcKv4iVrd2~i*QC-=qN#Xi`B%F+&bL#K^?BwnIW%Fdq6Z6!~cwez~ zUpeph*YU^ck_RiqbRz6e`?24=95UH)X@cVK$Z4`E{>DCRrcF!VrbpIIu=UlE3}F}B zJwNr4LbX@%yFmU3milR;^#=F)O)Y-89dD6)@AN@N;D46#Tk((*uERcZ@0|qVjja>E>}*+dMS9tX3hAchM>qdn zZYwG8_Dgn=u6XFa^k043l{(J9-*NwkumtP8rN7fZma+JY=ed+!Kfl}g+}7AjDgSlu zbv<}l#4BIFZ;yZZbe0Kn$s3tv%rxf|oO&G5Q7`u1=EIl7RrY4Q5~~$ImN9=+d9`(N z-_^#WS+09_A9%HOgY91X{WtEO-=EHxV>83`Q~JkwOx6$XG*&l6#&&!czQNcn_(u7Z zD(~a-pK=#|JN#WK&q?L;#wU~5KBVvTI(So5Z+hWjC+@ShQ&``p|J>$r_3XcI*AoQ~ z@wbaO7(IS|Tk7hi8@2D3&yQs|9x{LST;(aZR-SF|^`5n2{?osDZ;tQSzw~J60mGHu zxxsPw&wf9+=kWKG+V?BAF5h(Gk55kZrFZfFU2+{#!^Ce-k}=;@|LD*Z9bJ3j+skCi zw$vXwG+jr-UiheA>;IoMTRy0HA3uMj&;0!U`6~o8x{sZA+3GE8_E6SLf7eX^(y80e zZBz`I)<3_q>i?g0hZRGo_0I3iU3qJ7SHV_u+w%`P-rLT11uI<&`@3gVLHI_O-)ka@*W8Ud!*8q0 z_MN|b?fEX#mA6tI%jygF@76=>AB~-j9M+{*tWMAMLwtr%h4|0Bh>$rqtG_;Tus=O-#gy@%C_qLJT=rL(N25Y zS&R5bKLx4gMN_dGG$dA^2BDuB-6l&5OL%f3JJ#yj7I9^E}t)&lV~7v-qT^@84Oty#HdD ziLjmawz(_h=QFNn>VLWWj%0zz>m{mkv69VXRv0N>3Lf1r5&qqS=zyOkvrc8 z8T+X2W%GD3({*S1(|cc@zxPj8Z)474blfcQeNBk9e{A~hJ^z2-eet?le8R%4X^-Yj zt@>WEe;>a;d$)7j#>kH9u(E3Yt@q>P-`_p!*IDy#Q~HzF)it}gZ_IwWBmL>Nl=}MW z?eSXsq+ZTT<;s}N3KC1U*ZUScS5@RuTIJiwt-4X$MPFXNc<6!7BHPv5N~`7bxF2u) z=4MyF>r=pir#j1QSATLYC@r)$iMCjB?$WKzS-1Bdp1%F@Y^MJDnwEBc_RTlGtuxkx(&72-dWq%t_r- z#e&BN4mC%b)m@v`eqb%LIKyVC3t`9eCQMeIKJUz=51Y5yxs`pN=Wq5pgQM=6nYI6_ z{(k@8xhHOaX*#!jMybg+yX^9~Z&IoEoKu)pw3**-E65f7Q}%X$>xFC1k^5?|z0)~w zre78ru^@)iaD&V5HFv|_wM&Mb|E1b0Czr1CCo>uZmmn|d+5==s-me`?F(8&bK-El{ir)Ql{+4_4f3% zbF@Zoa#36}Er-y^P%}?(UDewn6oFpu%J$#@f2*M(0^M!HqtvT6UW_ z9GaeE-RSe`$~{({D<{naPNYn~w7a3j_GTU9Op}#+xg#>B-Y3OPQN#aUhHF;xvKox|8>vrE1yZ%m)!N%VOg1- z?+(e|3s=vz;0=HAdx@&^cbO9*vrq6|d-dBu)!AJ3#1x;%;>9xl6>_&T6oPNJK70Pt ztXH>IWYWUf+$mYlC!VQ$`2A-=v-kY+low%4GjIJo^15hV`zpH=Coc3d8*L2^-6A7a ze6Bs5`GnT|SKs;G`&Pw0uFR=#@Ogiw`?asVp7DCt{;Sq|KU*Dm_u2N&eBpp9h1={3 zmn)?%tZO#gpT3T1`cz%rOY6=wt+t)s`Y(N#ht!5DWe@E3 zu>7jn^ZNYG_CsrQF4|wdo%XlT%wAdW;541R_Lob!N@iXAX)*hyu{(45rWOBu%r!H< zEAFnpnWf+_c5ePlGu9mI+dnT~n=+p*Se=b4b>p9z(=@-lklonm9m!L_ER?Har_xb} z)jGNMm#tc**C}rNT>OmpvI*O!)WF{}-~C%NF|+REfde|J_LtRGYA2bx{xMca727cX z<-h)0GwNAQ&IWzm{BFvX*ZPio9O@3;-O_Wh{wH{5I&aDAM6WOHvBFF5-Zkc%x6JKM zfua4wu&86t+OOEmon@_+w=gxJ&O`KN$io#o>Zcw2p}5s!xmaJBh3<+k z5l@Kr+?mp9={w2_;ro%Sj)}6blb}oziiyk6eoZZrA<1*75;F>FJv6u-fWv`A>2uHN-kQ zu$M`$(VkiATQ6ZZH+@IA(f4o54;Pe26-h)GF@L|AxMQ`HrOlcd?Z5vR-0`$)?-ku# zsLywJ?yF*pNMrTyM?c>+ATCJP$a@C=yw#Aj} z`!6qFZKZWr@9pWu7d}n6C%fE#+DnJ!$LsFA*(tqfSHOgc^EMV;`QLbJx!lcWzg0nX zR`0&u`6?+cYINzd@M8Jty9*YJipxBDVY*m;`|bjLBA`@%;t8hQ}b4hU>qf6WeUmX9dx6CfMQBU&kj{Ds!&tI7rm)28v=l#(u z=~5S@-R$3eKV*4{b%I6J`4`9k##waloHJo!Tqs0^vgixh#q!^)4ZnK)*sCW2Ho*PR z`>jb|9@ovEx0B`1y(b`rmlscOxG(+e``2wf3v;Bp56cA4!qa>TwQkO z{pHUQjNMz$yuZ2X{_~%|yEl5zYA?U*wf#lIX`PSn{{Qd)Z+cj1ZaM$%y)UNE{VA{Z zcYo~NU17V$9@_2sZyd$u@#&CRKl6p-C5oqiPx>$OE%oZLeUo0D`5@c(vZ;`To9q1J z9mUe?QogrW&+qs)_vTr(oqYNlzbmOMGU1S66%EGP~R=^KORokDq*EeLp=?M(&j9>3`?u7oBpx^LxX_oCD5{ zX&dkV40ftKA-(U=o4m5}-!HQk7;j$k{*UHtnL&!%$T{~0V(*|Bx!*6aw8=xOig+Otm5 z-{4&ER;ps%=B8ye&;2`}C|3M%s_k8UU@7~Y{KEF{kF;an?$r5eUGJqDe`n_N``I`6 zZp=#T)?M>=&+l5^90oIw9Wb5Q+6jfu60bks$j0U{Xo;L3axIA^PlY&{?}iiyI_q*N3c_% z1oL?{HJ;O#4i-;T4QZLcxqDN_hnOdxPZgFNTB{>zBd)YmtR-N^RMzI_i##-06h*>P zJ0I-S5MJeQq9q_wph9oe5+Q+r;ulj`o1QQ7`&94I8W1T_p*Kt9XM2Fe)T0g0lTNQN zv;J^)VnU!8iTe<7^?Trt7#D320)=j_FJ8AzL^%gVx zSGoUI2B>xaI(KxLk$qc0)$t~c$YbSt+gvK^Z}dmy_p#b;DtRB1^D@xx&82elkaLNy zVjt&B>0-sxj20z(KUIlRlq`e2}v?|qv z=uAFoz94w|D~431{>@;fk=!Y!{hux7)-YR@u9OQ{_RV769LLW)y?<8TXiBSjzSN^_ zm)_Im@!V3M=T3Jux>CAQ>3hJmFLS4-g4j%UshRgHBUPPar)xb37W+PTdMQ-6@qXn^ z6^QV(?{lYj+KKM-KDb=xm9>7VQOT>I51QRS&v{SfnY&A*=2Xz$&q3pGXaAAe>D6#zOMLk6BMCu^ zv}`6F<$qo}x1&UMi&kUGsr9p6mb{)9%BmtSJ^%HSmm ze~&ox#%^MHv`15T;yU50A5^{N&dt^md}$TP8^4L;(VmqsVWo4k)u6&MkM?8=PYhOX z(vK7&+mwzuRudT~MeaQdQu(SeB`kk(%}aIhS(Dv26+GM{ z+UaqV=&XnHTTTG z+D<7)_7vPx`+3P<-NbalnOAFlT>R#)09h6aa=}))lTIz4!$6Kz0ol77;+bjkbGEC2 z0`kYCR`%z)^FaYwbF!$pc;*vt`^F0grt8>QOpgSG{|8lXfpe+zI!flQXw{GGDbRBT z1+Un?l*B_jb%Z9a6W;nkwfpMX)R|BfYjX5fyDWL_BJ_OH(^Jn1f2@z4_dj*|!W-}N z^JUezRs0mYC!T$L<~D2QjkC!f(f=ph-EzX?k;tYGH*EO!#wskoTA(Pjd_wE-XN5Q3 z3R&v6aWB-c(y=n@cg_>PP^lYp!sTk>&5f0Figu^?c|UYgJH^M{clL3|ZPwx_PI0Bc zvIw&rIrlqy6F)oc5a>E|_)+|4iw9+lUtd3P((vN%E*wRYZ*jhLSn3{?6Y&41!Fl`p z6&j~q&OQ#g@pK{I|1Bx2czo2pTf8Ve>r=LP`|al~XKW`eUG!|#J@eoW5eK84tJRMB zC~o->Fs*CWYO{krikn#`cgCG$F>XC`$~e*~Yu%N7Go4a+RgCvu(oEx8$h+XomsQ?| z!5q1^Q=Tq;c1mT2W{Q`=%vYiN^Op&%w3)PY*|T3$5|&NiG~RgRN=&+E8rMn#;nUt{ zOXnpm6W}u5xZ+AoH^^)`pJf4imtJ@nZKYFmRY11e<80|p{ax>L?!Vz%`cA?$OePdo6NPcjEl`_5=xa4VRWJSNW^EQy}5^mRqTsOfg9d9S-lg^^}tlo@R3`&ouzkFRWBs4^Gc;% zU3cU9g1b+`cRIg$aA02NR_*Vy5(0_`=0$E@9mFDGkp9~=a6;yZHNtPi6}%N*CYo`+ z;+``W_^&*<`R2R-h3ud8yLQb|zEZgaEj}u@OFkZ*N<15?>YLb#&&(!WuBu= zt)*QS-X)Lqe6obDHnUcBS>%;`j#4%4YC05T@4788z)pU9`Q^kba~3vixZy9jeA2oP z1|{bL4I|zy?@0CxZ>ak-XR*VEJN|;tC$0O?l~k5Wn6}n&IK}o)NS?* z@2Inw>-`$zJr^WK(%z+{EoTQ;xDK^X&po1#Ox0@7@sYVjjNa_?VmDp zp3*smSnJkXV9f zeH2ta??jQcYn-aU;qKf6DWCd3yI%KCE!bIoK4s-xrE}u3slT}22_IDHeIrsiJ4Up< zymepHpG}Srw67jwZ}XITp;b<4;@)Ei+!KE z-OTOUd@fB15LBP_iT(B6YhGK9WqHpj@tVJ>T)O#sZSKbL1~OX~D4i`1$1%ieEmvpO8)>ngL~ zYyQo0X=m1?#N|#?PV#@)eRiSEMv)Lf^=)cW#ak^y^rrP|J<)?Dqh~<$$OWr5vP1>uglv^)-*t3Ty6eWD zJR;1`FD=PN>MX%q;q4jkeCrFp<}P}; zWl_Lxhd(Kda;sC1zVmMVpdN0~sWT<)$j6=g&wu*+bpG>?pBu$L=jEI)(wSp7%~ku+ zl{*ts&0}6I>D4GVm}51~QTx%BI|6BX&mLcWw%l6cob>5=qJ>_09Gg2M%O88Rs&70H zDd_&VZAl{cl+UGBtAuo({k0G*KRD_A`|B@rLgkKLN_CynEWPMm+3q!;RlMh$F3ni6 zrsHvb`n1x?%{$_PA_UoQ+*?=n$8tsLotlD(cc0eQTS&cPIo&K;SoD_b zth_zL8h;Bbm3e5XvnTY3;pTTMPu_eHyesx(OT5qW%!Jh)i&NkCf4}`;{=>LG z-_rcQF5hBZXchCaP-j)>k%gOt&;6}!-JiZ`?L3!nKTEHFI?VO)^1E%7{~vmodiZQE z%vfVPY4^{P{oc0cwz2Km@3VjPN0Vs>wH|G`G22%A6lc_r(!5#6)^=G)gxx)N_wS_#Y$eC%@lq4k67`TEmWZ?ZPG&AZP3Irf{m^o2(q$Alw;R&_j%abC1# z_wR^nC2Ok>%n*94a-H=}-L(5pAKTe9&%68ar)bKov?W~@C$AnncDvNV>bK;BlKxZ! z0dIHFua|kA=~plRb+%BJT`y_k3MIb0zpC~9*)#H=t$Tats9`C)OL~94iWNopWthgC$qYu|@u_lPA{M+!NpX_s5lm4@|@= zwH_s0o0=!?sAwftrS&M|+H-F~!-aO!sm+PTCbN9S0`k;K(y$9LSm{q?NR?FF4OLCHIp zE{cp@ef#F3BExlOo?VdW))GDYs!F@MNtW?e(#a)@0$U7tFWpW0PcHQ-}}gp6&;KH?3d2- zbL_WIv+8m7z52M!x_;OG@2fklX7Or0V!51{_v7>5hj}IY%~mY-T%dGLd$086*k}J9 zg#Rir`5t`a<&tk(@1M;*@-OrM<;0fb8`k)LoZ^x7WoI={Ge-hf!i>LQut!Uw%sxIcW#6@XzA<eg)KM(&&T}oIv zN9i2jR@+BqzoqhefB*gU%%FhH`;kat+>5tXwnw-uno{$+EF`~t&4~|w@l)pzk4|Fn z5z7T(r}pmM{(Lfr{RRhL#rf9`vFw)*OL#fc$`O* zy}mpWO{%F~7RN5f`I-JJWVGGj<0Hsk*0)nmT)91=DN*S_;{wiUEt*d*Z#z(CVK_;K zX;H$?=}PCGzj@1WAc~16qUmW&m&JtQKbn7^e#~_DX#R2jeX?SK&5Negm@bR%&uHs5_>>QXLryM$=RP4uCYCTIVXlOa>D{ILHDeEcizNI z+K^@BU47xdX7*nC#$NIkSi>CkIjGYF8_7i(PmCb zk><)1mv8Lew5f+%gj0u|@%Z!qNB@O*ZTdRlNQ7s~lWKqMC0`2fJQ4jB)U>w!&C#sJ z4x79E=Chb(ep{^77QJ3|B5I9_kkJvHsAmiEPyPvr5p>Kr>gA;1KC!LFUTcG`LSK^V z#D3kS{wpTNnS78=3<88z*@jf4%nmd&L(Qj4FOP=16c% zi16%CzL*(*|JQBZclR^QcwC&Z0wO=>BT+a@n?G50@^(4QbyUG7ftsNmzF=yv!=&KVq;(CGX>vqcw9^r9F38 za>y%4biK&G$K5M#ng~qTFzLsU4?Hg=_r&tOFWeQkIbY#lf@)$X^V824%#W|%Vo~?k zCZ_L;p@`Xr#cH!T4)KRgno?oQyIsEUPtf#Uqa5W9^9WCqM_+r(B6rDGp1JZyi9)rwGs`E* z7df)O@wKq5QQ11-+w5HubF;qjwESPKvgm_{CvW>_&C*RdlFTW8LnnE7%um{)Bk8+X zMVv?AO}OX32hy&K*BhL3Zw-2y-5|4nRrI?4xV(k4-CJd~6&_D2IM_Drw*Qm8|J_<^ z10AO9%Q`4z)2m{6Xu(nSz^*dh38%t6s~+5#eJRUxsm;2Rt>eyW74Z*JZ|&ap>t>8EQ92dk#4Fl?J5P;mz}2agSI~=7?X2aU z`@R14pX>dPs;9}aGk(o!(e-)Q5YT$md3Un}5Y~5|cHr)4fokgsy${7q7Q|a{Tna zrW2)8m%RG>`24@-wnsDW%*<<#WmSBw)p=Ptvt zh$A4}vp_C2Pc}p8kLzijx&G%*ZQwC->^!sB+-! z-_!NPMtiGAruy~J`tQd#th@U3;Uy74m-b+xeD`&3pACL>$}d;@yJA|XP0+;8^9<55 zXPP{@(_(V$(-S+t?OS>t?o#SLkngqV^`xBZ_Lts9URR3MRTj>5;u9D0mtxN5@o?TT z_5D5m>)8^0Q&j%1?oV}I6|<#xiohOU&mS^B<#JbFTCHNnqYavzlNPTl;JMsh_*dhb*7>y7gzQ&G^~HS;y|$WvN!3mxIqd(L@nc>u`^1w|RMxaE=27HV zIKS8SH(ye}re{ERvs&D_wq}bYuR|AaEtWqY(YH+|^hUgZl#eHal;(x&*LI}M;r<^o z?=Q>6eN&dq`m4rm_qXC}=DCMA{RAF(dwNB>PkuU0jEnE%Op`at950uu6u+rj@^y0g zt(PZfm-6oBcvPXuDV5E)Ws2*06T6-^U6#V#Q&hTJk2~0_-({N3eyBvVQ;7TY_e##? ziMt&l^i&Tf777_DD=d#ce5`RsjF-{jWsK@wDUWYB@=c$#U_<$>ca|-Gf2RI8we>=i z%pUcf?_U3(dm~Y=#*K?(_fi#!H(%>cWKP(5Byxw0<;*7yCo2O*KIydZ_&(b2W>C7R zG3H3mI(H3S)x`My{L7P1-9P>H)S;&*PN>}0{@y+;CjM zVA7;B%dcPFSi)~6&SDiL^hhM0>ukK{baNS=9dSn48-% zQPxJjt0(D=Bgf0dt6aU_{?Nit`y?0>0w^z z9jL$ivYb-Ml&CjR7w_G+sGjM)Rfjcy?WFBxOFw=7_-S2CAA^P0p_)fe?fFXV>{6?q zWyLzO{#?@XwWcR~_Lt&AX^tV1U0g}GG&mnG%>DANp#LV%PPy*Z%iKj@E36KYTXS)~|Mlpg-lSC> ziXOd_B<5DAOmq6{aUM4UH`&tC4O7Uk!49>)6;%`p_KM$t)UO$u?FBp62 ze_zS*rEGzYk(G7nX?Zi-Xdb5X8Yd5TT8n=y+9v8UE3hh2JMsQo+c}5k++mmINjjs! zd0^pX=aSkv_rB%ma%e49`Sk3={Qpn)|LK1zmV5qLQ-hJ$ro2-Ui#Fe`Y_Ct4?5H8B zs%W12!>9B{s(`E8%g~1FGu6a6cLwvmG3bz6{N+{Uk(pe-xs#4*cy3w9{9iHSc(m61 z66V?5N=G&BuF*PrJ4v-n>_~Iqq-5c~6HiJnHTJR|Oqde)bocp?8;JrxTwfloe5uy^ ztnn?&#JDMOIklJVm{r4S&s<~Xh!hI4a#HdONn7oBMO?MfWXl<|EYWrRxt3z0F4cjP zT%3*Fe^vEd-rH!K*8A?$|K97|{R{VAt>-goe#>VvQ@!i#!*BO*-ak}+tpB!nqIlWH z4=TA_^@=lnTij|oPrb5C6`gu>^|c53fsyvh*DNk7Tc0J$Ej;!0^C`!r zYPFcNn~Xk%bFSHWWG~CqMAH)8Lq}FrZM$;WfiPT5P9Y*Q^wN=zT^)i}A(^4s#_ zsH)JJcEao2pJ}`_7Qb)O{^efIPMO5GDM!w3`8n5mpP1z$m$N0}|E2c73{g9C;VH-a zMJkDHX3WvAjvl{~D;4H&EnUp?Zq2@3y5Y)Gx+hi4e9ivU?$~PUeNw)wRHE9}{hNC0 z-OntO<&z|4ZgO1{cY{e_x~pg28P#W%t7Z9%jwA(gJDkzn`%$*Ph$S{qh@*I^@5|yn zv)nD2)@XD#F8m@L)z>-wvxmEZsA{KvNu5D{+G^SU!Xp8JX%lCPhwV+Ozx&a`{eXyS zqTb6lyKa5daL*A@{i*xhdDk>|i=+h_oLQW&AAL-cyU$U(NM%Z@S5b(y+!Kz9MJkO? zU5dXI+a#_jvpFSr+r{%6SFH%!D!s3Bc6co-v$-I6#>MlMSFwM8f4gPVbPdjMP5XK5 zmQK?&R)>B1ID5u}?h?DQ>M&qau8D0)XZ0WnHS^3lWcKH zV_IYR#WhPx{Z&dPI-C$xy{K`xRcLJ;UmYLr_Z`*+5kQ(W17(jVbp zHx|o2c#$!)+UdITk&a1sCdaGGhgXCyo7=K_qQ2*?lQYkiKPi88`YDIbB9;3sCoB^; zzxiak?6XV$iGs-snt8kq`EtDU+xfkl*{1uyS^hsr7(rJeof~uD4h2B%&x9Bn_x=qQx zzRXsbcN-^*bl{{ir{exjhG^D9JsKyi7IL0&Y1qrO&~3_*xf4G6ir&x{$ae9(#5wmb z-{L^=f$9{9KZIqm$`3D^s6Fr%fi4PK)RbErDDY&nG7>4{TExdLzbRwrEe( zzP^5!xUAh6W1aN2Np4GP zoMKYbyab%)sn68R6pZ26>dJA^d&-gJ0i~*nmo{>2vf~WgDY#|N&NjUxMzs?id4yFx zwLH__80eU65GZow43XSi|M~OIO<`=SCx|VYt-%?#aPEx$)^mNO6STdKajo^LUAFpr zjp-(rlMz3c_@3y`K6ff?<|Zd0j)FxhsjWSQHvO~rm?g#8lCk>-e7q~iIs=KSgA zS$mlpy{E9OXbHS<S{`9Q5jE+7b zyWjCB7Mg$Sp0$_J(Pzq&6)iERPOe#>mhW&zNHtN5S5b@U+}kRPpfc}!f}y6jSsqQ( z=nUZux^Akwjfce`P-y9;Igbt%oNa5opz8H0IF9qFkbc^JhZ{nwCpEu>J=&Th))Bc# z#W=NQ`NynpTt~D5g=QEDJbf{v&a|4PX{rXN59d?&Lp=$5IDh%|-YiRI>6vxYGV6qX zpwN7wS3LW^ug;QPeb73@+jQ6N(!Kj$C~oVVR3d8CDt0qo(Owa!Ubre+$w?q_iI_-pVu zyh&`6O=mo(+r4Ki{n*w|U|^c3!5ODn>9hR$jHyeF%2ih=Fi*KNb- zxbVpOJwZ$fbBv_Qv(UR-=y3129U)*q0;aKOSj;Sp=!PC~V7Wz&(vO1>z?&WziQ=J`cgjHW^ zwf7gO8BJo-*!n%ZXvT`;eN6|{yn@0`c)VbUldGIo%VOv|MP-dZgWm6LslOdmgjG*! zwLFtD{<)Z8H#^fzjgujqzyBr+cuGf3yUVQTbA@TS)9SjE#Otf;d!5g1>Q?CMoa8d~ z!JAx{wVJ2TH43O@oebP*@-XFzrfyEO89$3b;H0HRf4LIwm)PEBbDFNv8E7eAbU$Ui z!x16Xmzw)uoUpY$>RmPcjd(}sA{EP2pAEA8{>%A}wlzAadKCrhX$nS1Zeu^99w;>J z)2;pOB{%xNu-udqnCIf@=T*V+_^4$6CgTZii&W%P4_ZC?YQ0a+OmDiS-}mA)&t9F0 zE4Ju+b+{~25r4Y*eUaO4Ee8?ijmln3ff=@SF}r5pY1Pu|uvnzRzjUX-{x8W|iy~Ph zr>HFGN!|9lrX@!7Q)lA}LDiG$6DO+F^=n!Q=o{%2T;BNTkjv3cTt(WPb~6K#ysB1c zZ4qYvs1$X{Z`R|z^Y3-1bM~v0Wq*0n=@x7v;NjwZ>ZG{p#0zRKU6!N@cDt-P`pE0W zFX4%Ou52oc9!yTP=+zPsX5OgyEA`;gWx^%(xy|~yWY?5WIkp{Yi{iyvn!cB?zp?00TBLgRN!5~=9Uu4nc%pWrM8MC*dx@v? zg2l=WXy}psu32?A?%DiO(Gu2;m)3lyBkg_yy}?tU^0W^a^v7F zt3K;b?K)?Cr%jjbqx%+?1rz4~`!`F>s?Y0)1j2~j;EVW$gAq8ep?&()>vLCjCFRB;#wE)94`&Wc}f5O{*m0*#ms6Xb8zARv-f+_ zOP|c1w6y5$KZoSXTl z#Fg=**On(MFI1|pvaiZr>~Nmxgr2HH>ztQ0%LFSrj#h>?E{iy!eo<&vk=1>r*%tRb z7?(wOs9zMCap`a0<82H~reLS{Ccx>9P(9t^Q+vU_bwg1 zY!5xRw5+&r?$i1WOT;Wx4Y!r%n0B}?QZ;KWJN-FxTOTi*phwBp6YF+=edxA`A)4E1 zLdHqwlT0h`FYk|xdYxSyX?k_zRRyWexCwzPykdWFXly^0*DRqDbt%wIJdL$X(nbDa z=>BaihlJi3ao8_X?c(NiQ6Cia784yY1dj5WCUY>>;R|sLnFI`zibV z-{J8dovRl3$+UnRvG7Q&R;E+l>&MUX73Wx-khnOhpydrW6d6KDU zmeD%1U_ZN=WmnQBJKhmoTfTapY+XUcyNzp#B392hz!rM`U$ccu)cgNBJ{$j7T}};l zsu9w4)J$%uSaT|_HA6KjD0tec)9nZJ+8(Gz=}*dBw>{*E``4UUj;KYYd-vSyU-R06 zQ~JgMflV&n4X51ySIVj<1vb9re(1F&E`fd4hsY!M3^o)i26bNJ>wcnIJL|^Ts!wY- ze7$d~x>lVP5L%1?Elx~ytk%UkHPC9b9^b;Wk688_yuwh~J)dTacDf>@$ znCj6u?;hXm@cuL2pF$3)Jp8_6jlAlOWo#+ILMxqGmG}y$8Euf{J<+3LlKMw9_k{BK z%$ckc9)%|=2fD5m_;!B!W&2tObJv;kQXibvIrB{DWvAlwW&ZYA8de=fi&TF<@!4p8 z!LH+gU71O&fx6rww=GBJ+_8K7lF#zQyRtT)m~vygBB? zzPpdxw1i3P?qvO092Xazeb@NxZLi&Y^;Iuf&2_qE?&bDCuJt@$N4s|A0% zdcW|IsQ>61FmrE%oW#_!oC6)qi&dM{&hC#i2u%Faw^uwcaf{2PDcLtY1qI!_70wzK zUjNefm;YhHmLnH?+75H&WOHyWR-LfS(?eu$@?@tF3EfPShmVe{ZAjkiv_m3y*H_mg z8VA0$6c|Pw%5vg8w({uP8=V41Zr*8UEj}*%GU4{yDOQrV1)Yv%oLtMP?s)lm5NG$J z)gkY1OcL;O^PcB>TOLpxS&Fu1+v%0xU7q9C+c4NQ5R5x#x zb6=;-j;?#L!5~`7>1xKw)10E2Y1Rtdfo3Kx8!k>-=zL#Gan7CNUJ1&lZPzUF`z^6s zQt4I(=T*hq3OpqXD*J`1w;3MUa#3h)@s9RyBzx$`~&(XcAJ0X-sP~6?y>AaJ{KSNF}F_(Kfk+u(>pRe1I z7Ww2BcinkKxv3XeuU&SC>zlS=p3ryZBmZ?zNlbIRrn}L0esboIik-UCl?(c&U6Ff~ zv80G&S3)%cp=;wb&+U(~FpIh1K<+CKbTv*^NRrcW1G*F67Zs@IVEYro!sd2Ex4 zwy=DQ;s1Z^$jSn@saii>KG)dyY-QaQ@yJ!Y$Df(gDk`bw)WUfu8M1y|cV0JPk#?C% z%ax0hUKew_-|b+!yZ`d?Kh;wb-#dE9z72Ccdj0>x&nkaSPKD=KcdT8k`c!?{hP4?R zA1fT|o3=v!R#Po+wN>n|o*t(+h8a{KnRyC7hxqDIQxA4?UeX(Ardy{gk zJN7S*<OAvtA%aUp{7Gohm}3c^j+RvoFr$m_xO*?(>J}z=yNpses5ZQ?oA&SbldL+5ig*n9PA}^J2*o8q!_n^mQ1<`$#>lEEz&Y2`$>ZrO^ zz_=cPf=-?Rk89 zqNaDx#jmfMe>AL*T&T~*A+|*IV8;v=kv%~x7xxF)&E57q!*AX-5$@9~TJI?6M!GG$ zm0GbbKYo4tKY{ta4<)uvP*@_pdD9xX{+WHNzvMc*XzgszvP<&bvMan(=I1H>rGil%M#Uzo_x1w%0 zsLJ6JAJ0T5w+df%RGB<&&Wbs=)^N+NYL-#ceHpN2_Ounxc0E{Nbt3kX5c^j-p+$Yq znN!*RKj;W*2#{T(_ww92y~(U>XLiI{*IAfYMtX~Dgs?OEL^&PWtHcSD(F zpy@1)hY?IWpEPlo{?b|?lY667pvTi&C8Q#d@mg>k*KF=ZhMAqsQsT;PDQ~Ox?J>)- z=s3AVRW(a zIjO6yK}2`9sFPJD=Zr`5y?-A}d_QepymMVv%s}1rvh$Oim(Kat8;1q{dwO$RwRu>}5?S*kG3n-R z0WL3ZwW|exCUyR}wW(TBWy-XeRTFxIjD8)^PnCCW(73xkrKqL&@6QD>B`&9@wFLxL zHLmWOs`>NCylro?IwY62Pv2VlqC;r;-^(3QSEjw?-MDy*OStcpL+|eH$cPh~rBf}- zEH6(^EJx?bLA z%qiR1=P+fx-My5=l&=$fmZ~aupRiF87TagOb%VaHLe|u2Z`NEoH0jJbZtvCY4BEPp zQ9=1_8P{7^Uv-{0bz02YML&KUh`oP$J&qyTc1ctw=MAl_KN^?Q%4-%iKJ?%W``LNz z4%4UfllPhZ1NThfoa zeOX`Cs1UvLs%hr7yd%u3RTt=ZiJzJKE$0RYQ<%3!B*XDG{$@=-x9V@HF3hV{=k$Ei zbfHIq;#)8a`)ctS zMp4gSGT(oBL+FH}?37FM?g|SY%Hq`aey?M*;)kTFgvG7R`ATsSdvC9IUFp6kX9kB{ zn0`ds@(DQ`^p2}_8YF#f$`lJ|c1h&4OnVu9Z?n8oUBq68S+Y*&yx-*nw%z4-Jd(v} z%02&x;q07C;nLr%jtHzSPxBOs<=VJiu_Z!xW7@{c`b#%W=bfMu=Dki*HX*-$>XxI2 zjHMN9)=aZ8ZW35Kd0C0#Y+eDGFz-z_Zy0(%*EHD7xad$8r?Ik>%Y3`-Tsw0b5;jCl zI(_NG|H6#R+XD|yQJ+rk3a+l_@0?Y* zzv0=Hz*Cz=ijMt#=O47VG1xQmSCe<_2F*8@71JY~hEhe8cX-Yff- zP6+i%yXo@E?R2=|5|Of-3=3`x#Hn;UIF>A_u=AyC4MjE-k;O(XG7Gd z)61s6|55a$O(;?9W3n)>nQRNsYSlwMjL}yP9=`cRWL@+&`6IlmRgdOekt)pKOjr=T zO_qg!wd#=^k&IgBYQe&qEpKc(q{F;hBLCOztL?q8NaNtU<{gP!TV`xz(NEr<*v z=G}7BN4;&|v|J9wLs^}MkMAEk*Zd-3tIM>`_=9aAmdcc~@8_>&eRwd7Q=_|IQQBup zqQ7I!hNz%Zi+KKvd=p~fSgpFEM>QxsUD~l^LsZhKXZxG~G6x=fmDOrs5_e}~zJf%A z?#+~%_p-Oyk{YiHd3<~Maz^dr_4_aVcy+@}fN#w-i%lW6b=S15w(%VKze;=ms>zm( zYmOdkv`EryVy8q>I6lr z;z(@A;xiX)tTvx*65F)jblc52R)J}Y zB+J~2IP}B3Z%EFSSlk)V82*aKnp^4wkLsH>pVuc&{3$Nm(Z5)&_?!pJ#3NZJEw!T) zXJ&}$xy@VghwFmE#(%q0U)s#Qn6{*IM$%T7*+=~kdq@0u)VytGzF5lyPp^G9T{`?t zQ%*^8D(;KW)l3&&=;M3IR$63H_tjPHR*Mh2D3)op2(4EAptCDz(fa$d)l@frdE>z$ z7nVKcwd&Rz(*z9GOl#S^!O9@mOSbzjN8q8XlP2DgiP}jyt{uE#-V<*A*uj-r_euKZ zBmwm`*H+&Y%}#pb&mj@^dModVh+m1Tj=XC*kht~8^rs!FOW4ZPTKHFgZHlaal_vGZ zr-MJtyD!pHC1TY^S4E$QwRe@bY8*~$RY=_0GOhP3Yo0w`nBDOM-&z+WmHyrI@SEFRjgxw99?7M9S5($mvdv1GZ3( zd)t?E${+qa-+4+#B-6c?Gd$LRe_37pzdT6H>hL)a=8H$OIIS07nR&a`MyAw8fJbqu zX!^a#04KI6{cTT+Lin>DC%#!>Dx%9GzFPJ3o4;S49)JGG=#5THugvDU3L&EqmNV@V z$A!&*-k5j##^wdRHYJU=&9@XcZ2Yp%L-|qo-h?@8J=`~T9i6b#D=6~TM0-B_WzWTq zz7Ka5pSU-xQ#Jbf-1+S#k`7`m6F=%Pq`W?~xjjle(&fi0)y|w)vqZL-wu!8+DMy9e z)I=9g&~@VY66*aUB5l{xRZRJst+!K!A_bhqa^mE=pMGAg^D0ura>LEPKlzR_r#yG& z*>LO4_WP>>(t}+zHbfPj(zu%!GJDC+9pYwgE&o=juGGm@cs4iX`=Mza3*xsPnH1Q# z?|lDCwrItq+N(m2X8-18zMFY_qpH%YaNUo||78#D{5)Tzq=|b;@P@qOY#jm#TQ_Qp zriwY`ly|U%c?;aESfsksy}ok!tect6XW!moU0`Z&s-$>Ns(Td%dycxDx8U*Dg~(|R-cBV)HN>6A^fy|w;w?Y#4^jKXy~ z4*oXHxUpsV`DY?QdXFEU7BLiZj#+n0&)<2{+iCyiMJ75j{al*TTKl7Vh38d&8&%;$ zO*}^4o*dlS-3!fI7PI9i-`pwq%JnppX8pZXABmMpD&e|@i6Kirl+59M>BGvcb;3|p zR7dUMW|vqMfvKyvWw$Oo|L=#KD37+n?kN!)Uc2A_Z@!;DIz(XR>S-kg?`#!2m;Qg{ z{J>XD&{eiu>Hd^68^TXb_;F(Uw0*mn*L6Kv{5!QxqEo3S{B2pi2=8_oL)S!+-gFK3 z3A|f{XJ_t^OxYx4cI=hr@rpGn!ne-KT-vhWwNbau3gz!pbv9{x2AZAwa?s_2thwsXP?cOmp z@YKJK6Nz7&iob~&J=xV+_5c0PidUb!erUvO3|E>Kp=+7GCHd2@ht5hTHA9z`i|$rA z)NyrE&b5}kGF{=d^SvW?cg+t|H>PDf|_flF>Edg_*}O9(8}d24)t|_%AVtIOS$}&CnzTWpQK{o^hh1X15vuVZ(xBG#QCoDhT@4rf`xTh$mwSyzfJL;yr zNvq8?zeC&Ff5dN1nZjFAq4}L>oAHsKtNtdf?I}t>_Skhx)YmebrGDqHwH}Du$}&-~ z?NgQYv-gL(_Hr`r$vP?X`-@`kyBe!yeuwIsJz}@U&z$o##wC2?Rt2kYUBx8D*%?P- zj{k97e#2Fub@j9z8_pjtoO5rA*ABmpoeDhRx|WG|pZ=S-@8(PY$DDV5WQay{Cgok_ zHn?F}+vwY;Y<<+P=|8fFKjqnv%bJ|5Bo#) z^~)z57QE~b^Q>|rLsI(HNzY3yc`^$%jrSb7dg7eQ;qDph!>y_cc@93``@ZH)&di6d zUL5m6z1yx&eRZ+*i@WC22(Fp4R4Q2uj&@Db_v%;{YTlic^Z!`iq;GYxY*nm+DcM3V zTxWA_XWqLspmAQn>Glmzq>kQFYWoni^+|Q>qeaTCAExpB-_`SzOY6i-m1o^@XMaR~ zOP2AP7&&{clJov1xlh)df4L-I>llbIvRq!J`bc~3)w4@eVvkj`@;)i&-gEtF$&R?% zGcSrHU%GN}%nJ2hGX1}AYHU!%If3;Bwnn>IkG#Iux8}J>8T%P9cSh9Lo zr0$c7ugBLMjBA<^wv{FC;-X`QAyNzXF5Hl3yku_F@|!*a=T=SIvi9{`JD!b7H*!Cn zzTqQqeAToiYyX*^%Q30uSQK_uXq9Q(jERZ`7RM6S+_Vu`yK0(>?x_iiE~Px7vvQd) zuFN`l?pNs#8y<0|ZWmTFE|w*$ZoB5*=$|Gw=aTM*Kn0diUB<|}fB(ij>oDETvdHi1 zTcyO`MZ4=;7A;>M|I&Ct+G>XlE29=|$or!Gf?035=k8f=nHZP7Vr6*!wq)L!)GRX| zmZ_^$KWDipAM?L%)Vt!Qm4M%>xDD&xJ>T=K;N$$jHeD9SC9hZ?zjFCk+JAR(8o%S2 z6;VNJGaQ%ZW?t0f+EA?!6QZjb_WY06=4=g)mQ}Zp25$ZLE&f-{$rY;#Y_p;lt%`cZ zm)NpQ>9d~mN)P75`B|Jx7k#)|E2nhuUh0Ps0f#cxgTYg-O8Wg5KYjX*<|T&-%XdXT z(fIjLTdMHNiwI`PX-j-BmcPs9ag{W74OhMrtZNwjeqoo}?C@pA*;*P3t0%3|>~eb< znsy~*ht$m}F21=Dl3mpoA1{lR*(d4Z`c~mtu&!fB{J+o1+jM4L40dF(oaN%Ln{OtP z-(M6u(fP#ksG=1SYIENIm-?Rg=;V?g>sOYidxcJLYg5+@)$!$%37GsevyM%~K!1H| zh-jy>MTl--XyU|ozB!n5cj_0*&E`&Wx%&6eT)m64cz1IpIbP+?nyPN} zOY^(jHj$RvRjLcSb{tuMyykn37RRR$Z;7k76aTzYZ;9Q-zD=~Hbd_qA))}V5ld@~n zr>$j8oRif#OUchi7_`3P!m_BKrG1Lw`%5@ar!{8yZe8LLnA&&R^65eA)8862e78Pv zyC`{J3fp^~Xoe=EtCPfB@9)nw5cwx)b476C%D4%OY8Jh-KFut1aeCIt)>rQgmCr}Y zUFX;l^1XZgoEw!o{aG!Mt9~C%%J$MPnYLVKKJuE4yU%39uiUWt`7fyPWShz~LRy_UOr8sA+AX}Zbe@`9ULmz#$jpvu1 z{#v&E|D~Cw(->TJ;x>Ie++ZWB`V z+50Vj`Hzp&6x|&eX7;R}Njj8No*72bK6ZxRv*OunTm3x%$^i2F9{j2Ad)2WIc%X#iLkIqP(+`CZdt?!-te$slp{Z&V1 z7*49Xynp^b%bw=}nYY`DwDgoc-V4ZQwq1LZ?J>)6Qk^pE;e8jbyA++D^g-@zvgfS} zosDM2IUYO{(|c4NdTiwJI`w^dgiz%5yp7jp#y33co>=-;jGZfq|Ac__F0qg4Jt+@( zes&uk&OUVX#5NVi=Vhn1O+9H^V*2Q;MCZPp_s%DVJ{EGXQ@h5(ni4yy)>!Kg-{$8W z9i=lvos~GWl2yJvd(}SgS{;Y|d^wlHQYQ|pykBJoA#FZV@i+9?F(mqS9I(?tt-uubW-Bv z7R%Zvp_8ZSvIwS}shhaIeu<*U;fT|EO&1K^Cgs?@{H?27xg|%LLoQk6fLh(Ym+u>RBnKE%5M8Uc{|FA)9l8 zrpG+$c%NRa>*-!#n6LZlgNFMP31vpJ{Tj1>Xp~mWP;Tg%C^Eb6TjVk+&*Z8e@+}Jn6$n8;1O?iK4ckJ=QG8a>Np4`0faG^=`i;4#2ww{SLvjrPW_cF`f z?~qMi)#`ac$p8LXIgS2ekekvc7fGGIIZJz~D^FnWaa*R75}aE+vl`tTZNLBR4*KeE zs3)?jr!hoQd8e6Yuh5Nqv-hyay)a_Cl#kO@WCh)09zAFClRhm!^myHdM4ptx5+~O$th#?$?y@MW zOPk@OaOa;#KHi$Q-gTYYNt5+|-EVEwlaXMyG;lM@{AV3#-!WbMU3cRh@x@}#**?$N zAP~=^vQL6@p{Hus&l`z~`y@PS425i+TXl|YKJl?-xAq-z=AHU(x@9Jx7<602nK|{{ zl+uq~*|%d>=ng%$qS&66b5nTN9x5`N@H9y!_F2`bmGZW;8I^WOY-QM2zGZ`Vd&}~t z8Zqa~8U*y*j8Zi^Cr|J$Iic$-SXIVwB+qb?`secxzrNCZ{OaHR`h_N*8ka=2-VhMj zebi&gnO-~NjQN_rVpV3WEjfl&8!vfoxV@oUYX6?9Z>%g?hC&LLYb&D6cC=fvPpsfC zymxc6t%6tg#2+(0@Xq<%T)mBhCCzY>g!9#e+gtA4+U%|%)je^-j1NW3zvn+H!*gZ2AUlcGy6X1vioyOC`h_mObJTl&R&`#&~hd#cLZuoMV8y5?hC z)0yf0s?Y8mU~4MSayt}v$-P!f<}q6t-w{7Uq4!QF#qM6W_}nFwBhxV}Ni1Nxk+Rec zEdhn29u?fi0gcDzX%b?%iLoYpXhU)5P#L%?#KCv$M1htR_tGv5*#nISVv{91ZRfg;g{_t>Z0*|f4qz$ zUX(AnqZdDEu8zwLiIb6vdf_K7^Q(XE4?MDoW0UU5@P)=Zl3#9kHbdxF&AKRetq#8= z72l)fA$8VMa_1E=)p%-b67Wh=v2C?WdXXN;=Q$_0;`CmYj~+cPOKaxV)y;i$^^UDT z!x0aiQ|k}wnx2(qYIN&yS$N^z;{5yXA{&3RG<8Xwv|so{@mIo!kGD@pzZ2t-NjkHL z;eqzlRsVf77~?O+>!h?vc$z65|7I?)zy4>@6H%d9Csw87Q4+E<O zw?*Fn=8_F>WcT~A@E8ik22G3J`}ljOf})#~x8A?~!MkSNS5<13;MD&3|5)9FAG%6> z9TO`iz5DP~bFpq(NyTw}!9s_g$Se1M|4`>+KK@?dqkYel2`y9ntyKSsK3n$w=g--T znh(gkUGg}T_iL&5{D1d0IxD_wpQth^xnO63mcG^oYsDAs6F*G+R^oAXv$Ep3_K7zH zfBoQoZu-(QCi&j3avOe!1^k;I^a&Jxn=EE=S#5c_4YxxBzjCK?Ny5_8(?7E?B--|* z^rkdTDwp{uc=E8vjuXEdCus%Umia4q?6AiYj>pq#Ju?dgE+(qDKdISMzhn+ee2|pP zk|GID!JXgcD=+Bm>o~r1tNu)0zDE{4EUkZjb?h$LmttnY@yI}k=hB_xq<;NQUOpy^ zp4bar9ghW9)w|ehyyWG(WY*)-*z>z(snkM!OFq6uW<9Y>!Y>x3+KIpLp4Z&Ggjac@ z{KGRTUQ<4+o<8V!u5IFmes3@RPrT*IE!PdW&$yq_`@&nU=yK6O=)=dE=R$t9Rr4)M zl{on|6wU6G3d}y_aqXBx=jY7a1Ka<+6KFl;F{N#}Bo zM#ax7s%|oeS)vNh<2&=uB_34Uw8Cv>Up;S=uSDm*jK1&l`U)>SciuC#ub$(O&kWY@ zN>lQ!zCZtx_|p2HWrt~^%9kcTr=!Kk_dTxb3=no}(o0hpt3Cc#C{e8^B{pE$e1GP} zkL5Za2p!Y?q-M9Pde@xaDvP`&wnxN#c%Jd{EBAgEm&pd}>JJ>~)cPYO7<9ff0vaPm;a*A(gP458L_e|_#K{d1IY5&U$> zyYw@AN-rO3ukK|J-d z%^hd4wvX8xj%mvt-rq0jB&)k;`$Wd6P0_ItbLEVTdg7XK4S1C~ z<>mkW6??UN!-;hr3Vm%83;3Oamj041X?SgQ@z!RsPoj)FhGrIgzw z+hr;TX6_YPw!GZ}r2UEN<4;oeC#DIeJmlVV{AIGh{?&R~97_^aZYr-3__TZWONnca z>vTHh_H!&Xd~dz2Lt$Q9WPt4<=VfdAF8`=~?tW3@Sp?6`RY$6Q-g89wCDv4R+%cH+ zbK{h$h6%^r+5%*jHC~B)O{A2B;k1V;Hz8?9!x;&?l z<6+{gXDihLCfwQhSn*8z#0`SCW`BLYQRn@d<(tkb-e{kANATB|#ht%gQqJqOYsk9= zxo5aepEe<)$(HY-ZBI+zoR^tr-OkKA%UfvIv!r*+^z}R0qNNwrNSu`9e5q5bB(_Q5 zw$!288DfuQ`x|G%wjIzL}PhWn1 zEcmrMo!e!JfO4d&-P;-d`F*|u6P9%ESVNiG3%?pnNR~_8eW}xUMSKu6|v ziEW8Ht8D^Af*9JjRL6_!q%#*PyBYb{MC6M!FLAJx?vOE@RBa^lv^ZF&=}hn@|6_7? zulZUp+;sTX@ls6g>;3x4i9sLc@V4|zaN29?8?Xet^Jl$q(?O{7WkH=jW60rOQO69g zwcfbt@StO2#FR~QF8;c`cxK4Ka2o@yL9*FHma+3T?7dd9Lx-?cALb(<8Nv|{$@4Hp%|Iwx{WeQkIy?D^zojpJ_Z zFI3$Yg>>Ed5^TF_<6Xrmof8$N{{HE8T&TV*xS?k4jZXrXk9;ZUnkM;Ssj0(P3L3YxvT?t0f+froxR>l1W-n~EnJyZjJVeyOdQzqj-LWS1!x$8{G+ zZ4^}!>YAu9E&KleKNf%Ayv&KQu%5U;ZEMnVXCD#ejXDR-!?xb|B%p9qhe3B?&(l>B zw`G`?N^oW?sxQ`zugYNzkzdVH5ZM#8ai?NK*URhu9x1k`I%~SOsvIh5$~wgs;9}<& zpj~Fo5^4DN*UC^qunDKUi!* zJ-0f$hVo0NA=ZdE{Tgy_%R zF89~i1}(fL7J6inp|_M@!@b;!U9#EAkEbt~vtsW<$?vYxfjK=XFMQtrerPNiA#J%| z<&Dq#-xJFe_ivM^H_rKR>zUl)1jhs0B-)L0Hr!gYJ>6D-`^{;#<+@clTR5gB$D2vy zUQC|v`a(wgr0tIVVxeV`ELS!Py=bn^3QX;Hog%AkXuqRhEVL}*$i0n1|C+1Q15@i= zJ>;}I9rBk8hWSP;EC~8n|85@Nn+tsF>)$7v1;lRNs}#~db;bhsMTxVn$v6jY{vn^F z{AOFn^JH-YMX!LDa(6ANbr1cyA-+Ab`0u`(m4ZAc_N@ugkYN+ONMpocz{& zuJlaY+Qh>yB8u9YZka#+c+Ola%-FW(h_vX&!pw|?C!TdKa1Imdf3)|X<8)t+=_WyEY-uY;Kd!WpAr< zKi*~5v_&yLbcxZJsVjB%+%3mB6Q@p4z4D^%n$C8%`lP?@*P24}@-I#m6XZMj?#!)h z{@-y^R`{;`zuxK6W)&`JYwmiMYq=5Pu6&+(UW-e*tD>(6dY|;_5Ps`jH`T(+Pu_pq zwN~~!j+-V;^;q6{MfFX2TajAu$$cJ5cP33;vV3Ed^+b(X!Ka$majWcTKB1~T(f?=O zw5+FlLfCJ5hbb*kbBp8iDHYhAQqFyOsm!X&mJj1!73HjI-k`dBfjw&pYpkUCs48S#q-5ouB@Vvty4MOYPJbixucUj&`dgc}D&Cni_000ZnN>9x z0-N@7U7WT?#V$5~PgVNO83Gw6y&ehw{qw!Ta5w)Uoyg8AF7e|33C)g6RJ9HLeWm_Q zlVuH@_GZ#YmslIW=aV_AIg)fEJF9lJPW|z3wa11=g?p2xZc*Q5CQ>2AKlw_ZE%U`` zYo6F%?6-I#U63Qiu`NaQ!^!=ZEk3L~m-zOEu|W1ouY18q_-X>A>MkYhc9^3Yt=s1+ z6;=YX6}Egai83!X=_v*CyH*}9{fsQ zHlF|elE^6=>_wIJmj9~q2;C&~-6i@?Nav>y6CbCENJVh`ob|*u_WgB3*RLkiwbK7q zbwqFCz7)J~`L)YAJ2l=$aL$}_#IAByOwe}Dw)m89u51^luX$o0+vz2%zwSrUlVYKN zC7huLg3Wv_zh8G|m>kNT#q28|;V8~}Bw>>f!&fnbY3fx=9#58Fvy!%J`=AlAS)s`0 zWXmGO66wz_VNZM}Iyb0kO9oEyui<4b`XhE~>-E<~W*ge)sA*RQzBzE+z}Zgr_@hOW zcNe<~U!1+>h6!7u(NZ!HX15^nmqN# z%Kpp8{dG==wQ>Z6U0N~A`S(=i)!$pTGM8>-+*m2_ z@1z%BXkne=QMp!+fH0$#8hg9KejUEiEA+;jgFRKXr)wVP>LteyEo<2j5O!Vr#wqT# zZ+pK66t8nU9M-}RSaxvvA_nW%8aehH{Hdx-y0q4Mi+)pNY2PFiDw^e=z9Q)E23AFb zDObC-mYlu*M(swufaEDJr>k#EJTw;WO1$hCqM>~=r0`Df&s@(IUABV@*DMJZJfJQ* zcirik&lnFaeADFfG`K0z^0k3)E4_`E!!*3Xik~zHTBx-rZ71L)l=8J_x-=U(6Z%ytI!Vasr)c`B&pdVA=lHzl z3qfIz*806YyT9-LqovB_Ikp`7sb{$>)?}(`b8Y;paAC^S7200kY<^dmO7k=M++=;) zRp&ijFa5YD?^y3v^1f#AVnMj`uY)1cy1TyO*SUdslM2V}+*n#jq*tKW{(( z+C1+!Ym!f-=k}__S=NnRvV7k!il}~aeKpUTEy*|1bJwD{tL|3icZ=H{HfU-mhKroy zez@}8PGyBtQ>Lz2y)nx9---7-^%YJ`nYv^3oe`@gPInC&m*s|hOEbGJNYg7_^L!T$fv04M^5&PE!@^?E zKIabKRPl;6qLO^B9YLvYqnd(G%y!&AO?LByyfdbq^l4 zD@23^?KpPwnCib33Q2JlPZT+(P1Vu!XRY~lVqsTsoY&?3EjdP~5;en?IoC{H95dx9UmuZQbkYE4P+oRjPQ-`p~l< zxoxvPak#bUY8%EsNDPXS|NFUYhg+iD6^`Ahs*F6`mv^0beb7Bo?tRD6R8`?O{)g

G2B&Fl|H$6f%3cX@9FXKtjbaHq08PqeNp_!XDRDt^|@}(R_Ja>eiW>J zP@7+X$MKu);%d&=>zm3a8vQJhl6rWjjnV4X%aT)>zG)Jy-kdxa4lcfQF-_32B60m8 zhN*=j!RkR_+-)jzREf7hM4!SU+SjTKjxifQI= zl8}gQd~V>ND!(#QKKLHz@nbhuuF>GlO3K+P{afMwhr|g10>32Nl#j&h5IlBV=t9M< zoC$&lb!UZtwczkO8hGz>)-0=9z;vTsW) z=g$0b(d)ym7@bpY=8YG*dzLJ|aQN#RrcE0(*{#`4W?tlIi>oD>@P{P*mae;&S=u~O^{m&Af*^`lL-yMwhq)CHA^%~>g~TAjQs&|tIg z;&W%rf|u}Dzg9mv&&v0dyZ1p0@H)ne^Gq{WOjlbVJ@=kb@+{}cOMjVgr`z)c%ylj) zObLD~!dfcAwj$$uO2Gr=lOE^v7njrp8a^~T&3u`|eM{g}N46M|i9c7)+NZGU@R!@B zU!H$H?Oh^$rOmNbnUihBC;mXYO)I7LMLT`mw)tJJb$#GbZjFz%e`iI-N6#;1RAzOT zOf8tA9(&+B&wbAiyJmN*H)rm3)_-vJ2It(sh3_i&xJ_N1dSf5Uw)-bepP2F8%;9ls zG6&m=Lpdw;_46h5b0yc`GMeZYFn_9;Fw0yHwiojhSH{fitS+ zsTJ&}63nMRMP<%8wUvhgq;^?WpMK%zbUjksR;}jwG>d@CK{tMcP2It@qr&95YI1es z>#*rlO_Ph9^EPI#DS5hmv6gGW%MCNnn^}v-Y=5)m?Y?^9^@a}ptqXKJTWq5C=J1|) zcSC1Ku4m1nyIuY&0bkUZ>($vrr^sc8%=}`k=5ej>U^-{a)b-K&yqC)!sJ;>CI^x2W z@o;H^YFdP-@dob2kG-!>XFF~k`X$nst#ws{zO%>I&t_eE z>Z}#N@VtFB#&$sl+59n~2B#k$t(gAdLDPclT?;OmYTjR%KCeBHDO_?|^{$<5Yo=Og z`dxFKYi=+LIh{`{k~R`jI6-y0dW-e2cv=-xgx=k+YZ*00Y)Rj)Em zpXM=5qfUV7PeMap=Y_d-w-$=j70-94eUCGzLTZ3m{l z%$-p5=luDNJ_hUAuFGiuy|KpI{*l7UFUeNB3&j7OnHzj?W#7TIYZ`vnhEH11@O$ZY zzZaE!j@iwOyN)_8Yd=tZft$VWyVdTh11{_5iFc(mezD?C=?}Fne(3z;UC4)wy*C=Z zYQ;Hs@~>H$kzKbT?$-Ob?e{+}k@?xlcF>NOIpny3S;-mRYTp&CrxF{uWReYTaDHBT z@b9Ab=WC^;5|_5S?Y!h}b4F*exX1JY9f_Ym65Wc}lFN;1I{(`B-2OV>QEP&=fwLd$ z@%$Ov-royfe==pl?;H9vCLOUlAfggBW7^}KN0uzNZFw%(9zSY2;o@_q|K2mU|J8r_ zX;RP9yw=F1b(J03GqR_7Hq_M3+x%ctGo#hMfPmr$@`|zVo5S`z#hw8MYT0%O^C~$hO>@^l4J3U)BVfeFue=UgrdI9q!w8kIi&tP9b}o!-jGv z!=I~De;Q^8#7G!898X@gaEAY{D_m+)5(~OYUFVB?Pq|{n8FTcF>w=b=V&Az1s}3^A zCL0`@A-fy2_VnW3gFP?PIAfmQb1+wHFIyTIa4(@@)k4XzA0LgI#qV572zXd{rhBgZ zO5GbD4Kk{a&%b*|M|_H``~zY@rTA&GrW6V%^kh z@d<4P2i|4Kc_pwL2C;~H{V$ZyiA=BT+J%72x+KSyr9gF-wY?d~kzxcYs?vJ^)Tbc4pRCR3AB}dMr+fx2HY-(KIeqUn;j|9BgKh3t2a7ni8+_dT~W}F7_7^&24jHj&bah zQ7M_4-G55r=8hSi3VXs9$buI5ACA{E<-R{pwc>8+#H_Q=Z2WJ3DSF5$vt_OLoLHT= z8`9W#H(km7RvgQ+@^%7y(Cp~YTWKXs;cl@#CRPt@?E|w}3sx6RtUMEVGBIS^Ojbz- z=8&&EAN!unD6$u`@!S74m@^=dd&}|b=>f6))3}RcJS>heu1fISGH-Vxdz{nvGKJ6A z)1NU0J3JJE>B(|4JK#9KvqnM1T^tvPF1C%G?2rR45f`=mRGeQnJw4S^2x zL&_!mE0r!9?wWp~blMRQz1K4PbD|Z0NU^_op!u__yhd8(9J}gs!_7NRONFaXF+9wu z<*b@o@?3bu>(<8$Uzf`Io@|nqwB>y6JiTP4cVXlCs+jvZyJr?Q@X7V8F?0`X%=X*H z@?e2e^SRAS6-xRRHIx|?tzh7@>aFA3`nV`D#Qd-Jg6cy8g%dAKGxX(LCdd){Xr1%% z1uI#$Y{@+CRCKD9WkHZjY(w5QU+438&MvBSXA`}0+A-3H`|y(7b!r@nW=+p*EkgHg zQ#@;}e$qKP-0|N*2GO^ii?cR4%U8{vzGgy(m-(qfKVr5W?DK6rW^5M3diJ{bmfvln z87FnWDQ<{x5KcQeZS5OowuS(we{Ivt9AnQ!%nOWuIEj-v#EjF2S8`K^RCVIg!wjK6 zB#xC|{bTW4p>g%P8K!bmnVbC&H8L=VOi{Kty{6DeXopsd(u1?r-yKw0GeRV1%Gh3b z)6-Jd-1N?Dl~B+HaZaU%@NQw9RR#{CCq3N$tr72IJ(er8Mb@#jFLuR2sfiLH6WSiH z(VBR9k<--Rpa;7zY0V5>-E!&A-7^oiwaA8XXf#{xzuIek`1GloGFL&VPVt@7=PkRw zbe7tdvQ4w}rwVRZWyG}P>0#Fimh!5X7VB}HeDH6M9Q&QghE3noPcm8^d;8+Bc6l48 zbz)Sa*xUmCf>z-^wMN&OrH2hYn^a#$`7M~bEj@AGlH6G#vhS<9oO~jgXQ;SeSh8mG z3c*sTN zIzh>wUz*tFGgVzVTB6!MyCt)qb=5f$@5k=nDp>p%Jgsy(Y2#S2L2!4T#{(7UfZ;7j{WcUpu1BdM^PG(KIlzcE)ZHvkv%o5?x-0I{ z^P61D0woqC@-RHUck=Y@5~1Xh#F87I?>y~Ttk3uEqt(f&`tLl%;qqE^&M~!|`Nv+$ zJa)cujUn-}>V%~%=^qX}SjkdzIEUwW;0ejajcy*=q#b<%9{nvD#1@}ghP zb8m0bH`6{d>FPg$a4id`$xCA9GVROu=D5G_$r5dLoBcZ$w$JQmdd+g1mFI%3Ps#M> zR%{=hGEL{;nZ&gxKw3Tg`QZaxD|;;*+>LK7kX{za6|;F))(2kJ#wS}Ce-ur*u(+@6 zl=O)geq9TTc1dU%KXl5M-18vu(1JsAPxhN$_h@vw&+64FJY`bl$ILvT4hot=9j?d)DV z{scGYJ8gxvobR@U)PDOjY1OsDGun;Qa;CN)2uk0WI&DhurUiD}v=wR#4izskIHoth zck=};e)bhUH$;v_q;GsueQ?^d-%;B$KfIb}WWVPE3p4wQnn}8Lmuj~CUYRiW$I6fd z;oA=b({8>>J~-`5p@7id6RV%U((&Faa{X=ag~IB<*w20ZPJ7E`7Bssn`_EQQnDD5f zS&L7ipm1vXL)n&33oIPAo-#aYQC_iOqu>@Hi3O*O9irLVcOP%sHrrxFf#fsQ!xQgr zJQ5_d+)?1sa~1C8qG_EvH67YZ`)o9l8jPD(_sbtpIkCZFWlBVUDx-yx*|Z}YTo;;F zcU+ld`8}xhfPbR;L58WzI_sRjy>-_vJiKbh#0&W+7Rf-O~VJ?(%In7kVuUoqi}az&i1HfX+$H4#!W8*8iKP zN$YcHN?5&WTF5AoIj{T$tI6`*V7D5}_}D`-;WK)UKl?YsOD=({Y2uTjlbfDR)rq~a z_|u_#2`}UNjGOeQPl(BBNqhA9k@r@Cv>C4)-EG$HJMe<_$nq*{mj};Yy}7FTvLUCz zvvg92pVgv^Op}Fo9IOadn3-_lTVlo6U#b&rj8_PBPArK%&miG>E-E{Vd(D@XqN@a- zDyzO1U0Kr_I(5B5LPPp}iJF}akMe$d>^$)9t-!m<=1H$wEi@z+TwKTOw!2`G^DFLm zOIP0CH~rXpWwvdFew>NZGA8mDvg&@iFCVe}bI+fE_DQWqQ^I;z3X`1K z#(4{jE*GmuOZcJKeKYfE=ua;v|)PjNx^P24q zWx^~kpU#WDw98Zb%A)oU43VD&KF!(i_D6h^qm*^;<^%eAYd`JGmMdpP;}!QkX$nH#0cCueSZnApHo zwQRP-mh(%WSg**? zKTtjOK3@Z8-MJ6!mc_q6Y`lDM@y}yVUZu%iS#q;&dvBlRI@KR)hs*sM-p}FNw@~l- z%&O~LyRU8C75lpL*PGfG3JD$!@}*}Mwzy8_wVvC(mq9-C>rI9k52kmgnafW}z27`P zdvSBT)tTcw_c@kdz4O9Pd)K;|2R`g&x&QhB^TBlUEc4q62coAM-w&8OKd0{(cxpWT z+7Gvi4f`(I-tbs+a{AeG-w!QoV$}NK;<~1INw~O`Q>8YU#GkqQepkVTvjy_^ zUd>814`ESZk1M~(sibHX+q<+ZQ+B5584K=yvva$YJVfMji$zW-9|*ozJ^gFT6%MJi zATjS~+!wp&)W0(G=PUJ%M-M+Ug_l3SU-ZS;VRHlW?b*H}G^JVLT`9GtU z&re(^UK3mLc%NWM{{0sr`3%dJMRfOF*#33ftGA%2S~5?5=W^fs+a@#If90jtyQS#U z(zW^gzgpiN*8bgkY3bR%?k#V2SN#rqx;rX7t5hX(Cim{|vDdjj%w1=rA6nMFi&e5t zz)Y9t!a?EpyutEpjCLP|IaeZXk)6g>`>HK!#>>}l_t)Z>b9HV=TB6^X4~tps zwI04)a!T~ouZ5xy5*xVg2^JSsw$@2BG1$Mbn!l^{SIs%T#T(WpH1OF4Rxg?MQ1zKc zrTyezR>of)1u~mAaXs_7QoYQM^L1T-SoIR=wP!cx|GmMvTa4|+gO?U31I;(ATFhYo z+A1+%QR~_8b9EvOX$$DezG|D*d--kD+h&mOeP&E@lQ ze*bWG)J?|Rmsd`GncW;G_WOsU`V8hv`Mc~MJ9GUpv*QW)xLo;s#JWS*u6@3d`}q9g zbIcbfR;x{y&Yf+S_xb)eFXJBxC%=ZJ|G79b_s_+bXO@;6H%&hL<09ve!0mSKyEuF8 z9!Kk6$lp7u?vs_j&;L6dKQ>>Qc#Q{pV+XT>8a%>Z|d@ zn%Rf=>Zg2gm$iF)e@@HAZM`?|#S2Vbe>;9k+d<704fPW?Zt2f2Ra5bDGBsO2f7|O> zxiu0CJ_lU-wejuZhx&S_bnI^%=B$@De`S@xWOU1K^N&nl{R4*?rhXLh4te^a+NE4* zSMX7vpbM_+JehjWzIwa)=s^b2{1rm$Pp~pR)bI3l06l>@^0MQZOn5)a?%OA)0>tvv+r%lFTM8K^_#@@ z!{3GWolD((ByL0A)zY{{@!^@06AIs(@yN3=#w9;-N%-{m*=*PA{fW|YY%gSXmTW$u zDV|#%5n96^9~wGm!poHBS2OvzzPx!T9or~3*<-WUp51cWm**wOUVfje{UCa-=ho;K=P#{g z_r7Un$8+J~Ii9C#!D zSK&eR+!DEt|IX9+n&)mSU7axXEML3on)dnYg-dQfDA}c}AY4~tQu8TwQ)tnQ*2}hM zPFVRc=dXSD_P*~m`o{Kq%k#E)26>eq0jtaO=e|w0+ufGZa(8M^UU_ed@s^u; zOlwbUD-UmBwA#&JnY>&__Sm+&cGAhWU!6PFx#aK_!#aD;AA9pk{ZxK0Z~WLS`k~p# zqI1dNDW&r_zTOu4oP)XK$CBS0&Pv`|&3S(Nb=!Dvvvh$-$@+}#=Z{%vNWb<`xm&b6 z>412RQenZVug;f_8~j&y+;!Ab^X{1>@yCBn&o(#MYcD>ZQNJ-ZpJn$&vwx19-i-Ad zUvE5HIi=+PimQKR=kD7%-}nJ{o3@7N(#QSEKVMe-Z!7#=(s-`-6o<*J{X6S}tkn)K z=bZV`>R<5Dtl7UmG5iDN>UZyqCO=g)f04P|D(Ce-PPP{xUVb^N`{vfl&$mCRA7qfN z_xSf@Rn3Lgsyp}gXUa^S81|*c_HzE6Z8dD_T}A;p3++#zKiPNtH#c9--G84{?28TT zzg!f1q8{RS`K14=g+7=d;XJ47;u3`O?cn1u3a+!P-yW{u>;$C8}g-P?OJ`z*?AxyojD|+6i+T}Z3zFJm_IqdCPzrZ20Mp8dd>;Iit%X;Ri9s9i$O&FLI z75pEl?Kt-9>*2Th`}h3*clh@ERr~kv{{1xg>*u?>=jXkz`~7P5|Ipa|T_G#~Fa3S_ ze_dr6_ZBeS^s22bQy?XTanx~{7F z``_FD|GqoCe0%x(`}h7mzT5s@P+2kYgY{*@8P6|tJz#kL?%Uz-`Sm}!Ue?t86yn&m z&(2NZ-wQ4;b5nzZ@><-Y^P;MP>NA7pgioEjYJWpxQq2ecpM_h$t8R?@Z(sWOIM?$X zE7rw3iF0L$l`+e#J2Zdc{DWtUGaMT3vR7Oxn^_X$`|8%>;xnr)A82G2W}ZnGPZvMm zclOz|lZR$@hkyL_=3jW3$-?OWrwYEfmws*LJiNtr;d+HfQe9tn-SzovH2LP)D`q8( zwsTh28wiWsyEW%!(a+51H)@&G_U_nO^gO*jPVUv$vsa&X?@&&R@F@7Ma>coLN=u?^ z)9jeyoJZ-Wk4*pk^Je{?zTd^Yr(*&Rl?ER9$F%Rl-D}MSFMsb`_Edh_{MilKSHITp zDGUFwJAQ{W`_)4-A?)`b`n6bJ*S=#SbJX+?zd`YSDM#Vb*zo6-tHRUu^~!&w9n256 znf31Db(>A6?Nj7bgZJ*?iO_hPwVmzG>dn$RaeEE2`W>gKbvZxX@aoH_=mT1tqTfE) zb@QyNp~{QX2X`)rTD;yN;B30w{9VnPayAw{SK!H*#nS87m@j@I;33oL)v$d$r%WIkQ@6`M(wK04AC*fFy#p2uZFTPEC z^HlQuI{n1dq|8TOm(Psmv>c=&54_roi1j?Z^cVhV~~nzsFd!ZBl80kaM4{asP}#TrUiz2@@!)8YN= zm-K`cpDWksl?U^h`hIO+#eH=W=UaXKgw=b$xlE~M{Nny&`Ga-)em=grx%;#>%K_&P z+3aVxtY3XI_OOG%wDpPxAM{U8~hpYK|+ zn|YP%jdKP$=I&y%^zRuoe!pLLpy7{0-)EnnbDKNuHe?mIB!#s9o1)oPnzH);=F6`a z@L&5=6mg*O!maU%kx55FGXIxAx@f z@85pM-@kwFV9q~@t;w;CS^P?Jw;nYGP0qYio7v>2n>+Q}{_7GOy2AD6&7Zhs0qgwM ztM8`&pLonb^nKm0pMQ7f->+@*cK*xoy5Q`(wr|VZpZQjo|9)qi^XTvH6Hco4ocv;J zK0T}X@U`T}*O0&R5sUBtE2u92t^4MQ{UiIo(p+0tZEFM0p0EGOYX9D^_V49>|78y|%jXn+zRiE%Uh?hbM4Nvf`R)HT^}Oyk&inV{ z^Ktdde@d)AzTJIW{=;qO`ah53_t&>C*}B~B-$Uy^J1qTn*4LJb>i;qKfA!(Z5C8Am z?f-50c=@mH9)|nNZ_WAf=bh}o9S<$;|K;Cq|M0rMj^+Qux2^x|nCVwr_nljJ<+mTl zuzk~7cA^U&h??VHon&HZ0-%vmkG$Ha7>$&X8q zyxa9{_woENdUU!)pDkWzpGD2gk4GPK+qJNLlsb|vxZZV-*vBX&#@Wtv@q7Ose><5m z@7Cip{O|MXmy}l4c(?Z7zn@$C=ky_);-q)+^>zL7=IUiJfBtQsKi}s=^Xr#C4tKu) zU)Ie~Tm0zp{klc&^)+{o``hoSHu7`$^YQ${cV%+_DrDmu4cda=c;21&;Gyx4c6H?q zbyj>|-u%^l^Y`0I+jC3PAM&5=U-$R=?)dpV?_L(nDcSJspg!}$>%7bD>c6KPIBN4CY2JssE$?~s zvYSueQn<_urXOrF+pz}9G&9`c%abSEeEY})GsBK_f%8i9Ty455#6IdgiafHpBV7KM~XY13!Fz6$amW#`7!OtY(YGX^UCwwZTc(ZKH5C0Jo35Yxgdss zzCxVCo`wp>k4%qPk8pR03!n>J>WpRSe)#y9;TIYIiT@+D|8EZal=S0^efPt9G3Pj* z`R~k3_B_x3&*pyP!xfouqj~#xGs_;Dd#LXJ>-vRUMl&9>KlnWVL(A;>Qq`{>&;R)N z-;S~$f8HJUmoEO_b>qO?Upvyg=UUjTn7*;jDrDoq>0E zi(d_om`RX$e?3>&T=nECE17x`{QyaqH;;2H+uwye&yL+-X?WJMFu~@l@VR{ZLyFfA zvhK9|_;WeGe-wANq@K*$)Bopx{$KmA{>1>5ucg`V*h|EB`5;w}0}p-3DE-{tM&2zdxg64yms*dH%lcmvrpZ+rsko3%Gr+ z&;K*$jDBwMtIzRus+FKzuy5(?vht=K_xCOCzx_D+$k0ILlWEKak(Ae6r}!o{y9A>I($s39QtAACUB8^5pue-+6}%zI?j=eZCpXyVLi@ z8gI|3$PoW=!S8ZiVYU0|k4LI@{kZ*hIqxO?d;hNMHqGB~JoXQVy^NSodCa7^Kc5b- zU%vG3)9>9EUmOwMTl4>I|BsKIPfIGlKjyFaG;hcG_+|mC-?WXp`|p?T&D(wJJHzwe*EwY$ z<;=dfTK>R{#`Kc%M~}aEvu?Nh`tf|qCrj3U5BCR#TPOan{rc~nwNbNN{i^i`TDKIdp~{MFxd`KGY^echmEJHG6z`+oORVfCZOu5NQDG<-0;dF;6G zl=?sacK4bx%h%tzvF5t``wad07FX8U|6{xV&i~)Lc=1#IZ??R?f3JQ?zyE}9(lSvQ z`)usYEBY0lLV_@8Ck&w{R<<|(smN^9=i`S)0O z)yn|BKR=%5Cw?-Vx69|wAKAIKmo+)7KmVr3e@QHnS+VUIOY*(H zZ-w=C30Hr7cK0s7^zN5mzi%&>=KlBkcKQ2&$yxqCtQD3$6jS|DF=w0k{eKR1YlQp% z_}lMadbjM=#BbLJ-)j~oooI6Mf>9~-e3RX zefXE}+P{9|6h7SbFVXe?hDG%e7wy-)kPrL9ul=iC^e={R|Jn4C&C#2&?ygOW`&$;d%6@B%7zx~_=&hOGiEJdxJYkxTqUNL?3 zhkfCRE11q2)w}(#XuZArkaR(7l~P;y-LMs}!!ni}o<3iDioNK)ChZcd@QR0PFDQg9 z6o31@COYDM^p3_E=U*uQmF3@gvevCQv9)YBS8lAu-^2NP{*-;~-6i!l{mUQy_jl93 zOg~t+{@73Bs%rrOJ^zgFsZSGpXe<}~Vc+^=KP3HU-k*Qy_7};u;Ya#^8ONC?x`g|l zO%KV_+QSsKLMLQJTWH3~RUg*HEsP6YcyW!B?8-yC6I%Zr;L48^m17Zo6()KwK-;EQ zyX1RV#mm(fHb*B~xVQduulc#psdnk1h-R+06{5#<7!(U8`20<`Db<=XUsTKXOGMlG zitP0ll!6|vUFh`Ky|rDw?PvWOgLey@WEUP{Xytm#F6tH-vSLMeM&_Cibx{kG;u3ot zTfZH=AISVaTwH8UUVPqFovhbYybCz>-|JhnmVc7De}47%y03O??j67SyX1eJ`uUFo zos!-^v5a6m{>|7;KBQvhf7!3Il#}*qPk5^E=iSj;75dkfRj*8Yzf`KrNG$tX+^VhL zoz_aeTN<@lDEr%g{h(YX&Wm+!v9s&WwVW4?WD;+_f3d32<;g<9w-;ODF8_TU#P4Gk zAMole=icu33TIv#AGQALchT?r``LZ>on`!u-`F)o7aPC*x61HA=YJ!%qQPeyW!xGYi7Ict2*kV>W$X?yP^E;@8o6A{22?{8LgLOmaF(`Uz*K6Wj&{Sc*$e= z&%b_K?|QhY+~0i7it1e-`|p~Rxte9kTuwK!34Ou6=7LV=?a;8Uf}?eoYcu9o%7>rH zzLj`%-?1&({~F!5MgHAX&Bj-D)M3ZM`^Exm^1t)6bYHY(KG;=r{y^E^2Oso%M} z_U27g@YmCf?h6+EVhr1V{$zH=uh-q*D-0eS|7t5c=NEt5`|drj*|%5Set%z1;c!Xq zYk9>NKN;h?1Ix8nZn`I&J#&+oW_IT$F^%lXO}BW@?oDOvd1mb^f|lTxcRu=^_H|$E z-uGeee_#Eb__Z!(@BFa$XJ7s8`j>}Zdf_gnuoY_9iYaWRSNu%wf1!6-1^%S>sIR*) zGa&IrLF>FNT*(dEKHe)XNW?GPy~WAga^C?J`^V-7Dgzg;-*kwlk?U@<=r1+x9+_1J z&lfmd4{Y71UGsD2p%aN$+8mi#*%|iLgfA@Icqro&SMCzgTUy#%JRYfaA5P!4^z!`2 zhwYcQ*UxINztvv9tG)gl|Nk%i|9SZT_wfJs;r~~oG3Vc(y43YHKR!HP%U@slA@T0} zd(Cg`Y;?ke1l}=yP3N&(XYi)ZQO!Er>bJ1UU0unF8OERQ@6P!ZJMHZK0}rB({#yU% z<6)UOPcQ#l&%fWN()j1*hY!uK%P-x#{_mvA&t6{MV*d0n|HIXPUe-Rlv0c9Y*UQK4 zsV;lX-+v7JyTScX?V;;`#WPf{WZXHsid-$~9{@;)K`v39!_q{u8 z|K>&g{=fV8*M8;Kzbaq<`(J!~Q|yN7yKm#0-^`Ey_HzHbOZB{;rf=I)Aj$J*Z+H%&-S5xe*Mq>`io8fe?PDPe_!QCyZ!%f z)8+U7V$XW?@wt3m?a%M>b$|Xny}$4Oclo+s|E^EJ|L@OV@2`LN|Noe8|L>apgnN&V z%m4pzo8SKbm!SVY{>Jb7|8o2E*!fL$e=eWi|M|2)Sy!O_zvJik z|M_rx{{KbuE0%}X*uB&Lzv2Gh&yzmbzZU!d>9hX*{eM0P|NW@{>wEo$+z|UeAMNXY z{k(p^?#JcR^>yoiKc8;@?~DBX|6cod{rhw{{@;(&^}Tif)_<9GrGB^lA4R>xU!KZ0 z7fe_GzvTW?fBXMm@`FFhdj5aNzx(e#m4_B77xnA^JZ-nX)c*gLW8IH`;d$R$TQI--qS$ zb;cLsJ=M$pT>I@~dbYkkv+M4=RyhaWe{Z*goR|Ms{`CC+pRUiZUzGUs>Q%R}nP#hU zE*<-uU;lTtWPtdF1;>RqaO`S-&sp*B_WJsNvp;LLR(jp!WLNp~@40;4@5lc7-}g`8 z+;ivum(%?9OP^m5e;XI~@Av8df0+ND{P()P@b&q}AD_zC|9H7{Z+zS&jT8SnkA5$H z^u2wTZJgfO(+k5wtLtVvHHW@f{O_CL(bnP}zhcfVUSxX3ckcV;-|F)9pKDspbFcrL zlRrP$#i%{t>F=MP3fHXOUe)FGJiztstG_v6bLJK8Uv=qYN7c65{JG9||CN-)ZSKij zZo6&%)x}=6S59xV-M|0J_n_G2`8(!cUAgMtrAz8lr+VH3dF8|+u+O7OavrMl(3S0esdUmb#)_(Wciy}qEdrqy{I8Q&8J1=I-%cqmB-hAm7 z8}jM3X4Q=^hS_dgndWa_&djUEn6J+tYSaHj@`T3wuUE3ucZLhgzkU4S)7Qy9D>A)5 zFZS%-yv_aJp19iik;*DxYqq?~h|1L4&hPrlu5tS82R5H~e!RNv`1P&K*7li~F15)v z&0~)(_PUnSY?VHxW_zLAPW!xdreSv39oM6OyH0Ghf4{X@?rgKJ$94ASo6AmmUG!Du zH&bq}Ke>2n=8;wJSgfq;=e_zJdvVIog}2%_PrsJ?_pPUvY5MA)vsUUa-dyT$Y`p8I znE$lZqO4nDZ*4OAIPK!a-J6ebi>}#UdCkPFd+n6Z_gC3}JZSg-&79SrB7g6_;Ir_{ ziF@|%`+vEtFR@zr`AW~{s=$?}{a2h~vCKaDs>=4;zfV=W_uRem=kwJ!>UZ>?F!Rm7 z?p*sXYxb{R{$w$&`$IrI4IC3)}T-)_G9=EfYo=i5(j41GSm?e1yu((LO0XD0K1 zHM(iHJ>cIzu@meC+*j{kWcqEFw>U2U@#&|F?QV&l4HvPT@%PvJSGQZ2ZS8tyx>r2u zVNvskpG9?le>qKV%-eUXVZ)`(^9$C@KK}agr>gAxeEh~m2M-fUJcxay-rZuVX~ z(bA){^Nxw!mNPtb#((Sd*WOnzHBE63_~`enEU4d|ef74z_nvy!?%pce?;em}y_->G z=3HU>im5#dJtpPmJF|Ipi`^~S^){8QBd2b5!S2s0?!VVJx|4(|@!7R5q6KG?Z_wn4x*6SNpo$bxTFL>ZrXdUMSC z$8@13`-~UOjQ{odiz0)st^CzlyB1%!W&S4D(7@Qpu8`vJg0VwFppqep?TB1M3u7m{ zLaM_n#uE|~DjAB{p4c&OPj30-_+q18jX>1~Z}}Fvx2M<_w(tJt_~K(;jeyMq-_4n3 zHKw~WjoZz9C!e?Gh?@FA&+Bg7m7g`0Gukhm`s)yEsyJ2s(z(wpdNv2kbbns8>p67y zj?~|`pMO1AdUWB^{yOVRN^e@zX0z+Q>ie5>=*M36d3M|X_FX&rSd6J(?AGVG_a3@l z?CVrx+bet_w`Kq8-bbG*V*HxZ7Ty1=wPoo=-6QqqyTA0R$n|~@daxp+^In+9kt-jr zFvnfV*VVpqd!^lMyAw7S_Dp2nrg1gTOs;OHE#IDR=Gu$vmgdF%Teb1`+K79RTc4}v z=d}Gu(B8MJ=7P9=7BlzuLl#~u9k1HWWu7~)JXd~8lSan-bgS(vu6izBl&kSBBq3?O zy6vr~=1Fh)Un#CUU;OU)bKk|A-tsf4eXqRqwII0sb6eK$%~m06`5&c;?SAF+u-&}x z+}@1|2FrJS`F-x_<|}oMtNv}XSv9$EQ&sw*h6KhBXE%R8DZnp&}D-D%v5s(w2JOYJ?n zaNqWF-V@>sY28YKSub->l;yv@`=w~(6=`=Xey8v$+>@;4EL^&ZRa1Cx#Zt}hnfEru z3FQ4S`04k#b6U={kV)VEPR%ro35wnP=y_?k*xmJAMNgVln?pVO3O1zd&|9f2sUyAi z)F;ISV!hX0Uw-iKR$IO3`?qM_nd`i-#b?=mOWdXvy;&;jW=-g~J7uz~#X?_I81lyl zU97InTAQ*nBjWpS?ej?&UKDtSYlf`s3;TUoHMDl|QT>@yGWJH6lz**#@^;bPuF{Fg zkC-`@{l0+$w9L^SyPe)Uuky`0R*>+{UXSejVzQ3j2A;Pb%#9p)IAZz4|`ZFDjmM zU%u@BCO7|n#*FQIGt1?xZ_l3hJ1M{V@;;Ss+qN%ntGs<%ocHs#?fkr-x0%}>KYH)m zx0Q+azI~h9CYt?vm$k3fl>C4TiMOhAtLjhQ$TRtW?*&ikh6A0euP$BiSkc=oY}@uv zm05jXw~MqsJ-XgaXV&$n&hjmr6E;Q95ufVk`6}A?+SwO%LB~HXnaWb9V4JGCP~O8o z!t)9HrOTm0zZ-qltJW#lhN`ZV_wWz#e8zt1a>%6LjbBuzYS>Shw`kHK{w3-wmV9A; z`BHP`ABU6617 zQ>AYXEK(CI6r6fJYy~E|rO0(eC>Qa&ED}7$oOo={2ZtGk`nCdTXSDkt#~44`%6_P) z@^RyZI_?g@{!I_5NH}s$A z+1Xy}l6J=Sjj~blyF~eklEwVLJHE_dm-{C8(vaWgjqDZmac0wR4C(Zy_ z>C#{MB2m6m?(>Dic0#t#7Pi-_RGo3=|LyT*M!Vd%i7yQKZQm$gO_r;=;lAp)&6f@R zAz%$F!5V_V=F9?_a|Pt|C19tUf~;H#vhu{28SZl5CcZT6w|S#{Ia#jqhWoPPHlH^1 z`}9{nNtB-{_xZ$OJ0sg?6WeQ3s?I3$|3=YZ4l-va*qpNnFr z@;l`|-#BbnWczGmd+n2|GmkH*yNB>s$^3Nqvf}tgei#1gIX@h}>^Q!X--W+s&QFIg zCywvrKf<&3Q{#+{`ZWq^AH3x|B>$dLzkj`_?k%(7;`=`wzPwPkJGf@A+}|VWv$kGe zJpV__=5JMBgypMmzP{*R^X90_Ga>nE!-YGK9FOzK(fhbjTzHN*NccHO_#s%h1}wY) zEc^l_thfuLx(6)0#Jl#*QJ0rN^3{fkyRICM^O>Xfb)&fO3b61iknlpV@EWl28nEzd zknlsW@E)-62C(oOkg(!zkRfNl!dp&*T=LckWcKbe$K!nN=zZQOF1!OQ{0=0%5G?!# zEW8IS{2nCy5G?!$EPMbg`~f7axCdkik3PtdBd0;`{#XPud(WNYaXvEo-#3a2p8yMg z0tqh!3+sS|&wzzLgM=S~g>AsX7r??_K*EZ9L5BE%g|7t1wSTPoGPQs2j1BWXZ4?*2 z9&Gn5iK+V3@i?Cp|DQLyIp1o^R~v4$eVVMVwqrTSli#QG@15}htoS}yaScdu3s~_- zkYYnSkm3{JKW=n)eiF6&mUO75HT+kX+}}gT<9rsZ|FBV9_@#Euo1-nixIjklJEY!z z^vEx+`6^<iu8|7m$P&D81ZbPjcJ;vGK)4{c<}2+h0%b zsjv6yuag9&o#}Qz6FRodSEWBRC)AkoA+#=#Z-n|z7^G0{)*HF7}NlCSMh2JLY zt6dBK4N`p-ta@wz-Wd_`n8M+H8|D7q0=xbj$n~qiuFnFy2b=K12>HL)rhNUGAEKD_ zpFK8Ze)bmQlz_8o0gp<9RALzAdp>?H4c&doyNC0*M1kKn(@0+)Zn8; zu+}Prg@mgKGoH}zGg zHon*p)TUQ=@pPw}`&9jshuv`jHC=0~7Iw#d$)CZY8U4{oe9wy`O+G!l*OV>nj{S1z z(aFnR;=A|VQ{2Biz%yj$jjybH|D`{^JCc2iOMLgfC5pYi3MOYmw%_=AmAkUW^?k2a z^qXI^T2*FTb9x(a)k%Eoi~F&A!u)?+Q5D)XZPDBs&2?1^PAiuPEfiY2z^qBH_dB3g#Yugu`R{S!{KJZzhE=w%e!uQkemdNDDviRIZMjQpM$M@WS6ObyO?CO4aQ)pct7&&q zRH`cuthu^n{l8RiclRF2$XTDR_Q%*h4&H6# zwR{zEcb;r`qJ?U#t7Gc2h+}-AuMB3cO%9Eyk36rjsbo%Qm!636^Ou!1TefkOe!ti| z_56})b(!zOj5Mlzd%Z3`T<+~UozdXruE(nPZv~&_V0GEm^J3RR_Gyd_H;n>zn?+5G zwfpf;p{=dq+3A4fXl0#{RUxM%R@Is_9b*v7miOBF&Fuoqg(AsUGaQ?YSa;3R3BLKI zN$6J8wbO68x64l{+cP^gCI7i&C*%6E(-SuKvZXRUsFSpq_oZnQi$TOi5u-0B)x#Xx zUuXQDIpgWl@{)s3qz}i2eYA@B63lvd#U#;OMF#84#ZTEwbK-Us*==X!UU?}uH$z$4 zl+k(Rrcmd~3%eQ&H%!#JpP+2Z^(=7hjN=KS@&`EGLbop3)vT$yVomz_r(6x!+H@Fa zYdmpro4j00&y6cBV9KT6lh3zHOxY*ER#v%qRq?OS3-7hwkwTBMLh#P}Z<(`u>h?a8%wVhtUe6vBy-Inte%4My zxvGHm79E^Iy8_s=cLnq|TxhFmE|y?gs8YJ+X|$@$t>E<*9sXMX1FrsxlG-QSJlkM( z!-BS~tJ-ysf~(=*wRv?zcj*Tg?yi<< zS#pi*3$IG=n>Rns)nBUxQZP(FsDO_T! zI(5s^YGqA@JNnBOwa$KNu*N}t-t(^TS(n3#`osMG%s;)8{kY+yLq$qq=2{oeZN1&D z`07TR(9<*AKYx|jYINNxah6k_C2`{IwpJe}U&BXTjXmuQS6gR4zTq~p+<1`_Z*q&M zv*pj*=k+RFZ}-J%9X{x{Wqu^%3}2b`=#14msSMn_gqYUqVdA* z)cHCEjpC8ax&vT}D`f4+XJS1{!Dd|s7#`_K5DxUAO| zt9IP;@lWqJ#}>T5V!p-ZSKGV8SLKC&FSr+y8fS2`Z4pOc?FHKjdCVE6Nk4O5XW!j- z@zYPUpR0G3J1^SCXqUaqwc}}bZ@iCuLGsU{*?*+l^Z0pI)G&zD{a&`nnujAi|JcM` zHQS^v=NztCocH|Kx60w~)#g+McH2ZVwc|FNnFUE*SOSlTndT#xF z!L1Ba^;y%l{Bdix)ZBH!bEbRF7O`31?{B@g`Uv}nPjQp|uk7gk7PRvA>}lt>^<^x5 z&N%gV?^AQro!q>4a?H(-UY|cF-cElxH?z6ag{LQqm*2{;d;9U{$w$(?%UAL1cIR)I z`To{tSM4XW_I{Y-{(o0|o)>%AS96hU{iTP$nSAO0)q6Di%;u!RyWRHZpFY0nzv;e4 zl*VyYKC`E6HyM?lhu0rgnDgfJ-HpsHPLYcst_Pm)7$~C;!a8drW@y@y*vGwK+bR zyjQqz?-iN+w?=}yzGpHN)%8jK46c42X@B$mwwIi9LoV5Wd8yy^?zGj1y~oS{2AfU& zt9JK&gLBLVR(E6G+>UvFeyrndYrDN5^mmiEz5KkMJ1LUN%-|4o~%&|8&}zwx|z=jBNu z*`MNah3doS_T8*e-rmY{sc(|)wha@bYhPwvTx}UA9<27>d$KLx!QkyDJO1Vit(9bu z-Bf?YG`D-wk+i;@e=k@l>v?{->-f~{$F3azR~DOo9@!=Q-I*=0Uy&!%T&w8Nk6rSc zRUW4Fu*=J-Sj^!h`v=dj)g{0Dyti-k%GR}C`TckBYqzQY`ob~`w_M8Fw)bkV z@AT^6oEI0%!ugHuzE@~hvDeugzEXDM`j?0{5xIS>`b|kk)0c-#z1{dd>OMnUsP=?+ zX_a4B&W%V-pMN2D+uzVn+tWV=ecrrJTjF|7{pQ=PNtH_`{OZ!xnz#QpUv1pkmmK%= z&RoCvu{XEY`1jkh0p&$@kGbcs|FC_+?dSdLnd5nl!nMQqa$SA6jLqV}U0#3LN}Hfi zQSGX?iFRp5D{Xxq*Id+-be~fA;+yVu<)xPjpWnTDed^17rrrxKXtdt(IoI%#<#Fn( zL+lw_b~~?=bXlLxAbI`bho}v&qMnqkI?G&s$!yNM2{{^{v)+m1gl*9NcI{VAli>-g zGvEBq%>5Ew`u#lLoq}E53_NKKt=wWsQM}>vub(~olJB##$XXk20hMgGjlxDJezU7F zsud<}d2ssg-hVGXc}uhy_iDtlXNDhK!LuSK+Wf?ErFV1LqIacyV)`~^;jGHsOU_G+ zog?qa8C`kzZb|5wjmr$aEnV?7%k*fS%9Qr4LQV@gyAS$P3fQqnvO_#23*|Z=^aLJkp(Ps~y5qVy*am%XDznAWR|FvkL>x-XfKKpkSe|1p% z&&!bCT2+5T zqd(l=dVj|E)~=%m#boBSC!e&q^Tp=q>py3NG9G1c_n7Hcd2HC){n$6TvO4_Lnu#2; zM^7$0xaULOi@FRE_wPm@@|rB}F58s8*u}!1Pkp7?7Us}BUp5;|TE9)d%Ki#Fv(2?V z^3$VT?dz7_WmC3oGAj3*d#c84gH_k0pE-V|2kchcgkMkNyv6FZsrRpJh)U zAE;TqxRWu}&N{Gp|Nd8B?UKFY-~9Y~=U!=l=)4QNtLk5*Uz>LzKkDzEW5VAS?#uj9 zX;*#O^NZc*o0IsMf8KoMwk7NR_2p@ryyfq2zT)#y&yPE!v^suY%Ie$ty^mZk7tEZx z_T65SHx&zQ#TBNW|6R(xbj`ZG_xLxYeg6G*g4&l0!rxLWZLE)k{%t*1d+)^MOJ#44 zU1YO8vPGzJgVyuH2c1hI7amuOP{SnaeG>#4%erWxEm?4-)4y1+_d|yPTCd; zgNNt$*jFxAl74jd#ho9$W|3!DRnqc)-duVqP$f8if!_s*3nj)=@A>u38_V zUcgnbPjb!s81)>sHJ^UQ_%5%#cqIIh#^<6xPP^rWubut9)z~y@jfoY*r`EUpvLUA? zHcGi0+upqQ@j zvuVRS=gFr}D)h{_qvq%ESCC_|lSa$uz^Sibg=% zM%PXp{4S;3zkbc16GAWkub+Ep@1$RQHnnXxz0LNsddt@PSHxO>HijNxTOE-ceM?QU zF1?1aX2;8$B?^_t4tqB&&P{miyvlCvjE0ZLwjV408h!nM`t7PUxnG)tcTCcm%glGz zbLyeFDL1(io&;%GbEf=cTTrS!buPQn)|ZbBT0_dLPIUPO825&h8J#%Q`#5p=q*LcO zBDcO=+5B?JCSm8We5UWgUQ?rlbIkUADTrDbB%`akdG6B7Nj?oLH~B1^+jDDc`n}VA zk0jnN;S|-4u{#-k<%8bDHS-;_^`qP`?rOX@dA;BMIrsf!V%Iowc9cC;YDuao$*ZV) z&N5l*NQ1|<8o?Fc4?q2~(-&ypT87Y2eXT-%GS;+F`nUj`Nnd|zs>AVSM4u-n=s?s?$)wj!Qc0-4E}0U z&fD;1(|vuD06G0~zi02IckB<8Tb0Rh`cmzND-5A2l?-*ZHZyOx+&l1PN4%6+PshK1 zj50l&|6ZDLr~CHj6^T8JH*@xzFdUuR^xqb-}zU zj-0x9J%=|Z1k?KGcCJ}yT6;!b2$$u?UaM!UaMgWLY`gi~lDO*1#p`P;Q^j*`&*Hs# zZu{3?bw8H$?b$T*{PT0Vd%Ta@`v3i5vc4g-+A5h{ZT7@BFP2s>xJTWn^HP=YntIq%LzWUAgeS3Fky3E3( zHy<5wU#Mox_<%=;XWE@>w>KN_pT7Nkcb$Lq))hB9f`742oG+lq%M&j3!1Sv0ymp?} zg8hQ&^TOAET^_c`KUHRSo5^g2<%}xaW{y^+in5{lGO@Xv3WVR)h3Oyndfon%nce$u zdFb)y&i0BozqBOZbZXyJl01FxT5q=fs^`+gyx;qKiPT(->0{fv>XA;=#A)9c{e0$} z)tTt=?%>j`0v1o6?9&e^S@-Png=I&wti89H6|<6!q+ECZ`hZc_UrW~Q>{l<`$c}uoUz(?E62{z>Cy)T z&dANIXN{jT^mdxx&vnecyFKGZ#J>AR{YgnFIy!p%W@itk9b5k<%OdvPgfG$E+r!?s zRYXL}YwgxLCnjYP=yl#R-&;lQ^`nISnU?1yL_9g0cyFJ70jw-LW^@L`v5tMRq10$=zSS&@}mWYo_#+tx7^aY!=2QB(zoTdF!Y)`#{QcbB#RF z=O>rB_g%bkl+D{Z-b;PWj+wzH+vESbB)v{#^^Q*Pnv~No40h6J6T6%VDlN}l;jyeU6iBIH9mcNvQph;{q|iC zb7~zXY?^+q_Sp<0SAmq5Cx3N+(>!Om`Qwk8yfbW#^^@F1?C!5W@%iKtb!UOv>6h=Y z6lLVIH65sy({uiD#$8z;XF6YH(*k4uUWb<0UCEsfKJ0K)*raFsfyI%va##Ox#c4k8 zCrHR1xGpd!_UTQd7U502EXPAD_wl^+PvU3}UKO*pZ;x%qLhH(n|1zF6Oxf)`xk9|_ zZ(r9^0j}=8WfAV7M?|k{=$Otbk}b`?|5Cm!aqGp9*9K9_f|;k9Htx!J#hZUiD0y<= z4Q8{mR$Zq8rA4j@?!IfaO69k~-KM2S^7ivtZ<*?t$hwi+jPIcKhKS4W5An`-kNLR% zg;rYhr`;2;=Dysr^J;ds@cw<@kG6fAW-jSHxp2V>?=!!;3OrU$o$bM%XW*|g^YyXz z6IVXk6hus4KL6ZhHOnNONvCsLq;E}-vx>6ozJ0;#g^>G8y+&uo6ABYoUwR&Cyr}f( z%fxl>?N;U*u0Fx~O3TAP!6Vf#N&L(dCfUTG*{A1mEAN!c5Ukj{?UzIGuSqL?Q_jzh zOo{ieYSBqEo_wEQJ@)9Q<}$C67ZLYMHqOeI5dNK*VL0L3av$lQxH7Rhi@iDT<{Vp@ z`c}&@ikYSTK!ljBdgj5!*EIh=FWM>1QsuKuj8|Z()!g|er?=}y-v4~SK&Gtq?4RbW zMG`WRQqnCM{}itujttzp^YZ0A;@em^J-G2g{^V!9`P}`9ilRPSLbji``#tm4 zfiA;2wI;GVr?)SEYZ+jr_EJ;G=+%LnThh6$x0`!~{pxyW=c*B?SNCGirWcoHYG}`J zH8d~^JlNrv;lpz9#|h&~X2H|1_H4_4Y_`zuR$8rNobt4lW!y6^fBxioEHIm6(e$kS zUnI7@|L8coJ(6d}D+Dh8cl3wQ_DKas;3HJ;iN@S8St0M$pRCBRi}GCWjp5%DEvO zVR7>JVzm{C=?Z%k@+Z$))K=Tb(Y$7lVeQezCWVtTylQk0$hpk_@rH-%>D zpCq_pdD7W=Rt#rWMi?*WW60JDTf5Tvz>KcYCEj5@CwDIH=D-oTQH&Q%h zx!OWJ}_jxDl}NWSfD{|OrKD%+>eIhHxAHh>#Z1v<++e-u<58zS@#{D} zD|GH%`E*_5^T&uCD^q;unDO^)F#KJzvs(VIan2UI+YK+|nmhhZ(K2}T%r8)2&HPKO zZI6~-`oucPmAUe~_d;&3jNpY2Y`PzPeY#eUIZ*54q6o3uIh8kfZt`mdd`}77z4hMt zj-YRzr*|@jsC<1px1x!qsr7Vf8^hh(<$vE96zx1Q!{*7c+c8Zy0`{I^lda41HD%o) zFKo?hZhUE%6w~vdQoGkl4Kq4U-*rp)?&5ReX`S+i%!U~=PA4c|c){iLD`ZWv^@rBg z(ULZ4uZ?bXMR&jnVo0(Ue_I=xoT~E)(b>DUQDwgGT zz9{nfg|cM}XRS4jb`SdZ&n#oz>h*WrzW%;lvAoFrys~-F|Jq)en`M)qeK-GPDym?%6m0xDN;J<%n_jKE3fTYGI!{_FPeE?>IEhqc`2%kxfJP5M;6eMyP;wT&USqb_N3e7n5vn0k~} zr%wFlt+J2T1-&kjx?i@7e{ogDuhSbQt|;5TTlMno8!;ij?|;udw(!>KM71e7y9^%4 zT6@L?1c*)0i#vOM`;`Zr^3`37(^p12Zr$|0$K~6hmOfk8y1#3-Y~K9+uusN~zT=vG zuRlK9yQMVp)5*8{!o7qg#Zv>(L}>l4>*3%F!@ zd{3;F^XwZF*YAHjS3gv`Avdr67KhrDy^Gy$*;lV;Ui;zL)5>{UcC3|Xcb&hbOnseo z0OOu5)h3ZfoytekSS@sFm#|L@v!4HF<%`2Sa%fe&T`&8cehlH z<3`4-R~O1HIOV%5H%>-0h9f+;>UjIxHC3ly_hvs3Saq|>sWb7xD_u43?%j0>@7jaC zMHBDr3e4Y_{%+B2@vTcXmTovG^3pA9pM5F^w{3#Nf~xMj%2j5q$L08CU%1ZwGw(Q` zw8!54*WN7FIB@jzEUVwL`gU0hJGbp-3YO?Hh`u*VO=4E;*Ee@kW`7Y5e<`GN|D8zN zfn^7*{M}}pxmxjFeAlO$#Vk7eQ{5)LKeJeNr|M=Gqoyk-3s+u!-MU^Y`Q_hJp$%Ez zv>fhnb{xASpDf)S`+kjdQgzTBm%W!>Yc*KZVme2%ANkHv+*;t#i6{r~F3!SI{6%bq4K zV*KjAdA7^<)@iZDy}M^0ul*Fd;r3azQ&(%c6?1hw((JX1n|wB0==1!hwyerY|~$Z zwokTSp6-Z!_1N6sZilm*;K2grNl)Ttt`<%!T)=XAmVj(i+*{M~2NTxq3ip!<_pW(6 zUFV$Ggo9ey8ZY?YR;6(+DBXH$De^x`!s44#tui?3LCwJHk6%u|~zl_7sQetzQ8L}}(j`#gi*eN#Gf*XVrT z+(mjh+f^kKCg(!( z#h+>CoacWHz4qimPkr-l7tPNBYTBLBr#-G@9jnu_+PkDjAj~=C@%C>^tSTWfhS2%)1QXUG%CcG%q{9(}kL}10V(tR1~Wv|m*j~sBWoN-osZ$YJ#di1CKc~6`qxDInBKVOu<*=_0_la8* zzV|hvR%6i|z7hs)$(hU26{>nv*j7u-oPXB)grDfw=Se}6{v_8ls?K9OvahMC+tPo& z-zDA{9hTJ-SKhO^`<;Ke(b5p7$7c#x5<{ zUA^}|F6IHdF~VVbz}qqBF)zPUVfSaq*3X_HK~K<&PJ zy4NS&^e8(#cftCLJA%@@Zhm(&lHQ~?HK)_jIr-;;g-^o04wc?~m}T5~?dkfOi^94k zza4#qB97fVA~|nM)t>2F=2d1qy!T|nu?aV{O_y`zF4c)$^fxJP*1Cs*?!Q@jvL>8O z{&MD6WNV1^7PHfTue`hesdB;0>&H%8Z#>KS zxX;T?e1^p_ajPInwz=Z8^ua&QYxcu??AzF9&Aj=t$ih*o z(|7Ba$|;K+HmT*^y2~4EU*UTDlGXf$FWRGmwr9$gTw*^hA)cf8D9Yzpty9JQqxUD6 zT)TR*;kfkesrR)-ZEG$yJ^gda$3aW&%G5s!Dnd1{FZ{IKQn++=YR26Q4?6REoa^#s zbB}&3Ph^z4{_)PLbT-bV>n5-D|C2K3?a7c;@=KEg1v~XNY(GBBXliiicb3v5`(s-L zJR~9$O3m(mE5DW0z2f?%T|U=B4u5xka7*22r}X*s-#no^Q^l^lElRqyWZ&jT7FtvO zI;rrqEwU?*({uc~iD|1WNBZf;5bqs;hOy(=e4y-lz`@h~#+$9=UD&g)qkJ)O%t)h=Ikk=VDZGxpHq>jCE`Za!Xo_D;a8 zSj*{CuL?)RS+JkJIzh(vrcjK}Zx=1X9CsjEFPdfmy_yn&hlzg?#rFr_lEazD%4wJ@M6mTgz0Qua}c z-!bZkgt$)skKMBLe6>UwG~_DU3~a0Yj@AV>V~Uo8{S&FDfevAo;LOD z-wy&Gij-^qR2<1IpUpF4oB8u!Y0}Ttl1u{gD_YmJUUZKz7M*r>i8I%Ysqf`=S>OJ+ zS1kJ^JAX_1#>MQ_Q)Tv+YOD#nCOR=#e``Y4Iq72kgk769b!<^P^igb5^8d?rru(0K zOSoe6FyRjCEI~zkrfIsy++hV9-u_+VzM!~Gd)@0L;ks2z(`=6fF;QLNsQu0JRSi?~9H!N8(%)`w z_=@94V8cVr zVF@1{H&tG}KX=*AWmzhTYK^z-Uh122)C;8CE*IwJUDWpFM|ZmY1jPc*gFV5M8xH)u z^!fb>iHMpB=QAg@xSTsT?|t;K11p*j?OipMVMczyIlmP`$-LWU-M!@1V|t^iEM431 zTFUI3yz7n}NID#uerahS15@)<*28Vm=8cV&ZJSSXTHVRJf3Hm;B3a^`T}D^a*^`gU zj~8uSKK+19Li{I&dpoa9E||jUeW)^fQSgO>`$R$yO)5Ayi-qBuh+f3x0|#aus>~J= zhzMS>O@~2}DS1-r_UG4IR|rpQ*?jv`Kl5Gx)Oen2D%pA8W!0V}dTzS(&4A0O?ZAXX zH)qUrIM9=F(dD=|@Aj)JxTm@NE>(EGU7)&a-HS&W%w5f@fe%{Wen0!zh>Yvr@VMezYqI-QermGh20c9u1j_@?3gV@H`!+UDa1 z5leNRC@W7)mf$fyb@%i6i1Pt?I-N16KVB4Be}2xHX&n;{&Sj*^+eIBXb;CGoqUz+| zC8b%dTT0>{E)1kV?aJWNJSVaCGso4>*CMC=5obFPlzNwW-L*5EQ{T=F z4r7ve(9as{UDCWp@9W$-rw^MP)IAWQUM?_aUCFo7^;<=B0^@8i%sVZ;Pk5VpzN|&C zZNyO_1HH&=+syX5<~1BGT0Z0T<{!}|k@pnu%<7LhpJi_)ZCdlakub>^$M=RO|RxH5O|WCT_jrYiny2W+u_ zTOrV|w^@@RQhnm|>tVX;jyJ#DWJsCoaxccS>i+YOEFK}APeiBIMk!ZM&|}wjX!4rm zcPK&RlZ=V^E(Msj+;|_YJn@HAgS0b2}PtKCpAygD)kMn03`oswv*_V>)HAa)s~f z`OEo!e_3?FHPY#qU*~mmTW3cxF3s0JH-8G5GgZ7n)OcFt7e=_DhonfcPJ~)aEWRJ_+)u^jAs@|JOKc6;1`NhyZOdz~e=a9B@D?eSdkcTwM- z$p(`QlugsW)VB8(8fZoy*>PX&l8vLeT-}v3wfqN;d8RCkv+d~0E7`Z1`{`}fsBH!Y z#X_EWv-X7lzc{U5c|B8swq8Gz{iM2oVY6#RIjlPOh%XRNy0AvJVaMbZC-+pR=*>7c zJKZrm`D;pz#nyev%`6+Yt~s_*FaP}F1a9TEmw2;>*6nmu5qyW z9o*^eVG{jH-Cl9uu>u8KcqOMbrkN7;!Tz7Yj8b-r}Tq}|w{ zvh%c`O{r>q|_c}j`esXU6hgbad@U)EC&vyw#IyH`IvEd$LXw(hRP!ACdhn0og}lWn%nLDT-j|M@9wo- zyq2ZDwSb#%-YeIHwBC}S&(nVTOz57o_H3TmG5*fE{Evh%0*a9d(u?J}HJXW~uD_mgKL?ws?|Bc=4(D zugi6Jn$Ewad*k@oqHMF?=uM0FvM-2Io%HgSx1V2;!wxT%!=e*Tzi?n(vf5=+Om&0J zI>y~v6Kk%@J+$IunyfW3=c-(5u9QVcr^<>)(!2Uw`@HQ|Njh6wT=-yB%KfdGxh*6p zJ?~^)!GTV%S9f$ZtE6&PEGc_7(PqUw&Thy0*M|y&?t44dX1kY}Em^Slt4cn%Q9#Ve z#*pvp4)A+BX1+c-cf*#-YqCtaxoTTA=Gk11%9@m-A2eaN$y~17DO--}<(c|ay!zc6 zv0zK?wc}yaCR}Mb9m+1*KWp3MG_U6YYu9M#Sv||n^jf_{S@y)+U(3qAoqZ%+y54YG zVcnK$v6{#F((}2o7|WDG16j`+;K zo=VIYZk{>W>)E4-sQqRZ7Av1xi&)=AcD*#w>ROJ2V;g?MI!2r+h_Zr3vvZTK|lT@0(Ab?_qPN9@xx z6*k4X`b_&|Xko$pU-hnK_T0Qorcm{7dVKq&nb+QXKR5O99EFTsDL;DomET5j_o!;g$#qBK1xxJt7 zI2Bbo=ibzqdh6beKYG$3Q$vdW%e+@il6$abiQ}f!V*Q5(Hx%v`Tr%PkZ8|Z@E9%aj z!qXCb!P9sw*R-TB+>mv0%HgI8u~lZD_q>?d1vDuipLAN?-bxfn|otjJ&PZaw)6tmCSn~(6-XF zK*TD7DQVu+BhIt0-JO2^fj09S@9!!t3@$T5J_)1>FRoow^(FJ#Ik$%rD#3wjbAOxj z?pNgO-4qyiXO?#s2Wz>aWUtUs_g%BxMH_4D)9p1YU1 z%n^7qGek&b=enq~LK~iIDqb=^I$3$-Sg`)@p0K6|lic22p8oi$^)A-A?OcDRg#^izYN*|bo;&5Z&ez!wy<4kS z_kFsuU9a?l;+<$ykuoRF;;&y9yf?XA8kDV@cQr8XeZkJxHM;xU`}t4%yuRRd()iD% zYw{(%vtQZGNqzW0b^3%nOTDjM;qMD(Zn{;jerI6#iVp8Sry`hsJl;tk!EOMdX0@Er;`fAZ>a=h!xjkdmVNA5R2SRSLvi z;(XeF@9BcRvkK*QEI(DJuGzcpD<{J%EzX)F?*ASzGJI5>`eg5K&-TO47ve7Mm{q>H zcGHwOn=<1beq{WsI`z(;?v+P>$JK9=5Q*IMNkeYAcfiY<%j+}>IQDsK-7L9Zl(ala zx^hNAX5r6ij2E7{WEk7--ytw}O6!AEWA_T5dn+%-PB~!l+DL4K6{SKvCLE0J!s3W!pLXgv;NQWQ(W-a z(@4|sbm!4KY7x4bMuo4}h;M&B)8n-c$6P6KSM@EQeb9EfF3Vk2-|uo6vRl(FuEgE@ zw}IjRuSHYY%oKhu=Dx7c&yl0gN9*O1ypr(GYpvyZ4$k&ey;vf6Z?9#Kd)y}@;~R5c zB%F$ES#W*Hq;0Q`i9JbhtC(@C<$~4y?AT?l9M61bJ)3>7f;o>tOfz#mH!shk6^cJB zGoy0y5@bSn9nX5I`d_=-rtAN~_2pKp4y(*vCr`1La{UrZc$fM1BLAYW7>*#nS$W%k zXRh2X&@$KLc4fxrjFgA$n|$jSG^LvtIAnM)OrO1{aiPH%GtM~wS-IsLzif9^?{pHV zyQFjL9@Bo7=7&O?ZmehT31<-3IBQnfx-Z3RdC&v4rIEXS-gUh>RiI{}$?0u-n}0I7 z@H<^-zoc{DqD8{tL)#^v${MCN{v!)bv}@Y>7k=Q3eEIod+KU7FUYoOCU+8D&|EI8e zZ%8@hRMY!ca2r*b2sqhCMe{Su5Mzafqw>@_z;AkEWW<`Ubx) z?{?g<@zS1qyX*vY5AZ*k{inh6fJ7~;OyjL59B%HNi`yOuTv2O3Fn!<3ytQ0>;j6ak zu~$vX=Wq*OWwx{NeU(g4yzA|d4O_1~5>Qzml512Kv(@~I{etSHS~qi!Sr{y1JMhEn zYMK27VM9s&@CBRBYUSvicw^0UW?jfr>Ajs94C@?ni&&p+TP(n`J|wq@Vf*3MK!fV7 zC*O2h{arSnEjoO5POR+u_KPK)m%>(=&8+fOU+5Hl;DJ}@=Bj-v0A;F`*PdNj)H$(_3_iZ5bbwix(2rUY5}#b1AV*LQ|M z&bknx<=j@2j!lhJ{1Lq}#kW7N+C1O=`OB*t%{+q?En-%x_}|V>`zR5x?b4ybFwdEP zN)*!EQcDV>IW~nw`2?xI*AAGGV7QjQJmATF_DvghFPbs!@N0gBH5NR6MzeioPrW;H zG^Qls-D2slYUYf$C)+&#wZ>oiqt1;PD(0(|IX~4tD5+;VTE{MMV~UEI{Hw>A3hcKv z(@$tU*06XH@GFG*%<3(39VP?H}BVKHv&NivrOzg5mvN_3l4 zaqH=+pha5O>t$ljl^I=cXjRBrD$MoD^?1{(@H-}1^Vx4}onE`y{&0f-r1q$*sjG#1 zf8BOFevBzETW8&e&mPSe$XU0AE4<)~>9Z?Mi3ZEGq8ev*xBWhT zaE;b;*}I?Lb8@eqWcuKPt0S}b>Jnb_s^ATWE@?&Y@3^x^o6r8BfVXP&C04n;`fpYR zz4rKg?Ayi-YgXMTVBS@eIpfBYZ2{s{U#=N!UUiFM>U!Sj)iGBXCx5c5ds#Ojp*nPP z*PCgY*SDo@3gr-rj(Q)qG5KmkuHTB8$`@9&C(Pfv+3(3E_d_nP3uLwS3$;bLzkcvB z{ZN={^=A8a`Fcg2kRl8A)2w^Nq!&4OdcXE${hwWavBS^mdj7MjbOQmWfUB3Rinm_9 z>h?~$nCJ5X-G~n@BDcg_pSrM3YdLx?%kPqk;RXYpk|I{M`;MkY!eZ^7UPT$x#SC2! z2))i?J`}RQ&|W%B^W_rr(3wg%?k39E@m-79z2@RG*0_CdukTLSvb6U#pPf0|GxeLx z4~rb0_J< zj?eKEt{&Ds_($b=k+=6@8M&-8lU}MQ7q2zkyz}Mx#kyzxj7-vR8D@4rzbNKx!g+Yg znX@z1ET^Y$biA>CNnzfvFmFd5-G%u@JC{Ab&L`cf{e{`azGobne#{;f*VN@|;C ztKqqHpZslej`xZ;m)FVPGQVCu&1X{R_Wknai!Yq{_kFLZdC-E1557lMPFG}Im!!tI zMb7Qs_RxiEPt26Q^sdDw&oP-=!$A~j33(I6;rSwD` zV$Z0o-nRaSM{)StcDXZ0eT1?VS8aa&^^SYtCh2;$7u_>eZZIuz-TnK#o|PbP$T6Qu zxw8I`{y5%cnXk}rZ-(b5-3eiJf6lO+$ddhOy7XCL?P7tF<368?b$h&O1-u(ujXBJV z4}D?3+I{$%%3HBVA}1;wWXx10w{O{8YoI>q^QQ=bGUdo^y`EFp6AdRXi87mY@Lpf) z!uOMcZ{KVcXutJdwsQO8RAq1HuixJtDd1#qHoR>;>9D5E#~lSTGk1l)s*pL9z*=1{ z_RdDgO)+x2nuX`$%C-Bm=kJ-oeB5C2o!f~@%VxMcs+{>I{OG6eMsuszQI`}WnrEuq zGYjchAl@|1d!24>`>q>8-Hxlj8*kyhwAV1ulI6SpZS!|C0{-fXT5dh4eazvo>c(mB z7#B|1ccS^N#QA1R@hkg%g0g*?AG5@;%Pmvr+{WgwxJ%XKjf+tpZxlQG^bZ?kJrCUd z^mCo`I;ROgjZRwMy`cC`EU|e~@2i@Vh0%RhT31wdG|Ws{5pJW4OyfzayixLEOQue9 zUX_R>qcY!Iw>z>S28RkFB$y9RjXA!$&*{L?hLq`^Rf`4p1pJs6krO6orn$0r?;i)T zV`?XR?t06-{$(Z5uIhQ~S}T|5osxrh{Hs|68`Y+Jew)_&Z~vV6?z-H;6aTDj)LDKY zW1WhyLCLv#mTNI)4;8Em_@k_hIHsxmY-J8O?*B&7U=ioR0Dmx1l{IW{-)m+#pIbX>o;cn`rREvfWo_ePb$*7zy&^Uc^U3loL zV~PBeN-Y?8%A!k>zP<6bb6xN>byBAV!)w>t#jkVS6keoG>bGDxkaYZf(^8MVM+~d@ z=ln`P7@`tc$gseN_mgUV>GrjW5^LOwnA^3=Gc28cUfIRGyK|B#!(=<92|qVw+{-h` z?yY(^w`*1KQD-^L3%@pH+-uXaTBdc@Rn`1lfkn2;8jVximA5+Aj#_7{hasgl~Rd=2^k;vESxD>+S9!E=;v>4sqJ#gA~QN8ZSqU^2D2C% zc2D=|)ib|*$w1$;Y6&Y-q(Pd`1YzTo${G6~fb6QQn!fBskXWQH`p1DLWD{^1OwyQ-ibWYk_DSE==^-Ser!0gqcQdd6q z9_Tx%B0h296oY>zPZdl0Bu*dh^e|F7J^Ro~K?}W^D$1|U)m}O@wOnk~l^(mO=9%5% z$^y|wCw;H<&i?wTfm8Ul>bxiFpHBLe2JaEvSsr*i@q_U;?tL!03YkmYOPP;(tQJ1{ z%J}zErpIe$OqGS8ERUzx`YWIn*&gi|qn`b|}l)B{v?R=vg z<|vJs6Z*bCSTg%|@w4UyD<=uRteAPUZNaWdiaY?+=NL(k`O3ggb{PeZtZ~v!h52Q97I=|;ldy#Pg|IKfrM>Dp(jj~()=gZPyi`~1$$iRLygyyp2}%YxOiakJMU@vaqT_Q z4gDvx^XYR^`zdUWhT{*>+eXPU9iUu?Ah=cR?tW*3%z zT5FZErh1i!ncT7~W%9>-t#37b4{W{9^D2u+&SPqJ^3H9uwrn&HUCa0MRMO#N&#tTr zkBXjm>&M)va$oJ!;?fti%WkJ{{pjFy@WGOAL%gJBLl@HKX*AD-4;!wkZ z`YGClGg}`v+}1e!b-jS0>XlO`Pi1^|?^xK-t?~HmeFZkAe+zxg>YeO)K5(V(N{x$? z;Q7&3blE7a&LhBGUHkLfG&?DYkjp2%p8kw{{Ls;J?iwAN{aH31E7ne)y7akwsdMWi ztH{X8h<^$9w#Kun2VIlKge8lBA9>fefIUiN9WzL_~*4_o>pXRNI>Pgmo;sZY$K=s z+InF&>mR?VxmgKs7y{R*uP&0W`2SDi+T_rz+Q_T-R~as;49ZOO{`^GjVbQ8X+g*#} zpQm~_Jr#Rcy{f3XJLLFW;XBD!zMNe3HNp2kZ-GJRUd024Ietvc`YRzR&vrcUz1dL( zNoM)L_u|_;&n!FO0VIDCsy}Ntd4aYKi?{P{p7QP zJ1EFxRcU-6}CVh7QjyC4*D!Z8~PUR}4dS~vb?mN2T`D9PMFB?yLss)K} zuiGGS%J#d>@5ETUCtrEd_s#B?(2Q9r_R|nUMrht$0KIGv*r8AGxOtk+^(^l(-xeYd-$AGc<6+k z?;94Hu3Mz=POo{PC)1Wr$-ZMOY*$q_=bKhC^sMldRajniFl|;2o6-~s(V9)iDsP{7 zVH~hQeR4~3a>e)NM@fZ-U7u6Vw#2NMDIm~d>7#KdB=by{r% zAY&u1htzt%MS;(cSH!t3oE!70q_yV##ejVE={+$FZ`PdsWcj2ywDR%)oJx-0;Wlv# zcV1X-`GEVu;@lq(SEc=_x)am+?9u+^mV4q_zfC&&jbR0&$92X&{)~q6dp`E@I~<%} zGyVMLs)z!9N7MMVy{ya}V%e#8O^Ua!+jYxq&pBtu`8C@^MAq%z-lge#xBAuVHE+CK zGL{u>+WPe|`)r|8XP>QQ>H76#(l_fPiQ1PI3oV#cDKb52H&57B_Gdd6a^BebgoS_h zjM(_ak`cR~aQV+J)cJFfXHG+k5dUmR{Y%H^GjG0cEjguVN5a!dId^(@3ABs8pPS-w z=i8x88v;B{&3yY)66Z`x&AD}SN58`ckCTRG`~^(`$JOs!pIx_q)pw`TW)gcc_@({P{#vZrjr|b?!a?nA0~N*LXdd{bCzCf5QfI^Pd%c z$x@4t_{&-J=F4$-^IZC>?zfx6Ofu#5`MC!I&#Uu)D&6!|fWw$~PMQ^e%idi(Pb5G1 z(wey4ap%7~nlj&Bt10zA4AT$DQRjd4^*CR_hFb?Rx9*VAaJxCjrX=d6gHV{}$z#eV zcTPRLKyk+M6b18=+d_hsk!)%jCy(z?G;kB0ZBr5z9nY!cHg%TGoICFS6Po&_wpe;D z`nciQ>X^9;lzjDG9&-`0y|-Jx>8QuNj}un=Hfgv`_D=fvLAGso;8Jrd4UftG@APCJ zxc%PG$8mWA&*O{C?S`Fv9E&IXd8Ak%GVNu90sBdlc})4!%nxSgn=qc9aOQEM@S2L6 zpI;Lq&2u@o37LJi{`XPfV8)`mhrU(yH2(B(+Vre5uvH{XOs`jHagDFu$`gB61QdvD zIH}55dEsYqM8w1=O8jm$eB6g8wWNf%zutAweP8o*{SQ5X|J9~HNqK(2+a$*?Xli@+ zw@8zoK%r^u-d`;Zyq-R}Si>Sz+rnj8xg_oPb+5x>%HK^)f9yE;r-{k3GUVLhGuzS{ znk3zfSD#wV&3d}~Rppg0qKRpfnscUb-Rc*zs@$_7aP}|zDHl&ZZk;>x@c)I={N&hY zm$luP);qgV&`;vj;qP)h4}7c*PFO_UzIU5TY3(|7m*RDb_m8dEFxi{y^B*_n@HxhE z*ChSd6!X255RS;4lb3tc)X5;+vr27sjkJZzmE$KL*Q|Xnqt_MPu=7~fTGsaU55y7< z6>ePHx^ev@wS;qpJKq{F^F6RlwY%!YVex9FGPx@W$y_}Jxb+iLKa$D%o9J6MIj z$E0ny_b=q}*UP+RJdZcD;*-jpxjt>53_cvmd{Aq$m;cxT0snbNxJx_M*!Y-xPP--F zUK21$-T%_k)Go}c4gao+m$dqw^A*KFhFiF&h4n9w~z zI5fdVPL#VXnAUCKx*NAb*jw?L zRk`JBD`!rQ^Iq%D$+OqaIm+teerOK693)Fm+pO8?Zp4|(zfsy z_nclld;6+v=cc(0+gCs7`gY*G!}3+;wI7|Cs@8SgIpwMNWt;x>c@15wpS;?7`Nu|+ zlG32?=L`I{cfT}vu`*_L(aw-tsR7q`@6KDooi3wqK6zbjbwcBehP2g-ZYG@K785V| zTeh}Z&gyO4wzBK`J_!N&-#3*$OAPo{@jR~9(%{0M3VUgrk^>1Wg$ClCvllsZhfY5F z%6k5_&z95dN;FQ?MC?CMA6gU|wQBiJsin2a%xs54PqwO0&)mNvNZjpJYa(CK)W|K< zn}7KgHqP}E2~(UtY3ZtYseiBJb81iEcGYSuN?^>`AEWT<@ZzqVt==782Q)*AR3qe~ zikC(*9a}Le+x9Nkbbm$BH0RXM42B^mQ)QRzUzhLyiN(~q#K7U|5&^#ZCo#{Z3JLXj8`0SmYkgJo5T1 zE^*#@e5F%YulE0xHs9-f<$_Q%qnoW^LNyG@Ui$<40?w{t{FI`6Ii~HA``2^%Tumv; zlcU=X^%fpga5OVoo~m)j_lSa9x>^LjFtW;jhuXaS7%$e3w)lUBYlNm>P4BC7>CqWW_4|DhT6Y-wz=&-&>y^M z&-vJyubMeC^1Z^|S6=e--W|W;<`kWC#p~AhFE49KSg9FV{=BNj?#9Zd>SZa8vZdKy zQ&`+)PTE=|_o~u(J=5IDr3Lq1m|ZZgw%D+LicZ;L?}sn*8uOM;PSO3l>Vj(I@@L-F z)t7|=veLHQTf+vb{Tdro-8oll*e=R;^J4A z#cii3cxgr|xNWp6_jSxoQJtZEH*>{tMiup`yUc%t?D_NWQ=Xa80+W?F=K4P3OS0zk zy_v6pli-91we?lCxef-lC*oKe#=_2HrH`MzxaO#ddHT2%RQ^{)%>dH0^4 zGy7}dbO+|mDRC09OsQusRleNkyNJiRUJ`MFbP zA5U*fd;Yt1b7Y6}_Tue%{P9vwDLym*?2q&b|0{=9@K+`GK2$ zxld2MdD?NJx~g54>%_$ichoVi__SnF`^5d*ORloruS-yz>-3&kQo_PEQ*u@I*YC!0 z=gkyv9#E}*X6Y-O+Ec;&@q(&f_M_Wd#n~pioV=y@OYFjL^`pDIa+D582X1okSSxes zLV6@?OIO>cdpA@pYo}HHZ8kOSkoUUwXTqVhonF^V_r1&9wbVSr`)`a!bzEMqf`n-T z?}A&m94xX9NV)Fa+L&>r!E|z3HuJ|7j5qq$yfeJ-V3ft+ruw?-jQNB%+4o-l z__43J zW5dye8D3{QT6Nf*r##hH5Zfqm##d}xL&TXR1Fgu-Oi7&G2TQKJvgDon_G{-!&ImcL zwe!w>V6|&W6=go_EV{eZn*Gex@K~0t4*?RM8{?fnJ6~+7+j7Xxe)hc?J-WH#E)2gH zPjp$hamziO=5H6TOlE9*aeHlA^kHVLgs#Xl6UCfN=LInbu2b68Zqg9)T7TJmrcdo! zbF|rJY3@wDU>EZ6i|Ag7koapSB#tz$Tg&&h>BqtpMV@ueXO6BDo?tg+P0>Pi$9cc( zSFADPH$NfgHEq*^AL6n$fgVnQKe~;Kclipfkn_5>c7fI-_q|;VyPZ#N5|JsBykG-aQ{=JL!1VH%Obi!865 zznvYrUoQHt!ktZPemh)eDyVZXwd-I?bvh};-*)K81Z(-{7w&vK7VMUP_JNm18W+I=A#>iSln2vo1l2T{_$b4l#SAOCqmDUI@D7c*!=bMBY{)AUD!KvFX5V z%X!>Sr>lxi$Ts@TWWW{alIXxZll5@IsY{-E(#z+mDwwR;RCKEU@_QizsgTIsC$oPg zMBA}WQ#ma+=htn^gn19lG$QXU$l4#1cUZwfg4avTpkiL>;i{b_)ds20FWl-b5ZWL$ zMJFQQQmoCb-_0i$q_{HenzHX%Y(MAo#sdpdRyG#@HF0#DAUZ`y-r=I*+g%5|12!2P zm|7K_DVVV@<=^Fp2JR;g7z9kZ`M=dHL`IQ$vV-R*ySYd1l-v=W!We4FEF?2ewY(&! z^o|G%qw3D@<-1CjUv=geYM7K$waava>C1Pd&LNp!CWrhSJ#+9=(h^9LLcWW?lSf)%5SPoG+a?9=`Rrz{h3t zo_u<*uNKS{`C}EI_|e@K;*;KozTLCV*NlJf>c_4h_f=*jzV&-|fv^3U-QRLH2X)nn zbNRWueqH!h&lfUsH$Qu=Gq#@a`h(odFRS8smR&TAo&RsL!sfV>%~pG7T@K!7#D2nKZTP1N z>$2W^o!_=Ju2*4poatnjiO#=u_^Z~omsF|xKijoc3y!H&@MM{rhX-E+L*j?7Kud(%9o}E8UDWJ-5N&?as7?0iTc6CO&5psk*=7 zW)JT>O*_@gky;*&;l75m%M9Hdo~tkUJo}u*g00p2Z#bOWJ?TtwaCy>9>!}KFV?D)o z)#+|Zymvg|$buifkG~x>`^p~qwpC@m`I8G@k4~;VXE5_&#{7HpSQlD2PO9Emygcac zyjwvN&d0q`D_m|JA9-q}#jn#})L-u4+;ofkq*ZycMMu+}Z%#&MMc1>QpFUZ0qR9@e zmG%)Xb=8WIPty*xB{mTH%&uoZr{>^Z4z`B^pp>%??pmEGdIJ-fvA3g5q6 zV|-KVM7q98;GCEbz4`*a6IR7}2vvAGugYbue9`)(T0ZJr%##mQtHte3Sm>)9pZ)#H zj6?kAn_3e!CY|MdDE=;U^K18i6^fp>)k|gLIZhlG5wD$D+?4Xksb~v(q}T~@eHDJ` zlT}y#{^h;IIq5L>$-{YUxlXrLf6q!b%6Zw|{VqnOQhZX?-7DsAYbG3t^*Ho3cI)v+ ziz=-9Y~DHvttou^;&YlehlVxwMM=w4eNQJ(nVcrRX|w*< z<$li0JXKnf7tc->N?mteSbl}l++7piJfAe_zn*Y_^sI)RusOl@s#ayn(3U* zyD0N^z^fB8)eS^i%iMp@Je)L7#v*vS`J4AVjq6S?c1+>E+&$C#(ypgYT`q5(=JDIT zXgIV+KZ3_gzqtKn%A-@=qGCm9cCd}?({VMe*h#xH&>oVQwi zxaBVCt+5C(D|#1pF85&2h2Zi_`Rc5qQ!V!?Uv-QtQ=D8STh&(cMroc*_~oqkRd4hj zJzn!c#PVkAnTMvjyA>{+yfOFuy4D2~jWVxqu@-5KJGCYDNYBeD3+vv0chKClfqUkz z>|0`&E`-e7yZZg~CoyX1*2L7SH?cp@s!^=*R1 zV^^u{Rk9&>72Uc@-X5Bp^6JO|yOd>`OTXW__w|vX>$S3pK79-G<~)016XH2>Z|n(^ z%XV%CV(pD5OfE0n#GmP=DYUcu$lf33Gd?CKsGgi7)jyvxd!prvxvIMY4a8+ow@wh-R^{`9G&-Ecg=o(QIWw+X>)jXFnj)@hk-|>)avKjvj)@bAIkJpU9Wxd!--BDSx{&^HZ56-{dBdfE~iqo;PkdaHn!rM18c}RnMIp4G!Bx zd96}=b^PVV6 zTe+7WD~e59H>Y?_qQ1^HhRNaQd>=Ki9=x=nc;=EjpZBS2OxPd1L7i*n5*wB7%?div z&(!ocoenP0ICNvKMvBD!Cn}wD1Mc7cy+XODL0WxBchcDf)wB7Ze%t44e7ted-M<%a z#Tc{By1CwD^B*hKTbyathvX*A60$pzx!7jM@fCBq-nM+6yJ_h{DPGI#QR}`(8ti0S zYZ<%$^V(;#ne|nCCau+f{=-ec%}FvhqCz{|n(@}jn9IT8kA8gH5wKu}7^7+UsbUl1 zMKkYQ^@)E}v2`xT+ZC0omEz0)lpIPv(9ODg*3swJ94*y!K{QciV$2{37#gELiC&b;b(tN(fcV_e3+5(}*D^Hwus;AxRk>%OS z@xHIMT`Nu0t48md+$qb;^LBrUcbm}g3`H@cYktB zN@xk^k(YZQxMaCc34_!ZKbok8E|9uMC^Tk$osaX{+n{lAaDO<`yQz=m>=YeaK_gk_e_TCn5eU-!0%M6(d)N|ihJr{quCF5vS_iqOq@BCXc_&EJB6(&>#olCx!Nzw4Pu0@yxKKY>x*}~Ti=pRAJwl+neG}iz3Ase&%afb*Otsv z5Y2cK#n+#?Kz4L2!?6{!5f<-F&xYw>5?LlHJGnY0^ITD+=D!W{(_Pf-2;V(>Qb=04T zXqPq$n{7(?c7ErJr-sv6)Sp=@xMpy#PB>`8`eeac*FXV>?%cL>(#JN{o7wN_v+s3k zsJ!Psz2xx5nb&`vEq~#X=YQRMvD$+E_8h5i+U4m?KOOuQ>n%7xxiI-ip?#;_oLA3H zxLAKBEnl19CYG!axL>lf_MT9{%JpWOx13!qw|rI6(eSFZz8U!zf0BgNXRHXbwc_8X zD*ZU|N8xJ8$%{RX^`$>te)d;-f=p}p^R-gT2MGbZLu!>vo;}rXwk-D)d*!yFvcE-_2it9_^Ez zwsUckllF~c$ul{!N`y9_Sa&5T?Ee3U>#7Xj%?PlWy}*5Y!1+ZT>y_Q*6OuO1(H5_| zd~PnAaZw4w*{0p|*8O*vbi1#2mX)h9a_jqPX)Oz8_8ho#>-JSQPDPgXncLo9zrC!{ z>B+Z(i2OxtW(;Y!?;dw|kUt!2Q6jtc+Gf|^g-mZ5bSLdjPdaeOVdg!5VQyQUkk?`n z7XLmOmEDv)#BY6it#1{>uKOzA>>^Z7RsT3|?v~Ca!a1W!QB)z;%apH}<=C=6Qtg(Em(~BuunRqk+`Fx-$*b*3LyG2CiylTb z|DU#eml=Xp{>rguF=_?x>pxs_AjDJtM5B(w@g@3C9BdtyZ}C5(;SrEi@8=N8!`S#s zg~^gf;)=TAiA0BmcD+t~EPP)*Wr`#wtngQ!$lT~!E7dK-Ve(2i^GU#=#s4N8QEp$^ z=&3x3S@FgV#a>UomKn+IE?Sl%P5rW$c06(Duq*RWne42{bW?GnFJG%dN_&WvA&=0E ze-jQZS9TUS^>@M%^>#;>@6JN=W!M_;@@Li*DY%r|t9(3}DDdR(gk$RLPHVn9OU;+z z_;`=Mv!+PngQoYR$%h;KBSB&{r!M_?;_x7N+6nb`rumyp>?{R-Oi}%Ga^ZpHIurf* zSnX0*)+F7SA*Sd(YrYIy%c)Ch8thDqH*JwT)#$KNr?9I?qd?1h_F@^1C8vbcHQSk1 zZ#oirYN5kwozhuF1|PKiXD^rGIC4r@U8|jG^QR*-Pc3v98|x{N$2kDN+%t^6^xn!)m48Fg}(r(abeP3KLd&s7!Tk40e@T zF2gZJOGxu+KtjmG6B_MI3%f#`40*U_?DLqlUWTnj>(VoAcBaK$TYiE(rBt}DNTXnt z$L#eo980u>o@=)=t?oMV6XYqS(tSk+A6EH*q>g9_gQPZ}0!ytm0!bCD_L;L@hUa{bs>@Sk|u-fN#f~CNZ&}DBo$Z-7865bxc$67Zvvs#Cp zY5%DszSEo=<5M5$onClgy;14xrwI?jr*1o6r0`+2*PRSYksqO|@3zQr{aF>XJ&KR5 zF0`{+x1DMKsw-!wH8;kGzREj&@W6Vl%H2mTJgk0cme{MF zjpt)_ntN%PK0DK5zs$|knHz(aA31q?;enOGx9&W3P`IjD_^L=_!>cJ4#g-x&rCxJ) z$nfm3T7EW~k0oiY@N(UDrp@O%H&1hJjCy{>^Yp<3Yl|Pvc^aT_-Lmvlk->)7bF7jr zC0>;J&D$Wself1z?^eAf&yP~S+x3{vOZA zT6eYcw|+a*{#RH2PH%3EFMae66vbAh|3Ohach~Mg^qa#TcycvJXgw zgXv_DRKeLL@Ak{^q!^$4t>4ak+vn52(+?fYC-3{8q@a?z*K^nZB8dxUm&7($3fxG$ zly^XeBgMEgJb{mO-OMf42JB2%eIBXKaBj?0`zUs1p@YffD&A)a4D#>RF2@#X4q@N`yL`<%cJ!bLZ%rCXK zc4rzLHmH4cI}T1ThYs7#{#NxgUfBFK_txJT%#HcEk633qgD74w^-6SRGl(Y(;i-aouXMrGC)1gS z8}nly*@EO^U%7$=V_*4#sZXI`xmU3eUMiUPDHlxrDwSkj$o6{ok>5t`Ob>Tm;WlPx ze!T07v@tvL(_K%rjoX=@@48}b%+CCB*As8!cIMZ+o3rsDU;Xx56(2A>SpMnm%)`B&`!4IBmnk^&b#7htvxekj?`5y2 zx2#$CKa1bc^`C;lGLu^8FB=?ocPI!72`p+eS<|cL7;S9kaa+l(_(snXx9%5@rrioV z;J5e2HWg=8o}*1nXIeYE+q5LIE>&kw`FmAh(bjgemDx^jIB)2!wRZX-nXp^sIB#8* zN|^`m!l>#OkF_4?G7EI3weMg&muspeo9%J!mQHlmmNo~`Sx=>9&m8>bCZn=2a^uyV z!3s+jM70VW;rfs}=aB-#Ri~B$4cCSV>$gS<{atK!;8)JfufnVB<(x~B+?wx4EijPf zn38sZ-|ob%sI`6CbDFP(wR~+eKK->fu|OayZlUs3-^35BQHcxduZghj z%kFLc=Nc^Gu`X3?^ZjFcjr%u-JMXxjb@u3+biG>X0<-t#bssN@Gj(p2NdETtc)a0O zhM?@swk{L1v@7$Dv#(bCk-ar6d77DITH3@jSsDz{y7y*$WnXi|j%UXDt1_GUnTtTUFl>I_&fEA7q|@L`|NWw-1_^1^0TOWsG!CV#rc zmIgSyGL_kL%4hncq=5B~553ZUCbnyd9@||ies%7{4~m;ZHlEh~rdD%ffz+(y+jPQ< z{zZ6A^ZVFlaV%}k?T0p}w9<|oKgpAOq?)PC}vZw7+zF)rKX?kSh+G|^Llpbnq z*_67isPN!x4JWakos~XIrFNYRJ01JQNo$KS|JD#^@0-&$Z&_$~B0>L>(vBXZ%<~V6 zxJ{-=-e`QNbgJy{bC(SToT=NlD%CEX@mqiW9L1Gw4>n!Zl9Y|(GLSb4D=N4;A%5G_ zLmwUfB)H6OG`_$kbzOi@7tDRIckcm)InJTWz8?I-en2~j?By5TG3%KWg5$;eewk@3{TUeb>-#rW;9q|sFIbu zT)gLrm!NO~OVl3Yb0=@RJrG!Bw%52OCges#@`_!ucNg{?@C`BB>f9z{lEj$jq+NII zm-Eerehay>-rffeB2JgT&3G#n!J!dEs)%e~b ztlHf(fo;~+Zxwe;{hXvfC>+0hZlX|BqrBz2&&pM4{r@x8G1j?tPd2N|PQH7nB6&pt zZ-KM>=KM9kkC3?U!>*6&t?#st@_q=%dK{##4j`t<24=j7&0y3D-A8K2LD@p zk2m+=_IX`xhdhE{koDpPpdkv8RanD`(X09?fdWb?5TE5S1su<3I?oVeS$$qG%)iS??rv7;?SjeHC%*_j(O_B=;H{rLGd zue@fTUVi$YP=cUdyu9_fRlN;@8vA=>wR|QsRjfa6_y5`Sivs@QsiMBCHZ!_M{P{E^ z!g9ICf)wj_E?1WuBwBNH#?K3yt=QJ){P3cf)8pyS=jL8orf^X2R8{_Fwf+3N-Yn`_ zuFv`TK%Zo6mdEDq7ln_x1lIJ)n(kWsrch6cUHHpQ*Dq5pK2$UIWMJLtEq%7WwQD+0 z!>d$zQv)-_TVD(l-M%zjjP2HcnzG`xVW``i8wtXFm7i^@IUmov@#Wj*r^y$p=BP~< zvi)0K`E$BaMBySsww}q4b;{T6w6~l-QJ!T|ZAZQC<6|>7#>!dl=Y7s1?bauMwnujP zsl0{fE_hhHIo5gkl{CA^UghgyvHhQy|9ZA;=@O?&zt*&c?Y{c!{%`T88>J_?yY6Ca zdK;GAFufsfG26+q)vgDecU7D4aEGn^Ejy`|)peuE)u{Um@|o^)MV74&-4}ehSYg`y zsOQzW_w@h2&s@A;;fuYNmq7<--aa0G?R?U7|JsEociWyk ze&pFfZC&<%{?Aei8hW<=+`r-7_m_#E9q;Y>X}{K?j=^Ky(i8TZ_1C;>Gi0<6DE}}1 zY+~N&==Sv&E*^ z_b+v2o;)j@H&KFN{?etFJf0=zT``>YJ$}Nr?NM^Nt)W%!#}53>s5H@Qp6})Feksp8e^Kj|#OJ%_et!D+bnN-ht_D}$uMG=2?LTu5 z=a16Iwe8-U%uXi8JM-PoDm49l?IfFg`Thxqwns(jmj2F-aX!gn8+ssS?J6;bE~l^e zvQ)Q<@Sb;HP@ccFCCaP4JD9DZG0N8V<=Y8$C39V)1J5uD?AspYDI2xG`peJTzkZ() z^H}-x>Lkfvd+y!)e=GZCJc`!cDE8z{tki-9OQ%J0Pl+qPn6UfvX^$5VqjlF!JM=1+ zVakWKVWG?lr-NSHk6yd<*}cbKCTpC1()wZVRi!MIQ?8%FKgLYhyFJRu_9)A0U5|Uw zy7Tw#&Q+N7?%IT%+oOzZP3xAQd-JmAwc#6gNiH_ijk7y19;gT~TPazSrSyJ>+n0h% zYi#&h-meu4^zU24_F;=75Bu}9tXHq+A6Gqb;6?2G+gXNuS7x7F$vnrVkfSl-j!(eb zvO>9Ytd8ny7c66$e`Md%wnpzLN7(~OZ=e31KKwX|=too@Hu zY+37;pNBJ#?c2!Qx?}H(#qPShEY2-^btCiC2Gi>bb3CtpJ>}Zs*611aq4sCadifGJ zuel{Z-)L_B`gr!~X8)+yXBRhz2Ts1UV8XQu?}hvA-geLayiBU6k!3-^?IV8bb&=&0 zjnvxLzV(=G_UvZcmgXlP*5~P3sfedPIWZ&enxKjO-OLG+|2~y1={UFM&#yPtV$%24 z-QE0j=i$CJFT&rI{a9(Sbb7Uqxc`MU+oP`UWu4}1xGz;upIf(j_1Ak(9PDb>Up}+_ zir58@)B8@|kBRy;pT9VHpW~5xSqsh2uH4?A{rzv|3trXfM^u(9y}Rei|5n)pSNzZ0 zGPk_R4PSb@a|f5l?b|bdSWhWG!Se07u(?ve_U*A(3VC)m>{NNN?CZV5FKaj0%nW0^ zcUI;8x~^0OjTNrwfPGF|XXoEP_GW3+5nCUJ!;9Y< zMy|Y;!yjH8#5Y~l^@&LR5_9{*#~&W5@Zd453OvI1dHcr&{c~g2*MAZ*SChZ`)4@K5 z(b(%u>9_OeK`<9Yvk z6CYU~tYFA>^W1TcV^`0Y`0G7N1#=~?IJZa6-Y3Yv`J13rl10bj;1<6Jm)Q*X{#>kd zsto^JS1WmL#cocHo{ODM&H{fA2rz$p;j(aFTA1h;cf!+0BZrmy?9YP&vYnrNQr!N2*Lhlc<&MiH zq0Q`{&Iu)DSC{CX>wfrsx%KL&#zGqz#a^c@do2E8s#N_Z>AuN<|JF{Pb?L{W1+p=v zISr0q@4no#?D9vUtCbajD;tmOzFg_I+|0)RZ{eKAA~0vcg>1t!3}I^y&e{Ix6Yr_% z*-tm>7+lCLw>r3T-9qLi%q|xz#(5EqVtWOl5Oj zz6+&*(7M>gp@f?Qs& z5|sCM^6e?wSt8~fmM3rdX~WA z>AEpTbjt3YIk~~IAiSM7GUM`weNwlX`JQusH-EM7l*6GrFMlXbR+QQxyXmQ3eA?Qk zhD}y6Cl0;m+L(|lH&Y{D{E?%9fy31dp9$gj)Q%)P$lUj*=}X#Qqsh&jKF=IZOth9| zJ#xY1OH$icTj6h3*El~GE`MC_Qx)fFxPZw?5W(|%C#-KhlRCtLjQuw$7#KS4`%bddMNm>%3b%F0`I%7!(Pm`VPPc# zY~@xZ?h%uBPw%_N872BNZSG>xD|~$~6J+;&d#Kmh{<&bid1Rjx_Z`uvUT?X>zW6gT zmagb?yen6uQ*U})K_HO*nS{gVjfP1Fk3ABxoz^wS#DK@-%0u&I1}{}QYOQ6{lV6tq z6fQRvcl>bsEZ^Ry&7C(>xaa0C=il9Qxzm!1=W74Or-CnA5-xl!`z5(c>)i>~lX=VM z&;RUr?8fasSJI<+BUZ{U)Mu(~RajQnQCGjeZs()C`;WMrC;WQ*bIXSdDj)pq&H4H3 zPqgoyy?*@(eWw3kxVD?VTmFezjiMQMNh#QDH`e?uq61yV$$C-u+7ap(-oub#XOM)VB`vX1%SK&mTRk z%Bedkhlj^$ns)ij&2vRvmdveFvb$$}E=I^@;oLe&yBNL|=`pJ(e&Z2YFqhA1W0Eg- zi(B@BjeQ;qS;{}hv&w}(H7nW`-!ftIGDF=DK7by%}lJR%agq)NbimPzi{>6_ND6F_k>E%ulQvw z;9q97;z*25=U(>54)?P@UO2v($-0NRy!1myWo^{cj0Ka=G_O12BG3?%=sIv30Y{d)~~Gt7Lg5VZE!V&QrCk@s*z0o{U2dSvOxAND8O=%5dM4 z-+a~U<Wvhz4y7F>hXlxRbm4C&YhXw-PwEi8iEvPb>FtN;P$By&)nu|3$~m(du`{#hv9yqQBN=WHD1_aEjxL(;d`zV zKD#ex?lsk{J#08^0FC93@^MM6rJO~z5a*8 zymxX7R=h2-=t^}LHD{S$+&4e1?vhb~)?vd5*UO%NmU8=B)RDV;=P9eGt8Z4YNZon2 zXO|c!|G7hD&A+31Y_D$lUHqI==#IU9TZ?30s^_PtatuaXORhV;@vIe8u&CSCc~y6Z zwMK#U+6!^nhb9?*s8xIX?6Pjv2K~FNaoIPwS+mHVZrmBQTvjSXy7WYp_1c?!J=r`R ztB&5@T$}v)&yQcnlBATb_^sZt|HZKzW#9TDYh!--O0vz(T>e$|ySi-54ZVXb9;;mC zwbur42Xq8luVsnMY}>}jmYvv<)t+USvAXrvsw`IK*sXt}t}ct_+>{l$b(P;^hw!!2 z!@iz%a+6#UY^~cC7V5SjVZ}5{_qtRTKEEu{;wQ)59we+f`6z!)yIVozhO19LO0QYy zrpG-g>*FVZPOTjlZTq%dj!I>jz~$XMaaq(hn|XUrM)FTtHrI09RUyZw+Nk9+*CeX7 z7`PwIvs{05Zx-{N%Sq1`ie9%Xsrp>ZxWeB$SxjnUCR5LqM^88M8mc)r-0RR_?u{2>{?Gg(yhD1r3IF*?ivk38cE;cFZn0!$&Au)p?)6LlM5^Pp zXIqj&*YYcbz1`9id38adLTd1OmOI?H*~QG#Or!4oc#&hQ_VTPy8{p3(7LeZ zrI^9tRTXR4zGS_zQmHuL$n7)zBagn#Ud;)FOUcU5f z{prQEZ`YR;z13&d;r_i}f~jij=HCvVE7N&}YGb~ZF<-itwSwQj?|J#}nH4=CuC%U#wA5OBICDzzfQdTqtG)Y_1Oc(Gqs{Z7xRjpSQlH-#m2 z%Z5rJx#S-iJPgrWc2zFYkbh^(?rO;zx9B&^_cXq!YwLR7%d4l=u(uQhcyPBbHrGcQ#93jBK7>_nXP zTH|>&4{z#88C}oQv*s&I4C*_1LMl?c|BIO>&%V-&#)}GMno?tHbYJP8yZgjchkrrp z+buIB3~Q!sRERU@{@~Z0r}y&kj*b~=1}{>cY0M& zoTi3pQPDC_m_h^uE?w(h*($;!vn5T_V@vpb2F6{PFE_S0hd*^RyRFw68O{-Kwyb-; zi=%^awzz#~Q$ui>W%S~v2HU?yRc@?|*}rl=PS)U;ySJuQ z`yCtC&2{?0A5Yx4?x24AYp4^OZmea<=Gc0l7WUHS(7&0M^SG6E@Gi8G>PXrBZx4_3 z7N=kpj%BU~6+iv_+PbHxj6WXO~>k>go2Kd@Nv zH(%PVddP#>cg@vV_Z2U7&0cZrk#1M|#+R<* z?*nZ5BbRqRt*#KZNzyU!HohTqnK}5_tA%fGH@h>7wu)WL@_aAQYO678VTR3>sej$Q zo@q$(mzYk|2?!F@tTA5gsOs?bleuw+2a=jIE<-gVH&wsL{amLkWH|v<}dd(wp$UaP4|CZ{(JKhbKa6oWok@vP6@7;bzON5?tZd- zN{)9@UD@+14w2cPi<8Q3y}ankJaz5a*DlE+!}1$V?Z{50a?4e&}(*Q?*vdOkMMD(?ZYeO8Cehy6){@j9`X10Y~C|bFk!(oN%vznB&@hz{+8+}UVBYipJ#jL#6+(4pzG&KPjs(6kQCF? zP#!gJ&&5eI6*u^EPn8zmo-t28S>fyIzdU>&ZU{+49+TX8SuSPYwiuhPOY2-M_@=Jc z6~FXCPs#CN#-cU61{$&Rg7+$JP$=D5b89yT+j?(d`;-`$rbkh?Wn{MMH61Koo5$Bz zCVo(1*EDl>^=;h=6XI9TZr*&`)!>iA&EcAOsWP)6llcQv=ro&iTX-!R zwJJYdRdcAAWSU9uDQYh6F2y6i@i+l{c_9sMrPd6yj8cI)u}0}OW@ zwqE9CF?+zfs`j3O0b^O#&M#ut%+d-gr}^ejG}*woE{pT4SU9uvf;H2E^8?K`Fg^>r zyKkZ3yFlgZ=gwxTY`JTkWcIet=6yNe65q=U{(sz%Uy~cv7JfnL*-55FKVP4%D=wT6 z-#x8R%0R4b&vm)(+W8k$WjtoIF8sOmc+vUgGOx?mH*8bO(P(l~*UHVj`!(}2wSMi{a>o5c=2|hC-O+R7 z-(_EzthuV<$GLrVd;*`&sV~q|GToYVVT=I31W56$wy&HU9Y@T@ZqV}1yc1+pl+mCKu$1A+xm1WiGop*Ty zp4=+_*Zg(T?(2`mwO{CMRl z-sFZEH?sbI>6&?BFK5Y-Z+F(+n0RpW1&JSqy6fUhgtEEjT)(+4f^*e>o}4bhAM1-T3tCwG1nm_ARknr|?JWT{mNa=x3Q~#)OE;RxCD-wf9yXS}vcr zz--%RmFmr2EX;D()!t<^Up1TOd*t(1GXc5VyE>OQrM`b8r0K0DC?**5^PkMBq5J2YQN+PDo&j&`L8ee-1X4HhbI zi?Xz>HkWQVV6b-Pw>t&5Exs>4cBJgQb+v;>$67HTZ>?9p+z(=eYiC$EaXn-`5w9XL%g!J!5~| z`hTISDSN`ar+N05es?wK*(y?5v9B=op}ef(k7daxwzZq8`$|mbX;qZiSp4_nWj>X{ ztpR?<>zJ+LR;M0$`}y^yLU-o_*;`wFT-|X&mRDqV7st?$a6CuMJq`qA6xwQe0p z+q`L<(q8wzzKgNjvNcS*+4p;*{5?LmSz-VG)$QB-)Er`{OO%NZqgTbolnr=F|75t>J8Wms(A(Wy!vu)q4K* zdq%!A5VNzBTI3?zD#Mf!kzfF{GW} z#PgaV{)D*Qi-po0X=}rN*jesQF~4$L^$ATXxtSn-F&2?{vLqC6A=;{<+iC>woU~xaDHsxw!27+y-LPeJ?wruIzIZlMOrW zn5h3XBX&=@{W|lwd%S&&zOO%=T0Uoan8GjVy83sT-r~;tw0AvR*vL{U`7gWa;e{_M zYnLo<(_6rMHDw{E{-bOz`@q6AvyVUh=yJU}hb?D!k0`6xofe;fqlQWyGn*!K-*VEA zb9vt=o~W8Ik=1L~Bxocg*Uy9AlVydd-l(Ik%KE*kL|H|y0Lx1z8_y77wuoI zHR0bMk>I}din>zE>qKOy3jEj8OO?HU;@(aZjrHM$KH;Zqylb8pU6>?Z#e00?)H|oU zJqrWYYKyC#v*7!4>GbaF@7HVRemD{Q(Is0^ME}{vh&vuTKUE!`$+@}*tZYl8YE z^mwk7aQnv}TeQF<+&y~1xg~9?O|1v4&p(RXz3%Mq)@Qu`j(+KzC76E3X7ik?KN{XY zN_LyIHOEA1?BZVg_^*;8SO3)W-=>~U{PVhX!TRco=rY4;=gRIDoIE!1{*e~r!*Sj9 z>-cvjZ=T4Q+QRt$Pt%y{j3pLB4V#9ao)iiP(x43zHh^$Qrd+Mkm+ zXR!EdgW)gMV+>v4te@sA`mC{5``?WBzvIsfH1B*WGT(Kv!WoU_KV)7VUN>p`Kb5OZ z@=tzR%+~RlYbdZ|iL-zLe_yrciELvzpZGcR{#m+w*f^n6+)AQxN_oPJpcjRqlDynE z6&LogHKka2FwVENYKUJOx#H;On?+7CyP{r4dF(H)<$Wj9Qrr{c<1z8I_DTEe(cMZw=kle~)$GCfu8Ud91khK`W1N# zXP?_@Hjlsi&G89V7o2$KW~=V0e<3m@$58Lf@6YXj_v|`)pd>k|yKs)2xSZ;J{r^0g z*L7S@wf=ijAF=npE$_Eu3}+aAo!ew8a_iI2e=3H%TKO!`Kl*8GnCM(QM?a(Q_(PV^ z!imqhJuUzL5xTN|mWSHQe{9nnedc6${+IYwyd(Sh!2=zIjw#|y-uGYL`Xm=-q}Tnc zRg~lW@qCr5)y4a{9^aEQJN?^?uYQ`RqE`EVfT( zD*v!6c>PSKzu)@g7|-jr91d3hGdT}WR!bTmd0*D@ltbmq)@sW|=h7lyygYv3;)S`s-ts3VuBtVy z=}_7@_k~(s#kEVP70b*{yYJ7b-S?;??`;nz{kyO8 zD?DWHoE?)7KH4w&h4IXh9Nx`O|F=f=C^PTATL0&7$K+#a(lcz|nZBMc6T9obD7y^f zvxD!pT}XQuFQPlwJ6TUJOzZ2rXGn~Gnh9p^w_4$-4i<#7{Tf`Uq}DovB?{6 zY);v8D*b9}_iI^&LK%VDnmt@cSr#3=RT6XZ^L>LiMrSyprvFWnXIr{K$>w<8x6IF9 zcWf$pc5Zq^qV@(I8+ZQ4(;Fk?=iNTaFY^Ckg!sJOPy0pM`$RT%Pt`N8ObOW^^U+9# zWi@~IRDS)1Od=d%>8GcjON@wrRoc+K{mHk)5Uwq!y1!=Ji{E~_{c1G75yPyPFVmUX z7d^dNb8%na*^NssZ)9p}{2%_l_J0M_!t1*A7AsC%;6G}3XsJ<6xYg5;#;cAyH%Toz zbN$-io9-g-*Ych>dT{;t++1t>`sX4}CO>QasvOF;N9yQXulk>xp%i%jCC6>%-J3#+ zjx+pieZC`6sI_b575{nn&K%w|)Bp49uTHlGe;tnBzkd3)cI}0(2QH*_O!NAykk$A6 z^W=C#+u=Rqh(sKHuk-dpwYu7NJdA^*-|JR8*iAfpRVaeMA zL_I4wPnkT3zOuf&v-At>|3nscIuuI)3!fj&dASP@?*_Q|Hq38z4a7@@;kUW9Wz?Mj+5O?&Ya_PBP#D82rRyR$XgGIrXy z?2j=|Y?yYM`OE38!iP7<$j#$7pI~5hI&10dIe|RqKJB>V|7Z4_9Vro#^Zx(XB(d;m zs{-l)H7@Y<1|^GJkLpwD7&!hi(XMFCCaeZ@|C9QgJwZ@g-cLyGyiA9Kg*<6)U9p(a(6eQ;<^V5 z9&hj$h@U227qZ9kW6s)08!gN5$2c~HgS>BhK>J|$MKYSRlzCW*P%^%a0KE(*m8&ch~x~GT! zjM&t(x*$S;MPW@AlJFYU1~ulT6NR zU(2@SzD!ku+_EdqWf8JvGQ6kfOWu`avrE1C&0_z}_1fw}#?Ic3Yjo~^azAUno2#gv z|9PANyZol4>`4za6#wv6@on)85YW*M-@T>2-fMbO(oLzOyPo?VQ+)Qqxh&@YxjV)@ z40|^PHy!@*xQbEun_~20(TQCJ<^SSl?BKsCwbrVx`GejEyljrFL5V_S?LV$BDZwwM_I#ckgcJ zhJ?udRt;_}C#J5SxO(BI{Kfv89)!(XyXyeI{r5|$t4r^5Y&ms3!!`3o#;UN(+gR6s zGL5UX&77yaq~7I(#RM(=>-#_Q8qZ~2{V6M1=kLZmwPSyuE5@f^&7bs!x0&htoc5Y* z*Bi5*SC@a*FwnNo*PFWT{O}wH@`dvwroZ;a z+v)Ka{$T2>uX0pVwl6Sh7{x5EJ*W&v1(z|QHi{Gu@O+~+)lr(;p6}lbN zul*??^7qfOsTNaN`@c+e4%qg$%=MsLZKRZl>ieUv2SsI9t7!cCR8*SgDD+psKqosk z(7<{B7p|_l9c&F;R$86`pT5f9kCpgqrQrF4cVB*tNOPRK5@(m$*~>GJCR|taICSin z-T{H@6WyB@-4EC6{J2K`3#;n>n!geUth!Dt;hvXsE#b(u)5_B_&bS&Ty?!eAJ86fC zTh3mar2n-=>=Hc@#SxON>*{zSHrpgvM`ag9_C##9Ns^8iQNFgOH{yP@#KvVY52yd$ z!sdKUhyUjB$=*pPW<6DWott!E)>Fpc-|y#%NPu}Nf$7c*{<9yA;p$w8|aZ z@?PZ_#LPBje|_dr)B6i+dc&V579KCpc+++N$-6_U_ZPklKl4j1;lws=yKhr>i(Rj2 zFRMKB@AvzoyPhRo*mk=4+vdXiJmIzNWtCU<6`l+{v1)qP`{}=pubA@m@8oDYzIJoC znv~JL7e?+j=BK{?`m}v#$H&KsBG<}32MJeaw1xdGIJq+GkPN$Ku8WwrX|M>xy{0Yq z&2RnP;m+3b*nU#LHTxUt%s2U%_pm0{o;c&NZ@K9DEu{~>FEZAykY4`W$}8*B?Bqj5 zOBnf>9@bgTn|#LQZP4Wp?{3QoYA9{r{6tq?g#Xp&{ABxznKdp4I%>pdlS+2ah z`SkGHq!%w5?~B_-c)3L1*k8eXR?H}3#kU9poqLi#PYeq0+~oL_d(VYYc=_J74ZT8U z=d5Rc{6DW}eZ%_i+YU-w9BR0Evtjn(`3?Es%nnFf9Cp~9ci^A%sTJ3^&tCqOGQWB_Wa6E}f!-B6qEb_f;*aYdoSbs?TwMR{=IE1sC;!TCXL&zqu8@^o z9`ij_>-_H(cUWY6!t%>Y@36%9qy_!9$m7_jcKd^=&VL@&lRRznPu|KkIQ!|#p-BM+ z+L7CPgBAvJ@-3fq^Xxt6s&dZy_bJ~~SmvqT{-D$RAo$QGBe6JDdzHl4GqDRE`hL>k z%>AEv|7<&FdbQ2gwV!NGvXzt>CKo7HZnTxUuH(oV|5RG9<=xyDN{3f=$y}~**u+@T zx5vxu!@Er!mNuWNLw*+iUjCu_-gEc=dH;W&-XbG4MK>YmS@diE{Xy1>tKFyO|6rc4 zt#X+2+W$W#(U$f~z^Hq}oWzXPe2SYn zv?bU!Wo-Sfv_>VOaeA0l`GoU+PvP$4@)$&5me^{uaR3eZ0*o_Pp2Sz@6DP&sb%D zsckX%bE|QCddC@U*&k{w7mX)g`xL#Dp(C;4RCu=X-=mMC1C|RtT<9gMb7jw+`r5)8 zeRZKC!wsyVjG?*EwxT>L<*@GrtSJSl)bVzQcZ*E&n;c9J}!EgYb*@ z+|J)GUQ^%u|E&1=_3P3i!>9aOx{U2(@|5-6uj5;Sb-o6lW%!b`Z;sT7vzIuQM7(OB z#kfe-QmQ}1#aid9A8ZRY5RCruVh>Je?Is0wtUm}t(QtZ zJMZ7_7WFvBed>;z`|oyM68Lk(U(Ix$`*W*PH|}5g`cC24@xsN^rRM7|u}R|TQ!CwL zn9wGWr^vB~O=`Zf53%OZk>As{7X3JY&BR({ygDNn8TXXXIGlxW%pcCf<5j zA@TiV&yV{x#Vj9IJqW9A)cW=3=>MSo+L#M3R) zT=I11zK*%hYNwTrKSkU>eQrX>-bWK7-iQ9$dxU-NGNHGsZ**R=amc=@lG@=@}0vrgRpdg#9*Pg2G6 zU)N^cce};?vp@g$vFQ!dw}+R7ux;E^EE|^BWKd(|zp-wuf`zPZC=;$bU8pjVd-j{$qpM-x)Jk zUi!3KlP&OBfMlQkR+)Up4ylcnS3lXXmi)ezIaguTwb!~%f!Z0XL~FVOTwd}dHF-H7 zh+q5Zb~117;l`eQLUW=fH`F>>A5dJ&6XUeVPbNNV;Q~4Bb0_^41sr1IGu+xzkjT*? z%C)^MzQNf?SMScY#BOtjr%-KATHGYc<<>Sb{`$^2f`VLma0L*z}jvvbV58uRn^@4t1M@yN?O zzW?{+t^WUClS}T`*a)8Mvn%f@oyq)1n{)obXJ&kY^_TDVf2?cPu=Zqo=2-E|kfT7L zC4KwGk8%6un^~VLGYZwq$^ZP8%=573OR^{1G3kGGJ-T!H(`!B5(%9esm8h|h?{A)* z<2zsQi&@9=OYe-f$gNnq-Eqs*THTnw$DgiMoxZ`*qZoVg(>ME^>#{Mn6Pq4=dRn2D zSRG#eY{4ywche?nwkO?t{VU>daLJ*SH`*5}RL)OMiE9fzxgoQZvpsQ%{F8t`i#dIlt1UwBK`f9;tZS{9(`I?gkU#`38*3ZTEG0e)g&PeD?US&jood&tA25YI|kFVcFa{GfzKL1Oq^+O9ZgOY0*KBFs z=O6jX*I#%Rc6|Fr^|@PK=h@XXtgY)2nEQHjhvKrkOFq1KQun|;q+*X9ht%BvN9xbK zO>~sn^G`>W#r(O_!v{<2lpJkdMn=wGb&a)~`?R_D)4L*~({jY4A97kUmwY~1cY& z!tBn;(5p4}mbsq;^fq~OpMH5ZqIA}Kfy19B_9m3hTYpteK{7o4!cFLxDBc&qU7##H!@1T$fe2ZGDbP#mhD4QZ1Gl3;&%v|2)6n zm*@QzZv`(;?fkanXM&>X-N1s#Gp>yb40W_8aca$S_nX(e=%D6i+rHN?Gvt3qbne%% zI5c_xbHJK!^Uhr?|mHtG7E2hkg(9rd*9A%v8%H3`Soahy?YEt7oS&RDPOqy zrs&_DB_+QN)hq4O=5pUVuQj76WNRL{Q~Wjg&+D3vv4Zcf_7`qoe)sZQW4-MYF2(;P{k<}8 z_;XV>1wU;+xmrFoqy6Z5!>2j+S(loA`Z+dPu9sJin|<_Ivybh(#P-ei)_lx+_WI*3 zt2w?~pBB2k{dmagi`nM$HeW4l<-*$UId9hdqF_5Ou-(o}QK@d#@$Q!eO7jH^jAnjM zo@P)S@%vh%^ULG18F^vuyW^U_Jr=vHQ#Ea7{hQ-&lkcs$oD!#)w_^5DuIKO9a*9Vw zzM9|hG_k)nPBLR^dVJ5~sKsqBxKyrnX4zg0f2Z@y(9=HLDJ zuxxcvq`=kxRX;Lt@7dJQpoqc0^>c;$DlTCm&Yj zA5XpU=yO6Ly@~_E$(}#{uyv0bAs*&Xs!Ff1_>7S{A{)Yeyd)kUeJ~(^1i+ zFePw#{Ob7G`z=LHSd|`q|FTC&=JTvS{g2t@RJPBodyx=t@np4E^K%*g!$yr;H4Wre z^_*h8>KgcEO{>)*-$a?k9~2~)=WhA3p-x3|m-bxGmvvje$iHgJXFtK-z~``lLF8I3 zg9y`!YYZm)+CMFwaz6ZY{I7*Is!zMOe$qMc;c0)+z8Kx}=l8K6@f5f!b!hL`Zw;Fn z`m!17?%OhCG0wTh;Aj8%>VLjemeRQYW!E`Z35M+b$M`eTrz4v+{n~zI+f>fPxd&!_ zJ^!;hYPM*^?vJ7BE8+s~KHJV)xU*o{*4gnDO~T){{Jqvb??8+5-Ne_$-gDU4h1E)L zUi&`pKubXEzP|_69TLOBbLu{F`bk`yI(vRilkmLKtJlouA85(FTljmif5V|&@3#EC zs_vi|SAOr$8{s(t>sOn{d=^nV^ZLxT{&`BRHL;uDu37H!F#dX8)mzN~jT@!2-&Hf| zv^3AX`{i-)f(aX53(Ncx(Q?_+o_pTTl}kK#+uKLWPfT_>-?{m5zkEJ#`iZ)_xI0`6 zEV!3N9S-<%-&!|vK5xO+2YuNVK>-1Kj&fe$_^^fTNu%*m(aF==Bu$B2x}r<5)mdMe|(Wxz{~=KD$8 zYi2xK{5GKEZP}vTsXKZqWy{i8-^ndB2z$mHt(Lg)l2)qShESyftL4*;^lv0v*)8$Y z6mGFyy1gdLF=n5wdSt=68y`&n-932pTj)`uJZGbCH5P6{L-~|3K#ko|JsO` z|M%U+Jrn+I;pSHCC{;H+Cvxo6H2sA;9?MUEy+l$%A-eBLv)_f~`x%mxPPcxjd=TDo zL?dI;#2d%tKfb*ErSI^S!XwY$l`Tq^)#v_qZ&~@D8zM8Ae%WmmcYE{T|J#QXx&2nE!14ibfxvIp1oo7o--RI(nosJlrQ|N>cJ^?F*@^D|=)F&sVHE z;&8?Mgw}=mS;apWPsuks?cPyg#cA_O_>bd}*7K!-4VXf4& z9Jh66|Ij-ncFs+JXY1ykpL*w}+%7*{7#(V#RJPH(X4(p;h6E3H#qzpk1xwEwpGuB! zmwepBSvhqlLrTQ$$Tf@kC++Cnzhl}$%kIwwsc&!3O?oo({Kw#{MtWcQZi%Z~RvK_+ zNlvNSud~fQq*8K1Rlm))*0|FCqp2RR=5Ex#7x=HIZ*BIB9^bu+a#=e+9CQtcVOxIh zAK%s+{#|E3@>F@WEx-5X*QXM-MT|yHU%!RbneJay=_6p|^|h`n>|c}q6g;SW94^6d!sFWPfa3D`*VN;mtnrh`_^4>F5q0+S`rEIkGRiXi z)wy@2_1)R`b3&KODs7GMi*n~J&V7|K;nm+1o}Ye<3RdD0ryWyIys}MU@%p{$_*bc> z)IYC!lUeRaO;@^fFh%BdZ4%EnFMe4W54XbjyrzF2wihc%p03@>xhQ;&$!UuzJsEpH zcQ1%LGx_tYia9(vdtY~decGBAFY9q^+r9g)4*%}Wax~ia^_U)07F!2T$=-$C4jQUc zWvgP{cHcX5)b8r<&4m&l@7C__T=+ia#k4!R+SY{+Yo|9XUU*~I>=%Av>Q(c_ekUIL z+A6y2>usOK?16kn0Xo()LREi$9n5TvlQ9ran08>|ZE^cq|DQ2b|I@oK#&myKg!}sK z^YTvScsr^Z^tiP01#_m&PAKo&``E#qF_cqu;_JdKThtwMh1YESR{BBuo6d&dQv&~r zW<(j>{-V^oK7XFz8MEDSFAq*QY|?adS-A82;ujNpzuMm5GH6UZ_EYjUXUgn^Eq96q zv?t`|MIJ6Jl)S=yLaoR4fA6p6gl#LoR@Bw)V(yPSF;zC`SaUPS+D$r%r;PXX?&I}H z4B2*e#r?zGv*LbC$^HEDbWQF3dFK{?by}G-J81jsxyc7DW=zmpEp+Gd?)Od$L$>*@ zd~LsF-uH8x#l2E*Pg$fh&-r&t@J+Mj8T$=m)V>~Cl`}iE=7U4*`@%zObP^wZGU}+W zF>Z~#X|{RJw-q1RRd&voTlDMo`gZI0i^QWWf_9#sz2eTJJAUo+xC$pv58U~KcXfN6 zi1PczMIWWY`2TD8^o19HlnLwqE8%m`>**t#HFAFguM~96?Eb!?>cjDXPkCD6{}aF7 z=wI}qN=sZk>FbaFhacLs#LYphgC8boiOVOMGAC_#c{4|E-;pf2Bl~}pHcg#uezx^T z`uuq>o;?a*qvrDGwSQd1(?BVrn;{HkcK<_*^)2a*e-? zxbT(@#`a5i`x#;${GEEv-?eb^|3yC2W%e~L*b-DDzsIq0d$^Tol`Lc%3SH8I;Upr-a zdMVE@j;uHDvMe4gKhaV(XGVIq%!xgdyPw-{nI0hMntk};q6vGZWxZ@w_3~?V)Yd$l z{-~_zL&>_7ju%q`jGrvYKR30aV6H}npt@|yx+C4MANYA+Sjlb`{^)#Zz)sVeg64vC zN491wem|8zPr@Q`>!R=t&;CB1?ZRd!a!tR*TY2e;$@BLbi+NAW<9sdGas1$?%cWsW zf;NABioWHRiZxj>+&_Ne`^A~;cD~L=jW<8P*zCC4FS=o)kja}pje+s|-Cviur8=+H zySqis*Ld~Pi|gdxW?f^r>~{6jkDFqfWe-f%W4%2yf92D!n{_w&wwSD&CVpYtiR})% z8Xu)>e#+)||Elq-hU~Dt-~Zj+=^bu&u)1)fHJg8kd2{@W(*F~$@3+eLD_UrMetpMZ z|H6d3i-S+Sy<7aEe%qzasm`mWKKLl+e&y@mCFjqkeR%1fnY!(&dV04-&8)CLE9`8d zTTZQ-mi(6QLa|gx*fyEsa))c3ClW8Mjegi_=NIjCifembt3vJMjw4#zr(KR(-G6P` zhAfd}zU%Her|&@St@MkN+dLo6sb=XIk^ae+54B zp2EzJ7V<5(bq`XF1PtF1ume>66=0e`1sD=95=ic68|6H(cxE z+tGibOZM~WD=ikCYwnm{^y%$bd}5VsviD7a_=&QY*{5$)e5YjncHYlrZAUUwp5G0A zaAm@ezBT_2##k7tw#U_`ee>@M_I~8MDeeCoi>)ets@diKlY^ZfMQwV={`u*ZDL-bM z`Iqo$&Mcw)$zOk`Us$R7(Xw(|`byh1*XFW*w5Xhyb@1%6gH`c-H-7E$Fnjp?@`a8c zbN2X{K1#oGq0M6M9LGg3mMeUtCRAC*lZ20ixP-M&%XmW^i2$Ab@*)iKrXx3jz=-2QRa zaZZEBm5I|CmL9%z%|1=Wug9l%)mxeO#+s{EvG2OJVuwF#)7BkgR|L&p{*KpBI{N0w zr3YRC%l~#L9Lp-m$=T*`%JPds*8Yw;2Japouh#duDrq2I@Yr+X%hn}U{Lh#|*yLS{ zABLEUS9Hf&tp1#&Cp9Zl;M%;d5NSP*3Huw!|Xn}u-ijDY=>9>*r8 zEEbi1wf(Z;+iu@27dv~C&$KO=!zppaY|RY|-L1{VGg){a?mxHYOVZOlSA^J|gZKER zrtVoA^t)k)shK2UNFkR!fV>6$de?r!!lVxEaS1B8KzRa&q5r?h`Mc=cO87F-_ZNvY_aXk3;dcsb~GKn{X;b{@=3c?#o$b zjLW380&QpM3Ci@ibDvy#@l@aQ_FrOQD%0kk3_o>>eZ!*VZ+tce#po?rt% zoa(CDXq>k5M~P2?%3a3GYid`%W>J2WI+wrX*Un|(!C@)AbNzxX|7J~ot)YGEn4kKp zIdyyPU!LW%d`)r4s(g!s9Ws&6ljqc)(fXj+?XN#C+gDBR>=$8geca%6`raz7 zaBu$P28K;y>sN&yc)-Z1u=>NR9c&U|=^=5~?p@8?x+i}A#6_NR8^WJ&{dAbC_tfdb zUsuKH>Svocby%-GBjps9$s*9c>T|O{<0e0420iXurVUD01;yF!ie<%YyZnxAw`HwY z_79Pqs*oq~cZE2tcc^h~`Zx89$YtFVR%|{qJ~ebd{&Cc8^^A93D{c6qer5b@+%0uY z?#N-8#|DMExoWKb+24+TdTC$ok$c)oHPhF=c;&O+&@Y#-dAC?(U9pUci<&%jr^uSe ztjpJ)KjrjEbVkO{OrP3o`VS|B+z$^v_HqBqD@IlmRHktr+{HTM-^sOWq`u_+I=684 z?g!@Ecl^i@^I9c;cis}iS{Z@AoNLbnMjg^!@xW7Ss+fA+Chn#4W!RkSa@F71$cuGZ z-xX!Gt$&)m$mhy_mWT{qR`VsF?>zrvUgBi7Rz<%4@DI_tR6eDe%UYi_RMI(EqTKiH z*jaNas_oZzx5M7HSI;kayXBWjHK*EU;Ujay?nmn=rp{_QcKOxpZq_Ad!UL+JYV$X; z$f)V9uwA=vc?82L9=4OquU;4ScJN6RsEev~-N};5G zu4qD2RBgphCjMo+_Z;Zjbancq>-+D!)z3dI>$Q&m@RA2tDxVZp2hIDOQTf+uuE2vb zL066Q(@!7usMNb2Wzu|5IV3RR%*v;3b$j`~fB0Ba?{cT;q4M#yYG+k-wNlqBY_G1| zY4h*b^m~354>Hw1yb8P2+Rwk8*}Yn?ef9T8adV4iPDoRq#J^f*!%gmzu4<-j){Rd@ zB+9K+9^Z@nTJ!s~MZ`AoZ_f&U#@$(dT(r7yzdm31yQ8&*wM%nu6wNhxc=?~?b>5|K zE*8zzJt#i=)4n6?-qiF=`DW>}W5(2^=N=oyKexV)*3u5zRV=G1{Wv@F;O{xpZucAu z`Cy|KbSw36#nNO|?M)I+55mm^S?)%EJm_^nF0y*+^RWA>_v7aG|5(2wr8jn7IycMq z0~c4%T{Sf|x4MJ*iE-#!os8Q#3!i-19kx~{<9yjd-OD_3EfcoB*?HgThiq+Y+$!-| z{wqComP*WDvqwuO__Yr2RO=~wj;;J`67n#hXhD#8;gqEv>#xt7mi6BzWkbkXo@2XW zUUd|H`k)@Z4*wtSY`qaI7bCALzetDA_J*Q@@T|Hl7Y5o_5$wkW^`JQTt zk`MO1cjkNT&3O}+*!{gS&!99ZEXKX|-^$2Wo$F^tel#kbn^2Z<<1FjElUfrErffZ;JTlXHc${lbI%u-_aqchAICI27mF=9Tz4fJ* z#StsYBRWi8XI`vOeHx(@?K6Lv)WR$3$+z|z- zJN<`Gn10e(d#Z!e>#<7C#xK1rkHy2wW;klUeOenSpLi)Z^4yKruf=s_ms|H#Ei&#q z{l!}Q)FOBO!z@4lW5$}>EGIYKsI(E=d|N@LbMA5Fjdj9pk2e_i9sXjN%hI}dLzO`5g%ctBW*^%3 z!R6<-J+@z`giYV1bfJH?(}fiK$mvA__tsw#jy%!5Y3i$0B@?)-O#Wy7aGY^(vSgy` z%BRl%rTTh5>bHOVW|^J2`rm^LRhjc4uS|+qgR)*;;5oONJucAi;ig4b7A=&#v(`s$ zitWFn51%a0nj0YFZawAP!IZ{@OC1Ym$Xw)%n$~G`!$rnda%Oy!*lC9gTAfGhzHR;g zX!i@hud~+hZ_P>CczJs6!^)M@0`9E8Ut(7rD%*d3NtA`5rk-uv^2JsGCzot_^(@LP zz$&b>;XlP5B+KkOFLvE0K`E_=-5 z1HWJ2!S$VmbqPH@rLy}q`W{|xE{mD_I=jLur+&A6^W@KEF^lGlpZ1#@#VsW}TlK`7 zKYLiK``!v=d})5SeEWl*eT`jCcl3|H{rl!BtHNZ<9Y^2p4cmH_(TI8bj@{QMZL@TH zcK;j4+WUpf%A516TTZ;+!YcXf-ZzfI`<2W}#`)U(jcdbJomHGs9<364F=?YD$L73l z6YbNB-OlgSy|hY)f7ZioFW(7$?u^d%Pgr#?<72O|{coN*3Dr#c{vR(b4BxzWPy4L5 z2Q^lHz5C(k*S~c?Gh%#_`!*{dJ^%61;TSu;?B8K>Vz1X#&FDY9yKbwexZM7>xF4<} zf1k3wI=U%lme0w>$#ec;Vqw zms4t$WeytU1}wMnyY~Iy#ed0N|2|c+$VSL%zP3(e{pP>uWAuAI?fj`1V3SMc+nz>3ttsd2Y@2$Zq+gf8F{;Jsa-j9CdrJ^n35rJ1loIXYZ?6vI(L`Jl;0&nw^v!;Y_Xg8#-2}ej?LQQNx~=Yzx=qaThrse+joup z>8JPaYi{e@yK2#&lIkh`zu$GqEzQ^#v1RGmACF&p&0kWoFXGmW`uN_;>dy_E8M<5# zOg`oPF{*2N_fh+K=kF^X;aC#Y@?qM$&yT#!gMRIZ_|?7X>wzlmr~cZ!RnpoLN*aO> z_5?K+PQ0+PL~rTqsmK2Re&s73bVEn%U+(?dn?a}CG(R1;)9^ZM{q(>LnN45BnAN=m z&v{6i#)jh-z`>Kh2&Qf&yQR`Ql{RzxToTR=ZD`BH@qHd zh$=GK)H;iw6-9aFJ;6;^UfUJC%(eKGJR#%3>c>+09q#X^=RamR)cx2PLx!e}r_nyx$`=9&H`>IDv*Pmy)^?do>0yXm%Yl%z7Got;qK2NC*Sd( ztp0hgopZ!S137-|C$7xORI@hX3td&-HuDfp$*mh{Q;`cAV!v8<{z5V#qPyc0RGreaiS;JU$|Nrx^>%;dY z%GmLwvMijwOP)`yf9e*#Dn_^90O#(q+ZG%4L|$6;!g9ynnhA>zM#Zm`iOH_~5)`d} z?0Wm|y=tu2y-QE@Cv8voUnBf%{rThe)9>?Xa(0w_*rU4SbV2!)4z(|PzE5bYj;XDk z)Zx*7Bl^(SXOF7b)VD0V%OZ7cwV+GUw~UMVe;(VuyMF(R#e>#`6L!tLKFd<>+OA&< zDy*O1RzC+zvlIAwa%Ptl1?Yp+Cz-m*+%;d0LwG}%OGtR#^ zm?0MS>(0N+m$HtZKM@{vLay+_L~+5D_DioWi74L^vM26-n|1T!f+oRWo_%o^8P`8- zI_k=C=xyC)FSjc<4>f<tug(%R#|jR$%lrPhH27{gaU~%y`@(El#v|dcXRpiO zWnNd%(AEF^uI{!ryT6Zew)1IeJ};Sb$u+}WbAtY{MAh$e>Jm1@=<0gCkDns?>2kQ9 z=8G@F&92PX>sP$n|0cTr>FO`$ad8tRPkJq%FO@UnameZ~ zN8;&oH-tPn7RxK?L{%(Sc0Tp!*~LjhZu9MQ7G>I=PpSM|a58=QdFg5U)#uLGvo}7$ zA?Wr?=Qda7`|;P!rG%#MZuV}ou06DYm%l0?toToPl6x0{^F@2ae{M}l1;{U45f*D?{aiP_^6s9Jt_>Lk&) z->ZL5npx5IXos|Y-6@|t&V^ob=jMO=-u|ESkw{m_@(&5`-z|8=*A-Ik;BOrN!?t6x z&9C*-JM}e!Y7d_NYG$nTZb3$w#WzOna|=95*+Sm4UwFjbrFV0xZQOp@kUb6)U$N?y z|J{95Smf`%ht^w_)-AAkqk8a4pGB+DRn0qR?Ukn=5uZ}ID}3pVMb390v78D~cUb;x ze`fB%o>y<|@5w%S#CNLbJWu7!5@$WXg=@;r=AG)=(N@%+y&zfbYp!ZUNZ7nfXKmuv zmh%ajXlVz}J$&1m_0q?Pk9?`C%6D}7Pr48oIrEk9KE0T?U#55aYXsLGYL4&V(-l}A zu*{0Js{BNI(w1WqIvvRx!LrP{;;h>97H)aTH+Qz(TZTfu)cu#ao^CZ~wx4%yl0}Es zRmYh9FC{;we)Bxy7!vs@Mp-#-rrR_IWL}wf(*0-ZJ^! z0{_BS{@Gs>vqzR)Ts~mtlXLs)KFlh(#r2WtYF}^D&)kHwl7jgGTTe<`d}{7z)Sb8B z)g^KDzpMp?Y@w@+7lhd#nc5Yny873Xt7orTKFT!jVz*dU)iC>~PCKr1DEe<1Ed-hZT1$ zg)}C=-JM*fdG2Awt+QH&isv3y_{C-3J#(77pY8p^f|NR+uRQu9DgQr8MF>1EFsYt) zuDN>h6~&tyZ*I>Q+_R%OdG~7>*9VXI`|i#&d|-ZWX+?ALF7t|ShmHj8Ik@qD=-1LD zmzskwH)Pk%k`kO>aH?!qNXgpu#4GResL ze@dmo{y3RKJAWL^N;OcLKJBLERmBTah4>dAn6_E@+`~DqWbW;|zts9kW>A^kyFX$J z1q<1p-_>S&$^DVzc}Rc4{S)Sa6`b}ouAvuYMD>C+7_636zb9p}sm2TZ^xKQw; z*w@1Ijy91CoM$~W_Wsnm#?P*L#!P|y!1>=R&+SzGC|$bu_m!*#{VCZevNk_I@T#!z zw5C;Pq1%!6D`)+C{ygsOkY0J))-7Z1_qy6&?*zhw%3q4Tllfb2Ayj4_HtCh(>bL7Y zi%7nG{SYFB$}zJF2bnDxLqP^RPLw*&32`<}F%@Y(mi>tN&2 z_!&vpJ$HrFiJ2z`-EG+|H)l@eoTI)ovhE*zbfxPDXYrlvR0~Io?&${0=ZdjK%{%Ho z<`;R9le7yY~>F*9u=IS_SYtI!=d`gXX?F=>otkJo2~crN<+=6 z`aA{whepYh`|s(0dDOYW``_wXRp)LVs97v^i41ORIOP?>!E{};$Qrn zI6FLZp+SuAiQRkFto+yQd1w2n;=OAu)h3^eF3I?)d^S_P>Y;klq7_FEnmqrneEO5` zk@qHF>y2&77XDbQ_IIAj8|ROnzMGSeK3n)`(k!#TP3?03nDzZuzMS+siKRO@D`>6| zCtsY#^AlHnyY$cLUVAiQR^4>LJl5LKeCIiV)i<&aKR(L3^`@T9-HUwFdnYkjWPhG3 z_HG~RqwHHr;`7)i8YdjNxaDac^9y(7bxYTNtG}>O^HIR9kanm3NO_%WKVNq{eVZu! zOk6eZmhq$5TbJX4w_MnH=542c=K1QkrQc?Mw^(TSQ91YT;$yBlUGkY{&BLfWs+_Lp1xrS9t5tY$@} zeXF(0W-GlsUb^K<=5t37H{dl{;vSr=_W2~(yz_7IM|au7&eQJKN#5&F ze?3b!KO)8XLdXACx8~|6uukcjr?r~bTuUvEuy!fo~bt<*KaU;GeIRHEY1IS&qdKC zmC|KTYSILLq;M{pdh>JrCd;{oDo4W7f@8z}|KeyrnJ|^l{jXzp%iU9Je%{<6>tt z-FvrrERRp+Y@QtXM7aIEqTiWi_Wk=~&&L0++g}mom9Xwi*>0W>Ti1MV7MicUxomo? zbvx&$zY6D0y(q{soBnP29o%v9^=;?Bb%kkvEALx$ zeqUy>ao@f4+|A}kXMRna|M2NOk@RckyE!-Anf>VAuaNKGlG>Lx$=)eb=Ueyw+sqGV zi`9-C{%ZDDqeuU^{=e0qq*b23uqrI6{cr3%jY+A}ySe@}fBW8P1rH6Ml&MJHjFYap zpYfN)=t-4|_Q~&gTdw~piMQKuse9_9_ArYrLY1c5d$zG}4EuNG)?=|5r;o&ZO)lPJ zD98IO>BEle3aV1_yK*|x+}-@_jg4Mz4Cpx6? z!e1Ho?}g##;~%cMY;t@O`L+4_nGK)*FMk`o`OdY%waX`QrszfsX}(F=3`XT|li&h5Lxp#0m?u-oH`uax5N$_?Eo`X=A+ zZ~S{;d$&W9R*+wGxx0h?v%H<>r}&?rE-9t>`{282$2<9)uX76MMW|KJvYk~PzV7dJ z1y=RMhqbAP)PL@^dwQCO=eV}9#aXuQ#E^yW4jKHoqf>9>GH=SyGL9$~_t~QU4*PZP zE;43W7n&wFQ_%jS^oONJcROrUViKJ~g9U&qsKf3B$ zIPx7#XuG*d^477y$ekBlCE}jV`y+JKCY9lh?(2C>c6X*KZrD>5BFmXcV&p*}gxf%kWop$pqop)lk5!198*Eu`lLzY}Vej-RIBP?o( z?}<-oth0;_jAYVg>d#*Kc6av^j>vy0i82BPNB8(ToUs!Ko4H%`#Y5)A#XmRo2Bn_! zpC(YFeMuqZsG8uhIMJExMqAf>-e+Vro%2^o@A|Btr$2W`F!U_b2r|>LoBOG=aKj9z zr4Lpt3;1Czw-IF+tRvBe~q{1xWv+QG1J|7Vq|*1(U!|WHnR4TR|Dh%C_xfjDTj+efx<2LFLg(|hx60qU zQ^Rm=YbWc!igvjot~C>#oqv(?suZ3 z3Xa|S8s_!lM??6!dD&X83%Vn|Khl3+BY8(5>8s1{Q@c05zxvGe!~2gMA-As|tJ6yP z`b609|CzXLuf%(v${ODFu{d%gL4%oHg zfpN{ey}5G_hp{SNj@(*PwZLn(`0Gaoia}PZ=iNE8Ta%|OTvuNF-k)TZ{AG2q-(nK` zH&{FiP1X8VAak&A-RgOkreUjMU>(P7SAtHK5e$R~2^*;B4m%7(&>zil&TlVs8+0F31fmY7(r}(73 zTCSy?RTFIgtFkC#bJ|V!!ndmmUf7uIwlzK`pflU_rtqih=`U1yww#>5?R(u9k{vWVPg0I3P_>b|<&x(!P zjbHsg-T%Rpb>h027yrlCwfLKGG@teP`D9P+oxfihTz02DrnVPx!p$qC|4y>unyt9Nyo}SHJYXp-nLQYl?gQNAaAPI@5CsI+yjLpB+E< zccv7>nzPe14^-T-ejB53_SdBT-# z)t-KDc+c#)tCD%Nj)U*iuMPS$|D1{!uMyBa!p6(R-{dHu-xw+XO?7jOuA;GNByDZck>KQ=l(~A^gszDJk~5cOajul))SW1~a@qt{<%Qx#Z?6b#N=jMJ zU23%{O+{w^8SSkrIHlVT{XK0G)O}%r>xX|v?N^jcRtV17?<2pJgSU$1y#8hvU8iQH zgI`bY3FyACz_Z|=5&spXDWNO**^0BzOetN-&sD7brsVXgEA6d2Mca0z=Du=1e22^X zY{cwe0*2cUg&1F3W*2d0?S`v8TUYW+6>ImHCg;9deC!TaHb}_^!|jJ+LM7C0td34x zuf-$$=IYuF;i7Gv-(H2?Sj}~qrMgu6O=xRk)81XXzwKH)yQE9-)1Im9-J$Y^&vsp9 zI#hnRZ1>qL#y_03JdxXDbsP4&%e!7nUCp{d`9<@oT{T-7%GhgrBE#3rXPwt(cWzDa zYt;`nUlyj#jni+ux}o3d^{KByhe8hB+nu$y#X!{H_qsTJ#WSpH_Ge%7PT;@mey}uc zuV>4|7X24*syGu>9t!O$+uM>L`hn+e)%gh@FWqWCTdKdK&0zLL^Cz>v?o)ic)4?Ei zU*vn4qBvfGsOkCFs@v!2awnGkOxs(1qEbaLYkK~*-|chUg+79W>QCI%6Q}|U*_>%@ zYx(+bAxCkb)1j*W0WCXMC?xK!*SKLOxCpGENtZjZ>Sx;CdW}OlQXUcS<+}`KiwRx( z-L7;djhplJU*{X?imUYRuldfOxVx2Mf6eZD_ARmEOn*PU<(|!cjh*H9)7xMFDZV+_ z<$mPE!tt7moHE-m zcUJx`JIf0Ob9Z*vG&Y?H$a7meb4yuumpCT_x5Gw_f2ZGC9#V0Br*6LZf)Arz$HAlb z3mRUia=5E7Tw)B;bJAEH?xL`K@@&HtwGN3L2Rn2HzA7E!5A8qMkSTWjdVDYAB<7@P z3QH{XoQh(abJH|+lcYTS1OB+iTzPG6et*$Ui8T{Ud!>V81Z$7|t8O{fuu5)m-u!=y z*0(=txWcb^XGWd+ABDwS3uZmn_}|PE#4s~e!2DWp5-u-)h12O-=<7`xu-bY%_aH%2^o>#Bkje@54iK$Op*B> z7V@#CkYUBT?=!oe?09XySSR47(5jtBCN#*1hlbp!;ViHTbZxq8`egChLf5Smf9f95 z2rzWeigt)E-P0=nx*^zm$F-l+U8=+_0-~A{ zRumJIn{udI^Tq6{Uw&4P>Srcy(3trtiR-p($2V_oCg+4eqx(lioV+{!KmWHlA<*dd zQ4!buNjL2Z1h-C{srT&F#R$2YJNCI1wvlVn<9C_CI=8NdJKrj-NM^}d z6|rUIJCCbx_BAxdiguS>-STChfVxQ8QnS;{+up0Qi7nlBnuDuw?>Bqq=Adr2tN+=~ zc_>te@?)c!lBYxm1F?_Ss&WhPm*?YY)e%Xdv? zSr=ngcrginkzjBRyt*kf`jn%T&g?`3v8@?8TRfj^5jy^t_i)4PdA(64GlW+bUNOA$ zCg;kclL4`ke^_+fbk{rnew_M4VMce9iTJC_Pv<6w6~$c5xw2^Ip1?Sh@?*;n#9Udl z^M}%f_U#)MJTgmLEdKUs$zqjfYv$~zx%uMlX4b9$De6ec^PUTuV{7~D zQ^12=DT_}(m9+XKXLJ1N2{-*)=VzbqZ-02K^n}~>)3UdN*P48n46li4%=sdGc;}_< z8)P4xN?t6^+b;6_+J`3(+Q95Z+cNymGDP&oZIROYQgC$MgYJJaYZ<3YO23`ABk zyl$1M@GjQ=hU#|Tof%H~E`b@bx3y*0tO)UZ*Y(X!u8q6RcV~vn{3(Yu&uQt2m_1#@ z8kq33SIF|KwB{4uTT{B*p4e%cKdm$AI3ct}Q@rfU zju)>t#wm(lShnSK^?7HDOogxKm*q^Kp5XPgu-B_M$9{Iv#geE;&v!8YV!f=nTRrL* zCyUSWD6_fyMP3)ZR2MoHtSi-Te|rALXy>MRzEf>K?phu!Y^LXNbn{BF-gYOKDq)99 zbA7+2-2UdNIP35819@6s&v-n(qcHv4vM7_8eT$SE8cv3sR{QK$|L1ZvPtoI?Rj*z? ze`9dzM91cpVrP#&UsGMa|A)#kg9zWNImKB@b1+l^aDbc)d9{n%(|InJ=uiV~tNYzH|lQ(Cu?cs{^yR&zcFfR4@mTq;= z;N`g`e{?pgez(5;zd-Um!@NHQF19~j8ik*X*QvMPwPgx_{Uy%3OG}!VPU=l@Zr7UQ zm%gCq>dpBjE{Ehxm#vI{*&{PY;?Sl|{-+;@JQUkG(f{PU+@Gb-v?Zce@x6WD_s$?A z+aYwFr1;x|C)l4z>ZPg5Opu&#JKdwpLngs8;ij-e=*>I*1*`=>h3D)Km-!yd7-7TM z7E{O^z`SBo`<3N&JB)U)M68#%&KSoSx9rcisp~HB&J~L)pVpMcvFeijqdRZ@R6clI zuvxxFI_}}RTPMOFsv4TSSKlYIz92RC$>a}0bDkR>(0!1m`zPGPIR2s8?Gx+|pZ-ix z>?uF6{blTeS#NS>_VX2NfA*Z6amOvQ*?Di@f8W(GJ8$#dHPZ}3JGr}?nQ!EUcS}DL zoBk+m_EPVUisy_S3j}W0Y@OticqVgwL1W&wqp#jCn%(mMqHf?DL75X_d-XhS80+0V z8}{E}SqM+X?A)Ks3!8U7K6fu?wfqTbU)??Dx5erAzw(G*BvG+2ck?|C^`-~?+dThe znB3a`BIv!1j$ws}LGL#g}a=-E$*%9qLZiUpZoLR<%c^- zn_h)R=6E?u+=&U>ukq%uM`TKq&W~MdDnrBG*L|!=Hk!Oo(zGwb*UuDdsygY!1%c6ZiXM&8vJ{LC+d9n~ZyVG>XavgdVyV zZ?1}aRPO)uVDqzYSC2kFmnPj`uU22EZ7CHvjeY&h-SQ_tZ~73H@#$+{k;(bw+#|`0 zG|lYAEv=LvY`rLQJN&8NE>8c*6#LIF54${`dr8DUb}9euZ|7MI--^lq|Cp26m882T z{>O(2nOs|=j=gYx@SbaL)Txxlom} z{`VETY~R|9NqIryzgXMDW-R&miBncVQt}L^E&gSK)r=y>iO-9{2lf-58A>sy{OgHm-L|6XXApy5_gyW`%z(cu+#9V8l#=#p(&@|?piOG>C9QJxA_Ub{NcnS zPe0Ffys)@#lD9-oq>7UytF>m>&CHd{IblcY>@SBo4zKo-$a#6~o5bgkgL$X* zJX;(N=dAXvVn0?Kd$4MC?xY4zv9Rb=?cIKiBHIOiU$<{w#L>I*ljxxh+nJpe4NO;a zg~h6Vtd(GzyzZL)mGAc4!t1|q_b=ZoGNU$h+2%QEP6_`)r=F{r#o4I5;?zqsUXk(ydHq<>nb( z|F)WS)t4E&;*^)QA6|UrELXhAp~Dleq#Zrqe{P))%fH3jvaJ-C9>~4&R%))q{Kd!X z`|@=(-X~{$=U-CQx#DN?tGu@p3}xb$++1U{%aOsxeRHhst)BMp8Jn&uAF8P6P5W#8 zX@kfjz6qIK;%2PMmLF7lqxP5e9yzew#LAQB8k%V(%#L@nUl8Zq>HE~>CEv?p2TjtX8Nazc}JdSKgf}qZStu3!b#^xFG43RJ@nHg z_fvY?RSwY(pU0CXe%{LQw8Q7Js<)&Xr)X!7=NC;O{^?2EG`)Aa99}p>r`FA_;D_*J z_4;26_%y;(d^QT%-rcgOWujr$+Bw!N1yjt8+|<2a%j$T^N(QSn|Gvr@+TXJ>C{KV@ zV%_0254ujgY&mSOdc~0-u9$YimF3~amisM2HaqdEBl3CYoOJS3PQHB4f!)1jmD{m(iK|*oSyFp@eD^5MT=Y=?jg;7}8eXT9O3AB3;}!Jo z2h2EeV~IJ>$%*c)O3AaYzF9C)>_Ghu(?Skqn>lS;vyX+WP_k*u4fkCw!rY%2yGnl! zch@ySrw?#F-)$y=G^#@BCi!z%0Q3#Fm?@CpBfe%~iboOrI-B zvp_NTtM-RGhJ=>L9ykOA+r%9RNmt%h?wl`;8zjKpI@`HcwZ!hyl^0#9@m)W#z zw+sm~TKl{4$jOMsyC!AsmhWhBTzF?v;q2*4e4Y6Mt4{8C>wSsmE;s+72ghQ*HLv@+ zzI?^Gl$d>CF*RmA|MP0*_Iddp6SWt;=Z_n9PJk8cs_LiJ?dT?rvr(MgJYFm{+vvcd1zxO{r zu`(xS_buLUMh~{kiPml2e56wG#O|D!?O_~;A5PzOwyM0ZygVhaQcwlceU9WTTmE}!YDXR=KXJ)CzezIJrwrP>`#@T11B9-PWb+eM*eRJI( zyJ;r-<V$oVb?1#wv^+c$dO%w>9Ud3m(8 zYXs+vI<{`DlPkDZur7D(yso#rkUzU&Rr&%?e(3|R(l-?H^9FF=YcT8F&2Rp05$h=% zSKnVZn9}DzIySeYK{sNv<$b-$o$nZm&O1ETQ+n7F>t!LFuvkv%Xiuz{Ve!71f&VAC z9n)Jn@#6%~_X*M7k;yh0cg!QM2Q^7}ZS+WF(z_;~XzgYvv3m+X+m4U#4<4F!X@9`U zjOYJ~6T402L~q;-nkU{+nQy{&_|CLXJALXajdmF9S^7oy^8I-S5*xg4Mpf-tY_HHA z*~_C_rs>SB%DzqhGh?%+-qRG$3pWc6N=@Iip{Ks|)7A|qm!8pne1C33;%slpaHR^P zfD;>&rWdVA=xJ_9d;gi=+|abBcZyb-=F(H@x&?N;d3X9Re{8uwqflrYAlU&J$8Zi&-I@09^niSbujFYmKV;5J*O7^p1R73^Vi+IYZs|B=WLMM6qe5BSqE5kRh>OWCCnzD zXib`4w9rP(Q@2LrI>P((^y4OK?h~lf3t!JM zS(s6M`fGWw$#+{0pT2Hsv#TV7y}gM?&20TOZ^=CzlcwF+6Q{qdT=qn8(&y59XXVaM zk*oU>_#ty=rR%vDn;)Dm`rWnQ;o%1dK7A9ld>-L7!S!J6)7N*zH_q6Y|2b(w-H~T^ zxs%!ioz4kH=fq98%r6ksb0cZ)ZlmM-7w0!+Yi+vf=MQomZp1ly$<~eUIB2;QF1UXFR!ux!@$=LJYiib3TQ ziH%FCQbbe?&jhl9@U!rJI#MQq(5fWxgG&WX!?%FZ4 zO)h1X_q}lj)dapTGr&J(eZ=pT+e?**&(+{24HM@^jR{U<-qZYP$zNZYY@}8O3 z?1e3PRAOf9{ck*CG37(?t}4%GU!HU=(G0u(ddc0LO^#xst7lJ7>6~})ZRY1mCL7l~ zyb@jg*8k|qzC(hq%H}@#C&lI&wWjQ~iq74`3f0|L?|M5em+wr`+jeJ8~vZcZ0aj=c%8y);UZNI5zF5cM}_btBT>a5Pi>Avcg8kZxk(E z{dhOiG=}S8>q>GbXEQCCvN3gQ+^LM12S-m;?VXVr@L>O`ssFt1i7348(LL+kY?jOf*x&Rc$t~=GH#-AjpU>&H#Swf2K-O-2v1)9{Q1#|Q=SSN2i>@l z^*easVL^eNxj9q+hOCIVJ>kW%u%F(O-rt?6aKAV9RQY6;ViTrS5b2mcpO+IoHCY4>$9(V_MN=9|PUcC7l>xaVNTgO{tGEq`=q znTTa+PHLRMk9%*dS-$W%b6gLht;(e&(JtHrwL9mpN=XetAXrhbg7o;!dqFF6b`Z7w2Pt(Bo?I>(cY= zPtuOfXSp7}`fHHed=~fc*I$#`{F^qfJ}qva`Q*yP)5ov9j=3vd`FKT$h4;5+*8K46 z_9B*2mOJ+B`nm8-qQt{5S)W&V$UOL^-+p=ZTYlHReKLOQ^XfH$uzQM8Mxl1=62~&l%nOf>ab`BZ3A(kQ zH8)6r$^F`z;*`a)LPBge-S%#}5%`C}nE(8dQ@_5pzHIW&{!*p?*Foh^^yjAfY6YRV zb(IHC+X`^%Z=aI=Vquc45SRJ(DMc?9uCo>5a^F6sJEL;?KM$invB~ud0_?P73RDV8 zeSh!L}D zXq7hk`AhN5d`-U){^|(b3Ct&FJz8$mZpzF#aZRAT=&kiTJ-SoQ-qPN^a_x@0b%*}A z9#hFaRj*k7Lf>XtWaUKD?6a`^)Z4>Vy*~XML0Rn0`_0#QT)q-|4mTX`+_%*S!1}dEfog!-;QC ziBDSDJpEZGOW?J<|BW~9SxwYCbxY*GO}(o~Q>4nC&1bK7PRTyup)%)lklRXi@g?O? z57|e56`p^*-f)&yMaJrSz0w()KhmTB9fLuxlc!ZW}a^-_xIp!MgM7Aza8JSRNeKLPWJ8kEAKC!IpiJvz5kc( z3AaAo?A`J^tP^K=>`J|Tw!igTS*J|Qw!8mMG=I9k!C}V}v)>c{%di|$-2U_Y-scLU zb~|Lf76W z(c5Z|cJnp!`rkCupYcY4?cN4ceThp?FVwV5YAn3Ns4z4B&6B;TD$(L3XNuGf^jQrY#dl<2Kv^t&{(-qLNce8cY&ZTZd_^5XT1 zcMkWl$(_5h)n3%le=w8{<}@rogObf;=Y*M{_fNNet%YcFSzNw^3<*O&YyQ~PLX*2`1)@BZ@1R} z^@vQH9yIOj$G?mE*QAzdW=npE75-N05tKH4(iFy$oAUc5Sf=lsGKpuwYU>!M{}0%w zUz)&JTK4-{{tbPlzcXUJ?5~vDl?oLv0}oVmMMw*PNw}>U)`(u_oh1Y zwv`Rl=T{tVE*IX^v{&QBuG{R2KeH4czrDA^`Y8Xd!|7tv7S&yv@7NQkopxfy%@&&^ z{{wRZSKggF_iOdb_~nmNkJnqs=&$qN`pVrhqgeP-&tI1n>w~J?=KWDiQTT2CN$qcr z(34&H=_jP)+7>YSwcKykgn*`*J ze{3(&=lH0a!!CIHEWe$a&k3`mHz#bf+Sd9pKRvs_xou9`?DdS7_FL4nG}WBl<}v#h z_oriK(NnuRUM@TI{zb@?yOZa#_{?nknfjviLGleo)7x311ydSU-@LZ+?-!N}i2<`h zZcO*zdFAk#Rq@iiy|JIG*#&oB&bfVr@z2@1JXbp3CWcjQpl7csOk5$xrh=XT3W+YfXgWyMt|t!S<64|5^QY4*c}_ z)O5Gi>qBm(T+No1@>~)By6OJW2iie4j31L^S`W?1ixscGv1G9uw_DofL~$<{>3W@` zzkb>_=Yt# z`&WBX;O_0_4M9EIZqCiLwXXYV-@fIU?>gbaICCdMv$n75Z(3hV{)ySM?C{^R7x^~1 z+r1-aeB52mdPQJE>?zaNHfOWS7i^tq%JXvbt)+iX2|oSzZH36?-%A8*`(M9zDSi|6 zVM4*4lef1%*!XK_%7>@L;`Upk+h@KJ=|1aaU}kyLOwwcfghc*;l-CBA=RMOtSnJ=N zvY@@kZ+&Z2yG*9z!t0Le@lopz|FW9av-;ZOW%e=q6&~#FoP2u?^Y6(e&3kJT<5>KE z=f_XIRPVCuW8E8zNQdAZp%XeMmAqc?I6w4dTetTax7_QA$7(}wdcE0T9H=>M_x-sU zuS?3r-wUokZvOneykzW>g@2DV<>^?4|9@N3l`xef&4ppJ4BPVC1s%`RYXe?h>()K; zV#4ZGUtc7CUKhmkqsnH_-9K%$;@j9&dh)g(5;uSOqqgODXYv})#{BPn`HwF{m*IQS-?4NeBVDs)>57RIE zRF^IMzrT&&XIC7vylhLO|Hik@C)6&z5J|3Ee%8+1Z`Zb8*_j5v40ATFjMuvKp>EIH zTEXe%M&(|+%Q?IrGw2E}+_9Q}^99Cz9|A1-wn=k-TKqayVXFV`5ZP3xr#sbCxD`_m zl^;oG-M{tkl6S3MM!cK8Zt>n4ylx8Xzl!%tUH=}eo5m}Dvhvo_EUlmbo(nxcE2W-1 z&zzpMnnm*Q9>@4Ex*w-4^)YbZ?7yYjhQ3 za`8LW11-~6ZFgYWJMqyjv6nfwmLAfz?R)p@@T;B{)3-qfr^#L072KklyP!Sp)9cU( zwh1N6Vpn~<awH*7>&R@Qq)C9;B9k zj+ym(qP#(po`jRmi!Vn7CqLZ5Z>N}6t?07tit-k-jJ*qvA9=N8>4Z3|vOi}_PgUK1 zYqR(5jd#1|TC?*9-M(t^O|f*h)bY3_WvdI{xWCFX?X&fqys7r6>SBr6YSo;lA76f= zpIF&5>yfHXfAHeCLv0%`=_lU&ZuZpsM%Tux-Zy4#{OWzAh@xx32DGQ~O#JouYgH)Ftos_p(O?E9RGFzpX`b-tDZgOTmHvGm9GBN~E;ethwTQAzS#U4KXleH4ceDL>&ARdPSM)y> zkN*;-Yb@&xwsZ%~Tv*7Z`s!qA&*mH4)-&g~Yi&1D|Frw({)-GoM;I>Iwbxu!`g>M` zdrEa*)&053t5{c6cP-j|jic*#g8JvDcbMPq;&{by%Z@d+te%;}Ize6d;T>i{U6Vf6 zZF~LF_U~kVY@6?p>LBVLxFk_;QPF}c!B-|8UK6oXGKyi9u-Y$+MlFZaEjPbi%{rdI zTQJq&<@V1k(M-|mXa3HA`9AD`nWmOOq377K-@G_@&8&t0Z0Y~XWqil+7v5pHj@&__Xrt%qm$&fSsb^Ke7@1y+pp1p03&qaf*%gfej2ix%6-f@IAjjKI(wqD`VnTHbZecM_2es+KPu>&jK znsHwK5XMsZZBFclwEKJRzgL((Z}WNIAB!!2a}+WiEX$q9*0r~L^Mriyo@seU)>Pa7 zvd%h|@Zv4gGHdfjm-lmvd}2>MsC!VVbmMcnDb?n|zmwkKDj-8WVD!hBNZ1!!j&~tOo{Q8jas$baPn#;^r4-fwFH{YSF zHP3qHgNKb$KHGNadd;(*dF^4N*`JyJ%*0%0o_aVj$mc+WaO$VFwGS5C|N#Pe8x%!iQU?h z!)L8zxUqY6(DXT)a%%5iUD=x6)qZxjTB+cyM~Pp~Em`jt%xO@QK6(1ml?*rbWlz4o zd?iDB?}J5R7s8(1iK%>l- zulKqA2)t5I7Q3x1WLePyp}ULxcWw{O3*2_I)Ya(P>aF(AcFcH`xHu)S{8V6aMz{C& zUGLAuzm3|pMzu@#<>8Cd&lVhsyeTOEYHuZf{Q`A1rT=dupP8MSvh}Wb>bFTz=WE}Y z&E_o$v6yxK+28tqmXBVYeBCF+{^P~=X^PPft5{E{7U(vfY*;C75TEzQ*izvv(-Vhz z*wmnx+28N91Zz+1fjx6=pBJ@Ua@guE|K(k0j&ca+lxT;_tCm4EkEq9D-rZw){AX(V)8e}ZXO~;bG4nl}5qe%U zxu@APt+XqwXX1u4Ydixw4F#UfoXJuv!JN2wX6-tjWSKQ4*}*1>JuOSq^jvw5c}Qek zQ+;tjg2VW%Ip;aWB})@!bWHB6RkR86U7MNinU~nolKZT(%U^;qac1SjM*?mR5vl8h z_8jD3Z$48xNn2uqh0W8-nNQf=JS0-$mRd9l3W&|rk9?B({<3ROc0}U7l-A?M6aQA` z9%I=-wN;Gh+5-6fGB6v3c|7|JyYA z*5N&$R6l3sUB9iaztiHxlcSSDFS0$7dU|+PmumK}`yZ9f+66^#K3Y)~m$3ch!jM*j zIp2Qlw3cyx{QYs|_xb#}cla$ zGoF@xqM=3`5)@33d8v`mzsiH{Q;En1_ob5>ZDd*B z1inmB@ONjd4oNkduzYcY?J6zF6PE)I$b~MleKv#d#^S6=jfqwX{ijrz50@N}n+i76 zc9of=#4_e@D`JcceAwRvmV(@|!F_H2O)Z;U8YpIk<%xE^F_0iI~A45x3Q|rIoYcX6S7&H+HJ(p$aAerP<+?Nzn1NT;` z35uyPd<#>(DZOn^N6K04*&zF>SKk6za3lJuP+}reLVhUN71gWFJ2x0GZrEN0RW$hx z@9da>pP#M#TRyThoSJ{#6=ZnKzdd1{2J;vu{QMjRvfbgy`PW8*$AlS#>f^#e5*NOI zwmNxl!&=s2`}MOS_T)nB+3E}O-rlRZN;*CaZ`PJUtlQ-c7B%(!*4C>N@w0L>M3reI z$TpWhdrk@`+AuD7@Z5JI$74>0-*)*SAc-x%_gw5WnAfoEzgc3w%eTMJ0@CMCke+>Q z+5aV33%8!1=ewRo#Oi*Vd(*Q2OR5;f;;Y>@{F^*WRYI=X&A~!Y@{tkaqqXTR&EgX; z>ITQuypnwQz%3==G>dqAm7Bp1LCMQTtq&Kbv$QBrWYiT-_Cn^@8Phlg&f6%< z)O7YF&pdZz&HN9lMopMk#Dl4v?;aOCXMX6P^5PWB%gs@z*Bx4XV#U;# z{zZqD8S-siP%OE==)97~{X;*c5;kxI+imX<&p5>l4<%0A>aF(Tr_bMJl~doJh1r@bXjn*x0&7-+wq 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

W9-uHin-&MD3ot=35 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¨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 bytes; + final void Function()? close; +} + +typedef SourceDownloader = Future Function(Uri uri); +typedef GeneratedFileWriter = void Function(File output, String contents); + +final class SourceIntegrityException implements Exception { + const SourceIntegrityException(this.message); + + final String message; + + @override + String toString() => 'SourceIntegrityException: $message'; +} + +final class VerifiedSourceBundle { + VerifiedSourceBundle({ + required this.allKeysFile, + required this.fractionalUcaFile, + required this._stagingDirectory, + required this._stagedCacheFiles, + }); + + final File allKeysFile; + final File fractionalUcaFile; + final Directory _stagingDirectory; + final Map _stagedCacheFiles; + + void commitCaches() { + for (final entry in _stagedCacheFiles.entries) { + final staged = entry.key; + final cache = entry.value; + cache.parent.createSync(recursive: true); + staged.renameSync(cache.path); + } + _stagedCacheFiles.clear(); + } + + void dispose() { + if (_stagingDirectory.existsSync()) { + _stagingDirectory.deleteSync(recursive: true); + } + } +} + +Future downloadSource(Uri uri) async { + final client = HttpClient(); + try { + final request = await client.getUrl(uri); + request.headers.set(HttpHeaders.userAgentHeader, 'Plezy DUCET generator'); + final response = await request.close(); + return SourceDownloadResponse( + statusCode: response.statusCode, + bytes: response, + close: () => client.close(force: true), + ); + } catch (_) { + client.close(force: true); + rethrow; + } +} + +Future sha256ForFile(File file) async => (await sha256.bind(file.openRead()).first).toString(); + +Future verifySourceFile(File file, SourceDescriptor descriptor) async { + if (!await file.exists()) { + throw SourceIntegrityException('${descriptor.name} is missing: ${file.path}'); + } + final actualDigest = await sha256ForFile(file); + if (actualDigest != descriptor.sha256Digest) { + throw SourceIntegrityException( + '${descriptor.name} SHA-256 mismatch: expected ${descriptor.sha256Digest}, got $actualDigest', + ); + } +} + +Future loadBundledSources({ + required Directory bundledSourceDirectory, + SourceDescriptor allKeysDescriptor = allKeysSource, + SourceDescriptor fractionalUcaDescriptor = fractionalUcaSource, +}) async { + final staging = await Directory.systemTemp.createTemp('plezy_ducet_bundled_'); + + Future decompressAndVerify(SourceDescriptor descriptor) async { + final compressed = File.fromUri(bundledSourceDirectory.uri.resolve(descriptor.bundledFileName)); + if (!await compressed.exists()) { + throw SourceIntegrityException('${descriptor.name} bundled source is missing: ${compressed.path}'); + } + final decompressed = File.fromUri(staging.uri.resolve('${descriptor.bundledFileName}.raw')); + try { + await compressed.openRead().transform(gzip.decoder).pipe(decompressed.openWrite()); + } catch (error) { + throw SourceIntegrityException('${descriptor.name} bundled gzip is invalid: $error'); + } + await verifySourceFile(decompressed, descriptor); + return decompressed; + } + + try { + final allKeys = await decompressAndVerify(allKeysDescriptor); + final fractionalUca = await decompressAndVerify(fractionalUcaDescriptor); + return VerifiedSourceBundle( + allKeysFile: allKeys, + fractionalUcaFile: fractionalUca, + stagingDirectory: staging, + stagedCacheFiles: {}, + ); + } catch (_) { + if (await staging.exists()) { + await staging.delete(recursive: true); + } + rethrow; + } +} + +Future loadVerifiedSources({ + File? explicitAllKeys, + File? explicitFractionalUca, + Directory? cacheDirectory, + SourceDownloader downloader = downloadSource, + SourceDescriptor allKeysDescriptor = allKeysSource, + SourceDescriptor fractionalUcaDescriptor = fractionalUcaSource, +}) async { + final cacheRoot = cacheDirectory ?? Directory.systemTemp; + final staging = await Directory.systemTemp.createTemp('plezy_ducet_sources_'); + final stagedCacheFiles = {}; + + Future resolve(SourceDescriptor descriptor, File? explicit) async { + if (explicit != null) { + await verifySourceFile(explicit, descriptor); + return explicit; + } + + final cache = File.fromUri(cacheRoot.uri.resolve(descriptor.cacheFileName)); + if (await cache.exists()) { + await verifySourceFile(cache, descriptor); + return cache; + } + + final staged = File.fromUri(staging.uri.resolve(descriptor.cacheFileName)); + final response = await downloader(Uri.parse(descriptor.url)); + try { + if (response.statusCode != HttpStatus.ok) { + throw SourceIntegrityException('${descriptor.name} download returned HTTP ${response.statusCode}'); + } + await response.bytes.pipe(staged.openWrite()); + } finally { + response.close?.call(); + } + await verifySourceFile(staged, descriptor); + stagedCacheFiles[staged] = cache; + return staged; + } + + try { + final allKeys = await resolve(allKeysDescriptor, explicitAllKeys); + final fractionalUca = await resolve(fractionalUcaDescriptor, explicitFractionalUca); + return VerifiedSourceBundle( + allKeysFile: allKeys, + fractionalUcaFile: fractionalUca, + stagingDirectory: staging, + stagedCacheFiles: stagedCacheFiles, + ); + } catch (_) { + if (await staging.exists()) { + await staging.delete(recursive: true); + } + rethrow; + } +} + class Weight implements Comparable { final List<(int, int, int)> levels; - final int codepoint; // tiebreaker + final int codepoint; const Weight(this.levels, this.codepoint); @override int compareTo(Weight other) { final len = levels.length < other.levels.length ? levels.length : other.levels.length; - - // Primary pass for (var i = 0; i < len; i++) { final cmp = levels[i].$1.compareTo(other.levels[i].$1); if (cmp != 0) return cmp; @@ -29,39 +244,21 @@ class Weight implements Comparable { if (levels.length != other.levels.length) { return levels.length.compareTo(other.levels.length); } - - // Secondary pass for (var i = 0; i < len; i++) { final cmp = levels[i].$2.compareTo(other.levels[i].$2); if (cmp != 0) return cmp; } - - // Tertiary pass for (var i = 0; i < len; i++) { final cmp = levels[i].$3.compareTo(other.levels[i].$3); if (cmp != 0) return cmp; } - - // Codepoint tiebreaker return codepoint.compareTo(other.codepoint); } } -// --------------------------------------------------------------------------- -// Katakana codepoint ranges (for CLDR kana tertiary reversal) -// --------------------------------------------------------------------------- bool _isKatakana(int cp) => - (cp >= 0x30A0 && cp <= 0x30FF) || // Katakana - (cp >= 0x31F0 && cp <= 0x31FF) || // Katakana Phonetic Extensions - (cp >= 0xFF65 && cp <= 0xFF9F); // Halfwidth Katakana + (cp >= 0x30A0 && cp <= 0x30FF) || (cp >= 0x31F0 && cp <= 0x31FF) || (cp >= 0xFF65 && cp <= 0xFF9F); -// --------------------------------------------------------------------------- -// Parse allkeys.txt โ†’ Map -// -// CLDR kana fix: ICU/CLDR root collation sorts katakana before hiragana -// (opposite of raw DUCET). We adjust by subtracting 6 from katakana tertiary -// weights, placing them below hiragana tertiaries (0x000D+). -// --------------------------------------------------------------------------- Map parseAllKeys(String text) { final result = {}; final weightRe = RegExp(r'\[([.*])([0-9A-Fa-f]{4})\.([0-9A-Fa-f]{4})\.([0-9A-Fa-f]{4})\]'); @@ -69,251 +266,239 @@ Map parseAllKeys(String text) { for (final line in text.split('\n')) { final trimmed = line.trim(); if (trimmed.isEmpty || trimmed.startsWith('#') || trimmed.startsWith('@')) continue; - final semiIdx = trimmed.indexOf(';'); if (semiIdx < 0) continue; - final cpPart = trimmed.substring(0, semiIdx).trim(); - if (cpPart.contains(' ')) continue; // skip multi-codepoint - + if (cpPart.contains(' ')) continue; final cp = int.tryParse(cpPart, radix: 16); - if (cp == null || cp > 0xFFFF) continue; // BMP only + if (cp == null || cp > 0xFFFF) continue; - final weightPart = trimmed.substring(semiIdx + 1); - final matches = weightRe.allMatches(weightPart); + final matches = weightRe.allMatches(trimmed.substring(semiIdx + 1)); if (matches.isEmpty) continue; - - final isKat = _isKatakana(cp); final levels = <(int, int, int)>[]; - for (final m in matches) { - final p = int.parse(m.group(2)!, radix: 16); - final s = int.parse(m.group(3)!, radix: 16); - var t = int.parse(m.group(4)!, radix: 16); - // CLDR kana fix: lower katakana tertiary below hiragana range - if (isKat && t >= 0x000F) t -= 6; - levels.add((p, s, t)); + for (final match in matches) { + final primary = int.parse(match.group(2)!, radix: 16); + final secondary = int.parse(match.group(3)!, radix: 16); + var tertiary = int.parse(match.group(4)!, radix: 16); + if (_isKatakana(cp) && tertiary >= 0x000F) tertiary -= 6; + levels.add((primary, secondary, tertiary)); + } + if (levels.every((level) => level.$1 == 0 && level.$2 == 0 && level.$3 == 0)) continue; + if (result.containsKey(cp)) { + throw FormatException('Duplicate allkeys entry for U+${cp.toRadixString(16).padLeft(4, '0')}'); } - - if (levels.every((l) => l.$1 == 0 && l.$2 == 0 && l.$3 == 0)) continue; - result[cp] = Weight(levels, cp); } - return result; } -// --------------------------------------------------------------------------- -// Parse FractionalUCA.txt radical lines โ†’ CJK codepoints in radical-stroke -// order, plus Kangxi radical โ†’ CJK decomposition map. -// --------------------------------------------------------------------------- (List, Map) parseRadicals(String text) { final order = []; - final kangxiDecomp = {}; // kangxi radical CP โ†’ CJK CP + final kangxiDecomp = {}; final radicalRe = RegExp(r'^\[radical \d+'); for (final line in text.split('\n')) { if (!radicalRe.hasMatch(line)) continue; - - // Parse header: [radical N=:] final eqIdx = line.indexOf('='); final colonIdx = line.indexOf(':'); if (eqIdx < 0 || colonIdx < 0 || colonIdx <= eqIdx) continue; final closeBracket = line.lastIndexOf(']'); if (closeBracket < 0) continue; - // Extract Kangxi radical โ†’ CJK mapping from header final headerChars = line.substring(eqIdx + 1, colonIdx).runes.toList(); if (headerChars.length >= 2) { final kangxi = headerChars.first; final cjk = headerChars[1]; - // Kangxi Radicals: U+2F00-U+2FD5 if (kangxi >= 0x2F00 && kangxi <= 0x2FD5 && cjk <= 0xFFFF) { kangxiDecomp[kangxi] = cjk; } } - // Parse character list after colon - final charList = line.substring(colonIdx + 1, closeBracket); - final runes = charList.runes.toList(); + final runes = line.substring(colonIdx + 1, closeBracket).runes.toList(); var i = 0; while (i < runes.length) { final cp = runes[i]; - if (cp == 0x20) { i++; continue; } - - // Check for range: - if (i + 2 < runes.length && runes[i + 1] == 0x2D) { final endCp = runes[i + 2]; - for (var c = cp; c <= endCp; c++) { - if (c <= 0xFFFF) order.add(c); + for (var value = cp; value <= endCp; value++) { + if (value <= 0xFFFF) order.add(value); } i += 3; continue; } - if (cp <= 0xFFFF) order.add(cp); i++; } } - // Deduplicate preserving order final seen = {}; - final deduped = order.where((cp) => seen.add(cp)).toList(); - return (deduped, kangxiDecomp); + return (order.where(seen.add).toList(), kangxiDecomp); } -// --------------------------------------------------------------------------- -// Build final ordered list -// --------------------------------------------------------------------------- List buildOrder(Map allKeys, List cjkRadicalOrder) { - final entries = allKeys.entries.toList(); - entries.sort((a, b) => a.value.compareTo(b.value)); - + final entries = allKeys.entries.toList()..sort((a, b) => a.value.compareTo(b.value)); final ordered = []; final cjkSet = cjkRadicalOrder.toSet(); - bool cjkInserted = false; + var cjkInserted = false; - for (final e in entries) { - if (cjkSet.contains(e.key)) continue; - - if (!cjkInserted && e.value.levels.isNotEmpty && e.value.levels.first.$1 >= 0xFB00) { - for (final cp in cjkRadicalOrder) { - if (cp <= 0xFFFF) ordered.add(cp); - } + for (final entry in entries) { + if (cjkSet.contains(entry.key)) continue; + if (!cjkInserted && entry.value.levels.isNotEmpty && entry.value.levels.first.$1 >= 0xFB00) { + ordered.addAll(cjkRadicalOrder); cjkInserted = true; } - - ordered.add(e.key); + ordered.add(entry.key); } - - if (!cjkInserted) { - for (final cp in cjkRadicalOrder) { - if (cp <= 0xFFFF) ordered.add(cp); - } - } - + if (!cjkInserted) ordered.addAll(cjkRadicalOrder); return ordered; } -// --------------------------------------------------------------------------- -// Main -// --------------------------------------------------------------------------- -Future main(List args) async { - final allKeysPath = args.isNotEmpty ? args.first : '/tmp/allkeys.txt'; - final fracUcaPath = args.length > 1 ? args[1] : '/tmp/FractionalUCA.txt'; - - // Download if missing - if (!File(allKeysPath).existsSync()) { - stderr.writeln('Downloading allkeys.txt...'); - final result = await Process.run('curl', [ - '-sL', - 'https://www.unicode.org/Public/UCA/13.0.0/allkeys.txt', - '-o', - allKeysPath, - ]); - if (result.exitCode != 0) { - stderr.writeln('Failed to download allkeys.txt'); - exit(1); +String buildDenseRankLookup(List ordered) { + if (ordered.length > 0xFFFF) { + throw StateError('Rank table overflow: ${ordered.length} entries exceed 65535'); + } + final ranks = List.filled(0x10000, 0); + for (var rank = 0; rank < ordered.length; rank++) { + final codepoint = ordered[rank]; + if (codepoint < 0 || codepoint > 0xFFFF) { + throw RangeError.range(codepoint, 0, 0xFFFF, 'codepoint'); } - } - - if (!File(fracUcaPath).existsSync()) { - stderr.writeln('Downloading FractionalUCA.txt...'); - final result = await Process.run('curl', [ - '-sL', - 'https://raw.githubusercontent.com/unicode-org/cldr/release-39/common/uca/FractionalUCA.txt', - '-o', - fracUcaPath, - ]); - if (result.exitCode != 0) { - stderr.writeln('Failed to download FractionalUCA.txt'); - exit(1); + if (ranks[codepoint] != 0) { + throw StateError('Duplicate codepoint U+${codepoint.toRadixString(16).padLeft(4, '0')}'); } + ranks[codepoint] = rank + 1; + } + return String.fromCharCodes(ranks); +} + +String _escapeCodeUnit(int codeUnit) { + if (codeUnit == 0x27) return r"\'"; + if (codeUnit == 0x5C) return r'\\'; + if (codeUnit == 0x24) return r'\$'; + return '\\u${codeUnit.toRadixString(16).padLeft(4, '0')}'; +} + +String renderDucetOrder(List ordered, Map kangxiDecomp) { + final denseRanks = buildDenseRankLookup(ordered); + final buffer = StringBuffer() + ..writeln('/// Dense BMP ranks per DUCET (Unicode 13.0) + pinned CLDR CJK radical-stroke.') + ..writeln('/// Each code unit stores rank + 1; zero means absent.') + ..writeln('/// Katakana sorts before hiragana (CLDR root tailoring).') + ..writeln('/// Generated by scripts/generate_ducet_ranks.dart โ€” do not edit.') + ..writeln('library;') + ..writeln() + ..writeln('const String _ducetRanks ='); + const unitsPerLine = 128; + for (var start = 0; start < denseRanks.length; start += unitsPerLine) { + final end = start + unitsPerLine < denseRanks.length ? start + unitsPerLine : denseRanks.length; + buffer.write(" '"); + for (var i = start; i < end; i++) { + buffer.write(_escapeCodeUnit(denseRanks.codeUnitAt(i))); + } + buffer.writeln(start + unitsPerLine >= denseRanks.length ? "';" : "'"); + } + + buffer + ..writeln() + ..writeln('/// Kangxi Radicals (U+2F00-U+2FD5) โ†’ CJK Unified equivalents.') + ..writeln('/// ICU decomposes these via NFD before collation.') + ..writeln('const Map _kangxiDecomp = {'); + final sortedKangxi = kangxiDecomp.entries.toList()..sort((a, b) => a.key.compareTo(b.key)); + for (final entry in sortedKangxi) { + buffer.writeln( + ' 0x${entry.key.toRadixString(16).toUpperCase()}: ' + '0x${entry.value.toRadixString(16).toUpperCase()},', + ); + } + buffer + ..writeln('};') + ..writeln() + ..writeln('/// Compare two characters using DUCET + CLDR ordering.') + ..writeln('/// Decomposes Kangxi radicals to CJK equivalents before lookup.') + ..writeln('/// Falls back to codepoint order for characters not in the table.') + ..writeln('int ducetCompare(String a, String b) {') + ..writeln(' var cpA = a.runes.first;') + ..writeln(' var cpB = b.runes.first;') + ..writeln(' cpA = _kangxiDecomp[cpA] ?? cpA;') + ..writeln(' cpB = _kangxiDecomp[cpB] ?? cpB;') + ..writeln(' final storedRankA = cpA <= 0xFFFF ? _ducetRanks.codeUnitAt(cpA) : 0;') + ..writeln(' final storedRankB = cpB <= 0xFFFF ? _ducetRanks.codeUnitAt(cpB) : 0;') + ..writeln(' final rankA = storedRankA == 0 ? 0x100000 + cpA : storedRankA - 1;') + ..writeln(' final rankB = storedRankB == 0 ? 0x100000 + cpB : storedRankB - 1;') + ..writeln(' return rankA.compareTo(rankB);') + ..writeln('}'); + return buffer.toString(); +} + +void writeGeneratedFile(File output, String contents) { + output.parent.createSync(recursive: true); + final staged = File('${output.path}.$pid.tmp'); + try { + staged.writeAsStringSync(contents, flush: true); + staged.renameSync(output.path); + } finally { + if (staged.existsSync()) staged.deleteSync(); + } +} + +Future generateDucetRanks({ + bool useBundledSources = true, + Directory? bundledSourceDirectory, + File? explicitAllKeys, + File? explicitFractionalUca, + Directory? cacheDirectory, + File? output, + SourceDownloader downloader = downloadSource, + GeneratedFileWriter writer = writeGeneratedFile, + SourceDescriptor allKeysDescriptor = allKeysSource, + SourceDescriptor fractionalUcaDescriptor = fractionalUcaSource, +}) async { + final sources = useBundledSources + ? await loadBundledSources( + bundledSourceDirectory: + bundledSourceDirectory ?? Directory.fromUri(Directory.current.uri.resolve('scripts/data/')), + allKeysDescriptor: allKeysDescriptor, + fractionalUcaDescriptor: fractionalUcaDescriptor, + ) + : await loadVerifiedSources( + explicitAllKeys: explicitAllKeys, + explicitFractionalUca: explicitFractionalUca, + cacheDirectory: cacheDirectory, + downloader: downloader, + allKeysDescriptor: allKeysDescriptor, + fractionalUcaDescriptor: fractionalUcaDescriptor, + ); + try { + final allKeys = parseAllKeys(await sources.allKeysFile.readAsString()); + final (cjkOrder, kangxiDecomp) = parseRadicals(await sources.fractionalUcaFile.readAsString()); + final ordered = buildOrder(allKeys, cjkOrder); + final rendered = renderDucetOrder(ordered, kangxiDecomp); + sources.commitCaches(); + writer(output ?? File.fromUri(Directory.current.uri.resolve('lib/data/ducet_order.dart')), rendered); + } finally { + sources.dispose(); + } +} + +Future main(List args) async { + if (args.length > 2) { + stderr.writeln('Usage: dart run scripts/generate_ducet_ranks.dart [allkeys.txt] [FractionalUCA.txt]'); + exitCode = 64; + return; + } + try { + await generateDucetRanks( + explicitAllKeys: args.isNotEmpty ? File(args.first) : null, + explicitFractionalUca: args.length > 1 ? File(args[1]) : null, + useBundledSources: args.isEmpty, + ); + stderr.writeln('Written to ${File.fromUri(Directory.current.uri.resolve('lib/data/ducet_order.dart')).path}'); + } catch (error) { + stderr.writeln(error); + exitCode = 1; } - - stderr.writeln('Parsing allkeys.txt (with CLDR kana fix)...'); - final allKeysText = File(allKeysPath).readAsStringSync(); - final allKeys = parseAllKeys(allKeysText); - stderr.writeln(' ${allKeys.length} BMP entries'); - - stderr.writeln('Parsing FractionalUCA.txt...'); - final fracText = File(fracUcaPath).readAsStringSync(); - final (cjkOrder, kangxiDecomp) = parseRadicals(fracText); - stderr.writeln(' ${cjkOrder.length} CJK codepoints in radical-stroke order'); - stderr.writeln(' ${kangxiDecomp.length} Kangxi radical decompositions'); - final bmpCjk = cjkOrder.where((cp) => cp <= 0xFFFF).length; - stderr.writeln(' $bmpCjk BMP CJK codepoints'); - - stderr.writeln('Building total order...'); - final ordered = buildOrder(allKeys, cjkOrder); - stderr.writeln(' ${ordered.length} total BMP codepoints in order'); - - stderr.writeln(' ${ordered.length * 2} raw bytes'); - - // Generate Dart file โ€” store codepoints as a raw UTF-16 string constant. - // Each char IS the codepoint. Dart strings are UTF-16 natively, so the - // compiled snapshot stores the data as raw 2-byte values with zero decoding. - final outPath = '${Directory.current.path}/lib/data/ducet_order.dart'; - final buf = StringBuffer(); - buf.writeln('/// Sorted BMP codepoints per DUCET (Unicode 13.0) + CLDR 39 CJK radical-stroke.'); - buf.writeln('/// Katakana sorts before hiragana (CLDR root tailoring).'); - buf.writeln('/// Generated by scripts/generate_ducet_ranks.dart โ€” do not edit.'); - buf.writeln(); - - // Raw UTF-16 string โ€” each code unit is a codepoint in DUCET order. - // Use \uXXXX escapes so the source stays ASCII-safe. - buf.write("const String _ducetOrder = '"); - for (var i = 0; i < ordered.length; i++) { - final cp = ordered[i]; - if (cp == 0x27) { - buf.write(r"\'"); // escape single quote - } else if (cp == 0x5C) { - buf.write(r'\\'); // escape backslash - } else if (cp == 0x24) { - buf.write(r'\$'); // escape dollar - } else { - buf.write('\\u${cp.toRadixString(16).padLeft(4, '0')}'); - } - } - buf.writeln("';"); - - // Kangxi radical decomposition map - buf.writeln(); - buf.writeln('/// Kangxi Radicals (U+2F00-U+2FD5) โ†’ CJK Unified equivalents.'); - buf.writeln('/// ICU decomposes these via NFD before collation.'); - buf.writeln('const Map _kangxiDecomp = {'); - final sortedKangxi = kangxiDecomp.entries.toList()..sort((a, b) => a.key.compareTo(b.key)); - for (final e in sortedKangxi) { - buf.writeln(' 0x${e.key.toRadixString(16).toUpperCase()}: 0x${e.value.toRadixString(16).toUpperCase()},'); - } - buf.writeln('};'); - - buf.writeln(); - buf.writeln('late final Map _ranks = _buildRanks();'); - buf.writeln(); - buf.writeln('Map _buildRanks() {'); - buf.writeln(' return {'); - buf.writeln(' for (var i = 0; i < _ducetOrder.length; i++)'); - buf.writeln(' _ducetOrder.codeUnitAt(i): i,'); - buf.writeln(' };'); - buf.writeln('}'); - buf.writeln(); - buf.writeln('/// Compare two characters using DUCET + CLDR ordering.'); - buf.writeln('/// Decomposes Kangxi radicals to CJK equivalents before lookup.'); - buf.writeln('/// Falls back to codepoint order for characters not in the table.'); - buf.writeln('int ducetCompare(String a, String b) {'); - buf.writeln(' var cpA = a.runes.first;'); - buf.writeln(' var cpB = b.runes.first;'); - buf.writeln(' cpA = _kangxiDecomp[cpA] ?? cpA;'); - buf.writeln(' cpB = _kangxiDecomp[cpB] ?? cpB;'); - buf.writeln(' final rankA = _ranks[cpA] ?? (0x100000 + cpA);'); - buf.writeln(' final rankB = _ranks[cpB] ?? (0x100000 + cpB);'); - buf.writeln(' return rankA.compareTo(rankB);'); - buf.writeln('}'); - - File(outPath).writeAsStringSync(buf.toString()); - stderr.writeln('Written to $outPath'); } diff --git a/scripts/generate_hid_key_labels.dart b/scripts/generate_hid_key_labels.dart new file mode 100644 index 000000000..63ac589c9 --- /dev/null +++ b/scripts/generate_hid_key_labels.dart @@ -0,0 +1,208 @@ +/// Generates lib/data/hid_key_labels.dart from the curated offline HID catalog. +/// +/// Usage: +/// dart run scripts/generate_hid_key_labels.dart [input.json] [output.dart] +library; + +import 'dart:convert'; +import 'dart:io'; + +const defaultHidKeyLabelsInput = 'scripts/data/hid_key_labels.json'; +const defaultHidKeyLabelsOutput = 'lib/data/hid_key_labels.dart'; + +final class HidKeyLabel { + const HidKeyLabel({required this.id, required this.label}); + + final String id; + final String label; + + int get numericId => int.parse(id, radix: 16); +} + +final class HidKeyGroup { + const HidKeyGroup({required this.name, required this.keys}); + + final String name; + final List keys; +} + +final class HidKeyCatalog { + const HidKeyCatalog({required this.groups}); + + final List groups; +} + +typedef AtomicFileWriter = Future Function(String path, String contents); + +HidKeyCatalog parseHidKeyLabelsCatalog(String source) { + final Object? decoded; + try { + decoded = jsonDecode(source); + } on FormatException catch (error) { + throw FormatException('Invalid HID catalog JSON: ${error.message}'); + } + + final root = _expectMap(decoded, 'catalog'); + if (root['schemaVersion'] != 1) { + throw const FormatException('HID catalog schemaVersion must be 1'); + } + + final rawGroups = _expectList(root['groups'], 'groups'); + if (rawGroups.isEmpty) { + throw const FormatException('HID catalog groups must not be empty'); + } + + final groups = []; + final groupNames = {}; + final ids = {}; + var previousId = -1; + + for (var groupIndex = 0; groupIndex < rawGroups.length; groupIndex++) { + final rawGroup = _expectMap(rawGroups[groupIndex], 'groups[$groupIndex]'); + final name = _expectNonemptyString(rawGroup['name'], 'groups[$groupIndex].name'); + if (!groupNames.add(name)) { + throw FormatException('Duplicate HID group name: $name'); + } + + final rawKeys = _expectList(rawGroup['keys'], 'groups[$groupIndex].keys'); + if (rawKeys.isEmpty) { + throw FormatException('HID group "$name" must contain at least one key'); + } + + final keys = []; + for (var keyIndex = 0; keyIndex < rawKeys.length; keyIndex++) { + final path = 'groups[$groupIndex].keys[$keyIndex]'; + final rawKey = _expectMap(rawKeys[keyIndex], path); + final id = _expectString(rawKey['id'], '$path.id'); + if (!RegExp(r'^[0-9a-f]{8}$').hasMatch(id)) { + throw FormatException('$path.id must be exactly eight lowercase hexadecimal digits'); + } + if (!ids.add(id)) { + throw FormatException('Duplicate HID key ID: $id'); + } + + final numericId = int.parse(id, radix: 16); + if (numericId <= previousId) { + throw FormatException('HID key IDs must be in strictly increasing numeric order: $id'); + } + previousId = numericId; + + final label = _expectNonemptyString(rawKey['label'], '$path.label'); + keys.add(HidKeyLabel(id: id, label: label)); + } + groups.add(HidKeyGroup(name: name, keys: List.unmodifiable(keys))); + } + + return HidKeyCatalog(groups: List.unmodifiable(groups)); +} + +String renderHidKeyLabels(HidKeyCatalog catalog) { + final output = StringBuffer() + ..writeln( + '// Generated by dart run scripts/generate_hid_key_labels.dart from ' + 'scripts/data/hid_key_labels.json; do not edit by hand.', + ) + ..writeln() + ..writeln('/// Human-readable labels for physical keyboard keys, keyed by USB HID usage code.') + ..writeln('const hidKeyLabels = {'); + + for (final group in catalog.groups) { + output.writeln(' // ${group.name}'); + for (final key in group.keys) { + output.writeln(' 0x${key.id}: ${_dartString(key.label)},'); + } + } + + output.writeln('};'); + return output.toString(); +} + +Future writeFileAtomically(String path, String contents) async { + final output = File(path); + await output.parent.create(recursive: true); + final temporary = File('$path.tmp.$pid.${DateTime.now().microsecondsSinceEpoch}'); + try { + await temporary.writeAsString(contents, flush: true); + await temporary.rename(path); + } finally { + if (await temporary.exists()) { + await temporary.delete(); + } + } +} + +Future generateHidKeyLabels( + String inputPath, + String outputPath, { + AtomicFileWriter writer = writeFileAtomically, +}) async { + final source = await File(inputPath).readAsString(); + final catalog = parseHidKeyLabelsCatalog(source); + final rendered = renderHidKeyLabels(catalog); + await writer(outputPath, rendered); +} + +Future main(List arguments) async { + if (arguments.length > 2) { + stderr.writeln('Usage: dart run scripts/generate_hid_key_labels.dart [input.json] [output.dart]'); + exitCode = 64; + return; + } + + final inputPath = arguments.isEmpty ? defaultHidKeyLabelsInput : arguments[0]; + final outputPath = arguments.length < 2 ? defaultHidKeyLabelsOutput : arguments[1]; + await generateHidKeyLabels(inputPath, outputPath); +} + +Map _expectMap(Object? value, String path) { + if (value is! Map) { + throw FormatException('$path must be a JSON object'); + } + return value; +} + +List _expectList(Object? value, String path) { + if (value is! List) { + throw FormatException('$path must be a JSON array'); + } + return value; +} + +String _expectString(Object? value, String path) { + if (value is! String) { + throw FormatException('$path must be a string'); + } + return value; +} + +String _expectNonemptyString(Object? value, String path) { + final string = _expectString(value, path); + if (string.trim().isEmpty) { + throw FormatException('$path must not be empty'); + } + return string; +} + +String _dartString(String value) { + if (value == r'\') return r"r'\'"; + + if (value.contains("'")) { + final escaped = value + .replaceAll(r'\', r'\\') + .replaceAll('"', r'\"') + .replaceAll(r'$', r'\$') + .replaceAll('\r', r'\r') + .replaceAll('\n', r'\n') + .replaceAll('\t', r'\t'); + return '"$escaped"'; + } + + final escaped = value + .replaceAll(r'\', r'\\') + .replaceAll("'", r"\'") + .replaceAll(r'$', r'\$') + .replaceAll('\r', r'\r') + .replaceAll('\n', r'\n') + .replaceAll('\t', r'\t'); + return "'$escaped'"; +} diff --git a/scripts/generate_iso_639_data.dart b/scripts/generate_iso_639_data.dart new file mode 100644 index 000000000..30b48f75e --- /dev/null +++ b/scripts/generate_iso_639_data.dart @@ -0,0 +1,239 @@ +/// Generates lib/data/iso_639_data.dart from the curated offline ISO 639 catalog. +/// +/// Usage: +/// dart run scripts/generate_iso_639_data.dart [input.json] [output.dart] +library; + +import 'dart:convert'; +import 'dart:io'; + +const defaultIso639Input = 'scripts/data/iso_639_codes.json'; +const defaultIso639Output = 'lib/data/iso_639_data.dart'; + +final class Iso639CatalogEntry { + const Iso639CatalogEntry({ + required this.primary, + required this.terminology, + required this.bibliographic, + required this.name, + }); + + final String primary; + final String terminology; + final String? bibliographic; + final String name; +} + +final class Iso639Catalog { + const Iso639Catalog({required this.entries}); + + final List entries; +} + +typedef AtomicFileWriter = Future Function(String path, String contents); + +Iso639Catalog parseIso639Catalog(String source) { + final Object? decoded; + try { + decoded = jsonDecode(source); + } on FormatException catch (error) { + throw FormatException('Invalid ISO 639 catalog JSON: ${error.message}'); + } + + final root = _expectMap(decoded, 'catalog'); + if (root['schemaVersion'] != 1) { + throw const FormatException('ISO 639 catalog schemaVersion must be 1'); + } + + final languages = _expectMap(root['languages'], 'languages'); + if (languages.isEmpty) { + throw const FormatException('ISO 639 catalog languages must not be empty'); + } + + final entries = []; + final allCodes = {}; + String? previousPrimary; + + for (final catalogEntry in languages.entries) { + final key = catalogEntry.key; + if (!_isPrimaryCode(key)) { + throw FormatException('Language key must be exactly two lowercase letters: $key'); + } + if (previousPrimary != null && key.compareTo(previousPrimary) <= 0) { + throw FormatException('Language keys must be in strictly increasing order: $key'); + } + previousPrimary = key; + + final rawEntry = _expectMap(catalogEntry.value, 'languages.$key'); + final primary = _expectString(rawEntry['primary'], 'languages.$key.primary'); + if (primary != key) { + throw FormatException('Language key $key does not match primary code $primary'); + } + if (!_isPrimaryCode(primary)) { + throw FormatException('languages.$key.primary must be exactly two lowercase letters'); + } + if (!allCodes.add(primary)) { + throw FormatException('Duplicate ISO 639 code: $primary'); + } + + final terminology = _expectString(rawEntry['terminology'], 'languages.$key.terminology'); + if (!_isAliasCode(terminology)) { + throw FormatException('languages.$key.terminology must be exactly three lowercase letters'); + } + if (!allCodes.add(terminology)) { + throw FormatException('Duplicate ISO 639 code: $terminology'); + } + + final rawBibliographic = rawEntry['bibliographic']; + final String? bibliographic; + if (rawBibliographic == null) { + bibliographic = null; + } else { + bibliographic = _expectString(rawBibliographic, 'languages.$key.bibliographic'); + if (!_isAliasCode(bibliographic)) { + throw FormatException('languages.$key.bibliographic must be null or exactly three lowercase letters'); + } + if (!allCodes.add(bibliographic)) { + throw FormatException('Duplicate ISO 639 code: $bibliographic'); + } + } + + final name = _expectNonemptyString(rawEntry['name'], 'languages.$key.name'); + entries.add( + Iso639CatalogEntry(primary: primary, terminology: terminology, bibliographic: bibliographic, name: name), + ); + } + + return Iso639Catalog(entries: List.unmodifiable(entries)); +} + +String renderIso639Data(Iso639Catalog catalog) { + final output = StringBuffer() + ..writeln( + '// Generated by dart run scripts/generate_iso_639_data.dart from ' + 'scripts/data/iso_639_codes.json; do not edit by hand.', + ) + ..writeln() + ..writeln('class LanguageEntry {') + ..writeln(' final String code1;') + ..writeln(' final String code2;') + ..writeln(' final String? code2B;') + ..writeln(' final String name;') + ..writeln(' const LanguageEntry(this.code1, this.code2, this.code2B, this.name);') + ..writeln('}') + ..writeln() + ..writeln('const languageEntries = {'); + + for (final entry in catalog.entries) { + final bibliographic = entry.bibliographic == null ? 'null' : _dartString(entry.bibliographic!); + output.writeln( + ' ${_dartString(entry.primary)}: LanguageEntry(' + '${_dartString(entry.primary)}, ${_dartString(entry.terminology)}, $bibliographic, ${_dartString(entry.name)}),', + ); + } + + output + ..writeln('};') + ..writeln() + ..writeln('const code2ToCode1 = {'); + for (final entry in catalog.entries) { + output.writeln(' ${_dartString(entry.terminology)}: ${_dartString(entry.primary)},'); + } + + output + ..writeln('};') + ..writeln() + ..writeln('const code2BToCode1 = {'); + for (final entry in catalog.entries) { + final bibliographic = entry.bibliographic; + if (bibliographic != null) { + output.writeln(' ${_dartString(bibliographic)}: ${_dartString(entry.primary)},'); + } + } + output.writeln('};'); + return output.toString(); +} + +Future writeFileAtomically(String path, String contents) async { + final output = File(path); + await output.parent.create(recursive: true); + final temporary = File('$path.tmp.$pid.${DateTime.now().microsecondsSinceEpoch}'); + try { + await temporary.writeAsString(contents, flush: true); + await temporary.rename(path); + } finally { + if (await temporary.exists()) { + await temporary.delete(); + } + } +} + +Future generateIso639Data( + String inputPath, + String outputPath, { + AtomicFileWriter writer = writeFileAtomically, +}) async { + final source = await File(inputPath).readAsString(); + final catalog = parseIso639Catalog(source); + final rendered = renderIso639Data(catalog); + await writer(outputPath, rendered); +} + +Future main(List arguments) async { + if (arguments.length > 2) { + stderr.writeln('Usage: dart run scripts/generate_iso_639_data.dart [input.json] [output.dart]'); + exitCode = 64; + return; + } + + final inputPath = arguments.isEmpty ? defaultIso639Input : arguments[0]; + final outputPath = arguments.length < 2 ? defaultIso639Output : arguments[1]; + await generateIso639Data(inputPath, outputPath); +} + +Map _expectMap(Object? value, String path) { + if (value is! Map) { + throw FormatException('$path must be a JSON object'); + } + return value; +} + +String _expectString(Object? value, String path) { + if (value is! String) { + throw FormatException('$path must be a string'); + } + return value; +} + +String _expectNonemptyString(Object? value, String path) { + final string = _expectString(value, path); + if (string.trim().isEmpty) { + throw FormatException('$path must not be empty'); + } + return string; +} + +bool _isPrimaryCode(String code) => RegExp(r'^[a-z]{2}$').hasMatch(code); +bool _isAliasCode(String code) => RegExp(r'^[a-z]{3}$').hasMatch(code); + +String _dartString(String value) { + if (value.contains("'")) { + final escaped = value + .replaceAll(r'\', r'\\') + .replaceAll('"', r'\"') + .replaceAll(r'$', r'\$') + .replaceAll('\r', r'\r') + .replaceAll('\n', r'\n') + .replaceAll('\t', r'\t'); + return '"$escaped"'; + } + + final escaped = value + .replaceAll(r'\', r'\\') + .replaceAll("'", r"\'") + .replaceAll(r'$', r'\$') + .replaceAll('\r', r'\r') + .replaceAll('\n', r'\n') + .replaceAll('\t', r'\t'); + return "'$escaped'"; +} diff --git a/scripts/test_check_codegen.py b/scripts/test_check_codegen.py index 52c8d00ab..0481d122f 100644 --- a/scripts/test_check_codegen.py +++ b/scripts/test_check_codegen.py @@ -10,6 +10,9 @@ from pathlib import Path SCRIPT_DIR = Path(__file__).resolve().parent GENERATED_PATHS = ( + "lib/data/ducet_order.dart", + "lib/data/hid_key_labels.dart", + "lib/data/iso_639_data.dart", "lib/i18n/strings.g.dart", "lib/models/model.freezed.dart", "lib/models/model.g.dart", @@ -58,6 +61,18 @@ cp source.txt server/relay_protocol_gen.go """#!/usr/bin/env bash if [ "${FAIL_DART:-0}" -ne 0 ]; then exit "$FAIL_DART"; fi case "$*" in + *"generate_ducet_ranks.dart") + mkdir -p lib/data + cp source.txt lib/data/ducet_order.dart + ;; + *"generate_hid_key_labels.dart") + mkdir -p lib/data + cp source.txt lib/data/hid_key_labels.dart + ;; + *"generate_iso_639_data.dart") + mkdir -p lib/data + cp source.txt lib/data/iso_639_data.dart + ;; "run slang") mkdir -p lib/i18n cp source.txt lib/i18n/strings.g.dart @@ -194,6 +209,18 @@ esac self.assertEqual(untracked.read_text(encoding="utf-8"), "caller sentinel\n") self.assertEqual(self.git_status(), status_before) + def test_deleted_explicit_dart_output_is_reported_without_repair(self) -> None: + deleted = self.root / "lib" / "data" / "hid_key_labels.dart" + deleted.unlink() + status_before = self.git_status() + + result = self.run_codegen("--check") + + self.assertEqual(result.returncode, 1) + self.assertIn("lib/data/hid_key_labels.dart", result.stderr) + self.assertFalse(deleted.exists()) + self.assertEqual(self.git_status(), status_before) + def test_write_mode_updates_outputs_and_forwards_build_runner_arguments(self) -> None: (self.root / "source.txt").write_text("version two\n", encoding="utf-8") diff --git a/slang.yaml b/slang.yaml index 4df90738f..dcb04c603 100644 --- a/slang.yaml +++ b/slang.yaml @@ -2,8 +2,8 @@ input_directory: lib/i18n input_file_pattern: .i18n.json output_directory: lib/i18n timestamp: false -# Fall back to base (en) for any key missing in a non-base locale. -# Without this, every locale would need every key declared up-front and -# the generator would emit `class is missing implementations forโ€ฆ` -# errors when a new English string lands. -fallback_strategy: base_locale +# Fall back to base (en) when a non-base key is missing or still has the +# translation cleanup placeholder (`""`). Without this, every locale would +# need every key translated up-front and empty placeholders would render +# without meaningful text. +fallback_strategy: base_locale_empty_string diff --git a/test/data/ducet_order_test.dart b/test/data/ducet_order_test.dart new file mode 100644 index 000000000..36cb21c67 --- /dev/null +++ b/test/data/ducet_order_test.dart @@ -0,0 +1,42 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/data/ducet_order.dart'; + +void main() { + test('applies CLDR kana ordering', () { + expect(ducetCompare('ใ‚ข', 'ใ‚'), isNegative); + expect(ducetCompare('ใ‚ซ', 'ใ‹'), isNegative); + }); + + test('orders representative scripts by DUCET rank', () { + expect(ducetCompare('A', 'ฮฑ'), isNegative); + expect(ducetCompare('ฮฑ', 'ะ–'), isNegative); + expect(ducetCompare('ะ–', 'ไธ€'), isNegative); + }); + + test('decomposes Kangxi radicals to their unified equivalents', () { + expect(ducetCompare('โผ€', 'ไธ€'), 0); + expect(ducetCompare('โฟ•', '้พ '), 0); + }); + + test('uses codepoint fallback for missing BMP and supplementary characters', () { + expect(ducetCompare('\u0378', '\u0379'), isNegative); + expect(ducetCompare('\u0378', 'A'), isPositive); + expect(ducetCompare('๐Ÿ˜€', '๐Ÿ˜'), isNegative); + expect(ducetCompare('๐Ÿ˜€', 'A'), isPositive); + }); + + test('preserves apostrophe, backslash, and dollar ranks in generated literal', () { + expect(ducetCompare("'", r'$'), isNegative); + expect(ducetCompare(r'$', r'\'), isPositive); + }); + + test('compares only the first rune', () { + expect(ducetCompare('A trailing text', 'A different text'), 0); + expect(ducetCompare('๐Ÿ˜€ trailing text', '๐Ÿ˜€ different text'), 0); + }); + + test('preserves empty-input failure', () { + expect(() => ducetCompare('', 'A'), throwsStateError); + expect(() => ducetCompare('A', ''), throwsStateError); + }); +} diff --git a/test/data/hid_key_labels_test.dart b/test/data/hid_key_labels_test.dart new file mode 100644 index 000000000..a08e32fac --- /dev/null +++ b/test/data/hid_key_labels_test.dart @@ -0,0 +1,31 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/data/hid_key_labels.dart'; +import 'package:plezy/models/hotkey_model.dart'; + +void main() { + test('catalog preserves all 325 unique keys in canonical numeric order', () { + final ids = hidKeyLabels.keys.toList(); + final sortedIds = [...ids]..sort(); + + expect(hidKeyLabels, hasLength(325)); + expect(ids.toSet(), hasLength(ids.length)); + expect(ids, sortedIds); + expect(ids.every((id) => id >= 0 && id <= 0xffffffff), isTrue); + expect(hidKeyLabels.values.every((label) => label.trim().isNotEmpty), isTrue); + }); + + test('catalog preserves representative labels across usage groups', () { + expect(hidKeyLabels[0x00000012], 'Fn'); + expect(hidKeyLabels[0x000100b5], 'Display Toggle'); + expect(hidKeyLabels[0x0005ff1f], 'Game Button Z'); + expect(hidKeyLabels[0x00070031], r'\'); + expect(hidKeyLabels[0x000c00cd], 'Play/Pause'); + expect(hidKeyLabels[0x000c029f], 'Show All Windows'); + }); + + test('physicalKeyLabel uses the catalog and formats an unknown HID fallback', () { + expect(physicalKeyLabel(PhysicalKeyboardKey.keyA), 'A'); + expect(physicalKeyLabel(const PhysicalKeyboardKey(0xffffffff)), 'Key 0xffffffff'); + }); +} diff --git a/test/data/iso_639_data_test.dart b/test/data/iso_639_data_test.dart new file mode 100644 index 000000000..4e7273bcf --- /dev/null +++ b/test/data/iso_639_data_test.dart @@ -0,0 +1,54 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/data/iso_639_data.dart'; +import 'package:plezy/utils/language_codes.dart'; + +void main() { + test('catalog preserves 184 canonical entries and globally unique codes', () { + final primaryCodes = languageEntries.keys.toList(); + final sortedPrimaryCodes = [...primaryCodes]..sort(); + final allCodes = {}; + + expect(languageEntries, hasLength(184)); + expect(primaryCodes, sortedPrimaryCodes); + for (final mapEntry in languageEntries.entries) { + final entry = mapEntry.value; + expect(entry.code1, mapEntry.key); + expect(entry.code1, matches(RegExp(r'^[a-z]{2}$'))); + expect(entry.code2, matches(RegExp(r'^[a-z]{3}$'))); + expect(entry.name.trim(), isNotEmpty); + expect(allCodes.add(entry.code1), isTrue); + expect(allCodes.add(entry.code2), isTrue); + if (entry.code2B case final bibliographic?) { + expect(bibliographic, matches(RegExp(r'^[a-z]{3}$'))); + expect(allCodes.add(bibliographic), isTrue); + } + } + }); + + test('reverse maps are derived completely from terminology and bibliographic aliases', () { + expect(code2ToCode1, hasLength(184)); + expect(code2BToCode1, hasLength(20)); + + for (final entry in languageEntries.values) { + expect(code2ToCode1[entry.code2], entry.code1); + if (entry.code2B case final bibliographic?) { + expect(code2BToCode1[bibliographic], entry.code1); + } + } + }); + + test('representative terminology and bibliographic aliases preserve behavior', () { + final german = languageEntries['de']!; + expect(german.code2, 'deu'); + expect(german.code2B, 'ger'); + expect(german.name, 'German'); + expect(languageEntries['bn']!.name, 'Bengali, Bangla'); + expect(languageEntries['mi']!.name, 'Mฤori'); + + expect(LanguageCodes.getIso6391Code(' DEU '), 'de'); + expect(LanguageCodes.getIso6391Code('ger'), 'de'); + expect(LanguageCodes.getLanguageName('GER'), 'German'); + expect(LanguageCodes.getVariations('ger'), unorderedEquals(['ger', 'de', 'deu'])); + expect(LanguageCodes.getLanguageName('zzz'), isNull); + }); +} diff --git a/test/focus/focusable_chip_long_press_test.dart b/test/focus/focusable_chip_long_press_test.dart index dad25dccd..f476cde8c 100644 --- a/test/focus/focusable_chip_long_press_test.dart +++ b/test/focus/focusable_chip_long_press_test.dart @@ -1,3 +1,5 @@ +import 'dart:ui' show SemanticsAction, Tristate; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -39,4 +41,22 @@ void main() { expect(longPressed, 0); }); + + testWidgets('tab chips expose one operable node with selected state', (tester) async { + final semantics = tester.ensureSemantics(); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: FocusableTabChip(label: 'Selected tab', isSelected: true, onSelect: () {}), + ), + ), + ); + + final node = tester.getSemantics(find.bySemanticsLabel('Selected tab')).getSemanticsData(); + expect(node.flagsCollection.isButton, isTrue); + expect(node.flagsCollection.isSelected, Tristate.isTrue); + expect(node.hasAction(SemanticsAction.tap), isTrue); + semantics.dispose(); + }); } diff --git a/test/focus/grid_focus_node_mixin_test.dart b/test/focus/grid_focus_node_mixin_test.dart new file mode 100644 index 000000000..7de64b99f --- /dev/null +++ b/test/focus/grid_focus_node_mixin_test.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/mixins/grid_focus_node_mixin.dart'; + +void main() { + testWidgets('focused distant nodes retain ownership until a later eviction', (tester) async { + final key = GlobalKey<_GridFocusHarnessState>(); + + await tester.pumpWidget(MaterialApp(home: _GridFocusHarness(key: key))); + final state = key.currentState!; + final retained = state.getGridItemFocusNode(0); + state.getGridItemFocusNode(10); + final center = state.getGridItemFocusNode(20); + state.refresh(); + await tester.pump(); + + retained.requestFocus(); + await tester.pump(); + expect(retained.hasFocus, isTrue); + + state.evictDistantFocusNodes(20, keepCount: 1); + + expect(state.gridItemFocusNodes[0], same(retained)); + expect(state.gridItemFocusNodes.containsKey(10), isFalse); + expect(state.getGridItemFocusNode(0), same(retained)); + state.refresh(); + await tester.pump(); + + center.requestFocus(); + await tester.pump(); + expect(retained.hasFocus, isFalse); + + state.evictDistantFocusNodes(20, keepCount: 1); + + expect(state.gridItemFocusNodes.containsKey(0), isFalse); + expect(state.gridItemFocusNodes[20], same(center)); + state.refresh(); + await tester.pump(); + }); +} + +class _GridFocusHarness extends StatefulWidget { + const _GridFocusHarness({super.key}); + + @override + State<_GridFocusHarness> createState() => _GridFocusHarnessState(); +} + +class _GridFocusHarnessState extends State<_GridFocusHarness> with GridFocusNodeMixin<_GridFocusHarness> { + void refresh() => setState(() {}); + @override + void dispose() { + disposeGridFocusNodes(); + super.dispose(); + } + + @override + Widget build(BuildContext context) => Row( + children: [ + for (final node in gridItemFocusNodes.values) + Focus(focusNode: node, child: const SizedBox(width: 10, height: 10)), + ], + ); +} diff --git a/test/focus/input_mode_tracker_test.dart b/test/focus/input_mode_tracker_test.dart index 5a0e81c80..67ff213f3 100644 --- a/test/focus/input_mode_tracker_test.dart +++ b/test/focus/input_mode_tracker_test.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/focus/input_mode_tracker.dart'; import 'package:plezy/services/gamepad_service.dart'; +import 'package:plezy/utils/platform_detector.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -51,4 +52,65 @@ void main() { expect(oneShotMode, InputMode.pointer); expect(oneShotBuilds, 1); }); + + testWidgets('keyboard-mode cursor shield preserves pointer activation', (tester) async { + var taps = 0; + + await tester.pumpWidget( + InputModeTracker( + child: Directionality( + textDirection: TextDirection.ltr, + child: GestureDetector( + key: const Key('target'), + behavior: HitTestBehavior.opaque, + onTap: () => taps++, + child: const SizedBox(width: 120, height: 80), + ), + ), + ), + ); + + GamepadService.onGamepadInput!.call(); + await tester.pump(); + + expect(tester.widget(find.byType(MouseRegion)).cursor, SystemMouseCursors.none); + + await tester.tap(find.byKey(const Key('target'))); + await tester.pump(); + + expect(taps, 1); + expect(find.byType(MouseRegion), findsNothing); + }); + + testWidgets('non-desktop TV path has no cursor shield and remains pointer-reachable', (tester) async { + TvDetectionService.debugSetAppleTVOverride(true); + PlatformDetector.debugSetIsDesktopOSOverride(false); + addTearDown(() { + TvDetectionService.debugSetAppleTVOverride(null); + PlatformDetector.debugSetIsDesktopOSOverride(null); + }); + var taps = 0; + + await tester.pumpWidget( + InputModeTracker( + child: Directionality( + textDirection: TextDirection.ltr, + child: GestureDetector( + key: const Key('tv-target'), + behavior: HitTestBehavior.opaque, + onTap: () => taps++, + child: const SizedBox(width: 120, height: 80), + ), + ), + ), + ); + + GamepadService.onGamepadInput!.call(); + await tester.pump(); + + expect(find.byType(MouseRegion), findsNothing); + await tester.tap(find.byKey(const Key('tv-target'))); + await tester.pump(); + expect(taps, 1); + }); } diff --git a/test/focus/key_event_utils_test.dart b/test/focus/key_event_utils_test.dart index 4e8b56d43..e10a9855f 100644 --- a/test/focus/key_event_utils_test.dart +++ b/test/focus/key_event_utils_test.dart @@ -75,6 +75,35 @@ void main() { await tester.pump(); }); + test('one-shot select consumes every phase and activates only on key down', () { + var activations = 0; + const down = KeyDownEvent( + physicalKey: PhysicalKeyboardKey.select, + logicalKey: LogicalKeyboardKey.select, + timeStamp: Duration.zero, + ); + const repeat = KeyRepeatEvent( + physicalKey: PhysicalKeyboardKey.select, + logicalKey: LogicalKeyboardKey.select, + timeStamp: Duration(milliseconds: 100), + ); + const up = KeyUpEvent( + physicalKey: PhysicalKeyboardKey.select, + logicalKey: LogicalKeyboardKey.select, + timeStamp: Duration(milliseconds: 200), + ); + const unrelated = KeyDownEvent( + physicalKey: PhysicalKeyboardKey.f12, + logicalKey: LogicalKeyboardKey.f12, + timeStamp: Duration.zero, + ); + + expect(handleOneShotSelect(down, () => activations++), KeyEventResult.handled); + expect(handleOneShotSelect(repeat, () => activations++), KeyEventResult.handled); + expect(handleOneShotSelect(up, () => activations++), KeyEventResult.handled); + expect(handleOneShotSelect(unrelated, () => activations++), KeyEventResult.ignored); + expect(activations, 1); + }); group('BackKeyCoordinator', () { testWidgets('suppresses one parallel back dispatch in the current frame', (tester) async { BackKeyCoordinator.markHandled(); @@ -214,6 +243,77 @@ void main() { expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[0]'); }); + testWidgets('skips disabled actions for entry and horizontal traversal', (tester) async { + final key = GlobalKey(); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: FocusableActionBar( + key: key, + actions: [ + const FocusableAction(icon: Icons.block), + FocusableAction(icon: Icons.add, onPressed: () {}), + const FocusableAction(icon: Icons.block), + FocusableAction(icon: Icons.remove, onPressed: () {}), + ], + ), + ), + ), + ); + await tester.pump(); + + key.currentState!.requestFocusOnFirst(); + await tester.pump(); + expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[1]'); + + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + await tester.pump(); + expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[3]'); + + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + await tester.pump(); + expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[1]'); + }); + + testWidgets('dynamic callback changes remove a disabled action from focus', (tester) async { + final key = GlobalKey(); + late StateSetter rebuild; + var firstEnabled = true; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: StatefulBuilder( + builder: (context, setState) { + rebuild = setState; + return FocusableActionBar( + key: key, + actions: [ + FocusableAction(icon: Icons.add, onPressed: firstEnabled ? () {} : null), + FocusableAction(icon: Icons.remove, onPressed: () {}), + ], + ); + }, + ), + ), + ), + ); + await tester.pump(); + + key.currentState!.requestFocusOnFirst(); + await tester.pump(); + expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[0]'); + + rebuild(() => firstEnabled = false); + await tester.pump(); + expect(key.currentState!.getFocusNode(0)!.canRequestFocus, isFalse); + expect(key.currentState!.getFocusNode(0)!.hasFocus, isFalse); + + key.currentState!.requestFocusOnFirst(); + await tester.pump(); + expect(FocusManager.instance.primaryFocus?.debugLabel, 'ActionBar[1]'); + }); testWidgets('still invokes onNavigateLeft at the left edge when wired', (tester) async { final key = GlobalKey(); final leftTarget = FocusNode(debugLabel: 'left-target'); @@ -279,4 +379,25 @@ void main() { expect(activations, 1); }); }); + + group('expandToGraphemeRange', () { + for (final grapheme in ['๐Ÿ˜€', 'e\u0301', '๐Ÿ‡ฏ๐Ÿ‡ต', '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ']) { + test('expands partial ${grapheme.runes.length}-scalar ranges', () { + final text = 'A${grapheme}B'; + final graphemeEnd = 1 + grapheme.length; + final expected = TextRange(start: 1, end: graphemeEnd); + + expect(expandToGraphemeRange(text, const TextRange(start: 1, end: 2)), expected); + expect(expandToGraphemeRange(text, TextRange(start: graphemeEnd - 1, end: graphemeEnd)), expected); + expect(expandToGraphemeRange(text, TextSelection(baseOffset: graphemeEnd - 1, extentOffset: 1)), expected); + expect(expandToGraphemeRange(text, TextRange(start: graphemeEnd - 1, end: 1)), expected); + }); + } + + test('preserves document edges and empty ranges', () { + expect(expandToGraphemeRange('abc', const TextRange(start: 0, end: 1)), const TextRange(start: 0, end: 1)); + expect(expandToGraphemeRange('abc', const TextRange(start: 3, end: 3)), const TextRange.collapsed(3)); + expect(expandToGraphemeRange('', const TextRange(start: 0, end: 1)), TextRange.empty); + }); + }); } diff --git a/test/focus/locked_hub_controller_test.dart b/test/focus/locked_hub_controller_test.dart new file mode 100644 index 000000000..f81cfaf27 --- /dev/null +++ b/test/focus/locked_hub_controller_test.dart @@ -0,0 +1,27 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/focus/locked_hub_controller.dart'; + +void main() { + test('focus memory and last-column hint are isolated per browse owner', () { + final ownerA = HubFocusMemory(); + final ownerB = HubFocusMemory(); + + ownerA.setForHub('detail_episodes', 7); + + expect(ownerA.getForHubOnly('detail_episodes', 5), 4); + expect(ownerA.getForHub('detail_episodes', 3), 2); + expect(ownerA.getForHub('detail_extras', 4), 3); + + expect(ownerB.getForHubOnly('detail_episodes', 5), 0); + expect(ownerB.getForHub('detail_episodes', 5), 0); + expect(ownerB.getForHub('detail_extras', 5), 0); + }); + + test('per-hub fallback and empty rows keep their existing clamping behavior', () { + final memory = HubFocusMemory(); + + expect(memory.getForHubOnly('unseen', 3, fallback: 9), 2); + expect(memory.getForHubOnly('unseen', 0, fallback: 9), 0); + expect(memory.getForHub('unseen', 0), 0); + }); +} diff --git a/test/i18n/empty_string_fallback_test.dart b/test/i18n/empty_string_fallback_test.dart new file mode 100644 index 000000000..d20aa4a57 --- /dev/null +++ b/test/i18n/empty_string_fallback_test.dart @@ -0,0 +1,73 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; + +void main() { + test('empty overrides fall back in every affected locale', () async { + final english = await AppLocale.en.build(); + final commonEnglishValues = [ + english.videoControls.showPlaybackControls, + english.videoControls.hidePlaybackControls, + ]; + final spotlightEnglishValues = [ + english.settings.tvCornerSpotlightBackdrop, + english.settings.tvCornerSpotlightBackdropDescription, + ]; + + expect([...commonEnglishValues, ...spotlightEnglishValues], everyElement(isNotEmpty)); + + const commonFallbackLocales = [ + AppLocale.bg, + AppLocale.da, + AppLocale.de, + AppLocale.es, + AppLocale.fr, + AppLocale.it, + AppLocale.ja, + AppLocale.ko, + AppLocale.nb, + AppLocale.nl, + AppLocale.pl, + AppLocale.pt, + AppLocale.ru, + AppLocale.sv, + AppLocale.zh, + ]; + const spotlightFallbackLocales = [ + AppLocale.bg, + AppLocale.da, + AppLocale.es, + AppLocale.fr, + AppLocale.it, + AppLocale.ja, + AppLocale.ko, + AppLocale.nb, + AppLocale.nl, + AppLocale.pl, + AppLocale.pt, + AppLocale.ru, + AppLocale.sv, + AppLocale.zh, + ]; + + for (final locale in commonFallbackLocales) { + final translations = await locale.build(); + expect( + [translations.videoControls.showPlaybackControls, translations.videoControls.hidePlaybackControls], + commonEnglishValues, + reason: '${locale.languageCode} must inherit the common English values', + ); + } + + for (final locale in spotlightFallbackLocales) { + final translations = await locale.build(); + expect( + [ + translations.settings.tvCornerSpotlightBackdrop, + translations.settings.tvCornerSpotlightBackdropDescription, + ], + spotlightEnglishValues, + reason: '${locale.languageCode} must inherit the English spotlight values', + ); + } + }); +} diff --git a/test/i18n/locale_fallback_source_test.dart b/test/i18n/locale_fallback_source_test.dart new file mode 100644 index 000000000..99950460c --- /dev/null +++ b/test/i18n/locale_fallback_source_test.dart @@ -0,0 +1,47 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('recovery and error locale entries are absent or non-empty', () { + const recoveryPaths = >[ + ['auth', 'localDataRecoveryRequired'], + ['settings', 'watchTogetherRelayInvalid'], + ['settings', 'saveFailed'], + ['messages', 'playbackAuthenticationRequired'], + ['messages', 'playbackServerUnavailable'], + ['messages', 'playbackDataInvalid'], + ['messages', 'playbackCancelled'], + ['messages', 'playbackFailed'], + ['profiles', 'borrowLoadFailed'], + ['liveTv', 'favoritesUpdateFailed'], + ['settings', 'downloadLocationPickerUnavailable'], + ]; + final sourceDirectory = Directory('lib/i18n'); + final english = _decodeLocale(File('${sourceDirectory.path}/en.i18n.json')); + final localeFiles = sourceDirectory.listSync().whereType().where( + (file) => file.path.endsWith('.i18n.json') && !file.path.endsWith('en.i18n.json'), + ); + + for (final path in recoveryPaths) { + expect(_valueAt(english, path), isNotEmpty, reason: 'English base value ${path.join('.')} must be usable'); + for (final localeFile in localeFiles) { + final locale = _decodeLocale(localeFile); + final value = _valueAt(locale, path); + expect(value, anyOf(isNull, isNotEmpty), reason: '${localeFile.path} must omit or translate ${path.join('.')}'); + } + } + }); +} + +Map _decodeLocale(File file) => jsonDecode(file.readAsStringSync()) as Map; + +String? _valueAt(Map locale, List path) { + Object? value = locale; + for (final segment in path) { + if (value is! Map || !value.containsKey(segment)) return null; + value = value[segment]; + } + return value as String?; +} diff --git a/test/models/shader_preset_test.dart b/test/models/shader_preset_test.dart index 05b9d22be..4ad7ea28e 100644 --- a/test/models/shader_preset_test.dart +++ b/test/models/shader_preset_test.dart @@ -3,21 +3,88 @@ import 'package:plezy/models/shader_preset.dart'; void main() { group('ShaderPreset ArtCNN presets', () { - test('exposes stable built-in preset ids in the expected order', () { - final ids = ShaderPreset.allPresets.map((preset) => preset.id).toList(); - - expect(ids.take(8), [ - ShaderPreset.none.id, - ShaderPreset.nvscalerDefault.id, - 'artcnn_c4f16_neutral', - 'artcnn_c4f16_dn', - 'artcnn_c4f16_ds', - 'artcnn_c4f32_neutral', - 'artcnn_c4f32_dn', - 'artcnn_c4f32_ds', + test('exposes the complete built-in catalog in stable order', () { + expect(ShaderPreset.allPresets.map((preset) => preset.toJson()).toList(), [ + {'id': 'none', 'name': 'Off', 'type': 'none'}, + { + 'id': 'nvscaler', + 'name': 'NVScaler', + 'type': 'nvscaler', + 'nvscalerConfig': {'autoHdrSkip': true}, + }, + { + 'id': 'artcnn_c4f16_neutral', + 'name': 'ArtCNN C4F16', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f16', 'variant': 'neutral'}, + }, + { + 'id': 'artcnn_c4f16_dn', + 'name': 'ArtCNN C4F16 Denoise', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f16', 'variant': 'denoise'}, + }, + { + 'id': 'artcnn_c4f16_ds', + 'name': 'ArtCNN C4F16 Denoise + Sharpen', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f16', 'variant': 'denoiseSharpen'}, + }, + { + 'id': 'artcnn_c4f32_neutral', + 'name': 'ArtCNN C4F32', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f32', 'variant': 'neutral'}, + }, + { + 'id': 'artcnn_c4f32_dn', + 'name': 'ArtCNN C4F32 Denoise', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f32', 'variant': 'denoise'}, + }, + { + 'id': 'artcnn_c4f32_ds', + 'name': 'ArtCNN C4F32 Denoise + Sharpen', + 'type': 'artcnn', + 'artcnnConfig': {'model': 'c4f32', 'variant': 'denoiseSharpen'}, + }, + for (final entry in const [ + ('fast', 'modeA', 'Anime4K Fast A'), + ('fast', 'modeB', 'Anime4K Fast B'), + ('fast', 'modeC', 'Anime4K Fast C'), + ('fast', 'modeAA', 'Anime4K Fast A+A'), + ('fast', 'modeBB', 'Anime4K Fast B+B'), + ('fast', 'modeCA', 'Anime4K Fast C+A'), + ('hq', 'modeA', 'Anime4K HQ A'), + ('hq', 'modeB', 'Anime4K HQ B'), + ('hq', 'modeC', 'Anime4K HQ C'), + ('hq', 'modeAA', 'Anime4K HQ A+A'), + ('hq', 'modeBB', 'Anime4K HQ B+B'), + ('hq', 'modeCA', 'Anime4K HQ C+A'), + ]) + { + 'id': 'anime4k_${entry.$1}_${entry.$2}', + 'name': entry.$3, + 'type': 'anime4k', + 'anime4kConfig': {'quality': entry.$1, 'mode': entry.$2}, + }, ]); }); + test('shares an unmodifiable catalog and canonical id lookup', () { + final first = ShaderPreset.allPresets; + final second = ShaderPreset.allPresets; + + expect(identical(first, second), isTrue); + expect(() => first.add(ShaderPreset.none), throwsUnsupportedError); + expect(() => first.removeLast(), throwsUnsupportedError); + for (final preset in first) { + expect(identical(ShaderPreset.fromId(preset.id), preset), isTrue); + expect(identical(ShaderPreset.fromJson(preset.toJson()), preset), isTrue); + } + expect(ShaderPreset.fromId('unknown'), isNull); + }); + test('creates ArtCNN presets with names, type, and config', () { final neutral = ShaderPreset.artcnnPreset(ArtCNNModel.c4f16, ArtCNNVariant.neutral); final denoise = ShaderPreset.artcnnPreset(ArtCNNModel.c4f32, ArtCNNVariant.denoise); diff --git a/test/providers/shader_provider_test.dart b/test/providers/shader_provider_test.dart index 31d70d4cd..9cf7ee720 100644 --- a/test/providers/shader_provider_test.dart +++ b/test/providers/shader_provider_test.dart @@ -1,9 +1,17 @@ +import 'dart:io'; + +import 'dart:convert'; +import 'package:path/path.dart' as path; +import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; + import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/models/shader_preset.dart'; import 'package:plezy/providers/shader_provider.dart'; import 'package:plezy/services/base_shared_preferences_service.dart'; import 'package:plezy/services/settings_service.dart'; +import 'package:plezy/services/settings_export_service.dart'; +import '../test_helpers/io_fakes.dart'; import '../test_helpers/prefs.dart'; void main() { @@ -163,6 +171,117 @@ void main() { p.dispose(); }); + test('reuses the unmodifiable built-in catalog when no custom presets exist', () async { + final p = ShaderProvider(); + await Future.delayed(Duration.zero); + + expect(identical(p.allPresets, ShaderPreset.allPresets), isTrue); + expect(identical(p.allPresets, p.allPresets), isTrue); + expect(() => p.allPresets.add(ShaderPreset.none), throwsUnsupportedError); + p.dispose(); + }); + + test('refreshes a stable merged catalog when custom presets change', () async { + final originalPathProvider = PathProviderPlatform.instance; + final root = await Directory.systemTemp.createTemp('plezy_shader_provider_test_'); + PathProviderPlatform.instance = FakePathProvider(root); + addTearDown(() async { + PathProviderPlatform.instance = originalPathProvider; + if (await root.exists()) await root.delete(recursive: true); + }); + final source = File(path.join(root.path, 'custom.glsl'))..writeAsStringSync('shader'); + final p = ShaderProvider(); + addTearDown(p.dispose); + await Future.delayed(Duration.zero); + final builtIns = p.allPresets; + + final custom = await p.importCustomShader(source.path, 'Custom'); + final merged = p.allPresets; + expect(identical(merged, builtIns), isFalse); + expect(identical(merged, p.allPresets), isTrue); + expect(merged.last, custom); + expect(() => merged.removeLast(), throwsUnsupportedError); + + await p.deleteCustomShader(custom); + expect(p.findPresetById(custom.id), isNull); + expect(identical(p.allPresets, ShaderPreset.allPresets), isTrue); + }); + + test('filters unsafe persisted custom shader rows and invalid saved selection', () async { + const valid = ShaderPreset( + id: 'custom_ks9p7.glsl', + name: 'Legacy', + type: ShaderPresetType.custom, + fileName: 'ks9p7.glsl', + ); + const unsafeRows = [ + ShaderPreset( + id: 'custom_traversal', + name: 'Traversal', + type: ShaderPresetType.custom, + fileName: '../sentinel.glsl', + ), + ShaderPreset( + id: 'custom_nested', + name: 'Nested', + type: ShaderPresetType.custom, + fileName: 'nested/shader.glsl', + ), + ShaderPreset( + id: 'custom_wrong_type', + name: 'Wrong type', + type: ShaderPresetType.custom, + fileName: 'shader.txt', + ), + ]; + final svc = await SettingsService.getInstance(); + await svc.write(SettingsService.customShaderPresets, [valid.toJson(), ...unsafeRows.map((row) => row.toJson())]); + await svc.write(SettingsService.globalShaderPreset, unsafeRows.first.id); + + final p = ShaderProvider(); + await Future.delayed(Duration.zero); + + expect(p.customPresets, [valid]); + expect(p.findPresetById(unsafeRows.first.id), isNull); + expect(p.savedPreset, ShaderPreset.none); + expect(p.currentPreset, ShaderPreset.none); + p.dispose(); + }); + + test('portable settings import cannot expose an unsafe custom shader row', () async { + const unsafe = ShaderPreset( + id: 'custom_imported_traversal', + name: 'Imported traversal', + type: ShaderPresetType.custom, + fileName: '../sentinel.glsl', + ); + final prefs = await BaseSharedPreferencesService.sharedCache(); + final result = await SettingsExportService.applyImportMap( + { + 'formatVersion': SettingsExportService.formatVersion, + 'prefs': { + 'custom_shader_presets': { + 'type': 'string', + 'value': jsonEncode([unsafe.toJson()]), + }, + }, + }, + prefs, + currentUserUuid: 'profile', + ); + expect(result.keysImported, 0); + final svc = await SettingsService.getInstance(); + await svc.write(SettingsService.globalShaderPreset, unsafe.id); + + final p = ShaderProvider(); + await Future.delayed(Duration.zero); + + expect(p.customPresets, isEmpty); + expect(p.findPresetById(unsafe.id), isNull); + expect(p.savedPreset, ShaderPreset.none); + p.dispose(); + }); + test('safeNotifyListeners no-ops after dispose', () async { final p = ShaderProvider(); await Future.delayed(Duration.zero); diff --git a/test/screens/catalog_item_detail_screen_test.dart b/test/screens/catalog_item_detail_screen_test.dart index 539b2a619..4e43dad28 100644 --- a/test/screens/catalog_item_detail_screen_test.dart +++ b/test/screens/catalog_item_detail_screen_test.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -26,6 +28,13 @@ import '../test_helpers/prefs.dart'; class _FakeCatalogSource implements CatalogSource { final WatchlistChangeNotifier _watchlistChanges = WatchlistChangeNotifier(); + _FakeCatalogSource({bool watchlistLoading = false}) + : _watchlistValue = watchlistLoading ? null : false, + _watchlistLoad = watchlistLoading ? Completer() : null; + + bool? _watchlistValue; + final Completer? _watchlistLoad; + int addToWatchlistCalls = 0; @override CatalogSourceId get id => CatalogSourceId.trakt; @@ -56,7 +65,26 @@ class _FakeCatalogSource implements CatalogSource { ]; @override - bool? isOnWatchlist(MediaKind kind, CatalogItemIds ids) => false; + Future ensureWatchlistLoaded() async { + final load = _watchlistLoad; + if (load != null) await load.future; + } + + void completeWatchlistLoad() { + _watchlistValue = false; + _watchlistChanges.notify(); + _watchlistLoad!.complete(); + } + + @override + Future addToWatchlist(MediaKind kind, CatalogItemIds ids) async { + addToWatchlistCalls++; + _watchlistValue = true; + _watchlistChanges.notify(); + } + + @override + bool? isOnWatchlist(MediaKind kind, CatalogItemIds ids) => _watchlistValue; @override void dispose() => _watchlistChanges.dispose(); @@ -216,6 +244,35 @@ void main() { expect(FocusManager.instance.primaryFocus?.debugLabel, 'catalog_library_match_1'); }); + testWidgets('loading watchlist action cannot receive focus or activate', (tester) async { + final source = _FakeCatalogSource(watchlistLoading: true); + await _pumpDetail(tester, source); + + final actionBar = tester.widget(find.byType(FocusableActionBar)); + expect(actionBar.actions.single.onPressed, isNull); + final actionNode = tester + .widgetList(find.descendant(of: find.byType(FocusableActionBar), matching: find.byType(Focus))) + .map((widget) => widget.focusNode) + .whereType() + .singleWhere((node) => node.debugLabel == 'ActionBar[0]'); + expect(actionNode.canRequestFocus, isFalse); + + actionNode.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.select); + expect(actionNode.hasFocus, isFalse); + expect(source.addToWatchlistCalls, 0); + + source.completeWatchlistLoad(); + await tester.pump(); + final loadedActionBar = tester.widget(find.byType(FocusableActionBar)); + expect(loadedActionBar.actions.single.onPressed, isNotNull); + actionNode.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.select); + await tester.pump(); + expect(source.addToWatchlistCalls, 1); + }); testWidgets('TV Back closes a hosted sheet without popping the catalog route', (tester) async { await _pumpDetail(tester, _FakeCatalogSource(), pushedRoute: true); diff --git a/test/screens/collection_detail_screen_test.dart b/test/screens/collection_detail_screen_test.dart index ff6aae5e8..4da96f398 100644 --- a/test/screens/collection_detail_screen_test.dart +++ b/test/screens/collection_detail_screen_test.dart @@ -24,6 +24,7 @@ import 'package:plezy/theme/mono_theme.dart'; import 'package:plezy/utils/media_server_http_client.dart'; import 'package:plezy/utils/platform_detector.dart'; import 'package:plezy/widgets/focusable_media_card.dart'; +import 'package:plezy/widgets/media_card.dart'; import 'package:plezy/widgets/media_card_sliver_layout.dart'; import 'package:provider/provider.dart'; @@ -66,6 +67,42 @@ void main() { expect(layout.fullBleedImage, isFalse); expect(tester.widget(find.byType(FocusableMediaCard)).cardShapeOverride, CardShape.square); }); + + testWidgets('collection cards announce list position without duplicate actions', (tester) async { + final semantics = tester.ensureSemantics(); + final items = [ + testMediaItem( + id: 'movie_1', + backend: MediaBackend.plex, + kind: MediaKind.movie, + title: 'First movie', + serverId: 'server_1', + serverName: 'Server', + ), + testMediaItem( + id: 'movie_2', + backend: MediaBackend.plex, + kind: MediaKind.movie, + title: 'Second movie', + serverId: 'server_1', + serverName: 'Server', + ), + ]; + final harness = await _createHarness(items); + await SettingsService.instance.write(SettingsService.viewMode, ViewMode.list); + + await tester.pumpWidget( + harness.wrap(SizedBox(width: 1280, height: 720, child: CollectionDetailScreen(collection: _collection))), + ); + await tester.pumpAndSettle(); + + final cards = tester.widgetList(find.byType(FocusableMediaCard)).toList(); + expect(cards.map((card) => card.semanticValue), ['Row 1 of 2', 'Row 2 of 2']); + + final first = tester.getSemantics(find.bySemanticsLabel(mediaCardSemanticLabel(items.first))).getSemanticsData(); + expect(first.value, 'Row 1 of 2'); + semantics.dispose(); + }); } final _collection = MediaItem( diff --git a/test/screens/libraries/alpha_jump_bar_test.dart b/test/screens/libraries/alpha_jump_bar_test.dart index e52be9056..ca6219c0a 100644 --- a/test/screens/libraries/alpha_jump_bar_test.dart +++ b/test/screens/libraries/alpha_jump_bar_test.dart @@ -1,8 +1,11 @@ +import 'dart:ui' show SemanticsAction, Tristate; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/focus/dpad_navigator.dart'; import 'package:plezy/focus/key_event_utils.dart'; +import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/media/library_first_character.dart'; import 'package:plezy/screens/libraries/alpha_jump_bar.dart'; import 'package:plezy/utils/platform_detector.dart'; @@ -215,6 +218,43 @@ void main() { expect(jumpedTo, 2); }); + testWidgets('exposes operable letter buttons with selected state', (tester) async { + final semantics = tester.ensureSemantics(); + final focusNode = FocusNode(debugLabel: 'test_alpha_jump_semantics'); + addTearDown(focusNode.dispose); + int? jumpedTo; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: SizedBox( + height: 300, + child: AlphaJumpBar( + firstCharacters: const [ + LibraryFirstCharacter(key: 'A', title: 'A', size: 3), + LibraryFirstCharacter(key: 'B', title: 'B', size: 4), + LibraryFirstCharacter(key: 'C', title: 'C', size: 2), + ], + currentLetter: 'B', + focusNode: focusNode, + onJump: (index) => jumpedTo = index, + ), + ), + ), + ), + ); + + expect(find.bySemanticsLabel(t.accessibility.alphabetNavigation), findsOneWidget); + final selected = tester.getSemantics(find.bySemanticsLabel('B')).getSemanticsData(); + expect(selected.flagsCollection.isButton, isTrue); + expect(selected.flagsCollection.isSelected, Tristate.isTrue); + expect(selected.hasAction(SemanticsAction.tap), isTrue); + + final cNode = tester.getSemantics(find.bySemanticsLabel('C')); + cNode.owner!.performAction(cNode.id, SemanticsAction.tap); + expect(jumpedTo, 7); + semantics.dispose(); + }); } class _BackKeyCase { diff --git a/test/screens/libraries/alpha_scroll_handle_test.dart b/test/screens/libraries/alpha_scroll_handle_test.dart new file mode 100644 index 000000000..2a647264a --- /dev/null +++ b/test/screens/libraries/alpha_scroll_handle_test.dart @@ -0,0 +1,78 @@ +import 'dart:ui' show SemanticsAction; + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/media/library_first_character.dart'; +import 'package:plezy/screens/libraries/alpha_scroll_handle.dart'; + +void main() { + const characters = [ + LibraryFirstCharacter(key: 'A', title: 'A', size: 2), + LibraryFirstCharacter(key: 'B', title: 'B', size: 3), + LibraryFirstCharacter(key: 'C', title: 'C', size: 4), + ]; + + Widget buildHandle({required bool isScrolling, required ValueChanged onJump}) { + return MaterialApp( + home: Scaffold( + body: Align( + alignment: Alignment.centerRight, + child: SizedBox( + height: 300, + child: AlphaScrollHandle( + firstCharacters: characters, + currentLetter: 'B', + isScrolling: isScrolling, + onJump: onJump, + ), + ), + ), + ), + ); + } + + testWidgets('keeps adjustable semantics mounted while fully hidden', (tester) async { + final semantics = tester.ensureSemantics(); + final jumps = []; + + await tester.pumpWidget(buildHandle(isScrolling: false, onJump: jumps.add)); + + final finder = find.bySemanticsLabel(t.accessibility.alphabetNavigation); + expect(finder, findsOneWidget); + final node = tester.getSemantics(finder); + final data = node.getSemanticsData(); + expect(data.value, 'B'); + expect(data.hasAction(SemanticsAction.increase), isTrue); + expect(data.hasAction(SemanticsAction.decrease), isTrue); + expect(tester.widget(find.byType(IgnorePointer).last).ignoring, isTrue); + + node.owner!.performAction(node.id, SemanticsAction.increase); + expect(jumps, [5]); + semantics.dispose(); + }); + + testWidgets('announces the current letter and exposes bounded letter steps', (tester) async { + final semantics = tester.ensureSemantics(); + final jumps = []; + + await tester.pumpWidget(buildHandle(isScrolling: false, onJump: jumps.add)); + await tester.pumpWidget(buildHandle(isScrolling: true, onJump: jumps.add)); + await tester.pump(const Duration(milliseconds: 250)); + + final finder = find.bySemanticsLabel(t.accessibility.alphabetNavigation); + expect(finder, findsOneWidget); + final node = tester.getSemantics(finder); + final data = node.getSemanticsData(); + expect(data.value, 'B'); + expect(data.hint, t.accessibility.alphabetScrollHint); + expect(data.hasAction(SemanticsAction.increase), isTrue); + expect(data.hasAction(SemanticsAction.decrease), isTrue); + + node.owner!.performAction(node.id, SemanticsAction.increase); + expect(jumps, [5]); + node.owner!.performAction(node.id, SemanticsAction.decrease); + expect(jumps, [5, 0]); + semantics.dispose(); + }); +} diff --git a/test/screens/profile/add_local_profile_screen_test.dart b/test/screens/profile/add_local_profile_screen_test.dart index 00f39bd91..2f80e234f 100644 --- a/test/screens/profile/add_local_profile_screen_test.dart +++ b/test/screens/profile/add_local_profile_screen_test.dart @@ -38,6 +38,10 @@ void main() { expect(FocusManager.instance.primaryFocus?.debugLabel, 'TvVirtualKeyboard'); expect(find.byKey(const Key('tv_virtual_keyboard_panel')), findsOneWidget); + await tester.sendKeyEvent(LogicalKeyboardKey.select); + await tester.pump(); + expect(tester.widget(find.byType(TextField)).controller!.text, isNotEmpty); + await tester.sendKeyEvent(LogicalKeyboardKey.gameButtonB); await tester.pumpAndSettle(); diff --git a/test/screens/profile/borrow_connection_screen_test.dart b/test/screens/profile/borrow_connection_screen_test.dart new file mode 100644 index 000000000..a39565087 --- /dev/null +++ b/test/screens/profile/borrow_connection_screen_test.dart @@ -0,0 +1,103 @@ +import 'dart:async'; +import 'dart:collection'; + +import 'package:drift/native.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/connection/connection_registry.dart'; +import 'package:plezy/database/app_database.dart'; +import 'package:plezy/focus/input_mode_tracker.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/profiles/plex_home_service.dart'; +import 'package:plezy/profiles/profile.dart'; +import 'package:plezy/profiles/profile_connection_registry.dart'; +import 'package:plezy/profiles/profile_registry.dart'; +import 'package:plezy/screens/profile/borrow_connection_screen.dart'; +import 'package:plezy/services/storage_service.dart'; +import 'package:plezy/theme/mono_theme.dart'; +import 'package:provider/provider.dart'; + +import '../../test_helpers/prefs.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + setUp(() { + resetSharedPreferencesForTest(); + LocaleSettings.setLocaleSync(AppLocale.en); + }); + + testWidgets('load failure has retry and remains distinct from successful empty state', (tester) async { + final db = AppDatabase.forTesting(NativeDatabase.memory()); + final connections = ConnectionRegistry(db); + final profileConnections = ProfileConnectionRegistry(db); + final profiles = ProfileRegistry(db); + final storage = await StorageService.getInstance(); + final plexHome = _ControlledPlexHomeService( + connections: connections, + profileConnections: profileConnections, + storage: storage, + ); + addTearDown(() async { + await plexHome.dispose(); + await db.close(); + }); + + final target = Profile.local(id: 'target', displayName: 'Target', createdAt: DateTime(2026)); + + await tester.pumpWidget( + TranslationProvider( + child: MultiProvider( + providers: [ + Provider.value(value: profileConnections), + Provider.value(value: connections), + Provider.value(value: profiles), + Provider.value(value: plexHome), + ], + child: InputModeTracker( + child: MaterialApp( + theme: monoTheme(dark: true), + home: BorrowConnectionScreen(targetProfile: target), + ), + ), + ), + ), + ); + + expect(plexHome.starts, hasLength(1)); + expect(find.byType(CircularProgressIndicator), findsOneWidget); + + plexHome.starts.first.completeError(StateError('load failed')); + await tester.pumpAndSettle(); + + expect(find.text(t.profiles.borrowLoadFailed), findsOneWidget); + expect(find.text(t.common.retry), findsOneWidget); + expect(find.text(t.profiles.borrowEmpty), findsNothing); + + await tester.tap(find.text(t.common.retry)); + await tester.pump(); + + expect(plexHome.starts, hasLength(2)); + expect(find.byType(CircularProgressIndicator), findsOneWidget); + expect(find.text(t.profiles.borrowLoadFailed), findsNothing); + + plexHome.starts.last.complete(); + await tester.pumpAndSettle(); + + expect(find.text(t.profiles.borrowEmpty), findsOneWidget); + expect(find.text(t.profiles.borrowLoadFailed), findsNothing); + }); +} + +class _ControlledPlexHomeService extends PlexHomeService { + _ControlledPlexHomeService({required super.connections, required super.profileConnections, required super.storage}); + + final Queue> starts = Queue(); + + @override + Future start() { + final completer = Completer(); + starts.add(completer); + return completer.future; + } +} diff --git a/test/screens/settings/keyboard_shortcuts_screen_test.dart b/test/screens/settings/keyboard_shortcuts_screen_test.dart new file mode 100644 index 000000000..850f82d22 --- /dev/null +++ b/test/screens/settings/keyboard_shortcuts_screen_test.dart @@ -0,0 +1,167 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/screens/settings/keyboard_shortcuts_screen.dart'; +import 'package:plezy/services/base_shared_preferences_service.dart'; +import 'package:plezy/services/keyboard_shortcuts_service.dart'; +import 'package:plezy/services/settings_service.dart'; +import 'package:plezy/theme/mono_theme.dart'; +import 'package:plezy/widgets/dialog_action_button.dart'; +import 'package:plezy/widgets/focusable_list_tile.dart'; +import 'package:plezy/widgets/hotkey_recorder.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; +import 'package:shared_preferences_platform_interface/types.dart'; + +import '../../test_helpers/prefs.dart'; + +void main() { + setUpAll(() => LocaleSettings.setLocaleSync(AppLocale.en)); + + setUp(() { + resetSharedPreferencesForTest(); + SettingsService.resetForTesting(); + }); + + testWidgets('clear persists an unassigned row that can be rebound', (tester) async { + final service = await KeyboardShortcutsService.getInstance(); + addTearDown(service.dispose); + await _pumpScreen(tester, service); + + await _openAction(tester, service, 'play_pause'); + await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); + await tester.pump(); + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + + expect(find.byType(AlertDialog), findsNothing); + expect(service.getHotkey('play_pause'), isNull); + expect(find.text(t.hotkeys.noShortcutSet), findsOneWidget); + final stored = + json.decode(SettingsService.instance.prefs.getString(SettingsService.keyboardHotkeys.key)!) + as Map; + expect(stored['play_pause'], {'disabled': true}); + + await _openAction(tester, service, 'play_pause'); + expect(tester.widget(find.byType(HotKeyRecorder)).initalHotKey, isNull); + await tester.tap(_recorderSurface()); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.keyK, physicalKey: PhysicalKeyboardKey.keyK); + await tester.pump(); + await tester.pump(); + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.keyK); + expect(find.text(service.formatHotkey(service.getHotkey('play_pause'))), findsOneWidget); + }); + + testWidgets('clear then cancel keeps the persisted assignment', (tester) async { + final service = await KeyboardShortcutsService.getInstance(); + addTearDown(service.dispose); + await _pumpScreen(tester, service); + + await _openAction(tester, service, 'play_pause'); + await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); + await tester.pump(); + await tester.tap(find.widgetWithText(TextButton, t.common.cancel)); + await tester.pumpAndSettle(); + + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.space); + expect(find.text(service.formatHotkey(service.getHotkey('play_pause'))), findsOneWidget); + }); + + testWidgets('conflicting recording is rejected without changing either action', (tester) async { + final service = await KeyboardShortcutsService.getInstance(); + addTearDown(service.dispose); + await _pumpScreen(tester, service); + + await _openAction(tester, service, 'play_pause'); + await tester.tap(_recorderSurface()); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowUp, physicalKey: PhysicalKeyboardKey.arrowUp); + await tester.pump(); + await tester.pump(); + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + + expect(find.byType(AlertDialog), findsNothing); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.space); + expect(service.getHotkey('volume_up')?.key, PhysicalKeyboardKey.arrowUp); + expect( + find.text(t.settings.shortcutAlreadyAssigned(action: service.getActionDisplayName('volume_up'))), + findsOneWidget, + ); + }); + + testWidgets('persistence failure keeps the dialog retryable and the row unchanged', (tester) async { + final preferences = _FailingHotkeyPreferences(const {}); + SharedPreferencesAsyncPlatform.instance = preferences; + SettingsService.resetForTesting(); + BaseSharedPreferencesService.resetForTesting(); + final service = await KeyboardShortcutsService.getInstance(); + addTearDown(service.dispose); + await _pumpScreen(tester, service); + + await _openAction(tester, service, 'play_pause'); + await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); + await tester.pump(); + preferences.failNextHotkeyWrite = true; + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.space); + expect(find.text(t.common.error), findsOneWidget); + expect( + tester.widget(find.widgetWithText(DialogActionButton, t.common.save)).onPressed, + isNotNull, + ); + + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + expect(find.byType(AlertDialog), findsNothing); + expect(service.getHotkey('play_pause'), isNull); + }); +} + +Future _pumpScreen(WidgetTester tester, KeyboardShortcutsService service) async { + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + theme: monoTheme(dark: true), + home: KeyboardShortcutsScreen(keyboardService: service), + ), + ), + ); + await tester.pumpAndSettle(); +} + +Future _openAction(WidgetTester tester, KeyboardShortcutsService service, String action) async { + await tester.tap(find.widgetWithText(FocusableListTile, service.getActionDisplayName(action))); + await tester.pumpAndSettle(); + expect(find.byType(AlertDialog), findsOneWidget); +} + +Finder _recorderSurface() => + find.ancestor(of: find.byType(HotKeyRecorder), matching: find.byType(GestureDetector)).first; + +Finder _saveButton() => find.widgetWithText(FilledButton, t.common.save); + +final class _FailingHotkeyPreferences extends InMemorySharedPreferencesAsync { + _FailingHotkeyPreferences(super.data) : super.withData(); + + bool failNextHotkeyWrite = false; + + @override + Future setString(String key, String value, SharedPreferencesOptions options) { + if (key == SettingsService.keyboardHotkeys.key && failNextHotkeyWrite) { + failNextHotkeyWrite = false; + throw PlatformException(code: 'write_failed'); + } + return super.setString(key, value, options); + } +} diff --git a/test/screens/settings/mpv_config_screen_test.dart b/test/screens/settings/mpv_config_screen_test.dart new file mode 100644 index 000000000..58a648810 --- /dev/null +++ b/test/screens/settings/mpv_config_screen_test.dart @@ -0,0 +1,330 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/models/mpv_config_models.dart'; +import 'package:plezy/screens/settings/mpv_config_screen.dart'; +import 'package:plezy/services/base_shared_preferences_service.dart'; +import 'package:plezy/services/settings_service.dart'; +import 'package:plezy/theme/mono_theme.dart'; +import 'package:plezy/widgets/dialog_action_button.dart'; +import 'package:plezy/widgets/focusable_list_tile.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; +import 'package:shared_preferences_platform_interface/types.dart'; + +import '../../test_helpers/prefs.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + setUpAll(() => LocaleSettings.setLocaleSync(AppLocale.en)); + + testWidgets('typing burst coalesces to one full-document write', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + + await tester.enterText(find.byType(TextField), 'vo'); + await tester.enterText(find.byType(TextField), 'vol'); + await tester.enterText(find.byType(TextField), 'volume=80'); + + await tester.pump(const Duration(milliseconds: 399)); + expect(backend.configWrites, isEmpty); + + await tester.pump(const Duration(milliseconds: 1)); + expect(backend.configWrites, ['volume=80']); + expect(backend.maxActiveConfigWrites, 1); + + backend.completeNextConfigWrite(); + await tester.pump(); + + expect(backend.durableConfig, 'volume=80'); + }); + + testWidgets('new revisions wait for the active write and only the latest follows', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + + await tester.enterText(find.byType(TextField), 'first=1'); + await tester.pump(const Duration(milliseconds: 400)); + expect(backend.configWrites, ['first=1']); + + await tester.enterText(find.byType(TextField), 'second=2'); + await tester.enterText(find.byType(TextField), 'final=3'); + await tester.pump(const Duration(milliseconds: 400)); + + expect(backend.configWrites, ['first=1']); + expect(backend.activeConfigWrites, 1); + + backend.completeNextConfigWrite(); + await tester.pump(); + + expect(backend.configWrites, ['first=1', 'final=3']); + expect(backend.maxActiveConfigWrites, 1); + expect(tester.widget(find.byType(TextField)).controller!.text, 'final=3'); + + backend.completeNextConfigWrite(); + await tester.pump(); + + expect(backend.durableConfig, 'final=3'); + }); + + testWidgets('manual Enter insertion joins the debounced writer', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + + await tester.enterText(find.byType(TextField), 'alpha=1'); + await tester.pump(const Duration(milliseconds: 400)); + backend.completeNextConfigWrite(); + await tester.pump(); + backend.configWrites.clear(); + + await tester.sendKeyEvent(LogicalKeyboardKey.enter); + expect(tester.widget(find.byType(TextField)).controller!.text, 'alpha=1\n'); + + await tester.pump(const Duration(milliseconds: 399)); + expect(backend.configWrites, isEmpty); + await tester.pump(const Duration(milliseconds: 1)); + expect(backend.configWrites, ['alpha=1\n']); + + backend.completeNextConfigWrite(); + await tester.pump(); + expect(backend.durableConfig, 'alpha=1\n'); + }); + + testWidgets('observed external replacement wins after an in-flight local write', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + final settings = SettingsService.instance; + + await tester.enterText(find.byType(TextField), 'local=old'); + await tester.pump(const Duration(milliseconds: 400)); + expect(backend.configWrites, ['local=old']); + + unawaited(settings.write(SettingsService.mpvConfigText, 'external=new')); + await tester.pump(); + expect(backend.configWrites, ['local=old', 'external=new']); + + backend.completeConfigWriteAt(1); + await tester.pump(); + expect(tester.widget(find.byType(TextField)).controller!.text, 'external=new'); + + backend.completeNextConfigWrite(); + await tester.pump(); + expect(backend.configWrites, ['local=old', 'external=new', 'external=new']); + + backend.completeNextConfigWrite(); + await tester.pump(); + expect(backend.durableConfig, 'external=new'); + }); + + testWidgets('focus loss flushes immediately and route pop waits for persistence', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + + await tester.enterText(find.byType(TextField), 'profile=gpu-hq'); + FocusManager.instance.primaryFocus?.unfocus(); + await tester.pump(); + + expect(backend.configWrites, ['profile=gpu-hq']); + + unawaited(tester.binding.handlePopRoute()); + await tester.pump(); + expect(find.byType(MpvConfigScreen), findsOneWidget); + + backend.completeNextConfigWrite(); + await tester.pumpAndSettle(); + + expect(find.byType(MpvConfigScreen), findsNothing); + expect(find.text('home'), findsOneWidget); + expect(backend.durableConfig, 'profile=gpu-hq'); + }); + + testWidgets('dispose flushes its captured edit without using disposed UI', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + + await tester.enterText(find.byType(TextField), 'video-sync=display-resample'); + await tester.pumpWidget(const SizedBox.shrink()); + await tester.pump(); + + expect(backend.configWrites, ['video-sync=display-resample']); + + backend.completeNextConfigWrite(); + await tester.pump(); + + expect(tester.takeException(), isNull); + expect(backend.durableConfig, 'video-sync=display-resample'); + }); + + testWidgets('failed flush stays retryable and does not pop until retry succeeds', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + const config = 'gpu-api=secret-test-value'; + + await tester.enterText(find.byType(TextField), config); + FocusManager.instance.primaryFocus?.unfocus(); + await tester.pump(); + + backend.completeNextConfigWrite(error: PlatformException(code: 'write_failed')); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 300)); + + expect(find.text(t.settings.saveFailed), findsOneWidget); + expect(find.textContaining('write_failed'), findsNothing); + expect(backend.durableConfig, isNull); + + unawaited(tester.binding.handlePopRoute()); + await tester.pump(); + expect(backend.configWrites, [config, config]); + expect(find.byType(MpvConfigScreen), findsOneWidget); + + backend.completeNextConfigWrite(); + await tester.pumpAndSettle(); + + expect(find.byType(MpvConfigScreen), findsNothing); + expect(backend.durableConfig, config); + }); + + testWidgets('saving a preset flushes the matching active text before success', (tester) async { + final backend = await _pumpEditor(tester, holdConfigWrites: true); + final settings = SettingsService.instance; + + await tester.enterText(find.byType(TextField), 'preset-source=yes'); + await tester.pump(); + final saveTile = tester.widget(find.widgetWithText(FocusableListTile, t.mpvConfig.saveAsPreset)); + expect(saveTile.enabled, isTrue); + saveTile.onTap!(); + await tester.pumpAndSettle(); + + final dialog = find.byType(AlertDialog); + expect(dialog, findsOneWidget); + final nameField = find.descendant(of: dialog, matching: find.byType(TextField)); + expect(nameField, findsOneWidget); + await tester.enterText(nameField, 'Saved'); + await tester.tap(find.widgetWithText(DialogActionButton, t.common.save)); + await tester.pump(); + + expect(settings.read(SettingsService.mpvPresets), isEmpty); + expect(find.text(t.mpvConfig.presetSaved), findsNothing); + + backend.completeNextConfigWrite(); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 300)); + + final presets = settings.read(SettingsService.mpvPresets); + expect(presets, hasLength(1)); + expect(presets.single.name, 'Saved'); + expect(presets.single.text, 'preset-source=yes'); + expect(find.text(t.mpvConfig.presetSaved), findsOneWidget); + }); + + testWidgets('preset replacement waits behind an active edit and wins last', (tester) async { + final preset = MpvPreset(name: 'Cinema', text: 'profile=gpu-hq', createdAt: DateTime(2026)); + final backend = await _pumpEditor(tester, holdConfigWrites: true, presets: [preset]); + + await tester.enterText(find.byType(TextField), 'old-edit=yes'); + await tester.pump(const Duration(milliseconds: 400)); + expect(backend.configWrites, ['old-edit=yes']); + + await tester.tap(find.text('Cinema')); + await tester.pump(); + expect(backend.configWrites, ['old-edit=yes']); + expect(find.text(t.mpvConfig.presetLoaded), findsNothing); + + backend.completeNextConfigWrite(); + await tester.pump(); + expect(backend.configWrites, ['old-edit=yes', 'profile=gpu-hq']); + expect(backend.maxActiveConfigWrites, 1); + + backend.completeNextConfigWrite(); + await tester.pump(); + await tester.pump(const Duration(milliseconds: 300)); + + expect(find.text(t.mpvConfig.presetLoaded), findsOneWidget); + expect(backend.durableConfig, 'profile=gpu-hq'); + }); + + testWidgets('clean external settings update replaces the editor', (tester) async { + final backend = await _pumpEditor(tester); + final settings = SettingsService.instance; + + await settings.write(SettingsService.mpvConfigText, 'external=yes'); + await tester.pump(); + + expect(tester.widget(find.byType(TextField)).controller!.text, 'external=yes'); + expect(backend.durableConfig, 'external=yes'); + }); +} + +Future<_ControlledPreferences> _pumpEditor( + WidgetTester tester, { + bool holdConfigWrites = false, + List presets = const [], +}) async { + resetSharedPreferencesForTest(); + final initial = { + if (presets.isNotEmpty) + SettingsService.mpvPresets.key: jsonEncode(presets.map((preset) => preset.toJson()).toList()), + }; + final backend = _ControlledPreferences(initial)..holdConfigWrites = holdConfigWrites; + SharedPreferencesAsyncPlatform.instance = backend; + BaseSharedPreferencesService.resetForTesting(); + SettingsService.resetForTesting(); + await SettingsService.getInstance(); + + final navigatorKey = GlobalKey(); + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + navigatorKey: navigatorKey, + theme: monoTheme(dark: true), + home: const Scaffold(body: Text('home')), + ), + ), + ); + unawaited(navigatorKey.currentState!.push(MaterialPageRoute(builder: (_) => const MpvConfigScreen()))); + await tester.pumpAndSettle(); + return backend; +} + +base class _ControlledPreferences extends InMemorySharedPreferencesAsync { + _ControlledPreferences(super.data) : super.withData(); + + bool holdConfigWrites = false; + final List configWrites = []; + final List> _configWriteGates = []; + int activeConfigWrites = 0; + int maxActiveConfigWrites = 0; + String? durableConfig; + + @override + Future setString(String key, String value, SharedPreferencesOptions options) async { + if (key != SettingsService.mpvConfigText.key) return super.setString(key, value, options); + + configWrites.add(value); + activeConfigWrites++; + if (activeConfigWrites > maxActiveConfigWrites) maxActiveConfigWrites = activeConfigWrites; + try { + if (holdConfigWrites) { + final gate = Completer(); + _configWriteGates.add(gate); + await gate.future; + } + final result = await super.setString(key, value, options); + durableConfig = value; + return result; + } finally { + activeConfigWrites--; + } + } + + void completeNextConfigWrite({Object? error}) { + completeConfigWriteAt(0, error: error); + } + + void completeConfigWriteAt(int index, {Object? error}) { + final gate = _configWriteGates.removeAt(index); + if (error == null) { + gate.complete(); + } else { + gate.completeError(error); + } + } +} diff --git a/test/screens/settings/settings_screen_test.dart b/test/screens/settings/settings_screen_test.dart index d34e7d3a4..3f7fc86b3 100644 --- a/test/screens/settings/settings_screen_test.dart +++ b/test/screens/settings/settings_screen_test.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io'; import 'package:file_picker/file_picker.dart'; @@ -24,11 +25,13 @@ import 'package:plezy/screens/settings/settings_screen.dart'; import 'package:plezy/services/donation_service.dart'; import 'package:plezy/services/download_storage_service.dart'; import 'package:plezy/services/download_manager_service.dart'; +import 'package:plezy/services/settings_export_service.dart'; import 'package:plezy/services/settings_service.dart'; import 'package:plezy/services/update_service.dart'; import 'package:plezy/theme/mono_theme.dart'; import 'package:plezy/utils/platform_detector.dart'; import 'package:plezy/widgets/app_icon.dart'; +import 'package:plezy/widgets/dialog_action_button.dart'; import 'package:plezy/widgets/focusable_list_tile.dart'; import 'package:plezy/widgets/loading_indicator_box.dart'; import 'package:plezy/widgets/setting_tile.dart'; @@ -310,6 +313,148 @@ void main() { expect(SettingsService.instance.read(SettingsService.customDownloadPath), isNull); expect(find.text(t.settings.resetSettingsSuccess), findsOneWidget); }); + + testWidgets('cancelled directory picker remains silent and leaves the dialog retryable', (tester) async { + final harness = await _pumpSettingsScreen(tester); + addTearDown(() => harness.dispose(tester)); + + await tester.tap(find.text(t.settings.downloadLocationDefault)); + await _pumpUi(tester); + await tester.tap(find.text(t.settings.selectFolder)); + await _pumpUi(tester); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(find.text(t.settings.saveFailed), findsNothing); + expect(find.text(t.settings.downloadLocationChanged), findsNothing); + expect(harness.locationEvents, isEmpty); + }); + + testWidgets('directory picker platform failure uses shared settings feedback', (tester) async { + directoryPicker.directoryError = PlatformException(code: 'picker_failed'); + final harness = await _pumpSettingsScreen(tester); + addTearDown(() => harness.dispose(tester)); + + await tester.tap(find.text(t.settings.downloadLocationDefault)); + await _pumpUi(tester); + await tester.tap(find.text(t.settings.selectFolder)); + await _pumpUi(tester); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(find.text(t.settings.saveFailed), findsOneWidget); + expect(harness.locationEvents, isEmpty); + }); + + testWidgets('directory filesystem failure uses shared settings feedback', (tester) async { + directoryPicker.directoryPath = '${temporaryDirectory.path}/selected-downloads'; + final harness = await _pumpSettingsScreen( + tester, + writableChecker: (_) async => throw const FileSystemException('writable check failed'), + ); + addTearDown(() => harness.dispose(tester)); + + await tester.tap(find.text(t.settings.downloadLocationDefault)); + await _pumpUi(tester); + await tester.tap(find.text(t.settings.selectFolder)); + await _pumpUi(tester); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(find.text(t.settings.saveFailed), findsOneWidget); + expect(harness.locationEvents, isEmpty); + }); + + testWidgets('late directory picker completion does not use a disposed context', (tester) async { + directoryPicker.directoryGate = Completer(); + final harness = await _pumpSettingsScreen(tester); + + await tester.tap(find.text(t.settings.downloadLocationDefault)); + await _pumpUi(tester); + await tester.tap(find.text(t.settings.selectFolder)); + await tester.pump(); + await harness.dispose(tester); + + directoryPicker.directoryGate!.complete('${temporaryDirectory.path}/late-downloads'); + await tester.pump(); + + expect(tester.takeException(), isNull); + expect(harness.locationEvents, isEmpty); + }); + + testWidgets('late directory picker failure does not use a disposed context', (tester) async { + directoryPicker.directoryGate = Completer(); + final harness = await _pumpSettingsScreen(tester); + + await tester.tap(find.text(t.settings.downloadLocationDefault)); + await _pumpUi(tester); + await tester.tap(find.text(t.settings.selectFolder)); + await tester.pump(); + await harness.dispose(tester); + + directoryPicker.directoryGate!.completeError(PlatformException(code: 'late_picker_failure')); + await tester.pump(); + + expect(tester.takeException(), isNull); + expect(harness.locationEvents, isEmpty); + }); + + testWidgets('late settings export failure does not use a disposed context', (tester) async { + final exportGate = Completer(); + final harness = await _pumpSettingsScreen(tester, settingsExporter: () => exportGate.future); + + await tester.tap(find.text(t.settings.exportSettings)); + await tester.pump(); + await harness.dispose(tester); + + exportGate.completeError(PlatformException(code: 'late_export_failure')); + await tester.pump(); + + expect(tester.takeException(), isNull); + }); + + testWidgets('late settings import failure does not use a disposed context', (tester) async { + final importGate = Completer(); + final harness = await _pumpSettingsScreen(tester, settingsImporter: () => importGate.future); + + await tester.tap(find.text(t.settings.importSettings)); + await _pumpUi(tester); + await tester.tap(find.widgetWithText(DialogActionButton, t.settings.importSettings)); + await tester.pump(); + await harness.dispose(tester); + + importGate.completeError(PlatformException(code: 'late_import_failure')); + await tester.pump(); + + expect(tester.takeException(), isNull); + }); + + testWidgets('settings export platform failure uses shared settings feedback', (tester) async { + final harness = await _pumpSettingsScreen( + tester, + settingsExporter: () async => throw PlatformException(code: 'save_failed'), + ); + addTearDown(() => harness.dispose(tester)); + + await tester.tap(find.text(t.settings.exportSettings)); + await _pumpUi(tester); + + expect(find.text(t.settings.saveFailed), findsOneWidget); + expect(find.text(t.settings.exportSettingsSuccess), findsNothing); + }); + + testWidgets('settings import platform failure uses shared settings feedback', (tester) async { + final harness = await _pumpSettingsScreen( + tester, + settingsImporter: () async => throw PlatformException(code: 'pick_failed'), + ); + addTearDown(() => harness.dispose(tester)); + + await tester.tap(find.text(t.settings.importSettings)); + await _pumpUi(tester); + await tester.tap(find.widgetWithText(DialogActionButton, t.settings.importSettings)); + await _pumpUi(tester); + + expect(find.text(t.settings.saveFailed), findsOneWidget); + expect(find.text(t.settings.importSettingsSuccess), findsNothing); + }); } Finder _navigationTileFor(String title) => @@ -376,7 +521,12 @@ class _SettingsHarness { } } -Future<_SettingsHarness> _pumpSettingsScreen(WidgetTester tester) async { +Future<_SettingsHarness> _pumpSettingsScreen( + WidgetTester tester, { + Future Function(Directory directory)? writableChecker, + Future Function()? settingsExporter, + Future Function()? settingsImporter, +}) async { tester.view.physicalSize = const Size(1800, 3200); tester.view.devicePixelRatio = 1; addTearDown(tester.view.resetPhysicalSize); @@ -451,7 +601,11 @@ Future<_SettingsHarness> _pumpSettingsScreen(WidgetTester tester) async { ], child: MaterialApp( theme: monoTheme(dark: true).copyWith(platform: TargetPlatform.android), - home: SettingsScreen(downloadDirectoryWritableChecker: (_) async => true), + home: SettingsScreen( + downloadDirectoryWritableChecker: writableChecker ?? (_) async => true, + settingsExporter: settingsExporter, + settingsImporter: settingsImporter, + ), ), ), ), @@ -463,6 +617,8 @@ Future<_SettingsHarness> _pumpSettingsScreen(WidgetTester tester) async { class _FakeDirectoryPicker extends FilePicker { String? directoryPath; + Object? directoryError; + Completer? directoryGate; @override Future getDirectoryPath({ @@ -470,6 +626,10 @@ class _FakeDirectoryPicker extends FilePicker { String? initialDirectory, bool lockParentWindow = false, }) async { + final gate = directoryGate; + if (gate != null) return gate.future; + final error = directoryError; + if (error != null) throw error; return directoryPath; } } diff --git a/test/screens/settings/settings_utils_test.dart b/test/screens/settings/settings_utils_test.dart index daf359333..a202cd55f 100644 --- a/test/screens/settings/settings_utils_test.dart +++ b/test/screens/settings/settings_utils_test.dart @@ -1,8 +1,13 @@ +import 'dart:async'; +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/screens/settings/settings_utils.dart'; import 'package:plezy/utils/platform_detector.dart'; +import 'package:plezy/widgets/dialog_action_button.dart'; void main() { tearDown(() { @@ -60,4 +65,105 @@ void main() { expect(saved, isEmpty); expect(tester.takeException(), isNull); }); + + testWidgets('settings save helper reports platform failures and remains retryable', (tester) async { + final context = await _pumpHost(tester); + + showRegexInputDialog( + context: context, + title: 'Regex', + currentValue: 'abc', + defaultValue: '.*', + onSave: (_) async => throw PlatformException(code: 'write_failed'), + ); + await tester.pumpAndSettle(); + await tester.tap(_saveButton()); + await tester.pump(); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(find.text(t.settings.saveFailed), findsOneWidget); + }); + + testWidgets('settings save helper reports filesystem failures and remains retryable', (tester) async { + final context = await _pumpHost(tester); + + showRegexInputDialog( + context: context, + title: 'Regex', + currentValue: 'abc', + defaultValue: '.*', + onSave: (_) async => throw const FileSystemException('write failed'), + ); + await tester.pumpAndSettle(); + await tester.tap(_saveButton()); + await tester.pump(); + + expect(find.byType(AlertDialog), findsOneWidget); + expect(find.text(t.settings.saveFailed), findsOneWidget); + }); + + testWidgets('settings save helper closes only after a successful save', (tester) async { + final context = await _pumpHost(tester); + var saved = false; + + showRegexInputDialog( + context: context, + title: 'Regex', + currentValue: 'abc', + defaultValue: '.*', + onSave: (_) async => saved = true, + ); + await tester.pumpAndSettle(); + await tester.tap(_saveButton()); + await tester.pumpAndSettle(); + + expect(saved, isTrue); + expect(find.byType(AlertDialog), findsNothing); + }); + + testWidgets('disposed settings save context does not present late feedback', (tester) async { + final context = await _pumpHost(tester); + final saveGate = Completer(); + + showRegexInputDialog( + context: context, + title: 'Regex', + currentValue: 'abc', + defaultValue: '.*', + onSave: (_) async { + await saveGate.future; + throw PlatformException(code: 'late_write_failure'); + }, + ); + await tester.pumpAndSettle(); + await tester.tap(_saveButton()); + await tester.pump(); + await tester.pumpWidget(const SizedBox.shrink()); + saveGate.complete(); + await tester.pump(); + + expect(find.text(t.settings.saveFailed), findsNothing); + expect(tester.takeException(), isNull); + }); } + +Future _pumpHost(WidgetTester tester) async { + late BuildContext context; + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + home: Scaffold( + body: Builder( + builder: (hostContext) { + context = hostContext; + return const SizedBox.shrink(); + }, + ), + ), + ), + ), + ); + return context; +} + +Finder _saveButton() => find.widgetWithText(DialogActionButton, t.common.save); diff --git a/test/scripts/generate_ducet_ranks_test.dart b/test/scripts/generate_ducet_ranks_test.dart new file mode 100644 index 000000000..eb93d51d3 --- /dev/null +++ b/test/scripts/generate_ducet_ranks_test.dart @@ -0,0 +1,329 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:crypto/crypto.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import '../../scripts/generate_ducet_ranks.dart'; + +void main() { + late Directory temporaryDirectory; + + setUp(() async { + temporaryDirectory = await Directory.systemTemp.createTemp('plezy_ducet_test_'); + }); + + tearDown(() async { + if (await temporaryDirectory.exists()) { + await temporaryDirectory.delete(recursive: true); + } + }); + + test('pins immutable Unicode and CLDR source descriptors', () { + expect(allKeysSource.url, 'https://www.unicode.org/Public/UCA/13.0.0/allkeys.txt'); + expect(allKeysSource.sha256Digest, 'a3255d45b7af97f4dc14fb8364d7573b434425e5c58cacf00d16901ce081c78d'); + expect(allKeysSource.bundledFileName, 'allkeys-13.0.0.txt.gz'); + expect(allKeysSource.licenseUrl, 'https://www.unicode.org/license.txt'); + expect( + fractionalUcaSource.url, + 'https://raw.githubusercontent.com/unicode-org/cldr/' + '651afecf9ccf1541a49306993e8210fa2209aa0b/common/uca/FractionalUCA.txt', + ); + expect(fractionalUcaSource.sha256Digest, 'a6144d0c8c19cc899a5d2f48fbc14e3e31e819049a73aa86b67111f1f3f81637'); + expect(fractionalUcaSource.bundledFileName, 'FractionalUCA-651afecf9ccf1541a49306993e8210fa2209aa0b.txt.gz'); + expect(fractionalUcaSource.licenseUrl, contains('/651afecf9ccf1541a49306993e8210fa2209aa0b/LICENSE')); + }); + + test('bundled gzip inputs have deterministic normalized headers and bytes', () { + final allKeys = File('scripts/data/${allKeysSource.bundledFileName}').readAsBytesSync(); + final fractional = File('scripts/data/${fractionalUcaSource.bundledFileName}').readAsBytesSync(); + + expect(allKeys.take(8), [0x1F, 0x8B, 0x08, 0, 0, 0, 0, 0]); + expect(fractional.take(8), [0x1F, 0x8B, 0x08, 0, 0, 0, 0, 0]); + expect(sha256.convert(allKeys).toString(), '744040b99e266f9ec599744e267091c159369a36f6ca7558c12a9eb3e039575f'); + expect(sha256.convert(fractional).toString(), 'edc486bae663abf83d18c9006d08c1e8bb19986810cf8ab663fa33bee6d22275'); + }); + + test('dense lookup stores rank plus one with a zero sentinel', () { + final ranks = buildDenseRankLookup([0x41, 0x24, 0x5C]); + + expect(ranks.length, 0x10000); + expect(ranks.codeUnitAt(0x41), 1); + expect(ranks.codeUnitAt(0x24), 2); + expect(ranks.codeUnitAt(0x5C), 3); + expect(ranks.codeUnitAt(0x42), 0); + }); + + test('dense lookup rejects duplicate, out-of-BMP, and overflowing orders', () { + expect(() => buildDenseRankLookup([0x41, 0x41]), throwsStateError); + expect(() => buildDenseRankLookup([-1]), throwsRangeError); + expect(() => buildDenseRankLookup([0x10000]), throwsRangeError); + expect(() => buildDenseRankLookup(List.generate(0x10000, (index) => index)), throwsStateError); + }); + + test('parse and render seams are deterministic and escape Dart interpolation characters', () { + const allKeysText = ''' +0041 ; [.0100.0020.0002] +30A2 ; [.0200.0020.000F] +3042 ; [.0200.0020.000D] +'''; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€ไธ]'; + + final firstAllKeys = parseAllKeys(allKeysText); + final secondAllKeys = parseAllKeys(allKeysText); + final (firstCjk, firstKangxi) = parseRadicals(fractionalText); + final (secondCjk, secondKangxi) = parseRadicals(fractionalText); + final firstOrder = buildOrder(firstAllKeys, firstCjk); + final secondOrder = buildOrder(secondAllKeys, secondCjk); + + expect(firstOrder, secondOrder); + expect(renderDucetOrder(firstOrder, firstKangxi), renderDucetOrder(secondOrder, secondKangxi)); + + final ranksWithSpecialCodeUnits = List.generate(0x5C, (index) => 0x1000 + index); + final rendered = renderDucetOrder(ranksWithSpecialCodeUnits, const {}); + expect(rendered, contains(r"\'")); + expect(rendered, contains(r'\\')); + expect(rendered, contains(r'\$')); + }); + + test('explicit inputs are both verified before parsing and writing', () async { + const allKeysText = '0041 ; [.0100.0020.0002]\n'; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€]\n'; + final allKeysFile = File('${temporaryDirectory.path}/allkeys.txt')..writeAsStringSync(allKeysText); + final fractionalFile = File('${temporaryDirectory.path}/FractionalUCA.txt')..writeAsStringSync(fractionalText); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + var downloads = 0; + + await generateDucetRanks( + useBundledSources: false, + explicitAllKeys: allKeysFile, + explicitFractionalUca: fractionalFile, + output: output, + allKeysDescriptor: descriptorFor('allkeys', allKeysText), + fractionalUcaDescriptor: descriptorFor('fractional', fractionalText), + downloader: (_) async { + downloads++; + throw StateError('network must not be used'); + }, + ); + + expect(downloads, 0); + expect(output.readAsStringSync(), contains('const String _ducetRanks =')); + expect(output.readAsStringSync(), isNot(contains('_buildRanks'))); + }); + + test('rejects an explicit digest mismatch without replacing output', () async { + final allKeysFile = File('${temporaryDirectory.path}/allkeys.txt')..writeAsStringSync('tampered'); + final fractionalFile = File('${temporaryDirectory.path}/FractionalUCA.txt')..writeAsStringSync('fractional'); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + var writerCalled = false; + + await expectLater( + generateDucetRanks( + useBundledSources: false, + explicitAllKeys: allKeysFile, + explicitFractionalUca: fractionalFile, + output: output, + allKeysDescriptor: descriptorFor('allkeys', 'expected'), + fractionalUcaDescriptor: descriptorFor('fractional', 'fractional'), + writer: (_, _) => writerCalled = true, + ), + throwsA(isA()), + ); + + expect(writerCalled, isFalse); + expect(output.readAsStringSync(), 'old output'); + expect(allKeysFile.readAsStringSync(), 'tampered'); + }); + + test('rejects an invalid cached source without downloading or replacing files', () async { + final cache = Directory('${temporaryDirectory.path}/cache')..createSync(); + final allKeysDescriptor = descriptorFor('allkeys', 'expected allkeys'); + final fractionalDescriptor = descriptorFor('fractional', 'fractional'); + final cachedAllKeys = File('${cache.path}/${allKeysDescriptor.cacheFileName}')..writeAsStringSync('tampered cache'); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + var downloads = 0; + + await expectLater( + generateDucetRanks( + useBundledSources: false, + cacheDirectory: cache, + output: output, + allKeysDescriptor: allKeysDescriptor, + fractionalUcaDescriptor: fractionalDescriptor, + downloader: (_) async { + downloads++; + return response(HttpStatus.ok, utf8.encode('unused')); + }, + ), + throwsA(isA()), + ); + + expect(downloads, 0); + expect(cachedAllKeys.readAsStringSync(), 'tampered cache'); + expect(output.readAsStringSync(), 'old output'); + }); + + test('rejects HTTP status before parsing, caching, or replacing output', () async { + final cache = Directory('${temporaryDirectory.path}/cache')..createSync(); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + + await expectLater( + generateDucetRanks( + useBundledSources: false, + cacheDirectory: cache, + output: output, + allKeysDescriptor: descriptorFor('allkeys', 'allkeys'), + fractionalUcaDescriptor: descriptorFor('fractional', 'fractional'), + downloader: (_) async => response(HttpStatus.notFound, utf8.encode('not found')), + ), + throwsA(isA().having((error) => error.message, 'message', contains('HTTP 404'))), + ); + + expect(cache.listSync(), isEmpty); + expect(output.readAsStringSync(), 'old output'); + }); + + test('a rejected second download preserves the first cache and output', () async { + const allKeysText = '0041 ; [.0100.0020.0002]\n'; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€]\n'; + final cache = Directory('${temporaryDirectory.path}/cache')..createSync(); + final marker = File('${cache.path}/marker')..writeAsStringSync('keep'); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + var request = 0; + + await expectLater( + generateDucetRanks( + useBundledSources: false, + cacheDirectory: cache, + output: output, + allKeysDescriptor: descriptorFor('allkeys', allKeysText), + fractionalUcaDescriptor: descriptorFor('fractional', fractionalText), + downloader: (_) async { + request++; + return response(HttpStatus.ok, utf8.encode(request == 1 ? allKeysText : 'tampered fractional')); + }, + ), + throwsA(isA()), + ); + + expect(request, 2); + expect(cache.listSync().map((entity) => entity.path).toList(), [marker.path]); + expect(marker.readAsStringSync(), 'keep'); + expect(output.readAsStringSync(), 'old output'); + }); + + test('parse rejection leaves verified inputs, caches, and output untouched', () async { + const duplicateAllKeys = ''' +0041 ; [.0100.0020.0002] +0041 ; [.0101.0020.0002] +'''; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€]\n'; + final allKeysFile = File('${temporaryDirectory.path}/allkeys.txt')..writeAsStringSync(duplicateAllKeys); + final fractionalFile = File('${temporaryDirectory.path}/FractionalUCA.txt')..writeAsStringSync(fractionalText); + final cache = Directory('${temporaryDirectory.path}/cache')..createSync(); + final marker = File('${cache.path}/marker')..writeAsStringSync('keep'); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + + await expectLater( + generateDucetRanks( + useBundledSources: false, + explicitAllKeys: allKeysFile, + explicitFractionalUca: fractionalFile, + cacheDirectory: cache, + output: output, + allKeysDescriptor: descriptorFor('allkeys', duplicateAllKeys), + fractionalUcaDescriptor: descriptorFor('fractional', fractionalText), + ), + throwsFormatException, + ); + + expect(allKeysFile.readAsStringSync(), duplicateAllKeys); + expect(fractionalFile.readAsStringSync(), fractionalText); + expect(cache.listSync().map((entity) => entity.path).toList(), [marker.path]); + expect(output.readAsStringSync(), 'old output'); + }); + + test('default bundled generation is deterministic and never downloads', () async { + final output = File('${temporaryDirectory.path}/ducet_order.dart'); + var downloads = 0; + String? first; + String? second; + Future failDownloader(Uri _) async { + downloads++; + throw StateError('bundled generation must not use the network'); + } + + await generateDucetRanks(output: output, downloader: failDownloader, writer: (_, contents) => first = contents); + await generateDucetRanks(output: output, downloader: failDownloader, writer: (_, contents) => second = contents); + + expect(downloads, 0); + expect(first, isNotNull); + expect(second, first); + expect(first, File('lib/data/ducet_order.dart').readAsStringSync()); + }); + + test('tampered bundled gzip fails before replacing output', () async { + const allKeysText = '0041 ; [.0100.0020.0002]\n'; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€]\n'; + final bundled = Directory('${temporaryDirectory.path}/bundled')..createSync(); + final allKeysDescriptor = descriptorFor('allkeys', allKeysText); + final fractionalDescriptor = descriptorFor('fractional', fractionalText); + File('${bundled.path}/${allKeysDescriptor.bundledFileName}').writeAsBytesSync(const [0x1F, 0x8B, 0x08, 0x00, 0x00]); + writeBundledSource(bundled, fractionalDescriptor, fractionalText); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + + await expectLater( + generateDucetRanks( + bundledSourceDirectory: bundled, + output: output, + allKeysDescriptor: allKeysDescriptor, + fractionalUcaDescriptor: fractionalDescriptor, + ), + throwsA(isA()), + ); + + expect(output.readAsStringSync(), 'old output'); + }); + + test('tampered decompressed bundled bytes fail digest before replacing output', () async { + const allKeysText = '0041 ; [.0100.0020.0002]\n'; + const fractionalText = '[radical 1=โผ€ไธ€:ไธ€]\n'; + final bundled = Directory('${temporaryDirectory.path}/bundled')..createSync(); + final allKeysDescriptor = descriptorFor('allkeys', allKeysText); + final fractionalDescriptor = descriptorFor('fractional', fractionalText); + writeBundledSource(bundled, allKeysDescriptor, 'tampered raw bytes'); + writeBundledSource(bundled, fractionalDescriptor, fractionalText); + final output = File('${temporaryDirectory.path}/ducet_order.dart')..writeAsStringSync('old output'); + + await expectLater( + generateDucetRanks( + bundledSourceDirectory: bundled, + output: output, + allKeysDescriptor: allKeysDescriptor, + fractionalUcaDescriptor: fractionalDescriptor, + ), + throwsA( + isA().having((error) => error.message, 'message', contains('SHA-256 mismatch')), + ), + ); + + expect(output.readAsStringSync(), 'old output'); + }); +} + +SourceDescriptor descriptorFor(String name, String contents) => SourceDescriptor( + name: name, + url: 'https://example.test/$name', + bundledFileName: '$name.txt.gz', + cacheFileName: '$name.txt', + sha256Digest: sha256.convert(utf8.encode(contents)).toString(), + licenseUrl: 'https://example.test/license', +); + +void writeBundledSource(Directory directory, SourceDescriptor descriptor, String contents) { + File('${directory.path}/${descriptor.bundledFileName}').writeAsBytesSync(gzip.encode(utf8.encode(contents))); +} + +SourceDownloadResponse response(int statusCode, List bytes) => + SourceDownloadResponse(statusCode: statusCode, bytes: Stream>.value(bytes)); diff --git a/test/scripts/generate_hid_key_labels_test.dart b/test/scripts/generate_hid_key_labels_test.dart new file mode 100644 index 000000000..1031f5d4e --- /dev/null +++ b/test/scripts/generate_hid_key_labels_test.dart @@ -0,0 +1,91 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +import '../../scripts/generate_hid_key_labels.dart'; + +void main() { + late String validSource; + + setUpAll(() async { + validSource = await File(defaultHidKeyLabelsInput).readAsString(); + }); + + test('parse and render are deterministic and reproduce the checked-in artifact', () async { + final first = renderHidKeyLabels(parseHidKeyLabelsCatalog(validSource)); + final second = renderHidKeyLabels(parseHidKeyLabelsCatalog(validSource)); + + expect(second, first); + expect(first, await File(defaultHidKeyLabelsOutput).readAsString()); + }); + + test('rejects invalid schema, empty groups, group names, keys, labels, and IDs', () { + _expectInvalid(validSource, (catalog) => catalog['schemaVersion'] = 2); + _expectInvalid(validSource, (catalog) => catalog['groups'] = []); + _expectInvalid(validSource, (catalog) => _group(catalog, 0)['name'] = ' '); + _expectInvalid(validSource, (catalog) => _group(catalog, 0)['keys'] = []); + _expectInvalid(validSource, (catalog) => _key(catalog, 0, 0)['label'] = ''); + _expectInvalid(validSource, (catalog) => _key(catalog, 0, 0)['id'] = '0000001'); + _expectInvalid(validSource, (catalog) => _key(catalog, 0, 0)['id'] = '0000001A'); + }); + + test('rejects globally duplicate or noncanonical numeric IDs', () { + _expectInvalid(validSource, (catalog) => _key(catalog, 0, 1)['id'] = _key(catalog, 0, 0)['id']); + _expectInvalid(validSource, (catalog) => _key(catalog, 0, 1)['id'] = '0000000f'); + _expectInvalid(validSource, (catalog) => _key(catalog, 1, 0)['id'] = '0000000f'); + }); + + test('escapes controls in labels that require double-quoted Dart literals', () { + const catalog = HidKeyCatalog( + groups: [ + HidKeyGroup( + name: 'Test', + keys: [HidKeyLabel(id: '00000001', label: "Player's\nKey")], + ), + ], + ); + + expect(renderHidKeyLabels(catalog), contains("\"Player's\\nKey\"")); + }); + + test('invalid input fails before the existing output is replaced', () async { + final directory = await Directory.systemTemp.createTemp('plezy_hid_generator_test.'); + addTearDown(() => directory.delete(recursive: true)); + final input = File('${directory.path}/invalid.json'); + final output = File('${directory.path}/output.dart'); + await input.writeAsString('{"schemaVersion":1,"groups":[]}'); + await output.writeAsString('sentinel'); + + await expectLater(generateHidKeyLabels(input.path, output.path), throwsA(isA())); + expect(await output.readAsString(), 'sentinel'); + }); + + test('atomic writer replaces the complete destination', () async { + final directory = await Directory.systemTemp.createTemp('plezy_hid_atomic_test.'); + addTearDown(() => directory.delete(recursive: true)); + final output = File('${directory.path}/output.dart'); + await output.writeAsString('old'); + + await writeFileAtomically(output.path, 'new bytes\n'); + + expect(await output.readAsString(), 'new bytes\n'); + expect(directory.listSync().where((entry) => entry.path.contains('.tmp.')), isEmpty); + }); +} + +void _expectInvalid(String source, void Function(Map catalog) mutate) { + final catalog = (jsonDecode(source) as Map).cast(); + mutate(catalog); + expect(() => parseHidKeyLabelsCatalog(jsonEncode(catalog)), throwsA(isA())); +} + +Map _group(Map catalog, int index) { + final groups = catalog['groups']! as List; + return (groups[index]! as Map).cast(); +} + +Map _key(Map catalog, int groupIndex, int keyIndex) { + final keys = _group(catalog, groupIndex)['keys']! as List; + return (keys[keyIndex]! as Map).cast(); +} diff --git a/test/scripts/generate_iso_639_data_test.dart b/test/scripts/generate_iso_639_data_test.dart new file mode 100644 index 000000000..a6a90b224 --- /dev/null +++ b/test/scripts/generate_iso_639_data_test.dart @@ -0,0 +1,98 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +import '../../scripts/generate_iso_639_data.dart'; + +void main() { + late String validSource; + + setUpAll(() async { + validSource = await File(defaultIso639Input).readAsString(); + }); + + test('parse and render are deterministic and reproduce the checked-in artifact', () async { + final first = renderIso639Data(parseIso639Catalog(validSource)); + final second = renderIso639Data(parseIso639Catalog(validSource)); + + expect(second, first); + expect(first, await File(defaultIso639Output).readAsString()); + }); + + test('rejects invalid schema, keys, primary consistency, names, and field shapes', () { + _expectInvalid(validSource, (catalog) => catalog['schemaVersion'] = 2); + _expectInvalid(validSource, (catalog) => catalog['languages'] = {}); + _expectInvalid(validSource, (catalog) => _entry(catalog, 'aa')['primary'] = 'ab'); + _expectInvalid(validSource, (catalog) => _entry(catalog, 'aa')['terminology'] = 'AAR'); + _expectInvalid(validSource, (catalog) => _entry(catalog, 'bo')['bibliographic'] = 'TIB'); + _expectInvalid(validSource, (catalog) => _entry(catalog, 'aa')['name'] = ' '); + + _expectInvalid(validSource, (catalog) { + final languages = _languages(catalog); + languages['a'] = languages.remove('aa'); + }); + }); + + test('rejects duplicate aliases and noncanonical primary ordering', () { + _expectInvalid( + validSource, + (catalog) => _entry(catalog, 'ab')['terminology'] = _entry(catalog, 'aa')['terminology'], + ); + _expectInvalid( + validSource, + (catalog) => _entry(catalog, 'bo')['bibliographic'] = _entry(catalog, 'aa')['terminology'], + ); + _expectInvalid(validSource, (catalog) { + final languages = _languages(catalog); + final first = languages.remove('aa'); + languages['aa'] = first; + }); + }); + + test('escapes controls in names that require double-quoted Dart literals', () { + const catalog = Iso639Catalog( + entries: [Iso639CatalogEntry(primary: 'aa', terminology: 'aaa', bibliographic: null, name: "People's\nLanguage")], + ); + + expect(renderIso639Data(catalog), contains("\"People's\\nLanguage\"")); + }); + + test('invalid input fails before the existing output is replaced', () async { + final directory = await Directory.systemTemp.createTemp('plezy_iso_generator_test.'); + addTearDown(() => directory.delete(recursive: true)); + final input = File('${directory.path}/invalid.json'); + final output = File('${directory.path}/output.dart'); + await input.writeAsString('{"schemaVersion":1,"languages":{}}'); + await output.writeAsString('sentinel'); + + await expectLater(generateIso639Data(input.path, output.path), throwsA(isA())); + expect(await output.readAsString(), 'sentinel'); + }); + + test('atomic writer replaces the complete destination', () async { + final directory = await Directory.systemTemp.createTemp('plezy_iso_atomic_test.'); + addTearDown(() => directory.delete(recursive: true)); + final output = File('${directory.path}/output.dart'); + await output.writeAsString('old'); + + await writeFileAtomically(output.path, 'new bytes\n'); + + expect(await output.readAsString(), 'new bytes\n'); + expect(directory.listSync().where((entry) => entry.path.contains('.tmp.')), isEmpty); + }); +} + +void _expectInvalid(String source, void Function(Map catalog) mutate) { + final catalog = (jsonDecode(source) as Map).cast(); + mutate(catalog); + expect(() => parseIso639Catalog(jsonEncode(catalog)), throwsA(isA())); +} + +Map _languages(Map catalog) { + return (catalog['languages']! as Map).cast(); +} + +Map _entry(Map catalog, String code) { + return (_languages(catalog)[code]! as Map).cast(); +} diff --git a/test/services/data_aggregation_bridge_test.dart b/test/services/data_aggregation_bridge_test.dart index 780951fde..9e4a4567b 100644 --- a/test/services/data_aggregation_bridge_test.dart +++ b/test/services/data_aggregation_bridge_test.dart @@ -150,7 +150,7 @@ void main() { 'SearchResult': [ { 'score': 100, - 'Metadata': {'ratingKey': 'plex-movie', 'type': 'movie', 'title': 'The Boys in the Boat'}, + 'Metadata': {'ratingKey': 'plex-movie', 'type': 'movie', 'title': 'Spider Man Returns'}, }, ], }, @@ -169,7 +169,7 @@ void main() { if (req.url.path == '/Items') { return _json({ 'Items': [ - {'Id': 'jf-show', 'Type': 'Series', 'Name': 'The Boys'}, + {'Id': 'jf-show', 'Type': 'Series', 'Name': 'Spiderโ€‘Man'}, ], }); } @@ -179,17 +179,19 @@ void main() { addTearDown(jellyfinClient.close); manager.debugRegisterJellyfinClientForTesting(jellyfinClient); - final results = await service.searchAcrossServers('The Boys', limit: 1); + final results = await service.searchAcrossServers('Spider Man', limit: 1); expect(results.map((item) => item.id), ['jf-show']); + expect(plexRequests.single.queryParameters['query'], 'Spider Man'); expect(plexRequests.single.queryParameters['limit'], '100'); expect(plexRequests.single.queryParameters['searchTypes'], 'movies,tv,music'); // Jellyfin search fans out to /Items plus a best-effort /Artists call // (500 above โ†’ treated as empty). final jfItemsRequest = jellyfinRequests.singleWhere((url) => url.path == '/Items'); expect(jfItemsRequest.queryParameters['Limit'], '100'); + expect(jfItemsRequest.queryParameters['SearchTerm'], 'Spider Man'); final jfArtistsRequest = jellyfinRequests.singleWhere((url) => url.path == '/Artists'); - expect(jfArtistsRequest.queryParameters['searchTerm'], 'The Boys'); + expect(jfArtistsRequest.queryParameters['searchTerm'], 'Spider Man'); }); test('getOnDeckFromAllServers forwards preview limit to clients', () async { diff --git a/test/services/keyboard_shortcuts_service_test.dart b/test/services/keyboard_shortcuts_service_test.dart index 670977477..dcaf6a0ed 100644 --- a/test/services/keyboard_shortcuts_service_test.dart +++ b/test/services/keyboard_shortcuts_service_test.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'package:flutter/services.dart'; @@ -6,8 +7,12 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/models/hotkey_model.dart'; import 'package:plezy/mpv/mpv.dart'; import 'package:plezy/services/keyboard_shortcuts_service.dart'; +import 'package:plezy/services/base_shared_preferences_service.dart'; import 'package:plezy/services/settings_service.dart'; import 'package:plezy/services/video_filter_manager.dart'; +import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; +import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; +import 'package:shared_preferences_platform_interface/types.dart'; import '../test_helpers/prefs.dart'; @@ -87,6 +92,97 @@ void main() { expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.space); expect(SettingsService.instance.prefs.containsKey(SettingsService.keyboardHotkeys.key), isFalse); }); + + test('explicit unassignment survives restart and reset restores dispatch', () async { + final service = await KeyboardShortcutsService.getInstance(); + await service.setHotkey('play_pause', null); + await service.setHotkey('volume_up', const HotKey(key: PhysicalKeyboardKey.keyQ)); + + final stored = + json.decode(SettingsService.instance.prefs.getString(SettingsService.keyboardHotkeys.key)!) + as Map; + expect(stored['play_pause'], {'disabled': true}); + expect(service.getHotkey('play_pause'), isNull); + expect(service.getActionForHotkey(const HotKey(key: PhysicalKeyboardKey.space)), isNull); + + service.dispose(); + SettingsService.resetForTesting(); + BaseSharedPreferencesService.resetForTesting(); + + final reloaded = await KeyboardShortcutsService.getInstance(); + addTearDown(reloaded.dispose); + expect(reloaded.getHotkey('play_pause'), isNull); + expect(reloaded.getHotkey('volume_up')?.key, PhysicalKeyboardKey.keyQ); + expect(reloaded.getHotkey('volume_down')?.key, PhysicalKeyboardKey.arrowDown); + + var playPauseCalls = 0; + final player = _FakePlayer(); + KeyEventResult dispatch() { + return reloaded.handleVideoPlayerKeyEvent( + const KeyDownEvent( + physicalKey: PhysicalKeyboardKey.space, + logicalKey: LogicalKeyboardKey.space, + timeStamp: Duration.zero, + ), + player, + null, + null, + null, + null, + null, + null, + canControlPlayback: true, + canNavigateMediaItems: true, + onPlayPause: () => playPauseCalls++, + ); + } + + expect(dispatch(), KeyEventResult.ignored); + expect(playPauseCalls, 0); + await reloaded.resetToDefaults(); + expect(dispatch(), KeyEventResult.handled); + expect(playPauseCalls, 1); + + final resetStored = + json.decode(SettingsService.instance.prefs.getString(SettingsService.keyboardHotkeys.key)!) + as Map; + expect(resetStored['play_pause'], {'key': '0007002c', 'modifiers': []}); + }); + + test('serialized writes preserve rapid edits and recover after a failure', () async { + final preferences = _HotkeyPreferences(const {}); + SharedPreferencesAsyncPlatform.instance = preferences; + SettingsService.resetForTesting(); + BaseSharedPreferencesService.resetForTesting(); + final service = await KeyboardShortcutsService.getInstance(); + addTearDown(service.dispose); + + preferences.blockNextHotkeyWrite(); + final first = service.setHotkey('play_pause', const HotKey(key: PhysicalKeyboardKey.keyQ)); + await preferences.blocked; + final second = service.setHotkey('volume_up', const HotKey(key: PhysicalKeyboardKey.keyW)); + await Future.delayed(Duration.zero); + + expect(preferences.hotkeyWriteCount, 1); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.space); + preferences.release(); + await Future.wait([first, second]); + + expect(preferences.hotkeyWriteCount, 2); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.keyQ); + expect(service.getHotkey('volume_up')?.key, PhysicalKeyboardKey.keyW); + + preferences.failNextHotkeyWrite = true; + await expectLater( + service.setHotkey('play_pause', const HotKey(key: PhysicalKeyboardKey.keyE)), + throwsA(isA()), + ); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.keyQ); + + await service.setHotkey('volume_down', const HotKey(key: PhysicalKeyboardKey.keyR)); + expect(service.getHotkey('play_pause')?.key, PhysicalKeyboardKey.keyQ); + expect(service.getHotkey('volume_down')?.key, PhysicalKeyboardKey.keyR); + }); }); testWidgets('Ctrl+S takes a screenshot once while held', (tester) async { @@ -597,3 +693,41 @@ class _FakePlayer implements Player { @override dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } + +final class _HotkeyPreferences extends InMemorySharedPreferencesAsync { + _HotkeyPreferences(super.data) : super.withData(); + + Completer? _entered; + Completer? _release; + int hotkeyWriteCount = 0; + bool failNextHotkeyWrite = false; + + Future get blocked => _entered!.future; + + void blockNextHotkeyWrite() { + _entered = Completer(); + _release = Completer(); + } + + void release() { + final release = _release; + if (release != null && !release.isCompleted) release.complete(); + } + + @override + Future setString(String key, String value, SharedPreferencesOptions options) async { + if (key == SettingsService.keyboardHotkeys.key) { + hotkeyWriteCount++; + if (failNextHotkeyWrite) { + failNextHotkeyWrite = false; + throw PlatformException(code: 'write_failed'); + } + final entered = _entered; + if (entered != null && !entered.isCompleted) { + entered.complete(); + await _release!.future; + } + } + return super.setString(key, value, options); + } +} diff --git a/test/services/plex_client_http_contract_test.dart b/test/services/plex_client_http_contract_test.dart index ee304a8ce..2e080e6cc 100644 --- a/test/services/plex_client_http_contract_test.dart +++ b/test/services/plex_client_http_contract_test.dart @@ -13,6 +13,7 @@ import 'package:plezy/media/media_kind.dart'; import 'package:plezy/services/plex_api_cache.dart'; import 'package:plezy/services/plex_client.dart'; import 'package:plezy/utils/active_client_scope.dart'; +import 'package:plezy/utils/media_server_http_client.dart'; import '../test_helpers/backend_client_fixtures.dart'; import '../test_helpers/media_items.dart'; @@ -268,6 +269,29 @@ void main() { expect(activities.last.cancellable, isTrue); }); + test('activity fetch abort reaches transport and preserves cancellation identity', () async { + final transport = _AbortAwareActivitiesClient(); + final client = testPlexClient( + serverId: publicServerId, + profileScopeId: defaultProfileScopeId, + httpClient: transport, + prioritizedEndpoints: const ['https://plex.example.com', 'https://plex-fallback.example.com'], + ); + addTearDown(client.close); + final abort = AbortController(); + + final activities = client.getActivities(abort: abort); + await transport.requestStarted.future; + abort.abort(); + + await expectLater( + activities, + throwsA(isA().having((error) => error.isCancellation, 'isCancellation', isTrue)), + ); + await expectLater(transport.abortObserved.future, completes); + expect(transport.requestCount, 1); + }); + test('metadata edit preserves locked fields and removed tag wire format', () async { http.Request? captured; final client = makeClient((request) async { diff --git a/test/services/settings_export_service_test.dart b/test/services/settings_export_service_test.dart index b24fc8b44..41920af92 100644 --- a/test/services/settings_export_service_test.dart +++ b/test/services/settings_export_service_test.dart @@ -5,8 +5,11 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:package_info_plus/package_info_plus.dart'; +import 'package:plezy/models/shader_preset.dart'; import 'package:plezy/services/base_shared_preferences_service.dart'; import 'package:plezy/services/settings_export_service.dart'; +import 'package:plezy/services/settings_service.dart'; +import 'package:plezy/services/trackers/tracker_constants.dart'; import '../test_helpers/prefs.dart'; @@ -34,14 +37,16 @@ void main() { }); group('portable settings registry', () { - test('exports every supported storage type and strips only active-user library scope', () async { + test('exports scalar and JSON-backed values and strips only the active-user library scope', () async { final prefs = await BaseSharedPreferencesService.sharedCache(); await prefs.setBool('enable_hardware_decoding', true); await prefs.setInt('seek_time_small', 42); await prefs.setDouble('volume', 75.5); await prefs.setString('preferred_video_codec', 'h264'); - await prefs.setStringList('user_alice_library_order', const ['movies', 'shows']); - await prefs.setStringList('user_bob_library_order', const ['private']); + await prefs.setString('user_alice_hidden_libraries', jsonEncode(['server-a:hidden'])); + await prefs.setString('user_alice_library_order', jsonEncode(['movies', 'shows'])); + await prefs.setString('user_bob_hidden_libraries', jsonEncode(['private-hidden'])); + await prefs.setString('user_bob_library_order', jsonEncode(['private-order'])); final out = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice', appVersion: '1.2.3'); final exported = out['prefs'] as Map; @@ -53,11 +58,16 @@ void main() { expect(exported['seek_time_small'], {'type': 'int', 'value': 42}); expect(exported['volume'], {'type': 'double', 'value': 75.5}); expect(exported['preferred_video_codec'], {'type': 'string', 'value': 'h264'}); - expect(exported['library_order'], { - 'type': 'stringList', - 'value': ['movies', 'shows'], + expect(exported['hidden_libraries'], { + 'type': 'string', + 'value': jsonEncode(['server-a:hidden']), }); - expect(jsonEncode(out), isNot(contains('private'))); + expect(exported['library_order'], { + 'type': 'string', + 'value': jsonEncode(['movies', 'shows']), + }); + expect(jsonEncode(out), isNot(contains('private-hidden'))); + expect(jsonEncode(out), isNot(contains('private-order'))); }); test('excludes device-local download roots while preserving portable download controls', () async { @@ -78,6 +88,32 @@ void main() { expect(encoded, isNot(contains(sourcePath))); }); + test('round-trips a custom shader selection as a portable disabled selection', () async { + const custom = ShaderPreset( + id: 'custom_local-only.glsl', + name: 'Local only', + type: ShaderPresetType.custom, + fileName: 'local-only.glsl', + ); + final prefs = await BaseSharedPreferencesService.sharedCache(); + await prefs.setString('custom_shader_presets', jsonEncode([custom.toJson()])); + await prefs.setString('global_shader_preset', custom.id); + + final export = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice'); + final exported = export['prefs'] as Map; + expect(exported['global_shader_preset'], {'type': 'string', 'value': ShaderPreset.none.id}); + expect(exported, isNot(contains('custom_shader_presets'))); + expect(jsonEncode(export), isNot(contains(custom.fileName!))); + + await prefs.clear(); + final result = await SettingsExportService.applyImportMap(export, prefs, currentUserUuid: 'bob'); + + expect(result.keysImported, 1); + expect(result.keysSkipped, 0); + expect(prefs.getString('global_shader_preset'), ShaderPreset.none.id); + expect(prefs.getString('custom_shader_presets'), isNull); + }); + test('fails closed for unknown, credential, account, path, history, and runtime keys', () async { const canaries = ['SEERR-BEARER-CANARY', 'ACCOUNT-ID-CANARY', 'DEVICE-PATH-CANARY', 'RUNTIME-TIME-CANARY']; final prefs = await BaseSharedPreferencesService.sharedCache(); @@ -115,7 +151,7 @@ void main() { test('does not export any user-scoped value without an active user', () async { final prefs = await BaseSharedPreferencesService.sharedCache(); - await prefs.setStringList('user_alice_library_order', const ['movies']); + await prefs.setString('user_alice_library_order', jsonEncode(['movies'])); await prefs.setBool('enable_hdr', true); final exported = SettingsExportService.buildExportMap(prefs)['prefs'] as Map; @@ -169,6 +205,130 @@ void main() { expect(prefs.getBool('enable_hdr'), isNull); }); + test('round-trips both filter modes and IDs for every tracker service', () async { + final prefs = await BaseSharedPreferencesService.sharedCache(); + + for (final mode in TrackerLibraryFilterMode.values) { + await prefs.clear(); + for (final service in TrackerService.values) { + await prefs.setString(SettingsService.trackerFilterModePref(service).key, mode.name); + await prefs.setStringList(SettingsService.trackerFilterIdsPref(service).key, [ + '${service.name}:library-a', + '${service.name}:library-b', + ]); + } + + final export = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'source-user'); + final exported = export['prefs'] as Map; + for (final service in TrackerService.values) { + final modeKey = SettingsService.trackerFilterModePref(service).key; + final idsKey = SettingsService.trackerFilterIdsPref(service).key; + expect(exported[modeKey], {'type': 'string', 'value': mode.name}); + expect(exported[idsKey], { + 'type': 'stringList', + 'value': ['${service.name}:library-a', '${service.name}:library-b'], + }); + } + + await prefs.clear(); + final result = await SettingsExportService.applyImportMap(export, prefs, currentUserUuid: 'target-user'); + + expect(result.keysImported, TrackerService.values.length * 2); + expect(result.keysSkipped, 0); + for (final service in TrackerService.values) { + expect(prefs.getString(SettingsService.trackerFilterModePref(service).key), mode.name); + expect(prefs.getStringList(SettingsService.trackerFilterIdsPref(service).key), [ + '${service.name}:library-a', + '${service.name}:library-b', + ]); + } + } + }); + + test('preserves an empty whitelist so import cannot broaden tracker access', () async { + final prefs = await BaseSharedPreferencesService.sharedCache(); + for (final service in TrackerService.values) { + await prefs.setString( + SettingsService.trackerFilterModePref(service).key, + TrackerLibraryFilterMode.whitelist.name, + ); + await prefs.setStringList(SettingsService.trackerFilterIdsPref(service).key, const []); + } + + final export = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'source-user'); + await prefs.clear(); + final result = await SettingsExportService.applyImportMap(export, prefs, currentUserUuid: 'target-user'); + final settings = await SettingsService.getInstance(); + + expect(result.keysImported, TrackerService.values.length * 2); + expect(result.keysSkipped, 0); + for (final service in TrackerService.values) { + expect(settings.read(SettingsService.trackerFilterModePref(service)), TrackerLibraryFilterMode.whitelist); + expect(settings.read(SettingsService.trackerFilterIdsPref(service)), isEmpty); + expect(settings.isLibraryAllowedForTracker(service, '${service.name}:unlisted'), isFalse); + expect(settings.isLibraryAllowedForTracker(service, null), isFalse); + } + }); + + test('rejects tracker preference keys with unknown service suffixes', () async { + const modeKey = 'tracker_library_filter_mode_future'; + const idsKey = 'tracker_library_filter_ids_future'; + final prefs = await BaseSharedPreferencesService.sharedCache(); + await prefs.setString(modeKey, 'local-mode'); + await prefs.setStringList(idsKey, const ['local-id']); + + final exported = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice')['prefs'] as Map; + expect(exported, isNot(contains(modeKey))); + expect(exported, isNot(contains(idsKey))); + + final result = await SettingsExportService.applyImportMap( + { + 'formatVersion': SettingsExportService.formatVersion, + 'prefs': { + modeKey: {'type': 'string', 'value': TrackerLibraryFilterMode.whitelist.name}, + idsKey: { + 'type': 'stringList', + 'value': ['crafted-id'], + }, + }, + }, + prefs, + currentUserUuid: 'alice', + ); + + expect(result.keysImported, 0); + expect(result.keysSkipped, 2); + expect(prefs.getString(modeKey), 'local-mode'); + expect(prefs.getStringList(idsKey), ['local-id']); + }); + + test('normalizes format-v1 hidden and order string lists into JSON string storage', () async { + final prefs = await BaseSharedPreferencesService.sharedCache(); + + final result = await SettingsExportService.applyImportMap( + { + 'formatVersion': 1, + 'prefs': { + 'hidden_libraries': { + 'type': 'stringList', + 'value': ['server-a:hidden'], + }, + 'library_order': { + 'type': 'stringList', + 'value': ['server-b:movies', 'server-a:shows'], + }, + }, + }, + prefs, + currentUserUuid: 'target-user', + ); + + expect(result.keysImported, 2); + expect(result.keysSkipped, 0); + expect(prefs.getString('user_target-user_hidden_libraries'), jsonEncode(['server-a:hidden'])); + expect(prefs.getString('user_target-user_library_order'), jsonEncode(['server-b:movies', 'server-a:shows'])); + }); + test('imports allowlisted values, re-scopes library settings, and skips unsafe entries', () async { const seerrCanary = 'SEERR-IMPORT-CANARY'; final prefs = await BaseSharedPreferencesService.sharedCache(); @@ -184,8 +344,8 @@ void main() { 'enable_hardware_decoding': {'type': 'bool', 'value': true}, 'default_playback_speed': {'type': 'double', 'value': 1}, 'library_order': { - 'type': 'stringList', - 'value': ['movies'], + 'type': 'string', + 'value': jsonEncode(['movies']), }, 'library_sort_movies': {'type': 'string', 'value': '{"key":"titleSort"}'}, 'seerr_session': {'type': 'string', 'value': seerrCanary}, @@ -206,7 +366,7 @@ void main() { expect(result.keysSkipped, 8); expect(prefs.getBool('enable_hardware_decoding'), isTrue); expect(prefs.getDouble('default_playback_speed'), 1.0); - expect(prefs.getStringList('user_alice_library_order'), ['movies']); + expect(prefs.getString('user_alice_library_order'), jsonEncode(['movies'])); expect(prefs.getString('user_alice_library_sort_movies'), '{"key":"titleSort"}'); expect(prefs.getString('seerr_session'), isNull); expect(prefs.getString('user_alice_seerr_session'), isNull); @@ -248,6 +408,26 @@ void main() { expect(prefs.getString('custom_download_path'), isNot(contains(sourcePath))); }); + test('reports an unresolved custom shader selection as skipped', () async { + final prefs = await BaseSharedPreferencesService.sharedCache(); + await prefs.setString('global_shader_preset', ShaderPreset.nvscalerDefault.id); + + final result = await SettingsExportService.applyImportMap( + { + 'formatVersion': SettingsExportService.formatVersion, + 'prefs': { + 'global_shader_preset': {'type': 'string', 'value': 'custom_missing.glsl'}, + }, + }, + prefs, + currentUserUuid: 'alice', + ); + + expect(result.keysImported, 0); + expect(result.keysSkipped, 1); + expect(prefs.getString('global_shader_preset'), ShaderPreset.nvscalerDefault.id); + }); + test('skips malformed or mismatched entries before applying valid mutations', () async { final prefs = await BaseSharedPreferencesService.sharedCache(); @@ -294,7 +474,7 @@ void main() { prefs, currentUserUuid: 'alice', ), - throwsA(isA()), + throwsA(isA()), ); expect(prefs.getBool('enable_hdr'), isFalse); @@ -304,7 +484,8 @@ void main() { test('round-trips portable values across user scopes without account identifiers', () async { final prefs = await BaseSharedPreferencesService.sharedCache(); await prefs.setBool('enable_hardware_decoding', true); - await prefs.setStringList('user_alice_library_order', const ['movies']); + await prefs.setString('user_alice_hidden_libraries', jsonEncode(['server-a:hidden'])); + await prefs.setString('user_alice_library_order', jsonEncode(['server-b:movies'])); final export = SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice'); expect(jsonEncode(export), isNot(contains('alice'))); @@ -312,11 +493,13 @@ void main() { final result = await SettingsExportService.applyImportMap(export, prefs, currentUserUuid: 'bob'); - expect(result.keysImported, 2); + expect(result.keysImported, 3); expect(result.keysSkipped, 0); expect(prefs.getBool('enable_hardware_decoding'), isTrue); - expect(prefs.getStringList('user_bob_library_order'), ['movies']); - expect(prefs.getStringList('user_alice_library_order'), isNull); + expect(prefs.getString('user_bob_hidden_libraries'), jsonEncode(['server-a:hidden'])); + expect(prefs.getString('user_bob_library_order'), jsonEncode(['server-b:movies'])); + expect(prefs.getString('user_alice_hidden_libraries'), isNull); + expect(prefs.getString('user_alice_library_order'), isNull); }); test('malicious import cannot replace any tvOS database recovery key', () async { @@ -389,7 +572,7 @@ void main() { expect(await SettingsExportService.exportToFile(), isNull); picker.saveError = PlatformException(code: 'save_failed'); - await expectLater(SettingsExportService.exportToFile(), throwsA(isA())); + await expectLater(SettingsExportService.exportToFile(), throwsA(isA())); picker.saveError = null; picker.saveResult = '/tmp/recovered.json'; @@ -432,11 +615,14 @@ void main() { picker.pickResult = FilePickerResult([ PlatformFile(name: 'missing.json', size: 1, path: '/path/that/does/not/exist.json'), ]); - await expectLater(SettingsExportService.importFromFile(), throwsA(isA())); + await expectLater(SettingsExportService.importFromFile(), throwsA(isA())); picker.pickResult = FilePickerResult([PlatformFile(name: 'settings.json', size: 1, bytes: importBytes())]); expect((await SettingsExportService.importFromFile())?.keysImported, 1); expect(picker.pickCalls, 4); + + picker.pickError = PlatformException(code: 'pick_failed'); + await expectLater(SettingsExportService.importFromFile(), throwsA(isA())); }); test('missing active profile rejects before opening the picker', () async { diff --git a/test/services/shader_asset_loader_test.dart b/test/services/shader_asset_loader_test.dart new file mode 100644 index 000000000..1dfa1ffaf --- /dev/null +++ b/test/services/shader_asset_loader_test.dart @@ -0,0 +1,193 @@ +import 'dart:io'; + +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:path/path.dart' as path; +import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; +import 'package:plezy/models/shader_preset.dart'; +import 'package:plezy/services/shader_asset_loader.dart'; + +import '../test_helpers/io_fakes.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + late PathProviderPlatform originalPathProvider; + late Directory root; + late Directory supportDirectory; + late File sentinel; + + setUp(() async { + originalPathProvider = PathProviderPlatform.instance; + root = await Directory.systemTemp.createTemp('plezy_shader_asset_loader_test_'); + PathProviderPlatform.instance = FakePathProvider(root); + supportDirectory = Directory(path.join(root.path, 'support'))..createSync(recursive: true); + sentinel = File(path.join(supportDirectory.path, 'sentinel.glsl'))..writeAsStringSync('sentinel'); + ShaderAssetLoader.clearCache(); + }); + + tearDown(() async { + PathProviderPlatform.instance = originalPathProvider; + ShaderAssetLoader.clearCache(); + if (await root.exists()) await root.delete(recursive: true); + }); + + ShaderPreset customPreset(String fileName) { + return ShaderPreset(id: 'custom_$fileName', name: fileName, type: ShaderPresetType.custom, fileName: fileName); + } + + Future> bundledBytes(String assetPath) async { + final data = await rootBundle.load('assets/shaders/$assetPath'); + return data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + } + + Future expectBundledFile(String filePath, String assetPath) async { + expect(await File(filePath).readAsBytes(), await bundledBytes(assetPath)); + } + + test('traversal and absolute names cannot load or delete outside managed directory', () async { + for (final fileName in ['../sentinel.glsl', sentinel.path]) { + expect(await ShaderAssetLoader.getShadersForPreset(customPreset(fileName)), isEmpty); + await ShaderAssetLoader.deleteCustomShader(fileName); + expect(await sentinel.readAsString(), 'sentinel'); + } + }); + + test('repairs stale built-in bytes in the application cache without touching temporary storage', () async { + final cacheFile = File(path.join(root.path, 'cache', 'shaders', 'nvscaler', 'NVScaler.glsl')) + ..createSync(recursive: true) + ..writeAsStringSync('stale'); + final oldTemporaryFile = File(path.join(root.path, 'temp', 'shaders', 'nvscaler', 'NVScaler.glsl')) + ..createSync(recursive: true) + ..writeAsStringSync('old temporary sentinel'); + + final shaders = await ShaderAssetLoader.getShadersForPreset(ShaderPreset.nvscalerDefault); + + expect(shaders, [cacheFile.path]); + await expectBundledFile(shaders.single, 'nvscaler/NVScaler.glsl'); + expect(await oldTemporaryFile.readAsString(), 'old temporary sentinel'); + }); + + test('recovers a truncated built-in final through a complete staged replacement', () async { + final targetDirectory = Directory(path.join(root.path, 'cache', 'shaders', 'nvscaler')) + ..createSync(recursive: true); + final target = File(path.join(targetDirectory.path, 'NVScaler.glsl'))..writeAsBytesSync([1, 2, 3]); + final unrelatedPending = File('${target.path}.pending.interrupted')..writeAsBytesSync([1]); + + final shaders = await ShaderAssetLoader.getNVScalerShaders(); + + expect(shaders, [target.path]); + await expectBundledFile(target.path, 'nvscaler/NVScaler.glsl'); + expect(unrelatedPending.existsSync(), isTrue); + final ownedPending = await targetDirectory + .list() + .where((entry) => entry.path.contains('.pending.') && entry.path != unrelatedPending.path) + .toList(); + expect(ownedPending, isEmpty); + }); + + test('does not return a partial path when final-file promotion fails', () async { + final target = Directory(path.join(root.path, 'cache', 'shaders', 'nvscaler', 'NVScaler.glsl')) + ..createSync(recursive: true); + + expect(await ShaderAssetLoader.getNVScalerShaders(), isEmpty); + + final siblings = await target.parent.list().toList(); + expect(siblings.where((entry) => entry.path.contains('.pending.')), isEmpty); + expect(target.existsSync(), isTrue); + }); + + test('coalesces concurrent built-in loads onto one complete final path', () async { + final results = await Future.wait([ShaderAssetLoader.getNVScalerShaders(), ShaderAssetLoader.getNVScalerShaders()]); + + expect(results[0], results[1]); + expect(results[0], hasLength(1)); + await expectBundledFile(results[0].single, 'nvscaler/NVScaler.glsl'); + final directory = File(results[0].single).parent; + expect((await directory.list().toList()).where((entry) => entry.path.contains('.pending.')), isEmpty); + }); + + test('materializes representative built-in chains in MPV order with bundled bytes', () async { + final nvscaler = await ShaderAssetLoader.getNVScalerShaders(); + final artcnn = await ShaderAssetLoader.getArtCNNShaders( + const ArtCNNConfig(model: ArtCNNModel.c4f16, variant: ArtCNNVariant.denoise), + ); + final anime4k = await ShaderAssetLoader.getAnime4KShaders( + const Anime4KConfig(quality: Anime4KQuality.fast, mode: Anime4KMode.modeB), + ); + + final expected = { + nvscaler.single: 'nvscaler/NVScaler.glsl', + artcnn.single: 'artcnn/ArtCNN_C4F16_DN.glsl', + anime4k[0]: 'anime4k/Anime4K_Clamp_Highlights.glsl', + anime4k[1]: 'anime4k/Anime4K_Restore_CNN_M.glsl', + anime4k[2]: 'anime4k/Anime4K_Upscale_CNN_x2_M.glsl', + anime4k[3]: 'anime4k/Anime4K_AutoDownscalePre_x2.glsl', + }; + expect(anime4k.map(path.basename).toList(), [ + 'Anime4K_Clamp_Highlights.glsl', + 'Anime4K_Restore_CNN_M.glsl', + 'Anime4K_Upscale_CNN_x2_M.glsl', + 'Anime4K_AutoDownscalePre_x2.glsl', + ]); + for (final entry in expected.entries) { + expect(path.isWithin(path.join(root.path, 'cache'), entry.key), isTrue); + await expectBundledFile(entry.key, entry.value); + } + }); + + test('nested and non-GLSL names are rejected without touching matching files', () async { + final customDirectory = Directory(path.join(supportDirectory.path, 'custom_shaders'))..createSync(recursive: true); + final nested = File(path.join(customDirectory.path, 'subdir', 'name.glsl')) + ..createSync(recursive: true) + ..writeAsStringSync('nested'); + final extraExtension = File(path.join(customDirectory.path, 'name.glsl.txt'))..writeAsStringSync('extra'); + + for (final fileName in ['subdir/name.glsl', r'subdir\name.glsl', '.', '..', 'name.glsl.txt', 'name.txt']) { + expect(ShaderAssetLoader.isValidCustomShaderFileName(fileName), isFalse); + expect(await ShaderAssetLoader.getShadersForPreset(customPreset(fileName)), isEmpty); + await ShaderAssetLoader.deleteCustomShader(fileName); + } + + expect(await nested.readAsString(), 'nested'); + expect(await extraExtension.readAsString(), 'extra'); + }); + + test('non-GLSL import fails before creating a managed file', () async { + final source = File(path.join(root.path, 'shader.txt'))..writeAsStringSync('not glsl'); + + await expectLater(ShaderAssetLoader.importCustomShader(source.path), throwsArgumentError); + + final customDirectory = Directory(path.join(supportDirectory.path, 'custom_shaders')); + expect(customDirectory.existsSync(), isFalse); + }); + + test('imports a direct UUID GLSL child and deletes only that file', () async { + final source = File(path.join(root.path, 'shader.GLSL'))..writeAsStringSync('shader'); + + final storedName = await ShaderAssetLoader.importCustomShader(source.path); + expect(storedName, matches(RegExp(r'^[0-9a-f-]+\.glsl$'))); + expect(ShaderAssetLoader.isValidCustomShaderFileName(storedName), isTrue); + + final shaders = await ShaderAssetLoader.getShadersForPreset(customPreset(storedName)); + expect(shaders, hasLength(1)); + expect(path.dirname(shaders.single), path.join(supportDirectory.path, 'custom_shaders')); + expect(await File(shaders.single).readAsString(), 'shader'); + + await ShaderAssetLoader.deleteCustomShader(storedName); + expect(File(shaders.single).existsSync(), isFalse); + expect(await source.readAsString(), 'shader'); + }); + + test('legacy base-36 managed names remain loadable and deletable', () async { + const storedName = 'ks9p7.glsl'; + final customDirectory = Directory(path.join(supportDirectory.path, 'custom_shaders'))..createSync(recursive: true); + final managedFile = File(path.join(customDirectory.path, storedName))..writeAsStringSync('legacy'); + + expect(ShaderAssetLoader.isValidCustomShaderFileName(storedName), isTrue); + expect(await ShaderAssetLoader.getShadersForPreset(customPreset(storedName)), [managedFile.path]); + + await ShaderAssetLoader.deleteCustomShader(storedName); + expect(managedFile.existsSync(), isFalse); + }); +} diff --git a/test/services/shader_service_test.dart b/test/services/shader_service_test.dart new file mode 100644 index 000000000..41975c2ad --- /dev/null +++ b/test/services/shader_service_test.dart @@ -0,0 +1,62 @@ +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; +import 'package:path/path.dart' as path; +import 'package:path_provider_platform_interface/path_provider_platform_interface.dart'; +import 'package:plezy/models/shader_preset.dart'; +import 'package:plezy/mpv/player/player.dart'; +import 'package:plezy/services/shader_service.dart'; + +import '../test_helpers/io_fakes.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + late PathProviderPlatform originalPathProvider; + late Directory root; + + setUp(() async { + originalPathProvider = PathProviderPlatform.instance; + root = await Directory.systemTemp.createTemp('plezy_shader_service_test_'); + PathProviderPlatform.instance = FakePathProvider(root); + }); + + tearDown(() async { + PathProviderPlatform.instance = originalPathProvider; + if (await root.exists()) await root.delete(recursive: true); + }); + + test('an escaped custom preset never reaches the MPV shader append command', () async { + final supportDirectory = Directory(path.join(root.path, 'support'))..createSync(recursive: true); + final sentinel = File(path.join(supportDirectory.path, 'sentinel.glsl'))..writeAsStringSync('sentinel'); + final player = _RecordingPlayer(); + final service = ShaderService(player); + const preset = ShaderPreset( + id: 'custom_traversal', + name: 'Traversal', + type: ShaderPresetType.custom, + fileName: '../sentinel.glsl', + ); + + await service.applyPreset(preset); + + expect(player.commands.where((command) => command.length > 2 && command[2] == 'append'), isEmpty); + expect(player.commands.single, ['change-list', 'glsl-shaders', 'clr', '']); + expect(await sentinel.readAsString(), 'sentinel'); + }); +} + +class _RecordingPlayer implements Player { + final commands = >[]; + + @override + String get playerType => 'mpv'; + + @override + Future command(List args) async { + commands.add(List.unmodifiable(args)); + } + + @override + dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +} diff --git a/test/utils/initials_palette_test.dart b/test/utils/initials_palette_test.dart new file mode 100644 index 000000000..41475adf7 --- /dev/null +++ b/test/utils/initials_palette_test.dart @@ -0,0 +1,19 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/utils/initials_palette.dart'; + +void main() { + group('initialOf', () { + test('keeps fallback, trimming, and ordinary casing behavior', () { + expect(initialOf(''), '?'); + expect(initialOf(' \t\n'), '?'); + expect(initialOf(' alice '), 'A'); + }); + + test('returns the complete first extended grapheme', () { + expect(initialOf('๐Ÿ‡ฏ๐Ÿ‡ต Japan'), '๐Ÿ‡ฏ๐Ÿ‡ต'); + expect(initialOf('๐Ÿ‘๐Ÿฝ Approved'), '๐Ÿ‘๐Ÿฝ'); + expect(initialOf('๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Family'), '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ'); + expect(initialOf('e\u0301clair'), 'E\u0301'); + }); + }); +} diff --git a/test/utils/search_relevance_test.dart b/test/utils/search_relevance_test.dart new file mode 100644 index 000000000..8f085655b --- /dev/null +++ b/test/utils/search_relevance_test.dart @@ -0,0 +1,132 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/media/media_item.dart'; +import 'package:plezy/utils/search_relevance.dart'; + +import '../test_helpers/media_items.dart'; + +void main() { + group('normalizeSearchText', () { + test('normalizes canonical, compatibility, separator, and typography variants', () { + expect(normalizeSearchText('Amรฉlie'), normalizeSearchText('Ame\u0301lie')); + expect(normalizeSearchText('๏ผก๏ฝ๏ฝ…๏ฝŒ๏ฝ‰๏ฝ…'), normalizeSearchText('Amelie')); + expect(normalizeSearchText('Spider\u00a0Man'), normalizeSearchText('Spider Man')); + + final expected = normalizeSearchText('Spider Man'); + for (final value in ['Spider-Man', 'Spiderโ€‘Man', 'Spiderโ€“Man', 'Spiderโ€”Man']) { + expect(normalizeSearchText(value), expected, reason: value); + } + }); + + test('preserves accents and script-significant marks', () { + expect(normalizeSearchText('Cafe'), isNot(normalizeSearchText('Cafรฉ'))); + expect(normalizeSearchText('Cafรฉ'), normalizeSearchText('Cafe\u0301')); + expect(normalizeSearchText('เค•'), isNot(normalizeSearchText('เค•เคฟ'))); + expect(normalizeSearchText('เค•เคฟ'), contains('เคฟ')); + }); + }); + + group('media search ranking', () { + test('does not give an English-only leading article bonus', () { + final items = [ + testMediaItem(id: 'the', title: 'The Boys'), + testMediaItem(id: 'les', title: 'Les Boys'), + testMediaItem(id: 'los', title: 'Los Boys'), + ]; + + expect(_ids(rankMediaSearchResults(items, 'Boys')), ['the', 'les', 'los']); + expect(_ids(rankMediaSearchResults(items.reversed.toList(), 'Boys')), ['los', 'les', 'the']); + }); + + test('keeps exact titles above longer prefixes', () { + final items = [ + testMediaItem(id: 'longer', title: 'The Boys in the Boat'), + testMediaItem(id: 'exact', title: 'The Boys'), + ]; + + expect(_ids(rankMediaSearchResults(items, 'The Boys')), ['exact', 'longer']); + }); + + test('preserves nullable-field weighting', () { + final items = [ + testMediaItem(id: 'parent', parentTitle: 'Target'), + testMediaItem(id: 'original', originalTitle: 'Target'), + ]; + + expect(_ids(rankMediaSearchResults(items, 'Target')), ['original', 'parent']); + }); + }); + + group('rankMediaSearchResults', () { + test('ranks equivalent query forms identically and preserves normalized ties', () { + final items = [ + testMediaItem(id: 'first', title: 'Spider-Man'), + testMediaItem(id: 'second', title: 'Spiderโ€‘Man'), + testMediaItem(id: 'third', title: 'Spider Man Returns'), + testMediaItem(id: 'accented', title: 'Amรฉlie'), + testMediaItem(id: 'decomposed', title: 'Ame\u0301lie'), + ]; + + final asciiOrder = _ids(rankMediaSearchResults(items, 'Spider Man')); + final compatibilityOrder = _ids(rankMediaSearchResults(items, '๏ผณ๏ฝ๏ฝ‰๏ฝ„๏ฝ…๏ฝ’ใ€€๏ผญ๏ฝ๏ฝŽ')); + final typographicOrder = _ids(rankMediaSearchResults(items, 'Spiderโ€”Man')); + + expect(compatibilityOrder, asciiOrder); + expect(typographicOrder, asciiOrder); + expect(asciiOrder.take(2), ['first', 'second']); + expect(_ids(rankMediaSearchResults(items, 'Spider Man', limit: 1)), ['first']); + expect(_ids(rankMediaSearchResults(items, 'Amรฉlie')).take(2), ['accented', 'decomposed']); + }); + + test('bounded selection matches the unbounded full ordering for a large input', () { + final items = [ + for (var i = 0; i < 1000; i++) + testMediaItem( + id: 'item-$i', + title: switch (i) { + 999 => 'Target', + _ when i % 137 == 0 => 'Target result $i', + _ when i % 41 == 0 => 'A Target result $i', + _ => 'Candidate $i', + }, + ), + ]; + final expected = _fullyRankedIds(items, 'Target').take(100).toList(); + + expect(_ids(rankMediaSearchResults(items, 'Target', limit: 100)), expected); + expect(expected.first, 'item-999'); + }); + + test('retains the earliest items when an equal-score run crosses the cap', () { + final items = [for (var i = 0; i < 150; i++) testMediaItem(id: 'tie-$i', title: 'Same title')]; + + expect(_ids(rankMediaSearchResults(items, 'Same title', limit: 100)), [for (var i = 0; i < 100; i++) 'tie-$i']); + }); + + test('preserves limit boundaries, full ordering, and empty-query input order', () { + final items = [ + testMediaItem(id: 'prefix', title: 'Target Extended'), + testMediaItem(id: 'exact', title: 'Target'), + testMediaItem(id: 'contains', title: 'A Target Story'), + ]; + final expected = _fullyRankedIds(items, 'Target'); + + expect(rankMediaSearchResults(items, 'Target', limit: 0), isEmpty); + expect(_ids(rankMediaSearchResults(items, 'Target', limit: 1)), ['exact']); + expect(_ids(rankMediaSearchResults(items, 'Target', limit: items.length)), expected); + expect(_ids(rankMediaSearchResults(items, 'Target', limit: items.length + 5)), expected); + expect(_ids(rankMediaSearchResults(items, 'Target')), expected); + expect(_ids(rankMediaSearchResults(items, 'โ€” โ€‘ !!!', limit: 2)), ['prefix', 'exact']); + }); + + test('keeps the negative-limit failure contract', () { + final items = [testMediaItem(title: 'Target')]; + + expect(() => rankMediaSearchResults(items, 'Target', limit: -1), throwsRangeError); + expect(() => rankMediaSearchResults(items, '!!!', limit: -1), throwsRangeError); + }); + }); +} + +List _ids(Iterable items) => [for (final item in items) item.id]; + +List _fullyRankedIds(List items, String query) => _ids(rankMediaSearchResults(items, query)); diff --git a/test/widgets/app_bar_back_button_test.dart b/test/widgets/app_bar_back_button_test.dart new file mode 100644 index 000000000..103517fb9 --- /dev/null +++ b/test/widgets/app_bar_back_button_test.dart @@ -0,0 +1,58 @@ +import 'dart:ui' show SemanticsAction; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/focus/input_mode_tracker.dart'; +import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/widgets/app_bar_back_button.dart'; + +void main() { + Future pumpButton(WidgetTester tester, {required FocusNode focusNode, required VoidCallback onPressed}) async { + await tester.pumpWidget( + TranslationProvider( + child: MaterialApp( + home: InputModeTracker( + child: Scaffold( + body: AppBarBackButton(focusNode: focusNode, onPressed: onPressed), + ), + ), + ), + ), + ); + } + + testWidgets('pointer, D-pad select, and Space activate exactly once', (tester) async { + final focusNode = FocusNode(debugLabel: 'back_button_test'); + addTearDown(focusNode.dispose); + var activations = 0; + + await pumpButton(tester, focusNode: focusNode, onPressed: () => activations++); + + await tester.tap(find.byType(AppBarBackButton)); + expect(activations, 1); + + focusNode.requestFocus(); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.select); + expect(activations, 2); + + await tester.sendKeyEvent(LogicalKeyboardKey.space); + expect(activations, 3); + }); + + testWidgets('exposes one localized operable button node', (tester) async { + final semantics = tester.ensureSemantics(); + final focusNode = FocusNode(debugLabel: 'back_button_semantics'); + addTearDown(focusNode.dispose); + + await pumpButton(tester, focusNode: focusNode, onPressed: () {}); + + final finder = find.bySemanticsLabel(t.common.back); + expect(finder, findsOneWidget); + final data = tester.getSemantics(finder).getSemanticsData(); + expect(data.flagsCollection.isButton, isTrue); + expect(data.hasAction(SemanticsAction.tap), isTrue); + semantics.dispose(); + }); +} diff --git a/test/widgets/cycling_media_backdrop_test.dart b/test/widgets/cycling_media_backdrop_test.dart index ee66ae0f6..593071feb 100644 --- a/test/widgets/cycling_media_backdrop_test.dart +++ b/test/widgets/cycling_media_backdrop_test.dart @@ -7,6 +7,7 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/media/media_item.dart'; import 'package:plezy/media/media_kind.dart'; import 'package:plezy/services/settings_service.dart'; +import 'package:plezy/utils/media_image_helper.dart'; import 'package:plezy/widgets/cycling_media_backdrop.dart'; import 'package:plezy/widgets/tv_spotlight_background.dart'; @@ -62,7 +63,6 @@ void main() { mediaKey: mediaKey, imagePaths: paths, client: null, - localArtworkPathResolver: (path) => path, imageProviderResolver: (path) => imageProviders[path], allowNetwork: false, active: active, @@ -78,6 +78,48 @@ void main() { ); } + Widget buildAsyncBackdrop( + List paths, { + required Future Function(File file) fileExists, + Object? mediaKey = 'movie-1', + List fallbackPaths = const [], + }) { + final (memWidth, memHeight) = MediaImageHelper.getMemCacheDimensions( + displayWidth: 320, + displayHeight: 180, + imageType: ImageType.art, + ); + return MaterialApp( + home: MediaQuery( + data: const MediaQueryData(size: Size(320, 180), devicePixelRatio: 1), + child: SizedBox( + width: 320, + height: 180, + child: CyclingMediaBackdrop( + mediaKey: mediaKey, + imagePaths: paths, + fallbackImagePaths: fallbackPaths, + client: null, + localArtworkPathResolver: (path) => path, + imageProviderResolver: (path) { + final provider = imageProviders[path]; + return provider == null + ? null + : MediaImageHelper.boundedDecode(provider, memWidth: memWidth, memHeight: memHeight); + }, + localFileExists: fileExists, + allowNetwork: false, + width: 320, + height: 180, + fallbackColor: Colors.black, + rotationInterval: _rotationInterval, + fadeDuration: _fadeDuration, + ), + ), + ), + ); + } + String pathForProvider(ImageProvider provider) { while (provider is ResizeImage) { provider = provider.imageProvider; @@ -101,7 +143,11 @@ void main() { Future finishImageTransition(WidgetTester tester, {Duration fadeDuration = _fadeDuration}) async { final incoming = find.byType(Image).last; final image = tester.widget(incoming); - if (image.image is MemoryImage) { + var source = image.image; + while (source is ResizeImage) { + source = source.imageProvider; + } + if (source is MemoryImage) { final configuration = createLocalImageConfiguration(tester.element(incoming)); await tester.runAsync(() { final frame = Completer(); @@ -161,6 +207,113 @@ void main() { await tester.pumpWidget(const SizedBox.shrink()); }); + testWidgets('pending local rotation keeps the settled backdrop until the file resolves', (tester) async { + final checks = >{}; + final probes = {}; + Future fileExists(File file) { + probes.update(file.path, (count) => count + 1, ifAbsent: () => 1); + return (checks[file.path] ??= Completer()).future; + } + + await tester.pumpWidget(buildAsyncBackdrop([first.path, second.path], fileExists: fileExists)); + checks[first.path]!.complete(true); + await tester.pump(); + await tester.pump(); + await finishImageTransition(tester); + expectVisibleBackdrop(tester, first.path); + + await tester.pump(_rotationInterval); + expect(checks[second.path], isNotNull); + expect(renderedFilePaths(tester), [first.path]); + expect(probes[second.path], 1); + + checks[second.path]!.complete(true); + await tester.pump(); + await tester.pump(); + expect(renderedFilePaths(tester), [first.path, second.path]); + final incoming = tester.widget(find.byType(Image).last); + final resized = incoming.image as ResizeImage; + final (expectedWidth, expectedHeight) = MediaImageHelper.getMemCacheDimensions( + displayWidth: 320, + displayHeight: 180, + imageType: ImageType.art, + ); + expect(resized.width, expectedWidth); + expect(resized.height, expectedHeight); + await finishImageTransition(tester); + expectVisibleBackdrop(tester, second.path); + + await tester.pumpWidget(const SizedBox.shrink()); + }); + + testWidgets('late local completion cannot replace a newer media path', (tester) async { + final checks = >{}; + Future fileExists(File file) => (checks[file.path] ??= Completer()).future; + + await tester.pumpWidget(buildAsyncBackdrop([first.path], fileExists: fileExists, mediaKey: 'movie-a')); + expect(find.byType(Image), findsNothing); + + await tester.pumpWidget(buildAsyncBackdrop([second.path], fileExists: fileExists, mediaKey: 'movie-b')); + checks[second.path]!.complete(true); + await tester.pump(); + await tester.pump(); + await finishImageTransition(tester); + expectVisibleBackdrop(tester, second.path); + + checks[first.path]!.complete(true); + await tester.pump(); + await tester.pump(); + await tester.pump(); + expect(renderedFilePaths(tester), [second.path]); + expectVisibleBackdrop(tester, second.path); + + await tester.pumpWidget(const SizedBox.shrink()); + }); + + testWidgets('confirmed missing local path advances once and stays cached', (tester) async { + final missing = '${directory.path}/missing.png'; + final checks = >{}; + final probes = {}; + Future fileExists(File file) { + probes.update(file.path, (count) => count + 1, ifAbsent: () => 1); + return (checks[file.path] ??= Completer()).future; + } + + await tester.pumpWidget(buildAsyncBackdrop([first.path], fileExists: fileExists, mediaKey: 'settled')); + checks[first.path]!.complete(true); + await tester.pump(); + await tester.pump(); + await finishImageTransition(tester); + expectVisibleBackdrop(tester, first.path); + + await tester.pumpWidget( + buildAsyncBackdrop([missing, second.path], fileExists: fileExists, mediaKey: 'replacement'), + ); + expect(renderedFilePaths(tester), [first.path]); + + checks[missing]!.complete(false); + await tester.pump(); + await tester.pump(); + await tester.pump(); + expect(checks[second.path], isNotNull); + expect(renderedFilePaths(tester), [first.path]); + + checks[second.path]!.complete(true); + await tester.pump(); + await tester.pump(); + await finishImageTransition(tester); + expectVisibleBackdrop(tester, second.path); + + await tester.pumpWidget( + buildAsyncBackdrop([missing, second.path], fileExists: fileExists, mediaKey: 'replacement'), + ); + await tester.pump(_rotationInterval * 2); + expect(probes[missing], 1); + expectVisibleBackdrop(tester, second.path); + + await tester.pumpWidget(const SizedBox.shrink()); + }); + testWidgets('pauses while the application is not resumed', (tester) async { addTearDown(() => tester.binding.handleAppLifecycleStateChanged(AppLifecycleState.resumed)); await tester.pumpWidget(buildBackdrop([first.path, second.path])); @@ -244,12 +397,16 @@ void main() { ), ), ); + await tester.runAsync(() => Future.delayed(const Duration(milliseconds: 20))); + await tester.pump(); + await tester.pump(); expect(renderedFilePaths(tester), [first.path]); await tester.pump(const Duration(seconds: 10)); + await tester.runAsync(() => Future.delayed(const Duration(milliseconds: 20))); + await tester.pump(); + await tester.pump(); expect(renderedFilePaths(tester).last, second.path); - await finishImageTransition(tester, fadeDuration: const Duration(milliseconds: 280)); - expectVisibleBackdrop(tester, second.path); await tester.pumpWidget(const SizedBox.shrink()); }); diff --git a/test/widgets/dialog_action_button_test.dart b/test/widgets/dialog_action_button_test.dart index dc09c2b7a..150c8d20a 100644 --- a/test/widgets/dialog_action_button_test.dart +++ b/test/widgets/dialog_action_button_test.dart @@ -29,7 +29,7 @@ void main() { expect(backed, 1); }); - testWidgets('nullable callback keeps its graph position while disabling activation', (tester) async { + testWidgets('nullable callback disables activation and removes the action from traversal', (tester) async { final focusNode = FocusNode(debugLabel: 'disabled dialog action'); addTearDown(focusNode.dispose); @@ -48,9 +48,11 @@ void main() { ); await tester.pump(); - expect(focusNode.hasFocus, isTrue); + expect(focusNode.canRequestFocus, isFalse); + expect(focusNode.hasFocus, isFalse); expect(tester.widget(find.byType(FilledButton)).onPressed, isNull); - await tester.sendKeyEvent(LogicalKeyboardKey.enter); - expect(focusNode.hasFocus, isTrue); + focusNode.requestFocus(); + await tester.pump(); + expect(focusNode.hasFocus, isFalse); }); } diff --git a/test/widgets/focusable_text_field_test.dart b/test/widgets/focusable_text_field_test.dart index c709e8fe4..0346ab265 100644 --- a/test/widgets/focusable_text_field_test.dart +++ b/test/widgets/focusable_text_field_test.dart @@ -674,6 +674,128 @@ void main() { expect(controller.selection, const TextSelection.collapsed(offset: 1)); }); + testWidgets('TV hardware caret and deletion stay on grapheme boundaries', (tester) async { + TvDetectionService.debugSetAppleTVOverride(null); + await TvDetectionService.getInstance(forceTv: true); + TvDetectionService.setForceTVSync(true); + final controller = TextEditingController(); + final fieldFocusNode = FocusNode(debugLabel: 'grapheme_field'); + addTearDown(controller.dispose); + addTearDown(fieldFocusNode.dispose); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: FocusableTextField( + controller: controller, + focusNode: fieldFocusNode, + tvKeyboardAutoOpenBehavior: TvKeyboardAutoOpenBehavior.never, + ), + ), + ), + ); + fieldFocusNode.requestFocus(); + await tester.pump(); + + for (final grapheme in ['๐Ÿ˜€', 'e\u0301', '๐Ÿ‡ฏ๐Ÿ‡ต', '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ']) { + final text = 'A${grapheme}B'; + final graphemeEnd = 1 + grapheme.length; + + controller.value = TextEditingValue( + text: text, + selection: TextSelection.collapsed(offset: graphemeEnd), + ); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + expect(controller.selection, TextSelection.collapsed(offset: graphemeEnd)); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + expect(controller.selection, TextSelection.collapsed(offset: text.length)); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + expect(controller.selection, TextSelection.collapsed(offset: text.length)); + + controller.selection = const TextSelection.collapsed(offset: 2); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + controller.selection = const TextSelection.collapsed(offset: 2); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight); + expect(controller.selection, TextSelection.collapsed(offset: graphemeEnd)); + + controller.value = TextEditingValue(text: text, selection: const TextSelection.collapsed(offset: 0)); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowLeft); + await tester.sendKeyEvent(LogicalKeyboardKey.backspace); + expect(controller.text, text); + expect(controller.selection, const TextSelection.collapsed(offset: 0)); + await tester.sendKeyEvent(LogicalKeyboardKey.delete); + expect(controller.text, '${grapheme}B'); + expect(controller.selection, const TextSelection.collapsed(offset: 0)); + + controller.value = TextEditingValue( + text: text, + selection: TextSelection.collapsed(offset: graphemeEnd), + ); + await tester.sendKeyEvent(LogicalKeyboardKey.backspace); + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + + controller.value = TextEditingValue(text: text, selection: const TextSelection.collapsed(offset: 1)); + await tester.sendKeyEvent(LogicalKeyboardKey.delete); + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + + controller.value = TextEditingValue( + text: text, + selection: TextSelection(baseOffset: graphemeEnd - 1, extentOffset: 1), + ); + await tester.sendKeyEvent(LogicalKeyboardKey.backspace); + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + } + }); + + testWidgets('grapheme deletion preserves formatter and callback ordering', (tester) async { + TvDetectionService.debugSetAppleTVOverride(null); + await TvDetectionService.getInstance(forceTv: true); + TvDetectionService.setForceTVSync(true); + const grapheme = '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ'; + final text = 'A${grapheme}B'; + final controller = TextEditingController(text: text); + final fieldFocusNode = FocusNode(debugLabel: 'formatted_grapheme_field'); + final formatterCandidates = []; + final changes = []; + addTearDown(controller.dispose); + addTearDown(fieldFocusNode.dispose); + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: FocusableTextField( + controller: controller, + focusNode: fieldFocusNode, + tvKeyboardAutoOpenBehavior: TvKeyboardAutoOpenBehavior.never, + maxLength: 8, + inputFormatters: [ + TextInputFormatter.withFunction((_, nextValue) { + formatterCandidates.add(nextValue); + return nextValue; + }), + ], + onChanged: changes.add, + ), + ), + ), + ); + fieldFocusNode.requestFocus(); + await tester.pump(); + controller.selection = TextSelection.collapsed(offset: 1 + grapheme.length); + + await tester.sendKeyEvent(LogicalKeyboardKey.backspace); + + expect(formatterCandidates.single.text, 'AB'); + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + expect(changes, ['AB']); + }); testWidgets('TV keyboard done resolves callbacks against the latest field widget', (tester) async { TvDetectionService.debugSetAppleTVOverride(null); await TvDetectionService.getInstance(forceTv: true); diff --git a/test/widgets/hotkey_recorder_test.dart b/test/widgets/hotkey_recorder_test.dart index b20ba38bd..285ba6fc0 100644 --- a/test/widgets/hotkey_recorder_test.dart +++ b/test/widgets/hotkey_recorder_test.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -12,7 +14,7 @@ void main() { tearDown(SelectKeyUpSuppressor.clearSuppression); testWidgets('initially unbound shortcut captures from a tap and saves', (tester) async { - final saved = []; + final saved = []; await _pumpRecorder(tester, saved: saved); expect(_recorder(tester).enabled, isFalse); @@ -39,48 +41,106 @@ void main() { await tester.tap(find.widgetWithText(FilledButton, t.common.save)); expect(saved, hasLength(1)); - expect(saved.single.key, PhysicalKeyboardKey.keyK); - expect(saved.single.modifiers, isNull); + expect(saved.single!.key, PhysicalKeyboardKey.keyK); + expect(saved.single!.modifiers, isNull); }); - testWidgets('cleared shortcut can capture and save a replacement', (tester) async { - final saved = []; + testWidgets('cleared assigned shortcut saves an explicit unassignment', (tester) async { + final saved = []; await _pumpRecorder( tester, saved: saved, currentHotKey: const HotKey(key: PhysicalKeyboardKey.keyJ, modifiers: [HotKeyModifier.shift]), ); - expect(find.text(physicalKeyLabel(PhysicalKeyboardKey.keyJ)), findsOneWidget); - expect(_saveAction(tester).onPressed, isNotNull); - await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); await tester.pump(); expect(_recorder(tester).enabled, isFalse); expect(find.text(physicalKeyLabel(PhysicalKeyboardKey.keyJ)), findsNothing); - expect(find.text(t.hotkeys.pressToRecord), findsNWidgets(2)); expect(FocusManager.instance.primaryFocus?.debugLabel, 'HotKeyRecorder.record'); - expect(_saveAction(tester).onPressed, isNull); - - await tester.tap(find.byType(HotKeyRecorder)); - await tester.pump(); - await tester.sendKeyEvent(LogicalKeyboardKey.keyL, physicalKey: PhysicalKeyboardKey.keyL); - await _pumpFocusChange(tester); - - expect(_recorder(tester).enabled, isFalse); - expect(find.text(physicalKeyLabel(PhysicalKeyboardKey.keyL)), findsOneWidget); - expect(FocusManager.instance.primaryFocus?.debugLabel, 'HotKeyRecorder.save'); + expect(_saveAction(tester).onPressed, isNotNull); await tester.tap(find.widgetWithText(FilledButton, t.common.save)); + await tester.pump(); - expect(saved, hasLength(1)); - expect(saved.single.key, PhysicalKeyboardKey.keyL); - expect(saved.single.modifiers, isNull); + expect(saved, [null]); + }); + + testWidgets('D-pad can save a cleared shortcut', (tester) async { + final saved = []; + await _pumpRecorder( + tester, + saved: saved, + currentHotKey: const HotKey(key: PhysicalKeyboardKey.keyJ), + ); + + await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown); + await _pumpFocusChange(tester); + + expect(FocusManager.instance.primaryFocus?.debugLabel, 'HotKeyRecorder.save'); + await tester.sendKeyEvent(LogicalKeyboardKey.enter); + await tester.pump(); + expect(saved, [null]); + }); + + testWidgets('cancel and Escape discard a local clear', (tester) async { + final saved = []; + var cancelCount = 0; + const original = HotKey(key: PhysicalKeyboardKey.keyJ); + await _pumpRecorder(tester, saved: saved, currentHotKey: original, onCancel: () => cancelCount++); + + await tester.tap(find.byTooltip(t.hotkeys.clearShortcut)); + await tester.pump(); + await tester.tap(find.widgetWithText(TextButton, t.common.cancel)); + expect(saved, isEmpty); + expect(cancelCount, 1); + + await _pumpRecorder(tester, saved: saved, currentHotKey: original, onCancel: () => cancelCount++); + expect(find.text(physicalKeyLabel(PhysicalKeyboardKey.keyJ)), findsOneWidget); + await tester.tap(find.ancestor(of: find.byType(HotKeyRecorder), matching: find.byType(GestureDetector)).first); + await tester.pump(); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pump(); + + expect(saved, isEmpty); + expect(cancelCount, 2); + }); + + testWidgets('save is single-flight and blocks cancellation', (tester) async { + final gate = Completer(); + var saveCount = 0; + var cancelCount = 0; + await _pumpRecorder( + tester, + saved: [], + currentHotKey: const HotKey(key: PhysicalKeyboardKey.keyJ), + onCancel: () => cancelCount++, + onSave: (_) { + saveCount++; + return gate.future; + }, + ); + + await tester.tap(find.widgetWithText(FilledButton, t.common.save)); + await tester.tap(find.widgetWithText(FilledButton, t.common.save), warnIfMissed: false); + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pump(); + + expect(saveCount, 1); + expect(cancelCount, 0); + expect(_saveAction(tester).onPressed, isNull); + expect(_cancelAction(tester).onPressed, isNull); + + gate.complete(); + await tester.pump(); + expect(_cancelAction(tester).onPressed, isNotNull); }); testWidgets('modifier-first Control+P completes with the held modifier', (tester) async { - final saved = []; + final saved = []; await _pumpRecorder(tester, saved: saved); await tester.tap(find.byType(HotKeyRecorder)); await tester.pump(); @@ -105,8 +165,8 @@ void main() { await tester.tap(find.widgetWithText(FilledButton, t.common.save)); expect(saved, hasLength(1)); - expect(saved.single.key, PhysicalKeyboardKey.keyP); - expect(saved.single.modifiers, [HotKeyModifier.control]); + expect(saved.single!.key, PhysicalKeyboardKey.keyP); + expect(saved.single!.modifiers, [HotKeyModifier.control]); }); for (final entry in <(String, LogicalKeyboardKey, PhysicalKeyboardKey)>[ @@ -114,7 +174,7 @@ void main() { ('select', LogicalKeyboardKey.select, PhysicalKeyboardKey.select), ]) { testWidgets('${entry.$1} completion does not rearm capture or activate Save on key-up', (tester) async { - final saved = []; + final saved = []; await _pumpRecorder(tester, saved: saved); await tester.tap(find.byType(HotKeyRecorder)); await tester.pump(); @@ -138,21 +198,28 @@ void main() { await tester.tap(find.widgetWithText(FilledButton, t.common.save)); expect(saved, hasLength(1)); - expect(saved.single.key, entry.$3); - expect(saved.single.modifiers, isNull); + expect(saved.single!.key, entry.$3); + expect(saved.single!.modifiers, isNull); }); } } -Future _pumpRecorder(WidgetTester tester, {required List saved, HotKey? currentHotKey}) async { +Future _pumpRecorder( + WidgetTester tester, { + required List saved, + HotKey? currentHotKey, + VoidCallback? onCancel, + FutureOr Function(HotKey?)? onSave, +}) async { await tester.pumpWidget( MaterialApp( home: Scaffold( body: HotKeyRecorderWidget( + key: UniqueKey(), actionName: 'Play/Pause', currentHotKey: currentHotKey, - onHotKeyRecorded: saved.add, - onCancel: () {}, + onHotKeyRecorded: onSave ?? saved.add, + onCancel: onCancel ?? () {}, ), ), ), @@ -169,3 +236,6 @@ HotKeyRecorder _recorder(WidgetTester tester) => tester.widget(find.byType(HotKe DialogActionButton _saveAction(WidgetTester tester) => tester.widget(find.widgetWithText(DialogActionButton, t.common.save)); + +DialogActionButton _cancelAction(WidgetTester tester) => + tester.widget(find.widgetWithText(DialogActionButton, t.common.cancel)); diff --git a/test/widgets/hub_section_test.dart b/test/widgets/hub_section_test.dart index a9e9e68eb..30769d74e 100644 --- a/test/widgets/hub_section_test.dart +++ b/test/widgets/hub_section_test.dart @@ -3,6 +3,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:plezy/focus/input_mode_tracker.dart'; +import 'package:plezy/focus/locked_hub_controller.dart'; import 'package:plezy/media/media_backend.dart'; import 'package:plezy/media/media_hub.dart'; import 'package:plezy/media/media_item.dart'; @@ -43,6 +44,7 @@ void main() { _TestApp( child: HubSection( hub: _hubWith(item), + focusMemory: HubFocusMemory(), icon: Symbols.live_tv_rounded, onItemTap: (value) => tappedItem = value, onItemLongPress: (value) => longPressedItem = value, @@ -74,6 +76,7 @@ void main() { child: HubSection( key: hubKey, hub: _hubWith(item), + focusMemory: HubFocusMemory(), icon: Symbols.live_tv_rounded, onItemTap: (value) => tappedItem = value, onItemLongPress: (value) => longPressedItem = value, @@ -109,6 +112,7 @@ void main() { _TestApp( child: HubSection( hub: _hubWith(item), + focusMemory: HubFocusMemory(), icon: Symbols.live_tv_rounded, cardSizing: HubCardSizing.grid, episodePosterModeOverride: EpisodePosterMode.seriesPoster, @@ -128,6 +132,69 @@ void main() { ); expect(outerPadding.padding.resolve(TextDirection.ltr).bottom, 0); }); + + testWidgets('restores within one owner but resets for a fresh owner', (tester) async { + final items = [ + for (var index = 0; index < 3; index++) + testMediaItem(id: 'item_$index', backend: MediaBackend.plex, kind: MediaKind.movie, title: 'Item $index'), + ]; + MediaHub hub(String id) => MediaHub(id: id, title: id, type: 'movie', items: items, size: items.length); + + final ownerA = HubFocusMemory(); + final ownerB = HubFocusMemory(); + String? focusedItemId; + + Future mount({ + required HubFocusMemory owner, + required String hubId, + required GlobalKey key, + }) async { + await tester.pumpWidget( + _TestApp( + child: HubSection( + key: key, + hub: hub(hubId), + focusMemory: owner, + icon: Symbols.movie_rounded, + onFocusedItemChanged: (item) => focusedItemId = item.id, + ), + ), + ); + } + + final firstMountKey = GlobalKey(); + await mount(owner: ownerA, hubId: 'detail_episodes', key: firstMountKey); + firstMountKey.currentState!.requestFocusAt(2); + await tester.pumpAndSettle(); + expect(focusedItemId, 'item_2'); + + await tester.pumpWidget(const SizedBox.shrink()); + await tester.pump(); + + final remountKey = GlobalKey(); + await mount(owner: ownerA, hubId: 'detail_episodes', key: remountKey); + remountKey.currentState!.requestFocusFromMemory(); + await tester.pumpAndSettle(); + expect(focusedItemId, 'item_2'); + + await tester.pumpWidget(const SizedBox.shrink()); + await tester.pump(); + + final secondHubKey = GlobalKey(); + await mount(owner: ownerA, hubId: 'detail_extras', key: secondHubKey); + secondHubKey.currentState!.requestFocusFromMemory(); + await tester.pumpAndSettle(); + expect(focusedItemId, 'item_2'); + + await tester.pumpWidget(const SizedBox.shrink()); + await tester.pump(); + + final freshOwnerKey = GlobalKey(); + await mount(owner: ownerB, hubId: 'detail_episodes', key: freshOwnerKey); + freshOwnerKey.currentState!.requestFocusFromMemory(); + await tester.pumpAndSettle(); + expect(focusedItemId, 'item_0'); + }); } MediaHub _hubWith(MediaItem item) { diff --git a/test/widgets/media_card_full_card_test.dart b/test/widgets/media_card_full_card_test.dart index 2208c7ced..a1137f845 100644 --- a/test/widgets/media_card_full_card_test.dart +++ b/test/widgets/media_card_full_card_test.dart @@ -1,8 +1,11 @@ +import 'dart:ui' as ui; + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/focus/focus_glow_overlay.dart'; import 'package:plezy/focus/focus_theme.dart'; import 'package:plezy/focus/input_mode_tracker.dart'; +import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/media/media_backend.dart'; import 'package:plezy/media/media_kind.dart'; @@ -208,6 +211,151 @@ void main() { expect(find.byType(CompositedTransformFollower), findsNothing); }); + testWidgets('grid and list cards expose card and detail actions without decorative semantics', (tester) async { + final semantics = tester.ensureSemantics(); + final item = testMediaItem( + id: 'semantic_episode', + backend: MediaBackend.plex, + kind: MediaKind.episode, + title: 'Decorative Episode Title', + summary: 'Decorative episode summary', + parentId: 'season_2', + parentIndex: 2, + index: 3, + grandparentId: 'show_1', + grandparentTitle: 'Semantic Series', + ); + + for (final forceGridMode in [true, false]) { + await tester.pumpWidget( + _TestApp( + child: SizedBox( + width: forceGridMode ? 200 : 420, + height: forceGridMode ? 330 : 180, + child: MediaCard(item: item, forceGridMode: forceGridMode, forceListMode: !forceGridMode, isOffline: true), + ), + ), + ); + + final cardData = tester.getSemantics(find.bySemanticsLabel(mediaCardSemanticLabel(item))).getSemanticsData(); + expect(cardData.flagsCollection.isButton, isTrue); + expect(cardData.hasAction(ui.SemanticsAction.tap), isTrue); + + for (final detailLabel in ['Semantic Series', 'S2']) { + final detailData = tester.getSemantics(find.bySemanticsLabel(detailLabel)).getSemanticsData(); + expect(detailData.flagsCollection.isButton, isTrue); + expect(detailData.hasAction(ui.SemanticsAction.tap), isTrue); + expect(detailData.hint, t.mediaMenu.viewDetails); + } + + expect(find.bySemanticsLabel(RegExp('Decorative Episode Title|Decorative episode summary')), findsNothing); + } + + semantics.dispose(); + }); + + testWidgets('movie and season title links remain distinct semantic actions', (tester) async { + final semantics = tester.ensureSemantics(); + final scenarios = [ + ( + item: testMediaItem( + id: 'linked_movie', + kind: MediaKind.movie, + title: 'Linked Movie', + summary: 'Movie decorative summary', + ), + forceGridMode: true, + detailLabel: 'Linked Movie', + decorativeLabel: 'Movie decorative summary', + ), + ( + item: testMediaItem( + id: 'linked_season', + kind: MediaKind.season, + title: 'Season Two', + parentId: 'linked_show', + parentTitle: 'Linked Series', + summary: 'Season decorative summary', + ), + forceGridMode: false, + detailLabel: 'Linked Series', + decorativeLabel: 'Season Two', + ), + ]; + + for (final scenario in scenarios) { + await tester.pumpWidget( + _TestApp( + child: SizedBox( + width: scenario.forceGridMode ? 200 : 420, + height: scenario.forceGridMode ? 330 : 180, + child: MediaCard( + item: scenario.item, + forceGridMode: scenario.forceGridMode, + forceListMode: !scenario.forceGridMode, + isOffline: true, + ), + ), + ), + ); + + expect( + tester + .getSemantics(find.bySemanticsLabel(mediaCardSemanticLabel(scenario.item))) + .getSemanticsData() + .hasAction(ui.SemanticsAction.tap), + isTrue, + ); + final detail = tester.getSemantics(find.bySemanticsLabel(scenario.detailLabel)).getSemanticsData(); + expect(detail.flagsCollection.isButton, isTrue); + expect(detail.hasAction(ui.SemanticsAction.tap), isTrue); + expect(detail.hint, t.mediaMenu.viewDetails); + expect(find.bySemanticsLabel(scenario.decorativeLabel), findsNothing); + } + + semantics.dispose(); + }); + + testWidgets('custom card actions keep detail-link semantics disabled in grid and list modes', (tester) async { + final semantics = tester.ensureSemantics(); + final item = testMediaItem( + id: 'semantic_movie', + backend: MediaBackend.plex, + kind: MediaKind.movie, + title: 'Custom Semantic Movie', + summary: 'Decorative movie summary', + ); + var tapCount = 0; + + for (final forceGridMode in [true, false]) { + await tester.pumpWidget( + _TestApp( + child: SizedBox( + width: forceGridMode ? 200 : 420, + height: forceGridMode ? 330 : 180, + child: MediaCard( + item: item, + forceGridMode: forceGridMode, + forceListMode: !forceGridMode, + isOffline: true, + onTap: () => tapCount++, + ), + ), + ), + ); + + final card = tester.getSemantics(find.bySemanticsLabel(mediaCardSemanticLabel(item))); + expect(card.getSemanticsData().hasAction(ui.SemanticsAction.tap), isTrue); + expect(find.bySemanticsLabel('Custom Semantic Movie'), findsNothing); + expect(find.bySemanticsLabel(RegExp('Decorative movie summary')), findsNothing); + + card.owner!.performAction(card.id, ui.SemanticsAction.tap); + expect(tapCount, forceGridMode ? 1 : 2); + } + + semantics.dispose(); + }); + testWidgets('custom tap owns pointer and programmatic activation', (tester) async { final item = testMediaItem( id: 'custom_tap', diff --git a/test/widgets/optimized_media_image_test.dart b/test/widgets/optimized_media_image_test.dart index 6d9eec252..e0bf2d2f1 100644 --- a/test/widgets/optimized_media_image_test.dart +++ b/test/widgets/optimized_media_image_test.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -89,6 +90,102 @@ void main() { expect(tester.getSize(placeholder), const Size(96, 96)); }); + testWidgets('local resolver rejects stale path completions and disposal completions', (tester) async { + final checks = >{}; + final probes = {}; + var path = '/artwork/a.png'; + late StateSetter rebuild; + Future fileExists(File file) { + probes.update(file.path, (count) => count + 1, ifAbsent: () => 1); + return (checks[file.path] ??= Completer()).future; + } + + Widget resolutionBuilder(BuildContext context, LocalFileResolution resolution, File? file) { + return Text('${resolution.name}:${file?.path ?? path}'); + } + + await tester.pumpWidget( + MaterialApp( + home: StatefulBuilder( + builder: (context, setState) { + rebuild = setState; + return ResolvedLocalFile(path: path, fileExists: fileExists, builder: resolutionBuilder); + }, + ), + ), + ); + expect(find.text('pending:/artwork/a.png'), findsOneWidget); + + rebuild(() => path = '/artwork/b.png'); + await tester.pump(); + rebuild(() {}); + await tester.pump(); + expect(find.text('pending:/artwork/b.png'), findsOneWidget); + expect(probes['/artwork/b.png'], 1); + + checks['/artwork/a.png']!.complete(true); + await tester.pump(); + expect(find.text('pending:/artwork/b.png'), findsOneWidget); + + checks['/artwork/b.png']!.complete(true); + await tester.pump(); + await tester.pump(); + expect(find.text('present:/artwork/b.png'), findsOneWidget); + + rebuild(() => path = '/artwork/c.png'); + await tester.pump(); + await tester.pumpWidget(const SizedBox.shrink()); + checks['/artwork/c.png']!.complete(true); + await tester.pump(); + await tester.pump(); + expect(tester.takeException(), isNull); + }); + + testWidgets('local resolver caches confirmed missing paths only when requested', (tester) async { + final probes = {}; + var path = '/artwork/missing-a.png'; + late StateSetter rebuild; + Future fileExists(File file) { + probes.update(file.path, (count) => count + 1, ifAbsent: () => 1); + return Future.value(false); + } + + await tester.pumpWidget( + MaterialApp( + home: StatefulBuilder( + builder: (context, setState) { + rebuild = setState; + return ResolvedLocalFile( + path: path, + cacheMissing: true, + fileExists: fileExists, + builder: (context, resolution, file) => Text('${resolution.name}:$path'), + ); + }, + ), + ), + ); + await tester.pump(); + expect(find.text('missing:/artwork/missing-a.png'), findsOneWidget); + expect(probes['/artwork/missing-a.png'], 1); + + rebuild(() {}); + await tester.pump(); + rebuild(() {}); + await tester.pump(); + expect(probes['/artwork/missing-a.png'], 1); + + rebuild(() => path = '/artwork/missing-b.png'); + await tester.pump(); + await tester.pump(); + expect(probes['/artwork/missing-b.png'], 1); + + rebuild(() => path = '/artwork/missing-a.png'); + await tester.pump(); + expect(find.text('missing:/artwork/missing-a.png'), findsOneWidget); + expect(probes['/artwork/missing-a.png'], 1); + }); + testWidgets('same local artwork path re-resolves after the file appears', (tester) async { tester.view.devicePixelRatio = 1; tester.view.physicalSize = const Size(1280, 720); diff --git a/test/widgets/pin_entry_dialog_test.dart b/test/widgets/pin_entry_dialog_test.dart index 55945455f..c08e8774a 100644 --- a/test/widgets/pin_entry_dialog_test.dart +++ b/test/widgets/pin_entry_dialog_test.dart @@ -65,6 +65,34 @@ void main() { expect(find.byType(PinEntryDialog), findsNothing); }); + testWidgets('mobile PIN normalizes oversized input before submitting', (tester) async { + TvDetectionService.debugSetAppleTVOverride(false); + String? result; + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(platform: TargetPlatform.iOS), + home: Builder( + builder: (context) => Scaffold( + body: TextButton( + onPressed: () async { + result = await showPinEntryDialog(context, 'Protected Profile'); + }, + child: const Text('Open'), + ), + ), + ), + ), + ); + await tester.tap(find.text('Open')); + await tester.pumpAndSettle(); + + tester.widget(find.byType(TextField)).onChanged!('12345'); + await tester.pumpAndSettle(); + + expect(result, '1234'); + expect(find.byType(PinEntryDialog), findsNothing); + }); testWidgets('mobile duplicate submit does not pop route below PIN dialog', (tester) async { TvDetectionService.debugSetAppleTVOverride(false); String? pinResult; @@ -304,6 +332,24 @@ void main() { expect(find.byType(PinEntryDialog), findsNothing); }); + testWidgets('unowned keyboard keys remain available to ancestor handlers', (tester) async { + TvDetectionService.debugSetAppleTVOverride(true); + + await _pumpPinDialogLauncher(tester, onResult: (_) {}); + await tester.tap(find.text('Open')); + await tester.pumpAndSettle(); + + final result = _dispatchKey( + const KeyDownEvent( + physicalKey: PhysicalKeyboardKey.f12, + logicalKey: LogicalKeyboardKey.f12, + timeStamp: Duration.zero, + ), + ); + + expect(result, KeyEventResult.ignored); + expect(find.byType(PinEntryDialog), findsOneWidget); + }); testWidgets('non-mobile PIN entry accepts physical keyboard digits', (tester) async { TvDetectionService.debugSetAppleTVOverride(true); String? result; diff --git a/test/widgets/player_queue_spoilers_test.dart b/test/widgets/player_queue_spoilers_test.dart index fbf3e99e6..21a0ac27c 100644 --- a/test/widgets/player_queue_spoilers_test.dart +++ b/test/widgets/player_queue_spoilers_test.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:plezy/focus/focusable_wrapper.dart'; +import 'package:plezy/focus/input_mode_tracker.dart'; import 'package:plezy/i18n/strings.g.dart'; import 'package:plezy/media/media_backend.dart'; import 'package:plezy/media/media_item.dart'; @@ -105,6 +107,139 @@ void main() { expect(thumbnails.map((thumbnail) => thumbnail.blurThumbnail), [true, false, false]); }); + testWidgets('content strip falls back from chapters to a focusable queue', (tester) async { + final playback = _playbackWithQueue(); + addTearDown(playback.dispose); + final player = _FakePlayer(); + final stripKey = GlobalKey(); + final chapter = MediaChapter(id: 1, startTimeOffset: 10000, title: 'Old Chapter'); + MediaItem? selectedItem; + + await tester.pumpWidget( + _queueHarness( + playback: playback, + child: ContentStrip( + key: stripKey, + player: player, + chapters: [chapter], + chaptersLoaded: true, + canControl: true, + showQueueTab: true, + onQueueItemSelected: (item) => selectedItem = item, + useFocusNavigation: true, + ), + ), + ); + await tester.sendKeyEvent(LogicalKeyboardKey.arrowDown); + await tester.pump(); + + expect(find.text(t.videoControls.chapters), findsOneWidget); + expect(find.text('Old Chapter'), findsOneWidget); + expect(find.text('Spoiler Episode'), findsNothing); + + await tester.pumpWidget( + _queueHarness( + playback: playback, + child: ContentStrip( + key: stripKey, + player: player, + chapters: const [], + chaptersLoaded: true, + canControl: true, + showQueueTab: true, + onQueueItemSelected: (item) => selectedItem = item, + useFocusNavigation: true, + ), + ), + ); + await tester.pump(); + + expect(find.text(t.videoControls.queue), findsOneWidget); + expect(find.text('Spoiler Episode'), findsOneWidget); + expect(find.text('Old Chapter'), findsNothing); + + stripKey.currentState!.requestInitialFocus(); + await tester.pump(); + final firstQueueItem = tester.widget( + find.ancestor(of: find.text('Spoiler Episode'), matching: find.byType(FocusableWrapper)), + ); + expect(firstQueueItem.focusNode!.hasPrimaryFocus, isTrue); + + await tester.sendKeyEvent(LogicalKeyboardKey.enter); + await tester.pump(); + expect(selectedItem?.id, 'spoiler-episode'); + }); + + testWidgets('content strip preserves queue selection until only chapters remain', (tester) async { + final playback = _playbackWithQueue(); + addTearDown(playback.dispose); + final player = _FakePlayer(); + final stripKey = GlobalKey(); + final initialChapter = MediaChapter(id: 1, startTimeOffset: 10000, title: 'Initial Chapter'); + final replacementChapter = MediaChapter(id: 2, startTimeOffset: 20000, title: 'Replacement Chapter'); + + await tester.pumpWidget( + _queueHarness( + playback: playback, + child: ContentStrip( + key: stripKey, + player: player, + chapters: [initialChapter], + chaptersLoaded: true, + canControl: true, + showQueueTab: true, + onQueueItemSelected: (_) {}, + ), + ), + ); + await tester.pump(); + await tester.tap(find.text(t.videoControls.queue)); + await tester.pump(); + expect(find.text('Spoiler Episode'), findsOneWidget); + expect(find.text('Initial Chapter'), findsNothing); + + await tester.pumpWidget( + _queueHarness( + playback: playback, + child: ContentStrip( + key: stripKey, + player: player, + chapters: [replacementChapter], + chaptersLoaded: true, + canControl: true, + showQueueTab: true, + onQueueItemSelected: (_) {}, + ), + ), + ); + await tester.pump(); + + expect(find.text('Spoiler Episode'), findsOneWidget); + expect(find.text('Replacement Chapter'), findsNothing); + + await tester.pumpWidget( + _queueHarness( + playback: playback, + child: ContentStrip( + key: stripKey, + player: player, + chapters: [replacementChapter], + chaptersLoaded: true, + canControl: true, + showQueueTab: false, + onQueueItemSelected: null, + ), + ), + ); + await tester.pump(); + + expect(find.text('Replacement Chapter'), findsOneWidget); + expect(find.text('Spoiler Episode'), findsNothing); + await tester.tap(find.text('Replacement Chapter')); + await tester.pump(); + expect(player.seeks, [const Duration(seconds: 20)]); + }); + testWidgets('denied chapter remains visible but touch and select do not seek', (tester) async { final playback = PlaybackStateProvider(); addTearDown(playback.dispose); @@ -197,9 +332,11 @@ void main() { Widget _queueHarness({required PlaybackStateProvider playback, required Widget child}) { return ChangeNotifierProvider.value( value: playback, - child: MaterialApp( - theme: ThemeData(extensions: const [_testTokens]), - home: Scaffold(body: SizedBox(width: 600, height: 400, child: child)), + child: InputModeTracker( + child: MaterialApp( + theme: ThemeData(extensions: const [_testTokens]), + home: Scaffold(body: SizedBox(width: 600, height: 400, child: child)), + ), ), ); } diff --git a/test/widgets/server_activities_button_test.dart b/test/widgets/server_activities_button_test.dart index ed7998311..dfe410a13 100644 --- a/test/widgets/server_activities_button_test.dart +++ b/test/widgets/server_activities_button_test.dart @@ -1,19 +1,35 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:drift/native.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'package:http/http.dart' as http; +import 'package:plezy/database/app_database.dart'; import 'package:plezy/i18n/strings.g.dart'; +import 'package:plezy/media/ids.dart'; import 'package:plezy/providers/multi_server_provider.dart'; import 'package:plezy/services/data_aggregation_service.dart'; import 'package:plezy/services/multi_server_manager.dart'; +import 'package:plezy/services/plex_api_cache.dart'; +import 'package:plezy/theme/mono_theme.dart'; import 'package:plezy/widgets/server_activities_button.dart'; import 'package:provider/provider.dart'; +import '../test_helpers/backend_client_fixtures.dart'; + void main() { TestWidgetsFlutterBinding.ensureInitialized(); + late AppDatabase database; setUp(() { LocaleSettings.setLocaleSync(AppLocale.en); + database = AppDatabase.forTesting(NativeDatabase.memory()); + PlexApiCache.initialize(database); }); + tearDown(() => database.close()); + testWidgets('togglePanel opens and closes the server activities overlay', (tester) async { final manager = MultiServerManager(); final multiServerProvider = MultiServerProvider(manager, DataAggregationService(manager)); @@ -47,4 +63,224 @@ void main() { expect(find.text(t.serverTasks.title), findsNothing); }); + + testWidgets('polls three seconds after completion without overlapping activity aggregates', (tester) async { + final transport = _ControlledActivitiesClient(); + final harness = await _pumpActivitiesHarness(tester, transport); + + expect(transport.activityRequests, hasLength(1)); + transport.completeActivities(0, const ['Initial activity']); + await tester.pump(); + await tester.pump(); + expect(find.text('Initial activity'), findsOneWidget); + + await tester.pump(const Duration(seconds: 3)); + expect(transport.activityRequests, hasLength(2)); + expect(transport.activeActivityGets, 1); + + await tester.pump(const Duration(seconds: 4)); + expect(transport.activityRequests, hasLength(2)); + expect(transport.maximumActiveActivityGets, 1); + + transport.completeActivities(1, const ['Completed poll']); + await tester.pump(); + await tester.pump(); + expect(find.text('Completed poll'), findsOneWidget); + + await tester.pump(const Duration(milliseconds: 2999)); + expect(transport.activityRequests, hasLength(2)); + await tester.pump(const Duration(milliseconds: 1)); + expect(transport.activityRequests, hasLength(3)); + expect(transport.maximumActiveActivityGets, 1); + + harness.buttonKey.currentState!.togglePanel(); + await tester.pump(); + }); + + testWidgets('close and reopen rejects a stale completion and preserves the new poll cadence', (tester) async { + final transport = _ControlledActivitiesClient(honorAbort: false); + final harness = await _pumpActivitiesHarness(tester, transport); + final oldRequest = transport.activityRequests.single; + + harness.buttonKey.currentState!.togglePanel(); + await tester.pump(); + await expectLater(oldRequest.abortObserved.future, completes); + + harness.buttonKey.currentState!.togglePanel(); + await tester.pump(); + expect(transport.activityRequests, hasLength(2)); + + transport.completeActivities(1, const ['Fresh activity']); + await tester.pump(); + await tester.pump(); + expect(find.text('Fresh activity'), findsOneWidget); + + transport.completeActivities(0, const ['Old activity']); + await tester.pump(); + await tester.pump(); + expect(find.text('Fresh activity'), findsOneWidget); + expect(find.text('Old activity'), findsNothing); + + await tester.pump(const Duration(milliseconds: 2999)); + expect(transport.activityRequests, hasLength(2)); + await tester.pump(const Duration(milliseconds: 1)); + expect(transport.activityRequests, hasLength(3)); + transport.completeActivities(2, const ['Next activity']); + await tester.pump(); + await tester.pump(); + + harness.buttonKey.currentState!.togglePanel(); + await tester.pump(); + }); + + testWidgets('post-cancel refresh cannot be undone by a pre-cancel poll', (tester) async { + final transport = _ControlledActivitiesClient(honorAbort: false); + final harness = await _pumpActivitiesHarness(tester, transport); + + transport.completeActivities(0, const ['Cancelable activity'], cancellable: true); + await tester.pump(); + await tester.pump(); + expect(find.text('Cancelable activity'), findsOneWidget); + + await tester.pump(const Duration(seconds: 3)); + expect(transport.activityRequests, hasLength(2)); + + await tester.tap(find.byTooltip(t.common.cancel)); + await tester.pump(); + await tester.pump(); + expect(transport.deleteCount, 1); + expect(transport.activityRequests, hasLength(3)); + await expectLater(transport.activityRequests[1].abortObserved.future, completes); + + transport.completeActivities(2, const []); + await tester.pump(); + await tester.pump(); + expect(find.text(t.serverTasks.noTasks), findsOneWidget); + + transport.completeActivities(1, const ['Cancelable activity'], cancellable: true); + await tester.pump(); + await tester.pump(); + expect(find.text(t.serverTasks.noTasks), findsOneWidget); + expect(find.text('Cancelable activity'), findsNothing); + expect(transport.activityRequests, hasLength(3)); + + harness.buttonKey.currentState!.togglePanel(); + await tester.pump(); + }); +} + +class _ActivitiesHarness { + const _ActivitiesHarness(this.buttonKey); + + final GlobalKey buttonKey; +} + +Future<_ActivitiesHarness> _pumpActivitiesHarness(WidgetTester tester, _ControlledActivitiesClient transport) async { + final serverId = ServerId('plex-server'); + final client = testPlexClient(serverId: serverId, serverName: 'Test server', httpClient: transport); + final manager = MultiServerManager()..debugRegisterClientForTesting(client); + final multiServerProvider = MultiServerProvider(manager, DataAggregationService(manager)); + final buttonKey = GlobalKey(); + + addTearDown(() { + multiServerProvider.dispose(); + manager.dispose(); + }); + + await tester.pumpWidget( + TranslationProvider( + child: ChangeNotifierProvider.value( + value: multiServerProvider, + child: MaterialApp( + theme: monoTheme(dark: true), + home: Scaffold(body: ServerActivitiesButton(key: buttonKey)), + ), + ), + ), + ); + buttonKey.currentState!.togglePanel(); + await tester.pump(); + return _ActivitiesHarness(buttonKey); +} + +class _ControlledActivityRequest { + _ControlledActivityRequest(this.request); + + final http.BaseRequest request; + final response = Completer(); + final abortObserved = Completer(); +} + +class _ControlledActivitiesClient extends http.BaseClient { + _ControlledActivitiesClient({this.honorAbort = true}); + + final bool honorAbort; + final activityRequests = <_ControlledActivityRequest>[]; + var activeActivityGets = 0; + var maximumActiveActivityGets = 0; + var deleteCount = 0; + + @override + Future send(http.BaseRequest request) { + if (request.method == 'DELETE' && request.url.path.startsWith('/activities/')) { + deleteCount++; + return Future.value(_response(request, const {})); + } + if (request.method != 'GET' || request.url.path != '/activities') { + return Future.value(_response(request, const {})); + } + + final pending = _ControlledActivityRequest(request); + activityRequests.add(pending); + activeActivityGets++; + if (activeActivityGets > maximumActiveActivityGets) { + maximumActiveActivityGets = activeActivityGets; + } + + final abortTrigger = (request as http.Abortable).abortTrigger!; + unawaited( + abortTrigger.then((_) { + if (!pending.abortObserved.isCompleted) { + pending.abortObserved.complete(); + } + if (honorAbort && !pending.response.isCompleted) { + pending.response.completeError(http.RequestAbortedException(request.url)); + } + }), + ); + + return pending.response.future.whenComplete(() { + activeActivityGets--; + }); + } + + void completeActivities(int requestIndex, List titles, {bool cancellable = false}) { + final pending = activityRequests[requestIndex]; + if (pending.response.isCompleted) return; + pending.response.complete( + _response(pending.request, { + 'MediaContainer': { + 'Activity': [ + for (var index = 0; index < titles.length; index++) + { + 'uuid': 'activity-$requestIndex-$index', + 'type': 'library.update', + 'title': titles[index], + 'progress': 50, + 'cancellable': cancellable, + }, + ], + }, + }), + ); + } + + http.StreamedResponse _response(http.BaseRequest request, Map body) { + return http.StreamedResponse( + Stream.value(utf8.encode(jsonEncode(body))), + 200, + headers: const {'content-type': 'application/json'}, + request: request, + ); + } } diff --git a/test/widgets/track_sheet_test.dart b/test/widgets/track_sheet_test.dart index da8f6c677..44a2b0a1d 100644 --- a/test/widgets/track_sheet_test.dart +++ b/test/widgets/track_sheet_test.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'dart:ui' show Tristate; import 'package:flutter/material.dart'; @@ -106,7 +108,9 @@ void main() { isTranscoding: true, sourceSubtitleTracks: [MediaSubtitleTrack(id: 0, title: 'Stream zero', selected: false, forced: false)], selectedSubtitleChoice: const PlaybackSourceSubtitleChoice.off(), - onSwitchSubtitle: (choice) => switchedChoice = choice, + onSwitchSubtitle: (choice) async { + switchedChoice = choice; + }, subtitleSearchSupported: false, ), ); @@ -143,7 +147,9 @@ void main() { ], selectedSubtitleChoice: const PlaybackSourceSubtitleChoice.source(1), sourceSubtitleSidecarIds: const {2}, - onSwitchSubtitle: (choice) => switchedSourceChoice = choice, + onSwitchSubtitle: (choice) async { + switchedSourceChoice = choice; + }, subtitleSearchSupported: false, ), ); @@ -155,6 +161,71 @@ void main() { expect(switchedSourceChoice, const PlaybackSourceSubtitleChoice.source(2)); }); + testWidgets('keeps a source sheet open until the async selection commits', (tester) async { + final player = _FakeTrackSheetPlayer( + tracks: const Tracks( + subtitle: [SubtitleTrack(id: 's1', language: 'eng', codec: 'srt')], + ), + track: const TrackSelection( + subtitle: SubtitleTrack(id: 's1', language: 'eng', codec: 'srt'), + ), + ); + final selectionGate = Completer(); + late BuildContext hostContext; + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(extensions: const [_testTokens]), + home: OverlaySheetHost( + child: Builder( + builder: (context) { + hostContext = context; + return const Scaffold(body: SizedBox.expand()); + }, + ), + ), + ), + ); + final sheetResult = OverlaySheetController.of(hostContext).show( + builder: (_) => SizedBox( + height: 400, + child: TrackSheet( + player: player, + trackControlsState: TrackControlsState( + sourceSubtitleTracks: [ + MediaSubtitleTrack(id: 1, languageCode: 'eng', codec: 'srt', selected: true, forced: false), + MediaSubtitleTrack( + id: 2, + title: 'Remote sidecar', + codec: 'ass', + external: true, + selected: false, + forced: false, + ), + ], + selectedSubtitleChoice: const PlaybackSourceSubtitleChoice.source(1), + sourceSubtitleSidecarIds: const {2}, + onSwitchSubtitle: (_) => selectionGate.future, + subtitleSearchSupported: false, + ), + ), + ), + ); + await tester.pumpAndSettle(); + + await tester.tap(find.text('Remote sidecar')); + await tester.pump(); + + expect(find.byType(LinearProgressIndicator), findsOneWidget); + expect(find.text('Remote sidecar'), findsOneWidget); + + selectionGate.complete(); + await tester.pumpAndSettle(); + await sheetResult; + + expect(find.text('Remote sidecar'), findsNothing); + }); + testWidgets('direct-play embedded selection stays on the native player path', (tester) async { final player = _FakeTrackSheetPlayer( tracks: const Tracks( @@ -178,7 +249,9 @@ void main() { MediaSubtitleTrack(id: 2, languageCode: 'swe', selected: false, forced: false), ], selectedSubtitleChoice: const PlaybackSourceSubtitleChoice.source(1), - onSwitchSubtitle: (choice) => switchedSourceChoice = choice, + onSwitchSubtitle: (choice) async { + switchedSourceChoice = choice; + }, subtitleSearchSupported: false, ), ); @@ -221,7 +294,7 @@ void main() { selectedSubtitleChoice: const PlaybackSourceSubtitleChoice.source(1), selectedSecondarySubtitleStreamId: 2, sourceSubtitleSidecarIds: const {2}, - onSwitchSubtitle: (_) {}, + onSwitchSubtitle: (_) async {}, subtitleSearchSupported: false, ), ); @@ -284,7 +357,7 @@ void main() { TrackControlsState( isTranscoding: true, sourceSubtitleTracks: [sourceSubtitle], - onSwitchSubtitle: (_) {}, + onSwitchSubtitle: (_) async {}, ).hasSubtitleControls(const Tracks()), isTrue, ); @@ -295,7 +368,7 @@ void main() { final state = TrackControlsState( sourceSubtitleTracks: [sourceSidecar], sourceSubtitleSidecarIds: {sourceSidecar.id}, - onSwitchSubtitle: (_) {}, + onSwitchSubtitle: (_) async {}, ); expect(state.canUseSourceSubtitles, isFalse); @@ -305,7 +378,7 @@ void main() { test('does not misclassify a Jellyfin external-delivery embedded row as a sidecar', () { final sourceTrack = MediaSubtitleTrack(id: 1, usesExternalDelivery: true, selected: false, forced: false); - final state = TrackControlsState(sourceSubtitleTracks: [sourceTrack], onSwitchSubtitle: (_) {}); + final state = TrackControlsState(sourceSubtitleTracks: [sourceTrack], onSwitchSubtitle: (_) async {}); expect(state.directPlaySourceSidecars, isEmpty); }); diff --git a/test/widgets/tv_browse_rail_test.dart b/test/widgets/tv_browse_rail_test.dart index d52009dc3..3a2702be5 100644 --- a/test/widgets/tv_browse_rail_test.dart +++ b/test/widgets/tv_browse_rail_test.dart @@ -319,10 +319,12 @@ void main() { }); }); + late HubFocusMemory focusMemory; + setUp(() async { resetSharedPreferencesForTest(); SettingsService.resetForTesting(); - HubFocusMemory.clear(); + focusMemory = HubFocusMemory(); await SettingsService.getInstance(); }); @@ -352,6 +354,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded, @@ -413,7 +416,7 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], iconForHub: (_, _) => Icons.tv_rounded), + child: TvBrowseRail(focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.tv_rounded), ), ), ), @@ -454,6 +457,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hubFor('serverA'), hubFor('serverB')], iconForHub: (_, _) => Icons.movie_rounded, ), @@ -496,7 +500,7 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail(focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.movie_rounded), ), ), ), @@ -539,7 +543,12 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [hub], + autofocus: true, + iconForHub: (_, _) => Icons.movie_rounded, + ), ), ), ), @@ -625,6 +634,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [firstHub, secondHub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded, @@ -696,7 +706,12 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [hub], + autofocus: true, + iconForHub: (_, _) => Icons.movie_rounded, + ), ), ), ), @@ -751,7 +766,12 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [hub], + autofocus: true, + iconForHub: (_, _) => Icons.movie_rounded, + ), ), ), ), @@ -808,6 +828,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded, @@ -865,6 +886,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.movie_rounded, @@ -922,7 +944,11 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [firstHub, secondHub], iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [firstHub, secondHub], + iconForHub: (_, _) => Icons.movie_rounded, + ), ), ), ), @@ -957,6 +983,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: hubs, initialHubId: initialHubId, @@ -998,6 +1025,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: hubs, initialHubId: initialHubId, @@ -1040,6 +1068,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: hubs, initialItemId: initialItemId, @@ -1107,7 +1136,7 @@ void main() { // Seed remembered focus under the rail's server-qualified hub key (mirrors // _TvBrowseRailState._hubKey: ':'), so the multi-server keying // resolves it the same way the rail does. - HubFocusMemory.setForHub('${episodeHub.serverId ?? ''}:${episodeHub.id}', 5); + focusMemory.setForHub('${episodeHub.serverId ?? ''}:${episodeHub.id}', 5); await tester.pumpWidget( ChangeNotifierProvider( @@ -1121,6 +1150,7 @@ void main() { width: 700, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [movieHub, episodeHub], autofocus: true, iconForHub: (_, _) => Icons.tv_rounded, @@ -1232,6 +1262,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: hubs, autofocus: true, @@ -1314,6 +1345,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: [firstHub, activeHub, backgroundLoaded ? backgroundUpdatedHub : backgroundInitialHub], autofocus: true, @@ -1391,6 +1423,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [firstHub, middleLoaded ? middleUpdatedHub : middleInitialHub, lastHub], autofocus: true, iconForHub: (_, _) => Icons.tv_rounded, @@ -1452,7 +1485,7 @@ void main() { expect(_verticalRailPosition(tester).pixels, closeTo(middleTargetOffset, 0.1)); }); - testWidgets('uses per-hub item focus instead of global column hint', (tester) async { + testWidgets('uses per-hub item focus instead of the owner last-column hint', (tester) async { List movieItems() => List.generate( 8, (index) => @@ -1492,6 +1525,7 @@ void main() { width: 700, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [movieHub, episodeHub], autofocus: true, iconForHub: (_, _) => Icons.tv_rounded, @@ -1522,6 +1556,97 @@ void main() { expect(focused.last, 'movies:movie_5'); }); + testWidgets('repeated detail hub ids restore only within their browse owner', (tester) async { + final episodeItems = [ + for (var index = 0; index < 12; index++) + testMediaItem( + id: 'episode_$index', + backend: MediaBackend.plex, + kind: MediaKind.episode, + title: 'Episode $index', + thumbPath: '/episode_$index', + ), + ]; + final extraItems = [ + for (var index = 0; index < 3; index++) + testMediaItem(id: 'extra_$index', backend: MediaBackend.plex, kind: MediaKind.movie, title: 'Extra $index'), + ]; + final episodeHub = MediaHub( + id: 'detail_episodes', + title: 'Episodes', + type: 'episode', + items: episodeItems, + size: episodeItems.length, + ); + final extrasHub = MediaHub( + id: 'detail_extras', + title: 'Extras', + type: 'movie', + items: extraItems, + size: extraItems.length, + ); + final focused = []; + + Future mount(HubFocusMemory owner, List hubs) async { + final serverManager = MultiServerManager(); + await tester.pumpWidget( + ChangeNotifierProvider( + create: (_) => MultiServerProvider(serverManager, DataAggregationService(serverManager)), + child: MaterialApp( + theme: monoTheme(dark: true), + home: Scaffold( + body: SizedBox( + width: 700, + height: 720, + child: TvBrowseRail( + focusMemory: owner, + hubs: hubs, + autofocus: true, + iconForHub: (_, _) => Icons.tv_rounded, + onFocusedHubItemChanged: (hub, item) => focused.add('${hub.id}:${item.id}'), + episodePosterModeForHub: (_) => EpisodePosterMode.episodeThumbnail, + ), + ), + ), + ), + ), + ); + await tester.pump(); + tester.state(find.byType(TvBrowseRail)).requestFocus(); + await tester.pump(); + } + + Future press(LogicalKeyboardKey key) async { + await tester.sendKeyDownEvent(key); + await tester.pump(); + await tester.sendKeyUpEvent(key); + await tester.pumpAndSettle(); + } + + await mount(focusMemory, [episodeHub, extrasHub]); + for (var index = 0; index < 5; index++) { + await press(LogicalKeyboardKey.arrowRight); + } + expect(focused.last, 'detail_episodes:episode_5'); + expect(_activeRailPosition(tester).pixels, greaterThan(0)); + + await press(LogicalKeyboardKey.arrowDown); + expect(focused.last, 'detail_extras:extra_0'); + await press(LogicalKeyboardKey.arrowUp); + expect(focused.last, 'detail_episodes:episode_5'); + expect(_activeRailPosition(tester).pixels, greaterThan(0)); + + await tester.pumpWidget(const SizedBox.shrink()); + await tester.pump(); + + final freshOwner = HubFocusMemory(); + await mount(freshOwner, [extrasHub, episodeHub]); + await press(LogicalKeyboardKey.arrowDown); + + expect(focused.last, 'detail_episodes:episode_0'); + expect(_activeRailPosition(tester).pixels, 0); + }); + testWidgets('keeps late episode thumbnails visible in long TV rows', (tester) async { await SettingsService.instanceOrNull!.write(SettingsService.tvFullCardLayout, false); tester.view.devicePixelRatio = 1.0; @@ -1563,6 +1688,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.tv_rounded, @@ -1653,6 +1779,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], autofocus: true, iconForHub: (_, _) => Icons.tv_rounded, @@ -1726,6 +1853,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.person_rounded, onActivateItem: (_, _) { @@ -1788,6 +1916,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.person_rounded, onActivateItem: (_, _) { @@ -1838,6 +1967,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.person_rounded, onActivateItem: (_, _) { @@ -1885,6 +2015,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.person_rounded, selectSuppressionGestureSignal: gesture, @@ -1940,6 +2071,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.person_rounded, selectSuppressionGestureSignal: gesture, @@ -1989,7 +2121,12 @@ void main() { body: SizedBox( width: 1280, height: 720, - child: TvBrowseRail(hubs: [hub], autofocus: autofocus, iconForHub: (_, _) => Icons.tv_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [hub], + autofocus: autofocus, + iconForHub: (_, _) => Icons.tv_rounded, + ), ), ), ), @@ -2025,7 +2162,11 @@ void main() { left: 0, right: 0, bottom: 0, - child: TvBrowseRail(hubs: [hub], iconForHub: (_, _) => Icons.movie_rounded), + child: TvBrowseRail( + focusMemory: focusMemory, + hubs: [hub], + iconForHub: (_, _) => Icons.movie_rounded, + ), ), ], ), @@ -2061,6 +2202,7 @@ void main() { width: 1060, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, hubs: [hub], iconForHub: (_, _) => Icons.movie_rounded, backgroundBleedLeft: SideNavigationRailState.expandedWidth, @@ -2101,6 +2243,7 @@ void main() { width: 1280, height: 720, child: TvBrowseRail( + focusMemory: focusMemory, key: const ValueKey('rail'), hubs: [hub], iconForHub: (_, _) => Icons.movie_rounded, diff --git a/test/widgets/tv_virtual_keyboard_test.dart b/test/widgets/tv_virtual_keyboard_test.dart index 51807bffc..aa8970230 100644 --- a/test/widgets/tv_virtual_keyboard_test.dart +++ b/test/widgets/tv_virtual_keyboard_test.dart @@ -58,6 +58,24 @@ void main() { expect(find.byType(Dialog), findsOneWidget); }); + testWidgets('unowned keyboard keys remain available to ancestor handlers', (tester) async { + final controller = TextEditingController(); + addTearDown(controller.dispose); + + await _pumpKeyboard(tester, controller: controller); + + final result = _dispatchKey( + const KeyDownEvent( + physicalKey: PhysicalKeyboardKey.f12, + logicalKey: LogicalKeyboardKey.f12, + timeStamp: Duration.zero, + ), + ); + + expect(result, KeyEventResult.ignored); + expect(controller.text, isEmpty); + expect(find.byType(Dialog), findsOneWidget); + }); testWidgets('directional pad enter activates highlighted key', (tester) async { final controller = TextEditingController(); addTearDown(controller.dispose); @@ -230,6 +248,79 @@ void main() { expect(find.byType(Dialog), findsNothing); expect(underlyingBackEvents, 0); }); + + testWidgets('rendered backspace deletes whole graphemes and keeps the keyboard open', (tester) async { + final controller = TextEditingController(); + addTearDown(controller.dispose); + + for (final grapheme in ['๐Ÿ˜€', 'e\u0301', '๐Ÿ‡ฏ๐Ÿ‡ต', '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ']) { + controller.value = TextEditingValue( + text: 'A${grapheme}B', + selection: TextSelection.collapsed(offset: 1 + grapheme.length), + ); + await _pumpKeyboard(tester, controller: controller); + + await tester.tap(find.byIcon(Symbols.backspace_rounded)); + await tester.pump(); + + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + expect(find.byType(Dialog), findsOneWidget); + + await tester.sendKeyEvent(LogicalKeyboardKey.escape); + await tester.pumpAndSettle(); + } + }); + + testWidgets('physical delete removes a whole grapheme and dismisses the keyboard', (tester) async { + final controller = TextEditingController(); + addTearDown(controller.dispose); + + for (final grapheme in ['๐Ÿ˜€', 'e\u0301', '๐Ÿ‡ฏ๐Ÿ‡ต', '๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ']) { + controller.value = TextEditingValue(text: 'A${grapheme}B', selection: const TextSelection.collapsed(offset: 1)); + await _pumpKeyboard(tester, controller: controller); + + await tester.sendKeyEvent(LogicalKeyboardKey.delete); + await tester.pumpAndSettle(); + + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + expect(find.byType(Dialog), findsNothing); + } + }); + + testWidgets('grapheme selection deletion preserves formatter and callback ordering', (tester) async { + const grapheme = '๐Ÿ‡ฏ๐Ÿ‡ต'; + final controller = TextEditingController() + ..value = TextEditingValue( + text: 'A${grapheme}B', + selection: TextSelection(baseOffset: grapheme.length, extentOffset: 1), + ); + final formatterCandidates = []; + final changes = []; + addTearDown(controller.dispose); + + await _pumpKeyboard( + tester, + controller: controller, + maxLength: 8, + inputFormatters: [ + TextInputFormatter.withFunction((_, nextValue) { + formatterCandidates.add(nextValue); + return nextValue; + }), + ], + onChanged: changes.add, + ); + + await tester.tap(find.byIcon(Symbols.backspace_rounded)); + await tester.pump(); + + expect(formatterCandidates.single.text, 'AB'); + expect(controller.text, 'AB'); + expect(controller.selection, const TextSelection.collapsed(offset: 1)); + expect(changes, ['AB']); + }); } Future _pumpKeyboard( @@ -237,6 +328,9 @@ Future _pumpKeyboard( required TextEditingController controller, TextInputType? keyboardType, int? maxLines, + List? inputFormatters, + int? maxLength, + ValueChanged? onChanged, ValueChanged? onSubmitted, }) async { TvDetectionService.debugSetAppleTVOverride(true); @@ -260,6 +354,9 @@ Future _pumpKeyboard( controller: controller, keyboardType: keyboardType, maxLines: maxLines, + inputFormatters: inputFormatters, + maxLength: maxLength, + onChanged: onChanged, onSubmitted: onSubmitted, ); await tester.pumpAndSettle(); diff --git a/test/widgets/video_controls_test.dart b/test/widgets/video_controls_test.dart index eab0d32ec..2c4285484 100644 --- a/test/widgets/video_controls_test.dart +++ b/test/widgets/video_controls_test.dart @@ -4,6 +4,7 @@ import 'dart:ui' as ui; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:intl/date_symbol_data_local.dart'; +import 'package:material_symbols_icons/symbols.dart'; import 'package:provider/provider.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/focus/key_event_utils.dart'; @@ -13,9 +14,11 @@ import 'package:plezy/media/media_version.dart'; import 'package:plezy/models/shader_preset.dart'; import 'package:plezy/mpv/mpv.dart'; import 'package:plezy/services/playback_subtitle_resolver.dart'; +import 'package:plezy/providers/playback_state_provider.dart'; import 'package:plezy/services/settings_service.dart'; import 'package:plezy/services/video_volume_controller.dart'; import 'package:plezy/theme/mono_tokens.dart'; +import 'package:plezy/widgets/video_controls/widgets/player_toast_indicator.dart'; import 'package:plezy/widgets/video_controls/desktop_video_controls.dart'; import 'package:plezy/widgets/video_controls/mobile_video_controls.dart'; import 'package:plezy/watch_together/providers/watch_together_provider.dart'; @@ -27,6 +30,7 @@ import 'package:plezy/widgets/video_controls/widgets/mobile_skip_zones.dart'; import 'package:plezy/widgets/video_controls/widgets/skip_marker_button.dart'; import 'package:plezy/widgets/video_controls/widgets/sync_offset_control.dart'; import 'package:plezy/widgets/video_controls/widgets/timeline_slider.dart'; +import 'package:plezy/widgets/video_controls/video_control_button.dart'; import 'package:plezy/widgets/video_controls/widgets/video_timeline_bar.dart'; import '../test_helpers/watch_together_fakes.dart'; @@ -1479,6 +1483,85 @@ void main() { }); }); + group('subtitle visibility', () { + testWidgets('rolls back a failed latest toggle to the preceding successful mutation', (tester) async { + LocaleSettings.setLocaleSync(AppLocale.en); + await initializeDateFormatting('en'); + tester.view.physicalSize = const Size(1200, 800); + tester.view.devicePixelRatio = 1; + addTearDown(tester.view.reset); + resetSharedPreferencesForTest(); + SettingsService.resetForTesting(); + final settings = await SettingsService.getInstance(); + final firstWrite = Completer(); + final secondWrite = Completer(); + final player = _FakeSubtitleVisibilityPlayer(writes: [firstWrite, secondWrite]); + final volume = VideoVolumeController(player: player, settings: settings, initialVolume: 100); + final playbackState = PlaybackStateProvider(); + final watchTogether = WatchTogetherProvider(); + final chrome = PlayerChromeController(); + final toast = PlayerToastController(); + addTearDown(volume.dispose); + addTearDown(playbackState.dispose); + addTearDown(watchTogether.dispose); + addTearDown(chrome.dispose); + addTearDown(toast.dispose); + + await tester.pumpWidget( + MultiProvider( + providers: [ + ChangeNotifierProvider.value(value: playbackState), + ChangeNotifierProvider.value(value: watchTogether), + ], + child: MaterialApp( + theme: ThemeData(platform: TargetPlatform.macOS, extensions: const [_testTokens]), + home: Scaffold( + body: SizedBox( + width: 1200, + height: 800, + child: PlexVideoControls( + player: player, + volumeController: volume, + metadata: testMediaItem(id: 'subtitle-visibility'), + toastController: toast, + canNavigateMediaItems: false, + chromeController: chrome, + isLive: true, + ), + ), + ), + ), + ), + ); + await tester.pump(); + expect(find.byIcon(Symbols.subtitles_rounded), findsOneWidget); + + await tester.sendKeyEvent(LogicalKeyboardKey.keyS); + await tester.pump(); + expect(player.propertyValues, ['no']); + expect(find.byIcon(Symbols.subtitles_off_rounded), findsOneWidget); + + await tester.sendKeyEvent(LogicalKeyboardKey.keyS); + await tester.pump(); + expect(player.propertyValues, ['no'], reason: 'the latest toggle must wait for the in-flight native write'); + expect(find.byIcon(Symbols.subtitles_rounded), findsOneWidget); + + firstWrite.complete(); + await tester.pump(); + await tester.pump(); + expect(player.propertyValues, ['no', 'yes']); + + secondWrite.completeError(PlatformException(code: 'SET_PROPERTY_FAILED')); + await tester.pump(); + await tester.pump(); + + expect(tester.takeException(), isNull); + expect(find.byIcon(Symbols.subtitles_off_rounded), findsOneWidget); + chrome.cancelAutoHide(); + await tester.pumpWidget(const SizedBox.shrink()); + }); + }); + group('SyncOffsetControl', () { testWidgets('uses 100ms slider steps without rendering tick marks', (tester) async { LocaleSettings.setLocaleSync(AppLocale.en); @@ -1594,16 +1677,165 @@ void main() { tester.widget(find.byType(Slider)).onChangeEnd!(200); await tester.pump(); await tester.pump(); - expect(persistedOffsets, [200]); + expect(persistedOffsets, isEmpty); staleWrite.completeError(PlatformException(code: 'SET_PROPERTY_FAILED')); await tester.pump(); await tester.pump(); + await tester.pump(); expect(tester.takeException(), isNull); expect(tester.widget(find.byType(Slider)).value, 200); expect(persistedOffsets, [200]); }); + + testWidgets('rolls back a failed latest write to the preceding successful offset', (tester) async { + final firstWrite = Completer(); + final secondWrite = Completer(); + final propertyValues = []; + final persistedOffsets = []; + final player = _FakeSyncPlayer( + onSetProperty: (_, value) { + propertyValues.add(value); + return propertyValues.length == 1 ? firstWrite.future : secondWrite.future; + }, + ); + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(extensions: const [_testTokens]), + home: Scaffold( + body: SizedBox( + width: 700, + child: SyncOffsetControl( + player: player, + propertyName: 'sub-delay', + initialOffset: 0, + labelText: 'Subtitles', + onOffsetChanged: (offset) async { + persistedOffsets.add(offset); + }, + compact: true, + ), + ), + ), + ), + ); + + tester.widget(find.byType(Slider)).onChanged!(100); + tester.widget(find.byType(Slider)).onChangeEnd!(100); + await tester.pump(); + expect(propertyValues, ['0.1']); + + tester.widget(find.byType(Slider)).onChanged!(200); + tester.widget(find.byType(Slider)).onChangeEnd!(200); + await tester.pump(); + expect(propertyValues, ['0.1']); + expect(tester.widget(find.byType(Slider)).value, 200); + + firstWrite.complete(); + await tester.pump(); + await tester.pump(); + expect(propertyValues, ['0.1', '0.2']); + expect(persistedOffsets, [100]); + + secondWrite.completeError(PlatformException(code: 'SET_PROPERTY_FAILED')); + await tester.pump(); + await tester.pump(); + + expect(tester.takeException(), isNull); + expect(tester.widget(find.byType(Slider)).value, 100); + expect(persistedOffsets, [100]); + }); + + testWidgets('persists an accepted offset after the control is disposed', (tester) async { + final propertyWrite = Completer(); + final persistedOffsets = []; + final player = _FakeSyncPlayer(onSetProperty: (_, _) => propertyWrite.future); + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData(extensions: const [_testTokens]), + home: Scaffold( + body: SizedBox( + width: 700, + child: SyncOffsetControl( + player: player, + propertyName: 'sub-delay', + initialOffset: 0, + labelText: 'Subtitles', + onOffsetChanged: (offset) async => persistedOffsets.add(offset), + compact: true, + ), + ), + ), + ), + ); + + tester.widget(find.byType(Slider)).onChanged!(100); + tester.widget(find.byType(Slider)).onChangeEnd!(100); + await tester.pumpWidget(const SizedBox.shrink()); + propertyWrite.complete(); + await tester.pump(); + + expect(persistedOffsets, [100]); + }); + }); + + group('VideoControlButton semantics', () { + testWidgets('exposes one operable node with value and checked state', (tester) async { + final semantics = tester.ensureSemantics(); + final focusNode = FocusNode(debugLabel: 'semantic_video_control'); + addTearDown(focusNode.dispose); + var activations = 0; + + await tester.pumpWidget( + MaterialApp( + home: Scaffold( + body: VideoControlButton( + icon: Icons.settings, + tooltip: 'Player settings', + semanticValue: '720p', + checked: true, + focusNode: focusNode, + onPressed: () => activations++, + ), + ), + ), + ); + + final finder = find.bySemanticsLabel('Player settings'); + expect(finder, findsOneWidget); + final data = tester.getSemantics(finder).getSemanticsData(); + expect(data.value, '720p'); + expect(data.flagsCollection.isButton, isTrue); + expect(data.flagsCollection.isChecked, ui.CheckedState.isTrue); + expect(data.hasAction(ui.SemanticsAction.tap), isTrue); + + final node = tester.getSemantics(finder); + node.owner!.performAction(node.id, ui.SemanticsAction.tap); + await tester.pump(); + expect(activations, 1); + semantics.dispose(); + }); + + testWidgets('keeps disabled controls discoverable without a tap action', (tester) async { + final semantics = tester.ensureSemantics(); + + await tester.pumpWidget( + const MaterialApp( + home: Scaffold( + body: VideoControlButton(icon: Icons.skip_next, semanticLabel: 'Next item', onPressed: null), + ), + ), + ); + + final data = tester.getSemantics(find.bySemanticsLabel('Next item')).getSemanticsData(); + expect(data.flagsCollection.isButton, isTrue); + expect(data.flagsCollection.isEnabled, ui.Tristate.isFalse); + expect(data.hasAction(ui.SemanticsAction.tap), isFalse); + semantics.dispose(); + }); }); } @@ -1670,3 +1902,57 @@ class _FakeSyncPlayer implements Player { @override dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } + +class _FakeSubtitleVisibilityPlayer implements Player { + _FakeSubtitleVisibilityPlayer({required this.writes}); + + final List> writes; + final List propertyValues = []; + + @override + String get playerType => 'mpv'; + + @override + PlayerState get state => PlayerState( + duration: const Duration(minutes: 45), + seekable: true, + tracks: const Tracks( + subtitle: [SubtitleTrack(id: 'subtitle-1', language: 'eng')], + ), + track: const TrackSelection( + subtitle: SubtitleTrack(id: 'subtitle-1', language: 'eng'), + ), + ); + + @override + PlayerStreams get streams => PlayerStreams( + playing: const Stream.empty(), + completed: const Stream.empty(), + buffering: const Stream.empty(), + position: const Stream.empty(), + duration: const Stream.empty(), + seekable: const Stream.empty(), + buffer: const Stream.empty(), + volume: const Stream.empty(), + rate: const Stream.empty(), + tracks: const Stream.empty(), + track: const Stream.empty(), + log: const Stream.empty(), + error: const Stream.empty(), + audioDevice: const Stream.empty(), + audioDevices: const Stream>.empty(), + bufferRanges: const Stream>.empty(), + playbackRestart: const Stream.empty(), + backendSwitched: const Stream.empty(), + ); + + @override + Future setProperty(String name, String value) { + expect(name, 'sub-visibility'); + propertyValues.add(value); + return writes[propertyValues.length - 1].future; + } + + @override + dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); +}

-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%0Dq$pyRx_BgW>E!b|p@d>V%?Xf%oS+j#wQ)MGhi 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