From 1c6a3cde65e04dbae500a983a2e975a564949537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Stivi?= Date: Mon, 8 Jul 2024 16:47:03 -0400 Subject: [PATCH] Flutter 3.22 (#505) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Updates dependencies in general for the code to be able to build with the latest version of flutter and dart. ## Type of Change - [ ] โœจ New feature (non-breaking change which adds functionality) - [x] ๐Ÿ› ๏ธ Bug fix (non-breaking change which fixes an issue) - [x] โŒ Breaking change (fix or feature that would cause existing functionality to change) - [x] ๐Ÿงน Code refactor - [x] โœ… Build configuration change - [x] ๐Ÿ“ Documentation - [x] ๐Ÿ—‘๏ธ Chore --- .firebaserc | 5 - .github/CODEOWNERS | 3 - .github/workflows/main.yaml | 2 +- .gitignore | 6 +- .vscode/cspell.json | 4 +- README.md | 11 + devtools_options.yaml | 4 + firebase.json | 33 - .../cubit/assets_manager_cubit.dart | 1 + .../views/assets_loading_page.dart | 4 +- lib/bootstrap.dart | 31 - lib/firebase_options.dart | 63 ++ .../animatronic_looping_behavior.dart | 5 +- .../behaviors/camera_focusing_behavior.dart | 11 +- lib/game/components/backbox/backbox.dart | 6 +- .../backbox/bloc/backbox_state.dart | 2 +- .../displays/game_over_info_display.dart | 16 +- .../backbox/displays/leaderboard_display.dart | 2 +- .../backbox/displays/loading_display.dart | 1 + .../backbox/displays/share_display.dart | 11 +- .../behaviors/chrome_dino_bonus_behavior.dart | 1 - .../components/game_bloc_status_listener.dart | 14 +- .../behaviors/multiballs_behavior.dart | 1 - .../behaviors/multipliers_behavior.dart | 1 - .../sparky_computer_bonus_behavior.dart | 1 - lib/game/pinball_game.dart | 44 +- lib/game/view/pinball_game_page.dart | 2 +- lib/game/view/widgets/bonus_animation.dart | 11 +- lib/game/view/widgets/game_hud.dart | 4 +- lib/game/view/widgets/mobile_dpad.dart | 1 + .../view/widgets/round_count_display.dart | 2 +- lib/game/view/widgets/score_view.dart | 6 +- .../widgets/how_to_play_dialog.dart | 47 +- lib/main.dart | 49 +- .../more_information_dialog.dart | 17 +- .../view/character_selection_page.dart | 4 +- .../view/selected_character.dart | 8 +- .../authentication_repository/pubspec.yaml | 10 +- packages/geometry/pubspec.yaml | 6 +- packages/leaderboard_repository/pubspec.yaml | 12 +- .../test/src/leaderboard_repository_test.dart | 10 +- .../pinball_audio/lib/src/pinball_audio.dart | 28 +- packages/pinball_audio/pubspec.yaml | 11 +- .../test/src/pinball_audio_test.dart | 109 ++- .../android_bumper_blinking_behavior.dart | 1 - .../arcade_background/arcade_background.dart | 4 +- .../lib/src/components/arrow_icon.dart | 6 +- .../lib/src/components/ball/ball.dart | 4 +- .../behaviors/ball_gravitating_behavior.dart | 1 - .../behaviors/ball_impulsing_behavior.dart | 8 +- .../ball/behaviors/ball_scaling_behavior.dart | 1 - .../lib/src/components/boundaries.dart | 4 +- .../lib/src/components/camera_zoom.dart | 5 +- .../chrome_dino_mouth_opening_behavior.dart | 2 +- .../chrome_dino_spitting_behavior.dart | 1 - .../chrome_dino_swiveling_behavior.dart | 7 +- .../components/chrome_dino/chrome_dino.dart | 2 +- .../dash_bumper/cubit/dash_bumpers_state.dart | 2 +- .../lib/src/components/error_component.dart | 2 +- .../lib/src/components/flapper/flapper.dart | 9 +- .../behaviors/flipper_jointing_behavior.dart | 1 - .../flipper_key_controlling_behavior.dart | 6 +- .../lib/src/components/flipper/flipper.dart | 2 +- .../google_rollover/google_rollover.dart | 9 +- .../google_word_animating_behavior.dart | 2 +- .../google_word/cubit/google_word_cubit.dart | 6 +- .../google_word/cubit/google_word_state.dart | 2 +- .../behaviors/kicker_blinking_behavior.dart | 1 - .../lib/src/components/kicker/kicker.dart | 3 +- .../multiball_blinking_behavior.dart | 1 - .../src/components/multiball/multiball.dart | 1 - .../src/components/multiplier/multiplier.dart | 1 - .../behaviors/plunger_jointing_behavior.dart | 1 - .../plunger_key_controlling_behavior.dart | 6 +- .../lib/src/components/plunger/plunger.dart | 2 +- .../score_component_scaling_behavior.dart | 1 - .../skill_shot_blinking_behavior.dart | 1 - .../src/components/skill_shot/skill_shot.dart | 9 +- .../lib/src/components/spaceship_rail.dart | 2 +- .../spaceship_ramp/spaceship_ramp.dart | 2 +- .../sparky_bumper_blinking_behavior.dart | 1 - packages/pinball_components/pubspec.yaml | 18 +- .../sandbox/lib/common/games.dart | 12 +- .../android_acres/android_bumper_a_game.dart | 4 +- .../android_acres/android_bumper_b_game.dart | 4 +- .../android_bumper_cow_game.dart | 4 +- .../android_acres/android_spaceship_game.dart | 4 +- .../android_acres/spaceship_rail_game.dart | 4 +- .../android_acres/spaceship_ramp_game.dart | 8 +- .../stories/arrow_icon/arrow_icon_game.dart | 7 +- .../lib/stories/ball/basic_ball_game.dart | 4 +- .../stories/bottom_group/baseboard_game.dart | 3 +- .../stories/bottom_group/flipper_game.dart | 2 +- .../lib/stories/bottom_group/kicker_game.dart | 2 +- .../stories/boundaries/boundaries_game.dart | 6 +- .../stories/dino_desert/chrome_dino_game.dart | 4 +- .../stories/dino_desert/dino_walls_game.dart | 4 +- .../stories/dino_desert/slingshots_game.dart | 4 +- .../lib/stories/effects/camera_zoom_game.dart | 2 +- .../error_component/error_component_game.dart | 2 +- .../flutter_forest/dash_bumper_a_game.dart | 4 +- .../flutter_forest/dash_bumper_b_game.dart | 4 +- .../flutter_forest/dash_bumper_main_game.dart | 4 +- .../stories/flutter_forest/signpost_game.dart | 4 +- .../google_word/google_letter_game.dart | 4 +- .../stories/launch_ramp/launch_ramp_game.dart | 6 +- .../lib/stories/multiball/multiball_game.dart | 8 +- .../stories/multipliers/multipliers_game.dart | 7 +- .../lib/stories/plunger/plunger_game.dart | 2 +- .../sandbox/lib/stories/score/score_game.dart | 6 +- .../sparky_scorch/sparky_bumper_game.dart | 2 +- .../sparky_scorch/sparky_computer_game.dart | 4 +- .../pinball_components/sandbox/pubspec.lock | 419 +++++++---- .../pinball_components/sandbox/pubspec.yaml | 12 +- .../pinball_components/sandbox/web/index.html | 14 +- .../test/helpers/test_game.dart | 7 +- ...nimatronic_ball_contact_behavior_test.dart | 24 +- .../components/android_animatronic_test.dart | 75 +- .../android_bumper/android_bumper_test.dart | 302 +++++--- ...oid_bumper_ball_contact_behavior_test.dart | 13 +- .../android_spaceship_test.dart | 38 +- .../arcade_background_test.dart | 54 +- .../test/src/components/arrow_icon_test.dart | 8 +- .../test/src/components/ball/ball_test.dart | 197 +++-- .../ball_gravitating_behavior_test.dart | 41 +- .../ball_implusing_behavior_test.dart | 18 +- .../behaviors/ball_scaling_behavior_test.dart | 73 +- .../ball_turbo_charging_behavior_test.dart | 109 +-- .../test/src/components/baseboard_test.dart | 41 +- ...oard_background_sprite_component_test.dart | 19 +- .../test/src/components/boundaries_test.dart | 23 +- .../src/components/bumping_behavior_test.dart | 23 +- .../test/src/components/camera_zoom_test.dart | 28 +- .../chrome_dino_chomping_behavior_test.dart | 11 +- ...rome_dino_mouth_opening_behavior_test.dart | 14 +- .../chrome_dino_spitting_behavior_test.dart | 19 +- .../chrome_dino_swiveling_behavior_test.dart | 65 +- .../chrome_dino/chrome_dino_test.dart | 179 +++-- .../cubit/chrome_dino_cubit_test.dart | 44 +- .../chrome_dino/golden/chrome_dino/down.png | Bin 121661 -> 121613 bytes .../chrome_dino/golden/chrome_dino/middle.png | Bin 96155 -> 98488 bytes .../chrome_dino/golden/chrome_dino/up.png | Bin 74010 -> 81868 bytes .../src/components/dash_animatronic_test.dart | 50 +- ...ash_bumper_ball_contact_behavior_test.dart | 19 +- .../cubit/dash_bumpers_cubit_test.dart | 3 +- .../dash_nest_bumper/dash_bumper_test.dart | 216 ++++-- .../test/src/components/dino_walls_test.dart | 28 +- .../src/components/error_component_test.dart | 60 +- .../flapper_spinning_behavior_test.dart | 16 +- .../src/components/flapper/flapper_test.dart | 70 +- .../flipper_jointing_behavior_test.dart | 42 +- ...flipper_key_controlling_behavior_test.dart | 220 ++++-- .../flipper_moving_behavior_test.dart | 40 +- .../flipper_noise_behavior_test.dart | 14 +- .../src/components/flipper/flipper_test.dart | 52 +- .../src/components/golden/arrow_icon_left.png | Bin 22848 -> 22848 bytes .../components/golden/arrow_icon_right.png | Bin 22823 -> 22857 bytes .../test/src/components/golden/baseboard.png | Bin 217491 -> 217502 bytes .../components/golden/board_background.png | Bin 936557 -> 936669 bytes .../src/components/golden/flapper/end.png | Bin 26499 -> 26459 bytes .../src/components/golden/flapper/middle.png | Bin 28352 -> 28298 bytes .../src/components/golden/flapper/start.png | Bin 26494 -> 26458 bytes .../src/components/golden/sparky_computer.png | Bin 196068 -> 195618 bytes .../src/components/google_letter_test.dart | 73 +- .../google_rollover/google_rollover_test.dart | 107 ++- .../cubit/google_word_cubit_test.dart | 4 +- .../google_word/google_word_test.dart | 8 +- .../src/components/initial_position_test.dart | 26 +- .../src/components/joint_anchor_test.dart | 23 +- .../kicker_ball_contact_behavior_test.dart | 9 +- .../test/src/components/kicker_test.dart | 167 +++-- .../test/src/components/launch_ramp_test.dart | 26 +- .../layer_filtering_behavior_test.dart | 115 +-- .../layer_sensor/layer_sensor_test.dart | 52 +- .../multiball/cubit/multiball_cubit_test.dart | 55 +- .../components/multiball/multiball_test.dart | 119 +-- .../cubit/multiplier_cubit_test.dart | 66 +- .../multiplier/multiplier_test.dart | 201 +++--- .../plunger_jointing_behavior_test.dart | 43 +- ...plunger_key_controlling_behavior_test.dart | 96 ++- .../plunger_noise_behavior_test.dart | 27 +- .../plunger_pulling_behavior_test.dart | 72 +- .../plunger_releasing_behavior_test.dart | 63 +- .../src/components/plunger/plunger_test.dart | 40 +- .../test/src/components/rocket_test.dart | 6 +- ...score_component_scaling_behavior_test.dart | 53 +- .../score_component/score_component_test.dart | 47 +- .../components/signpost/signpost_test.dart | 63 +- .../cubit/skill_shot_cubit_test.dart | 4 +- .../skill_shot/skill_shot_test.dart | 137 ++-- .../test/src/components/slingshot_test.dart | 41 +- .../src/components/spaceship_rail_test.dart | 23 +- ..._ball_ascending_contact_behavior_test.dart | 39 +- .../spaceship_ramp/spaceship_ramp_test.dart | 193 +++-- .../components/sparky_animatronic_test.dart | 48 +- ...rky_bumper_ball_contact_behavior_test.dart | 13 +- .../sparky_bumper/sparky_bumper_test.dart | 289 +++++--- ...ter_sensor_ball_contact_behavior_test.dart | 55 +- .../sparky_computer/sparky_computer_test.dart | 115 +-- packages/pinball_flame/lib/pinball_flame.dart | 2 - .../lib/src/behaviors/contact_behavior.dart | 1 - .../lib/src/canvas/canvas_wrapper.dart | 20 + .../pinball_flame/lib/src/flame_provider.dart | 2 +- .../lib/src/keyboard_input_controller.dart | 4 +- .../pinball_flame/lib/src/parent_is_a.dart | 12 - .../lib/src/pinball_forge2d_game.dart | 54 -- .../lib/src/sprite_animation.dart | 11 +- packages/pinball_flame/pubspec.yaml | 16 +- packages/pinball_flame/test/layer_test.dart | 86 ++- .../src/behaviors/contact_behavior_test.dart | 49 +- .../layer_contact_behavior_test.dart | 86 ++- .../z_index_contact_behavior_test.dart | 80 ++- .../src/canvas/canvas_component_test.dart | 27 +- .../test/src/canvas/canvas_wrapper_test.dart | 42 +- .../src/canvas/z_canvas_component_test.dart | 28 +- .../test/src/flame_provider_test.dart | 182 +++-- .../test/src/goldens/rendering/blue_red.png | Bin 22364 -> 22664 bytes .../test/src/goldens/rendering/red_blue.png | Bin 22395 -> 22645 bytes .../src/keyboard_input_controller_test.dart | 20 +- .../test/src/pinball_forge2d_game_test.dart | 63 -- .../test/src/sprite_animation_test.dart | 18 +- packages/pinball_theme/pubspec.yaml | 4 +- .../lib/src/dialog/pinball_dialog.dart | 5 +- .../lib/src/theme/pinball_text_style.dart | 12 +- .../lib/src/theme/pinball_theme.dart | 12 +- .../lib/src/widgets/pinball_button.dart | 2 +- .../widgets/pinball_loading_indicator.dart | 2 +- packages/pinball_ui/pubspec.yaml | 8 +- .../test/src/dialog/pinball_dialog_test.dart | 8 +- .../external_links/external_links_test.dart | 27 +- .../src/theme/pinball_text_style_test.dart | 26 +- .../test/src/theme/pinball_theme_test.dart | 70 +- packages/platform_helper/pubspec.yaml | 4 +- packages/share_repository/pubspec.yaml | 8 +- pubspec.lock | 642 +++++++++++------ pubspec.yaml | 27 +- test/app/view/app_test.dart | 4 +- .../animatronic_looping_behavior_test.dart | 89 ++- .../ball_spawning_behavior_test.dart | 30 +- .../bonus_ball_spawning_behavior_test.dart | 17 +- .../camera_focusing_behavior_test.dart | 112 +-- .../character_selection_behavior_test.dart | 32 +- .../game/behaviors/scoring_behavior_test.dart | 44 +- test/game/bloc/game_bloc_test.dart | 189 +++-- .../android_acres/android_acres_test.dart | 137 ++-- ...android_spaceship_bonus_behavior_test.dart | 4 +- .../behaviors/ramp_bonus_behavior_test.dart | 24 +- .../ramp_multiplier_behavior_test.dart | 31 +- .../ramp_progress_behavior_test.dart | 98 ++- .../behaviors/ramp_reset_behavior_test.dart | 34 +- .../behaviors/ramp_shot_behavior_test.dart | 12 +- .../game/components/backbox/backbox_test.dart | 233 +++--- .../backbox/bloc/backbox_bloc_test.dart | 4 +- .../displays/game_over_info_display_test.dart | 124 ++-- .../displays/initials_input_display_test.dart | 11 +- ...tials_submission_failure_display_test.dart | 65 +- ...tials_submission_success_display_test.dart | 18 +- .../displays/leaderboard_display_test.dart | 183 ++--- .../leaderboard_failure_display_test.dart | 36 +- .../displays/loading_display_test.dart | 52 +- .../backbox/displays/share_display_test.dart | 43 +- test/game/components/bottom_group_test.dart | 77 +- .../dino_desert/dino_desert_test.dart | 61 +- .../behaviors/draining_behavior_test.dart | 38 +- test/game/components/drain/drain_test.dart | 22 +- .../flutter_forest_bonus_behavior_test.dart | 8 +- .../flutter_forest/flutter_forest_test.dart | 37 +- .../game_bloc_status_listener_test.dart | 196 +++-- .../google_gallery/google_gallery_test.dart | 63 +- test/game/components/launcher_test.dart | 51 +- .../behaviors/multiballs_behavior_test.dart | 9 +- .../multiballs/multiballs_test.dart | 7 +- .../multipliers/multipliers_test.dart | 16 +- .../sparky_scorch/sparky_scorch_test.dart | 77 +- test/game/pinball_game_test.dart | 680 +++++++++++------- test/game/view/pinball_game_page_test.dart | 37 +- .../view/widgets/bonus_animation_test.dart | 4 +- test/game/view/widgets/game_hud_test.dart | 4 +- test/helpers/mock_flame_images.dart | 2 +- test/helpers/pump_app.dart | 4 +- .../more_information_dialog_test.dart | 70 +- .../view/character_selection_page_test.dart | 2 +- .../start_game/bloc/start_game_bloc_test.dart | 8 +- web/index.html | 32 +- 284 files changed, 6719 insertions(+), 4182 deletions(-) delete mode 100644 .firebaserc delete mode 100644 .github/CODEOWNERS create mode 100644 devtools_options.yaml delete mode 100644 firebase.json create mode 100644 lib/firebase_options.dart delete mode 100644 packages/pinball_flame/lib/src/parent_is_a.dart delete mode 100644 packages/pinball_flame/lib/src/pinball_forge2d_game.dart delete mode 100644 packages/pinball_flame/test/src/pinball_forge2d_game_test.dart diff --git a/.firebaserc b/.firebaserc deleted file mode 100644 index 46b92aeb..00000000 --- a/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "pinball-dev" - } -} diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 37ec09f9..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,3 +0,0 @@ -# Every request must be reviewed and accepted by: - -* @erickzanardo @alestiago @RuiMiguel @allisonryan0002 \ No newline at end of file diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 48ad112c..2a0776dd 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -11,7 +11,7 @@ jobs: uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 with: flutter_channel: stable - flutter_version: 2.10.5 + flutter_version: 3.22.2 coverage_excludes: "lib/gen/*.dart" test_optimization: false diff --git a/.gitignore b/.gitignore index 2d9c4dbe..f4cd76ff 100644 --- a/.gitignore +++ b/.gitignore @@ -100,12 +100,14 @@ unlinked_spec.ds # Coverage coverage/ +# Golden tests related +**/failures + # Submodules !pubspec.lock packages/**/pubspec.lock # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols @@ -128,6 +130,8 @@ app.*.map.json # Firebase related .firebase +firebase.json +lib/firebase_options.dart test/.test_runner.dart web/__/firebase/init.js diff --git a/.vscode/cspell.json b/.vscode/cspell.json index 71c54903..3d0f5d0d 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -15,6 +15,7 @@ "dpad", "endtemplate", "firestore", + "flutterfire", "gapless", "genhtml", "goldens", @@ -22,6 +23,7 @@ "leaderboard", "loadables", "localizable", + "macos", "mixins", "mocktail", "mostrado", @@ -47,4 +49,4 @@ "ignorePaths": [ ".github/workflows/**" ] -} +} \ No newline at end of file diff --git a/README.md b/README.md index 957cb05b..a7b88223 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,17 @@ _Created using [Very Good CLI][very_good_cli_link] ๐Ÿค–_ ## Getting Started ๐Ÿš€ +### Firebase +First, please create a Firebase project for development. +After you create your project, remember to activate the following features: + - **Authentication** with the **anonymous** option + - **Firestore** with the rules in firestore.rules. + +Next, use the instructions on [Firebase website](https://firebase.google.com/docs/flutter/setup?platform=web) to set up the **flutterfire_cli**. + +Allow it to override the **lib/firebase_options.dart** file with your project settings. + +### Running locally To run the desired project either use the launch configuration in VSCode/Android Studio or use the following commands: ```sh diff --git a/devtools_options.yaml b/devtools_options.yaml new file mode 100644 index 00000000..e627acdd --- /dev/null +++ b/devtools_options.yaml @@ -0,0 +1,4 @@ +description: This file stores settings for Dart & Flutter DevTools. +documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states +extensions: + - flame: true \ No newline at end of file diff --git a/firebase.json b/firebase.json deleted file mode 100644 index d2e803bf..00000000 --- a/firebase.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "firestore": { - "rules": "firestore.rules" - }, - "hosting": { - "public": "build/web", - "site": "", - "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], - "headers": [ - { - "source": "**/*.@(jpg|jpeg|gif|png)", - "headers": [ - { - "key": "Cache-Control", - "value": "max-age=3600" - } - ] - }, - { - "source": "**", - "headers": [ - { - "key": "Cache-Control", - "value": "no-cache, no-store, must-revalidate" - } - ] - } - ] - }, - "storage": { - "rules": "storage.rules" - } -} diff --git a/lib/assets_manager/cubit/assets_manager_cubit.dart b/lib/assets_manager/cubit/assets_manager_cubit.dart index 7932f194..f204dc48 100644 --- a/lib/assets_manager/cubit/assets_manager_cubit.dart +++ b/lib/assets_manager/cubit/assets_manager_cubit.dart @@ -19,6 +19,7 @@ class AssetsManagerCubit extends Cubit { /// do its job without adding too much delay for the user, we are letting /// the UI paint first, and then we start loading the assets. await Future.delayed(const Duration(seconds: 1)); + if (isClosed) return; final loadables = Function()>[ _game.preFetchLeaderboard, ..._game.preLoadAssets(), diff --git a/lib/assets_manager/views/assets_loading_page.dart b/lib/assets_manager/views/assets_loading_page.dart index 72476064..114fd3f3 100644 --- a/lib/assets_manager/views/assets_loading_page.dart +++ b/lib/assets_manager/views/assets_loading_page.dart @@ -16,7 +16,7 @@ class AssetsLoadingPage extends StatelessWidget { @override Widget build(BuildContext context) { final l10n = context.l10n; - final headline1 = Theme.of(context).textTheme.headline1; + final displayLarge = Theme.of(context).textTheme.displayLarge; return Container( decoration: const CrtBackground(), child: Center( @@ -30,7 +30,7 @@ class AssetsLoadingPage extends StatelessWidget { const SizedBox(height: 40), AnimatedEllipsisText( l10n.loading, - style: headline1, + style: displayLarge, ), const SizedBox(height: 40), FractionallySizedBox( diff --git a/lib/bootstrap.dart b/lib/bootstrap.dart index f4028ee1..e74b2ac6 100644 --- a/lib/bootstrap.dart +++ b/lib/bootstrap.dart @@ -1,10 +1,6 @@ -import 'dart:async'; import 'dart:developer'; import 'package:bloc/bloc.dart'; -import 'package:cloud_firestore/cloud_firestore.dart'; -import 'package:firebase_auth/firebase_auth.dart'; -import 'package:flutter/widgets.dart'; class AppBlocObserver extends BlocObserver { @override @@ -19,30 +15,3 @@ class AppBlocObserver extends BlocObserver { super.onError(bloc, error, stackTrace); } } - -typedef BootstrapBuilder = Future Function( - FirebaseFirestore firestore, - FirebaseAuth firebaseAuth, -); - -Future bootstrap(BootstrapBuilder builder) async { - WidgetsFlutterBinding.ensureInitialized(); - FlutterError.onError = (details) { - log(details.exceptionAsString(), stackTrace: details.stack); - }; - - await runZonedGuarded( - () async { - await BlocOverrides.runZoned( - () async => runApp( - await builder( - FirebaseFirestore.instance, - FirebaseAuth.instance, - ), - ), - blocObserver: AppBlocObserver(), - ); - }, - (error, stackTrace) => log(error.toString(), stackTrace: stackTrace), - ); -} diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 00000000..8e0d3e4b --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,63 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for android - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.iOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for ios - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: '', + appId: '', + messagingSenderId: '', + projectId: '', + authDomain: '', + storageBucket: '', + ); +} diff --git a/lib/game/behaviors/animatronic_looping_behavior.dart b/lib/game/behaviors/animatronic_looping_behavior.dart index ec741608..61aff738 100644 --- a/lib/game/behaviors/animatronic_looping_behavior.dart +++ b/lib/game/behaviors/animatronic_looping_behavior.dart @@ -1,5 +1,4 @@ import 'package:flame/components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; class AnimatronicLoopingBehavior extends TimerComponent with ParentIsA { @@ -10,8 +9,8 @@ class AnimatronicLoopingBehavior extends TimerComponent @override Future onLoad() async { await super.onLoad(); - parent.animation?.onComplete = () { - parent.animation?.reset(); + parent.animationTicker?.onComplete = () { + parent.animationTicker?.reset(); parent.playing = false; timer ..reset() diff --git a/lib/game/behaviors/camera_focusing_behavior.dart b/lib/game/behaviors/camera_focusing_behavior.dart index 6279f30e..bcf1fa68 100644 --- a/lib/game/behaviors/camera_focusing_behavior.dart +++ b/lib/game/behaviors/camera_focusing_behavior.dart @@ -1,11 +1,10 @@ import 'package:flame/components.dart'; -import 'package:flame/game.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; /// {@template focus_data} -/// Defines a [Camera] focus point. +/// Defines a [CameraComponent] focus point. /// {@endtemplate} class _FocusData { /// {@macro focus_data} @@ -69,16 +68,14 @@ class CameraFocusingBehavior extends Component @override Future onLoad() async { await super.onLoad(); + onGameResize(gameRef.camera.viewport.size); _snap(GameStatus.waiting); } void _snap(GameStatus focusKey) { final focusData = _foci[_activeFocus = focusKey]!; - - gameRef.camera - ..speed = 100 - ..followVector2(focusData.position) - ..zoom = focusData.zoom; + gameRef.camera.moveTo(focusData.position, speed: 100); + gameRef.camera.viewfinder.zoom = focusData.zoom; } void _zoomTo(GameStatus focusKey) { diff --git a/lib/game/components/backbox/backbox.dart b/lib/game/components/backbox/backbox.dart index 4ce44348..070a7190 100644 --- a/lib/game/components/backbox/backbox.dart +++ b/lib/game/components/backbox/backbox.dart @@ -53,7 +53,11 @@ class Backbox extends PositionComponent with ZIndex, HasGameRef { _build(_bloc.state); _subscription = _bloc.stream.listen((state) { - _display.children.removeWhere((_) => true); + final removals = _display.children.map((child) { + _display.remove(child); + return child.removed; + }); + Future.wait(removals); _build(state); }); } diff --git a/lib/game/components/backbox/bloc/backbox_state.dart b/lib/game/components/backbox/bloc/backbox_state.dart index d1025a09..e378c2e8 100644 --- a/lib/game/components/backbox/bloc/backbox_state.dart +++ b/lib/game/components/backbox/bloc/backbox_state.dart @@ -2,7 +2,7 @@ part of 'backbox_bloc.dart'; /// {@template backbox_state} /// The base state for all [BackboxState]. -/// {@endtemplate backbox_state} +/// {@endtemplate} abstract class BackboxState extends Equatable { /// {@macro backbox_state} const BackboxState(); diff --git a/lib/game/components/backbox/displays/game_over_info_display.dart b/lib/game/components/backbox/displays/game_over_info_display.dart index 2db7e20b..57d5d43f 100644 --- a/lib/game/components/backbox/displays/game_over_info_display.dart +++ b/lib/game/components/backbox/displays/game_over_info_display.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flame/components.dart'; -import 'package:flame/input.dart'; +import 'package:flame/events.dart'; import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball/l10n/l10n.dart'; @@ -164,7 +164,7 @@ class _LinksComponent extends PositionComponent with HasGameRef { /// {@template share_link_component} /// Link button to navigate to sharing score display. /// {@endtemplate} -class ShareLinkComponent extends TextComponent with HasGameRef, Tappable { +class ShareLinkComponent extends TextComponent with HasGameRef, TapCallbacks { /// {@macro share_link_component} ShareLinkComponent({ OnShareTap? onTap, @@ -178,7 +178,7 @@ class ShareLinkComponent extends TextComponent with HasGameRef, Tappable { final OnShareTap? _onTap; @override - bool onTapDown(TapDownInfo info) { + bool onTapDown(TapDownEvent event) { _onTap?.call(); return true; } @@ -202,7 +202,8 @@ class ShareLinkComponent extends TextComponent with HasGameRef, Tappable { /// {@template google_io_link_component} /// Link button to navigate to Google I/O site. /// {@endtemplate} -class GoogleIOLinkComponent extends TextComponent with HasGameRef, Tappable { +class GoogleIOLinkComponent extends TextComponent + with HasGameRef, TapCallbacks { /// {@macro google_io_link_component} GoogleIOLinkComponent() : super( @@ -212,7 +213,7 @@ class GoogleIOLinkComponent extends TextComponent with HasGameRef, Tappable { ); @override - bool onTapUp(TapUpInfo info) { + bool onTapUp(TapUpEvent event) { openLink(ShareRepository.googleIOEvent); return true; } @@ -280,7 +281,8 @@ class _FirebaseTextComponent extends TextComponent with HasGameRef { /// Link text to navigate to Open Source site. /// {@endtemplate} @visibleForTesting -class OpenSourceTextComponent extends TextComponent with HasGameRef, Tappable { +class OpenSourceTextComponent extends TextComponent + with HasGameRef, TapCallbacks { /// {@macro open_source_link_component} OpenSourceTextComponent() : super( @@ -290,7 +292,7 @@ class OpenSourceTextComponent extends TextComponent with HasGameRef, Tappable { ); @override - bool onTapUp(TapUpInfo info) { + bool onTapUp(TapUpEvent event) { openLink(ShareRepository.openSourceCode); return true; } diff --git a/lib/game/components/backbox/displays/leaderboard_display.dart b/lib/game/components/backbox/displays/leaderboard_display.dart index ab418ccc..d2fe584e 100644 --- a/lib/game/components/backbox/displays/leaderboard_display.dart +++ b/lib/game/components/backbox/displays/leaderboard_display.dart @@ -72,7 +72,7 @@ class LeaderboardDisplay extends PositionComponent with HasGameRef { duration: 0.5, curve: Curves.easeIn, ), - )..onFinishCallback = () { + )..onComplete = () { current.removeFromParent(); inactiveArrow.active = true; firstChild()?.add( diff --git a/lib/game/components/backbox/displays/loading_display.dart b/lib/game/components/backbox/displays/loading_display.dart index 6178b940..a720ba48 100644 --- a/lib/game/components/backbox/displays/loading_display.dart +++ b/lib/game/components/backbox/displays/loading_display.dart @@ -18,6 +18,7 @@ final _bodyTextPaint = TextPaint( /// {@endtemplate} class LoadingDisplay extends TextComponent { /// {@template loading_display} + /// {@endtemplate} LoadingDisplay(); late final String _label; diff --git a/lib/game/components/backbox/displays/share_display.dart b/lib/game/components/backbox/displays/share_display.dart index 0bf61e7d..984d877b 100644 --- a/lib/game/components/backbox/displays/share_display.dart +++ b/lib/game/components/backbox/displays/share_display.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flame/components.dart'; -import 'package:flame/input.dart'; +import 'package:flame/events.dart'; import 'package:flutter/material.dart'; import 'package:pinball/l10n/l10n.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -127,7 +127,7 @@ class _SocialNetworksComponent extends PositionComponent with HasGameRef { /// Button for sharing on Facebook. /// {@endtemplate} class FacebookButtonComponent extends SpriteComponent - with HasGameRef, Tappable { + with HasGameRef, TapCallbacks { /// {@macro facebook_button_component} FacebookButtonComponent({ OnSocialShareTap? onTap, @@ -140,7 +140,7 @@ class FacebookButtonComponent extends SpriteComponent final OnSocialShareTap? _onTap; @override - bool onTapUp(TapUpInfo info) { + bool onTapUp(TapUpEvent event) { _onTap?.call(SharePlatform.facebook); return true; } @@ -159,7 +159,8 @@ class FacebookButtonComponent extends SpriteComponent /// {@template twitter_button_component} /// Button for sharing on Twitter. /// {@endtemplate} -class TwitterButtonComponent extends SpriteComponent with HasGameRef, Tappable { +class TwitterButtonComponent extends SpriteComponent + with HasGameRef, TapCallbacks { /// {@macro twitter_button_component} TwitterButtonComponent({ OnSocialShareTap? onTap, @@ -172,7 +173,7 @@ class TwitterButtonComponent extends SpriteComponent with HasGameRef, Tappable { final OnSocialShareTap? _onTap; @override - bool onTapUp(TapUpInfo info) { + bool onTapUp(TapUpEvent event) { _onTap?.call(SharePlatform.twitter); return true; } diff --git a/lib/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior.dart b/lib/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior.dart index 60cd1857..11ccd88a 100644 --- a/lib/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior.dart +++ b/lib/game/components/dino_desert/behaviors/chrome_dino_bonus_behavior.dart @@ -2,7 +2,6 @@ import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Adds a [GameBonus.dinoChomp] when a [Ball] is chomped by the [ChromeDino]. class ChromeDinoBonusBehavior extends Component diff --git a/lib/game/components/game_bloc_status_listener.dart b/lib/game/components/game_bloc_status_listener.dart index 701c6f48..10bdeead 100644 --- a/lib/game/components/game_bloc_status_listener.dart +++ b/lib/game/components/game_bloc_status_listener.dart @@ -80,21 +80,18 @@ class GameBlocStatusListener extends Component [ PlungerPullingBehavior(strength: 7), PlungerAutoPullingBehavior(), - PlungerKeyControllingBehavior() + PlungerKeyControllingBehavior(), ], ); void _removePlungerBehaviors(Plunger plunger) { - plunger - .descendants() + plunger.children .whereType() .forEach(plunger.remove); - plunger - .descendants() + plunger.children .whereType() .forEach(plunger.remove); - plunger - .descendants() + plunger.children .whereType() .forEach(plunger.remove); } @@ -103,8 +100,7 @@ class GameBlocStatusListener extends Component .firstChild>()! .add(FlipperKeyControllingBehavior()); - void _removeFlipperBehaviors(Flipper flipper) => flipper - .descendants() + void _removeFlipperBehaviors(Flipper flipper) => flipper.children .whereType() .forEach(flipper.remove); } diff --git a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart index 1d3aa16c..8cf7f03a 100644 --- a/lib/game/components/multiballs/behaviors/multiballs_behavior.dart +++ b/lib/game/components/multiballs/behaviors/multiballs_behavior.dart @@ -2,7 +2,6 @@ import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Toggle each [Multiball] when there is a bonus ball. class MultiballsBehavior extends Component diff --git a/lib/game/components/multipliers/behaviors/multipliers_behavior.dart b/lib/game/components/multipliers/behaviors/multipliers_behavior.dart index ce58a8eb..fbea6c3c 100644 --- a/lib/game/components/multipliers/behaviors/multipliers_behavior.dart +++ b/lib/game/components/multipliers/behaviors/multipliers_behavior.dart @@ -2,7 +2,6 @@ import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Toggle each [Multiplier] when GameState.multiplier changes. class MultipliersBehavior extends Component diff --git a/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart b/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart index 3cd2fc0b..15fbf068 100644 --- a/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart +++ b/lib/game/components/sparky_scorch/behaviors/sparky_computer_bonus_behavior.dart @@ -2,7 +2,6 @@ import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Adds a [GameBonus.sparkyTurboCharge] when a [Ball] enters the /// [SparkyComputer]. diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 2b003207..d6b43702 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -1,9 +1,10 @@ import 'dart:async'; import 'package:flame/components.dart'; -import 'package:flame/game.dart'; +import 'package:flame/events.dart'; import 'package:flame/input.dart'; import 'package:flame_bloc/flame_bloc.dart'; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; @@ -17,8 +18,8 @@ import 'package:pinball_flame/pinball_flame.dart'; import 'package:platform_helper/platform_helper.dart'; import 'package:share_repository/share_repository.dart'; -class PinballGame extends PinballForge2DGame - with HasKeyboardHandlerComponents, MultiTouchTapDetector, HasTappables { +class PinballGame extends Forge2DGame + with HasKeyboardHandlerComponents, MultiTouchTapDetector { PinballGame({ required CharacterThemeCubit characterThemeBloc, required this.leaderboardRepository, @@ -32,9 +33,7 @@ class PinballGame extends PinballForge2DGame _audioPlayer = audioPlayer, _characterThemeBloc = characterThemeBloc, _l10n = l10n, - super( - gravity: Vector2(0, 30), - ) { + super(gravity: Vector2(0, 30)) { images.prefix = ''; } @@ -80,7 +79,7 @@ class PinballGame extends PinballForge2DGame @override Future onLoad() async { - await add( + await world.add( FlameMultiBlocProvider( providers: [ FlameBlocProvider.value( @@ -147,7 +146,6 @@ class PinballGame extends PinballForge2DGame ], ), ); - await super.onLoad(); } @@ -160,7 +158,8 @@ class PinballGame extends PinballForge2DGame final rocket = descendants().whereType().first; final bounds = rocket.topLeftPosition & rocket.size; - final tappedRocket = bounds.contains(info.eventPosition.game.toOffset()); + final tappedRocket = + bounds.contains(screenToWorld(info.eventPosition.widget).toOffset()); if (tappedRocket) { descendants() .whereType>() @@ -213,7 +212,7 @@ class PinballGame extends PinballForge2DGame } } -class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { +class DebugPinballGame extends PinballGame with PanDetector { DebugPinballGame({ required CharacterThemeCubit characterThemeBloc, required LeaderboardRepository leaderboardRepository, @@ -239,6 +238,7 @@ class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { Future onLoad() async { await super.onLoad(); await addAll([PreviewLine(), _DebugInformation()]); + camera.viewfinder.zoom = 50; } @override @@ -247,16 +247,21 @@ class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { if (info.raw.kind == PointerDeviceKind.mouse) { final canvas = descendants().whereType().single; - final ball = Ball()..initialPosition = info.eventPosition.game; + final ball = Ball() + ..initialPosition = screenToWorld(info.eventPosition.widget) + ..zIndex = ZIndexes.ballOnBoard; canvas.add(ball); + world.add(ball); } } @override - void onPanStart(DragStartInfo info) => lineStart = info.eventPosition.game; + void onPanStart(DragStartInfo info) => + lineStart = screenToWorld(info.eventPosition.widget); @override - void onPanUpdate(DragUpdateInfo info) => lineEnd = info.eventPosition.game; + void onPanUpdate(DragUpdateInfo info) => + lineEnd = screenToWorld(info.eventPosition.widget); @override void onPanEnd(DragEndInfo info) { @@ -274,6 +279,8 @@ class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { final impulse = line * -1 * 10; ball.add(BallTurboChargingBehavior(impulse: impulse)); canvas.add(ball); + add(ball); + world.add(ball); } } @@ -299,9 +306,6 @@ class PreviewLine extends PositionComponent with HasGameRef { } class _DebugInformation extends Component with HasGameRef { - @override - PositionType get positionType => PositionType.widget; - final _debugTextPaint = TextPaint( style: const TextStyle( color: Colors.green, @@ -314,14 +318,14 @@ class _DebugInformation extends Component with HasGameRef { @override void render(Canvas canvas) { final debugText = [ - 'FPS: ${gameRef.fps().toStringAsFixed(1)}', + // 'FPS: ${gameRef.fps().toStringAsFixed(1)}', 'BALLS: ${gameRef.descendants().whereType().length}', ].join(' | '); - final height = _debugTextPaint.measureTextHeight(debugText); - final position = Vector2(0, gameRef.camera.canvasSize.y - height); + final height = _debugTextPaint.getLineMetrics(debugText).height; + final position = Vector2(0, gameRef.camera.viewport.size.y - height); canvas.drawRect( - position & Vector2(gameRef.camera.canvasSize.x, height), + position & Vector2(gameRef.camera.viewport.size.x, height), _debugBackgroundPaint, ); _debugTextPaint.render(canvas, debugText, position); diff --git a/lib/game/view/pinball_game_page.dart b/lib/game/view/pinball_game_page.dart index 06fde72d..2db6bdd1 100644 --- a/lib/game/view/pinball_game_page.dart +++ b/lib/game/view/pinball_game_page.dart @@ -118,7 +118,7 @@ class PinballGameLoadedView extends StatelessWidget { right: 0, left: 0, child: ReplayButtonOverlay(), - ) + ), }, ), ), diff --git a/lib/game/view/widgets/bonus_animation.dart b/lib/game/view/widgets/bonus_animation.dart index a52aafc0..bfb9c439 100644 --- a/lib/game/view/widgets/bonus_animation.dart +++ b/lib/game/view/widgets/bonus_animation.dart @@ -93,6 +93,7 @@ class _BonusAnimationState extends State with TickerProviderStateMixin { late SpriteAnimationController controller; late SpriteAnimation animation; + late SpriteAnimationTicker animationTicker; bool shouldRunBuildCallback = true; @override @@ -110,7 +111,7 @@ class _BonusAnimationState extends State shouldRunBuildCallback = oldWidget._imagePath == widget._imagePath; Future.delayed( - Duration(seconds: animation.totalDuration().ceil()), + Duration(seconds: duration()), () { widget._onCompleted?.call(); }, @@ -119,6 +120,10 @@ class _BonusAnimationState extends State super.didUpdateWidget(oldWidget); } + int duration() { + return animationTicker.totalDuration().ceil(); + } + @override Widget build(BuildContext context) { final spriteSheet = SpriteSheet.fromColumnsAndRows( @@ -132,9 +137,10 @@ class _BonusAnimationState extends State to: spriteSheet.rows * spriteSheet.columns, loop: false, ); + animationTicker = animation.createTicker(); Future.delayed( - Duration(seconds: animation.totalDuration().ceil()), + Duration(seconds: duration()), () { if (shouldRunBuildCallback) { widget._onCompleted?.call(); @@ -144,6 +150,7 @@ class _BonusAnimationState extends State controller = SpriteAnimationController( animation: animation, + animationTicker: animationTicker, vsync: this, )..forward(); diff --git a/lib/game/view/widgets/game_hud.dart b/lib/game/view/widgets/game_hud.dart index 5f651a60..f65d1449 100644 --- a/lib/game/view/widgets/game_hud.dart +++ b/lib/game/view/widgets/game_hud.dart @@ -22,7 +22,7 @@ class _GameHudState extends State { bool showAnimation = false; /// Ratio from sprite frame (width 500, height 144) w / h = ratio - static const _ratio = 3.47; + static const _ratio = 3.47222222222; @override Widget build(BuildContext context) { @@ -34,7 +34,7 @@ class _GameHudState extends State { return _ScoreViewDecoration( child: SizedBox( height: height, - width: height * _ratio, + width: (height * _ratio) + 16, child: BlocListener( listenWhen: (previous, current) => previous.bonusHistory.length != current.bonusHistory.length, diff --git a/lib/game/view/widgets/mobile_dpad.dart b/lib/game/view/widgets/mobile_dpad.dart index abad496b..e7d3a29b 100644 --- a/lib/game/view/widgets/mobile_dpad.dart +++ b/lib/game/view/widgets/mobile_dpad.dart @@ -6,6 +6,7 @@ import 'package:pinball_ui/pinball_ui.dart'; /// {@endtemplate} class MobileDpad extends StatelessWidget { /// {@template mobile_dpad} + /// {@endtemplate} const MobileDpad({ Key? key, required this.onTapUp, diff --git a/lib/game/view/widgets/round_count_display.dart b/lib/game/view/widgets/round_count_display.dart index 63e1fa43..8e899edf 100644 --- a/lib/game/view/widgets/round_count_display.dart +++ b/lib/game/view/widgets/round_count_display.dart @@ -20,7 +20,7 @@ class RoundCountDisplay extends StatelessWidget { children: [ Text( l10n.rounds, - style: Theme.of(context).textTheme.subtitle1, + style: Theme.of(context).textTheme.displayLarge, ), const SizedBox(width: 8), Row( diff --git a/lib/game/view/widgets/score_view.dart b/lib/game/view/widgets/score_view.dart index 2d6c72d0..f8207ebb 100644 --- a/lib/game/view/widgets/score_view.dart +++ b/lib/game/view/widgets/score_view.dart @@ -39,7 +39,7 @@ class _GameOver extends StatelessWidget { return Text( l10n.gameOver, - style: Theme.of(context).textTheme.headline1, + style: Theme.of(context).textTheme.displayLarge, ); } } @@ -60,7 +60,7 @@ class _ScoreDisplay extends StatelessWidget { children: [ Text( l10n.score.toLowerCase(), - style: Theme.of(context).textTheme.subtitle1, + style: Theme.of(context).textTheme.titleMedium, ), const _ScoreText(), const RoundCountDisplay(), @@ -81,7 +81,7 @@ class _ScoreText extends StatelessWidget { return Text( score.formatScore(), - style: Theme.of(context).textTheme.headline1, + style: Theme.of(context).textTheme.displayLarge, ); } } diff --git a/lib/how_to_play/widgets/how_to_play_dialog.dart b/lib/how_to_play/widgets/how_to_play_dialog.dart index 6c8c3f13..2a2bfe81 100644 --- a/lib/how_to_play/widgets/how_to_play_dialog.dart +++ b/lib/how_to_play/widgets/how_to_play_dialog.dart @@ -85,13 +85,12 @@ class _HowToPlayDialogState extends State { final isMobile = context.read().isMobile; final l10n = context.l10n; - return WillPopScope( - onWillPop: () { + return PopScope( + onPopInvoked: (_) { widget.onDismissCallback.call(); context .read() .play(PinballAudio.ioPinballVoiceOver); - return Future.value(true); }, child: PinballDialog( title: l10n.howToPlay, @@ -132,20 +131,20 @@ class _MobileLaunchControls extends StatelessWidget { @override Widget build(BuildContext context) { final l10n = context.l10n; - final headline3 = Theme.of(context) + final displaySmall = Theme.of(context) .textTheme - .headline3! + .displaySmall! .copyWith(color: PinballColors.white); return Column( children: [ - Text(l10n.tapAndHoldRocket, style: headline3), + Text(l10n.tapAndHoldRocket, style: displaySmall), Text.rich( TextSpan( children: [ - TextSpan(text: '${l10n.to} ', style: headline3), + TextSpan(text: '${l10n.to} ', style: displaySmall), TextSpan( text: l10n.launch, - style: headline3.copyWith(color: PinballColors.blue), + style: displaySmall.copyWith(color: PinballColors.blue), ), ], ), @@ -163,7 +162,7 @@ class _MobileFlipperControls extends StatelessWidget { final l10n = context.l10n; final headline3 = Theme.of(context) .textTheme - .headline3! + .displaySmall! .copyWith(color: PinballColors.white); return Column( children: [ @@ -189,10 +188,10 @@ class _DesktopBody extends StatelessWidget { @override Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(16), + return const Padding( + padding: EdgeInsets.all(16), child: Column( - children: const [ + children: [ _DesktopLaunchControls(), SizedBox(height: 16), _DesktopFlipperControls(), @@ -212,18 +211,18 @@ class _DesktopLaunchControls extends StatelessWidget { children: [ Text( l10n.launchControls, - style: Theme.of(context).textTheme.headline4, + style: Theme.of(context).textTheme.headlineMedium, ), const SizedBox(height: 10), - Wrap( - children: const [ + const Wrap( + children: [ _KeyButton(control: Control.down), SizedBox(width: 10), _KeyButton(control: Control.space), SizedBox(width: 10), _KeyButton(control: Control.s), ], - ) + ), ], ); } @@ -239,30 +238,30 @@ class _DesktopFlipperControls extends StatelessWidget { children: [ Text( l10n.flipperControls, - style: Theme.of(context).textTheme.headline4, + style: Theme.of(context).textTheme.headlineMedium, ), const SizedBox(height: 10), - Column( + const Column( children: [ Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ _KeyButton(control: Control.left), SizedBox(width: 20), _KeyButton(control: Control.right), ], ), - const SizedBox(height: 8), + SizedBox(height: 8), Wrap( - children: const [ + children: [ _KeyButton(control: Control.a), SizedBox(width: 20), _KeyButton(control: Control.d), ], - ) + ), ], - ) + ), ], ); } @@ -277,7 +276,7 @@ class _KeyButton extends StatelessWidget { Widget build(BuildContext context) { final textTheme = Theme.of(context).textTheme; final textStyle = - control.isArrow ? textTheme.headline1 : textTheme.headline3; + control.isArrow ? textTheme.displayLarge : textTheme.displaySmall; const height = 60.0; final width = control.isSpace ? height * 2.83 : height; return DecoratedBox( diff --git a/lib/main.dart b/lib/main.dart index 11bf35aa..3e8643da 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,28 +1,41 @@ +import 'dart:async'; + import 'package:authentication_repository/authentication_repository.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/app/app.dart'; import 'package:pinball/bootstrap.dart'; +import 'package:pinball/firebase_options.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:platform_helper/platform_helper.dart'; import 'package:share_repository/share_repository.dart'; -void main() { - bootstrap((firestore, firebaseAuth) async { - final leaderboardRepository = LeaderboardRepository(firestore); - const shareRepository = - ShareRepository(appUrl: ShareRepository.pinballGameUrl); - final authenticationRepository = AuthenticationRepository(firebaseAuth); - final pinballAudioPlayer = PinballAudioPlayer(); - final platformHelper = PlatformHelper(); - await Firebase.initializeApp(); - await authenticationRepository.authenticateAnonymously(); - return App( - authenticationRepository: authenticationRepository, - leaderboardRepository: leaderboardRepository, - shareRepository: shareRepository, - pinballAudioPlayer: pinballAudioPlayer, - platformHelper: platformHelper, - ); - }); +Future bootstrap() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); + final leaderboardRepository = + LeaderboardRepository(FirebaseFirestore.instance); + const shareRepository = + ShareRepository(appUrl: ShareRepository.pinballGameUrl); + final authenticationRepository = + AuthenticationRepository(FirebaseAuth.instance); + final pinballAudioPlayer = PinballAudioPlayer(); + final platformHelper = PlatformHelper(); + await authenticationRepository.authenticateAnonymously(); + return App( + authenticationRepository: authenticationRepository, + leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, + pinballAudioPlayer: pinballAudioPlayer, + platformHelper: platformHelper, + ); +} + +void main() async { + Bloc.observer = AppBlocObserver(); + runApp(await bootstrap()); } diff --git a/lib/more_information/more_information_dialog.dart b/lib/more_information/more_information_dialog.dart index ca04db4e..e45b9cd5 100644 --- a/lib/more_information/more_information_dialog.dart +++ b/lib/more_information/more_information_dialog.dart @@ -10,7 +10,6 @@ Future showMoreInformationDialog(BuildContext context) { return showDialog( context: context, barrierColor: PinballColors.transparent, - barrierDismissible: true, builder: (_) { return Center( child: SizedBox( @@ -32,11 +31,11 @@ class MoreInformationDialog extends StatelessWidget { @override Widget build(BuildContext context) { - return Material( + return const Material( color: PinballColors.transparent, child: _LinkBoxDecoration( child: Column( - children: const [ + children: [ SizedBox(height: 16), _LinkBoxHeader(), Expanded( @@ -59,7 +58,7 @@ class _LinkBoxHeader extends StatelessWidget { children: [ Text( l10n.linkBoxTitle, - style: Theme.of(context).textTheme.headline3!.copyWith( + style: Theme.of(context).textTheme.displaySmall!.copyWith( color: PinballColors.blue, fontWeight: FontWeight.bold, ), @@ -77,9 +76,8 @@ class _LinkBoxHeader extends StatelessWidget { class _LinkBoxDecoration extends StatelessWidget { const _LinkBoxDecoration({ - Key? key, required this.child, - }) : super(key: key); + }); final Widget child; @@ -156,7 +154,7 @@ class _TextLink extends StatelessWidget { onTap: () => openLink(link), child: Text( text, - style: theme.textTheme.headline5!.copyWith( + style: theme.textTheme.headlineSmall!.copyWith( color: PinballColors.white, ), overflow: TextOverflow.ellipsis, @@ -176,7 +174,8 @@ class _MadeWithFlutterAndFirebase extends StatelessWidget { textAlign: TextAlign.center, text: TextSpan( text: l10n.linkBoxMadeWithText, - style: theme.textTheme.headline5!.copyWith(color: PinballColors.white), + style: + theme.textTheme.headlineSmall!.copyWith(color: PinballColors.white), children: [ TextSpan( text: l10n.linkBoxFlutterLinkText, @@ -191,7 +190,7 @@ class _MadeWithFlutterAndFirebase extends StatelessWidget { text: l10n.linkBoxFirebaseLinkText, recognizer: TapGestureRecognizer() ..onTap = () => openLink(_MoreInformationUrl.firebaseWebsite), - style: theme.textTheme.headline5!.copyWith( + style: theme.textTheme.headlineSmall!.copyWith( decoration: TextDecoration.underline, ), ), diff --git a/lib/select_character/view/character_selection_page.dart b/lib/select_character/view/character_selection_page.dart index 5504459f..c6e9da26 100644 --- a/lib/select_character/view/character_selection_page.dart +++ b/lib/select_character/view/character_selection_page.dart @@ -8,7 +8,7 @@ import 'package:pinball_ui/pinball_ui.dart'; /// {@template character_selection_dialog} /// Dialog used to select the playing character of the game. -/// {@endtemplate character_selection_dialog} +/// {@endtemplate} class CharacterSelectionDialog extends StatelessWidget { /// {@macro character_selection_dialog} const CharacterSelectionDialog({Key? key}) : super(key: key); @@ -137,7 +137,7 @@ class _Character extends StatelessWidget { onPressed: () => context.read().characterSelected(character), style: ButtonStyle( - overlayColor: MaterialStateProperty.all( + overlayColor: WidgetStateProperty.all( PinballColors.transparent, ), ), diff --git a/lib/select_character/view/selected_character.dart b/lib/select_character/view/selected_character.dart index ed95297f..5e3107b4 100644 --- a/lib/select_character/view/selected_character.dart +++ b/lib/select_character/view/selected_character.dart @@ -60,7 +60,7 @@ class _SelectedCharacterState extends State children: [ Text( widget.currentCharacter.name, - style: Theme.of(context).textTheme.headline2, + style: Theme.of(context).textTheme.displayMedium, overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, ), @@ -95,7 +95,11 @@ class _SelectedCharacterState extends State to: spriteSheet.rows * spriteSheet.columns, ); if (_controller != null) _controller?.dispose(); - _controller = SpriteAnimationController(vsync: this, animation: animation) + _controller = SpriteAnimationController( + vsync: this, + animation: animation, + animationTicker: animation.createTicker(), + ) ..forward() ..repeat(); } diff --git a/packages/authentication_repository/pubspec.yaml b/packages/authentication_repository/pubspec.yaml index bac20507..ff5c6de4 100644 --- a/packages/authentication_repository/pubspec.yaml +++ b/packages/authentication_repository/pubspec.yaml @@ -4,15 +4,17 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.3" dependencies: - firebase_auth: ^3.3.16 + firebase_auth: ^5.1.1 + firebase_core: ^3.1.1 flutter: sdk: flutter + intl: ^0.19.0 dev_dependencies: flutter_test: sdk: flutter - mocktail: ^0.2.0 - very_good_analysis: ^2.4.0 \ No newline at end of file + mocktail: ^1.0.4 + very_good_analysis: ^6.0.0 \ No newline at end of file diff --git a/packages/geometry/pubspec.yaml b/packages/geometry/pubspec.yaml index da305129..47f031c8 100644 --- a/packages/geometry/pubspec.yaml +++ b/packages/geometry/pubspec.yaml @@ -4,12 +4,12 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.3" dependencies: vector_math: ^2.1.1 dev_dependencies: - mocktail: ^0.2.0 + mocktail: ^1.0.3 test: ^1.19.2 - very_good_analysis: ^2.4.0 + very_good_analysis: ^6.0.0 diff --git a/packages/leaderboard_repository/pubspec.yaml b/packages/leaderboard_repository/pubspec.yaml index 1d3869f4..b0aff1d6 100644 --- a/packages/leaderboard_repository/pubspec.yaml +++ b/packages/leaderboard_repository/pubspec.yaml @@ -4,20 +4,20 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.3" dependencies: - cloud_firestore: ^3.1.10 + cloud_firestore: ^5.0.2 equatable: ^2.0.3 flutter: sdk: flutter json_annotation: ^4.4.0 dev_dependencies: - build_runner: ^2.1.8 + build_runner: ^2.4.11 flutter_test: sdk: flutter json_serializable: ^6.1.5 - mocktail: ^0.2.0 - test: ^1.19.2 - very_good_analysis: ^2.4.0 \ No newline at end of file + mocktail: ^1.0.4 + test: ^1.25.2 + very_good_analysis: ^6.0.0 \ No newline at end of file diff --git a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart index 89984c5b..8214da1d 100644 --- a/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart +++ b/packages/leaderboard_repository/test/src/leaderboard_repository_test.dart @@ -75,7 +75,7 @@ void main() { when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'user$score', - 'score': score + 'score': score, }); return queryDocumentSnapshot; }).toList(); @@ -162,7 +162,7 @@ void main() { when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', - 'score': score + 'score': score, }); when(() => queryDocumentSnapshot.id).thenReturn('id$score'); return queryDocumentSnapshot; @@ -222,14 +222,14 @@ void main() { 6500, 6000, 5500, - 5000 + 5000, ]; final queryDocumentSnapshots = leaderboardScores.map((score) { final queryDocumentSnapshot = _MockQueryDocumentSnapshot(); when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', - 'score': score + 'score': score, }); when(() => queryDocumentSnapshot.id).thenReturn('id$score'); return queryDocumentSnapshot; @@ -269,7 +269,7 @@ void main() { when(queryDocumentSnapshot.data).thenReturn({ 'character': 'dash', 'playerInitials': 'AAA', - 'score': score + 'score': score, }); when(() => queryDocumentSnapshot.id).thenReturn('id$score'); when(() => queryDocumentSnapshot.reference) diff --git a/packages/pinball_audio/lib/src/pinball_audio.dart b/packages/pinball_audio/lib/src/pinball_audio.dart index 4a3d04d8..34933c3a 100644 --- a/packages/pinball_audio/lib/src/pinball_audio.dart +++ b/packages/pinball_audio/lib/src/pinball_audio.dart @@ -1,8 +1,6 @@ import 'dart:math'; -import 'package:audioplayers/audioplayers.dart'; import 'package:clock/clock.dart'; -import 'package:flame_audio/audio_pool.dart'; import 'package:flame_audio/flame_audio.dart'; import 'package:flutter/material.dart'; import 'package:pinball_audio/gen/assets.gen.dart'; @@ -53,12 +51,11 @@ enum PinballAudio { } /// Defines the contract of the creation of an [AudioPool]. -typedef CreateAudioPool = Future Function( - String sound, { - bool? repeating, - int? maxPlayers, - int? minPlayers, - String? prefix, +typedef CreateAudioPool = Future Function({ + required Source source, + required int maxPlayers, + AudioCache? audioCache, + int minPlayers, }); /// Defines the contract for playing a single audio. @@ -165,9 +162,8 @@ class _SingleAudioPool extends _Audio { @override Future load() async { pool = await createAudioPool( - prefixFile(path), + source: DeviceFileSource(prefixFile(path), mimeType: 'audio/mpeg'), maxPlayers: maxPlayers, - prefix: '', ); } @@ -198,14 +194,14 @@ class _RandomABAudio extends _Audio { await Future.wait( [ createAudioPool( - prefixFile(audioAssetA), + source: + DeviceFileSource(prefixFile(audioAssetA), mimeType: 'audio/mpeg'), maxPlayers: 4, - prefix: '', ).then((pool) => audioA = pool), createAudioPool( - prefixFile(audioAssetB), + source: + DeviceFileSource(prefixFile(audioAssetB), mimeType: 'audio/mpeg'), maxPlayers: 4, - prefix: '', ).then((pool) => audioB = pool), ], ); @@ -259,8 +255,8 @@ class PinballAudioPlayer { ConfigureAudioCache? configureAudioCache, Random? seed, }) : _createAudioPool = createAudioPool ?? AudioPool.create, - _playSingleAudio = playSingleAudio ?? FlameAudio.audioCache.play, - _loopSingleAudio = loopSingleAudio ?? FlameAudio.audioCache.loop, + _playSingleAudio = playSingleAudio ?? FlameAudio.play, + _loopSingleAudio = loopSingleAudio ?? FlameAudio.loop, _preCacheSingleAudio = preCacheSingleAudio ?? FlameAudio.audioCache.load, _configureAudioCache = configureAudioCache ?? diff --git a/packages/pinball_audio/pubspec.yaml b/packages/pinball_audio/pubspec.yaml index 8c99d1fc..da444297 100644 --- a/packages/pinball_audio/pubspec.yaml +++ b/packages/pinball_audio/pubspec.yaml @@ -4,20 +4,21 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.3" dependencies: - audioplayers: ^0.20.1 + audioplayers: ^6.0.0 clock: ^1.1.0 - flame_audio: ^1.0.1 + equatable: ^2.0.3 + flame_audio: ^2.10.2 flutter: sdk: flutter dev_dependencies: flutter_test: sdk: flutter - mocktail: ^0.3.0 - very_good_analysis: ^2.4.0 + mocktail: ^1.0.4 + very_good_analysis: ^6.0.0 flutter_gen: line_length: 80 diff --git a/packages/pinball_audio/test/src/pinball_audio_test.dart b/packages/pinball_audio/test/src/pinball_audio_test.dart index 1c82815d..25fb5f9a 100644 --- a/packages/pinball_audio/test/src/pinball_audio_test.dart +++ b/packages/pinball_audio/test/src/pinball_audio_test.dart @@ -1,9 +1,7 @@ // ignore_for_file: prefer_const_constructors, one_member_abstracts import 'dart:math'; -import 'package:audioplayers/audioplayers.dart'; import 'package:clock/clock.dart'; -import 'package:flame_audio/audio_pool.dart'; import 'package:flame_audio/flame_audio.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -15,12 +13,11 @@ class _MockAudioPool extends Mock implements AudioPool {} class _MockAudioCache extends Mock implements AudioCache {} class _MockCreateAudioPool extends Mock { - Future onCall( - String sound, { - bool? repeating, - int? maxPlayers, + Future onCall({ + Source source, + int maxPlayers, + AudioCache? audioCache, int? minPlayers, - String? prefix, }); } @@ -46,6 +43,20 @@ class _MockRandom extends Mock implements Random {} class _MockClock extends Mock implements Clock {} +class SourceMatcher extends Matcher { + SourceMatcher(this.path); + + final String path; + + @override + bool matches(dynamic item, Map matchState) => + (item as DeviceFileSource).path == path; + + @override + Description describe(Description description) => + description.add('Expected: $path'); +} + void main() { group('PinballAudio', () { late _MockCreateAudioPool createAudioPool; @@ -58,15 +69,15 @@ void main() { setUpAll(() { registerFallbackValue(_MockAudioCache()); + registerFallbackValue(DeviceFileSource('/packages/pinball_audio')); }); setUp(() { createAudioPool = _MockCreateAudioPool(); when( () => createAudioPool.onCall( - any(), + source: any(named: 'source'), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => _MockAudioPool()); @@ -108,17 +119,23 @@ void main() { verify( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.bumperA}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerA}'), + ), maxPlayers: 4, - prefix: '', ), ).called(1); verify( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.bumperB}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerB}'), + ), maxPlayers: 4, - prefix: '', ), ).called(1); }); @@ -130,17 +147,23 @@ void main() { verify( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.kickerA}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerA}'), + ), maxPlayers: 4, - prefix: '', ), ).called(1); verify( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.kickerB}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerB}'), + ), maxPlayers: 4, - prefix: '', ), ).called(1); }); @@ -152,9 +175,12 @@ void main() { verify( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.flipper}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.flipper}'), + ), maxPlayers: 2, - prefix: '', ), ).called(1); }); @@ -242,23 +268,29 @@ void main() { setUp(() { bumperAPool = _MockAudioPool(); when(() => bumperAPool.start(volume: any(named: 'volume'))) - .thenAnswer((_) async => () {}); + .thenAnswer((_) async => () => Future.new(() {})); when( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.bumperA}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.bumperA}'), + ), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => bumperAPool); bumperBPool = _MockAudioPool(); when(() => bumperBPool.start(volume: any(named: 'volume'))) - .thenAnswer((_) async => () {}); + .thenAnswer((_) async => () => Future.new(() {})); when( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.bumperB}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.bumperB}'), + ), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => bumperBPool); }); @@ -295,23 +327,29 @@ void main() { setUp(() { kickerAPool = _MockAudioPool(); when(() => kickerAPool.start(volume: any(named: 'volume'))) - .thenAnswer((_) async => () {}); + .thenAnswer((_) async => () => Future.new(() {})); when( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.kickerA}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerA}'), + ), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => kickerAPool); kickerBPool = _MockAudioPool(); when(() => kickerBPool.start(volume: any(named: 'volume'))) - .thenAnswer((_) async => () {}); + .thenAnswer((_) async => () => Future.new(() {})); when( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.kickerB}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.kickerB}'), + ), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => kickerBPool); }); @@ -347,12 +385,15 @@ void main() { setUp(() { pool = _MockAudioPool(); when(() => pool.start(volume: any(named: 'volume'))) - .thenAnswer((_) async => () {}); + .thenAnswer((_) async => () => Future.new(() {})); when( () => createAudioPool.onCall( - 'packages/pinball_audio/${Assets.sfx.flipper}', + source: any( + named: 'source', + that: + SourceMatcher('packages/pinball_audio/${Assets.sfx.flipper}'), + ), maxPlayers: any(named: 'maxPlayers'), - prefix: any(named: 'prefix'), ), ).thenAnswer((_) async => pool); }); diff --git a/packages/pinball_components/lib/src/components/android_bumper/behaviors/android_bumper_blinking_behavior.dart b/packages/pinball_components/lib/src/components/android_bumper/behaviors/android_bumper_blinking_behavior.dart index 4f7dc135..4c5068bc 100644 --- a/packages/pinball_components/lib/src/components/android_bumper/behaviors/android_bumper_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/android_bumper/behaviors/android_bumper_blinking_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template android_bumper_blinking_behavior} /// Makes an [AndroidBumper] blink back to [AndroidBumperState.lit] when diff --git a/packages/pinball_components/lib/src/components/arcade_background/arcade_background.dart b/packages/pinball_components/lib/src/components/arcade_background/arcade_background.dart index e9936367..9dd37bbc 100644 --- a/packages/pinball_components/lib/src/components/arcade_background/arcade_background.dart +++ b/packages/pinball_components/lib/src/components/arcade_background/arcade_background.dart @@ -25,7 +25,7 @@ class ArcadeBackground extends Component with ZIndex { ArcadeBackgroundState>.value( value: bloc, children: [ArcadeBackgroundSpriteComponent(assetPath: assetPath)], - ) + ), ], ) { zIndex = ZIndexes.arcadeBackground; @@ -45,7 +45,7 @@ class ArcadeBackground extends Component with ZIndex { ArcadeBackgroundState>.value( value: bloc ?? ArcadeBackgroundCubit(), children: [ArcadeBackgroundSpriteComponent(assetPath: assetPath)], - ) + ), ], ); diff --git a/packages/pinball_components/lib/src/components/arrow_icon.dart b/packages/pinball_components/lib/src/components/arrow_icon.dart index 0dc33b10..0dcc9e22 100644 --- a/packages/pinball_components/lib/src/components/arrow_icon.dart +++ b/packages/pinball_components/lib/src/components/arrow_icon.dart @@ -1,5 +1,5 @@ import 'package:flame/components.dart'; -import 'package:flame/input.dart'; +import 'package:flame/events.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -15,7 +15,7 @@ enum ArrowIconDirection { /// {@template arrow_icon} /// A [SpriteComponent] that renders a simple arrow icon. /// {@endtemplate} -class ArrowIcon extends SpriteComponent with Tappable, HasGameRef { +class ArrowIcon extends SpriteComponent with TapCallbacks, HasGameRef { /// {@macro arrow_icon} ArrowIcon({ required Vector2 position, @@ -42,7 +42,7 @@ class ArrowIcon extends SpriteComponent with Tappable, HasGameRef { } @override - bool onTapUp(TapUpInfo info) { + bool onTapUp(TapUpEvent event) { onTap(); return true; } diff --git a/packages/pinball_components/lib/src/components/ball/ball.dart b/packages/pinball_components/lib/src/components/ball/ball.dart index e9c0e628..8eedaf4e 100644 --- a/packages/pinball_components/lib/src/components/ball/ball.dart +++ b/packages/pinball_components/lib/src/components/ball/ball.dart @@ -46,7 +46,7 @@ class Ball extends BodyComponent with Layered, InitialPosition, ZIndex { FlameBlocProvider.value( value: bloc ?? BallCubit(), children: [BallSpriteComponent(assetPath: assetPath)], - ) + ), ], ); @@ -66,7 +66,7 @@ class Ball extends BodyComponent with Layered, InitialPosition, ZIndex { bullet: true, ); - return world.createBody(bodyDef)..createFixtureFromShape(shape, 1); + return world.createBody(bodyDef)..createFixtureFromShape(shape); } /// Immediately and completely [stop]s the ball. diff --git a/packages/pinball_components/lib/src/components/ball/behaviors/ball_gravitating_behavior.dart b/packages/pinball_components/lib/src/components/ball/behaviors/ball_gravitating_behavior.dart index bad129a6..5b4192aa 100644 --- a/packages/pinball_components/lib/src/components/ball/behaviors/ball_gravitating_behavior.dart +++ b/packages/pinball_components/lib/src/components/ball/behaviors/ball_gravitating_behavior.dart @@ -3,7 +3,6 @@ import 'dart:math' as math; import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Scales the ball's gravity according to its position on the board. class BallGravitatingBehavior extends Component diff --git a/packages/pinball_components/lib/src/components/ball/behaviors/ball_impulsing_behavior.dart b/packages/pinball_components/lib/src/components/ball/behaviors/ball_impulsing_behavior.dart index d875ef7c..21113309 100644 --- a/packages/pinball_components/lib/src/components/ball/behaviors/ball_impulsing_behavior.dart +++ b/packages/pinball_components/lib/src/components/ball/behaviors/ball_impulsing_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template ball_impulsing_behavior} /// Impulses the [Ball] in a given direction. @@ -17,6 +16,11 @@ class BallImpulsingBehavior extends Component with ParentIsA { Future onLoad() async { await super.onLoad(); parent.body.linearVelocity = _impulse; - shouldRemove = true; + } + + @override + void onMount() { + super.onMount(); + parent.remove(this); } } diff --git a/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart b/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart index e1e7c405..aa2c5bf7 100644 --- a/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart +++ b/packages/pinball_components/lib/src/components/ball/behaviors/ball_scaling_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Scales the ball's body and sprite according to its position on the board. class BallScalingBehavior extends Component with ParentIsA { diff --git a/packages/pinball_components/lib/src/components/boundaries.dart b/packages/pinball_components/lib/src/components/boundaries.dart index d1ad34e0..49837454 100644 --- a/packages/pinball_components/lib/src/components/boundaries.dart +++ b/packages/pinball_components/lib/src/components/boundaries.dart @@ -21,7 +21,7 @@ class Boundaries extends Component { /// {@template bottom_boundary} /// Curved boundary at the bottom of the board where the [Ball] exits the field /// of play. -/// {@endtemplate bottom_boundary} +/// {@endtemplate} class _BottomBoundary extends BodyComponent with InitialPosition, ZIndex { /// {@macro bottom_boundary} _BottomBoundary() @@ -89,7 +89,7 @@ class _BottomBoundarySpriteComponent extends SpriteComponent with HasGameRef { /// /// The right side of the board is closed by the barrier the [LaunchRamp] /// creates. -/// {@endtemplate outer_boundary} +/// {@endtemplate} class _OuterBoundary extends BodyComponent with InitialPosition, ZIndex { /// {@macro outer_boundary} _OuterBoundary() diff --git a/packages/pinball_components/lib/src/components/camera_zoom.dart b/packages/pinball_components/lib/src/components/camera_zoom.dart index a3da382e..17f41461 100644 --- a/packages/pinball_components/lib/src/components/camera_zoom.dart +++ b/packages/pinball_components/lib/src/components/camera_zoom.dart @@ -28,17 +28,18 @@ class CameraZoom extends Effect with HasGameRef { @override Future onLoad() async { _tween = Tween( - begin: gameRef.camera.zoom, + begin: gameRef.camera.viewfinder.zoom, end: value, ); } @override void apply(double progress) { - gameRef.camera.zoom = _tween.transform(progress); + gameRef.camera.viewfinder.zoom = _tween.transform(progress); } /// Returns a [Future] that completes once the zoom is finished + @override Future get completed { if (controller.completed) { return Future.value(); diff --git a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior.dart b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior.dart index 6779a5d8..3ff9a682 100644 --- a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior.dart +++ b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior.dart @@ -12,7 +12,7 @@ class ChromeDinoMouthOpeningBehavior extends ContactBehavior { if (other is! Ball) return; if (parent.bloc.state.isMouthOpen && parent.firstChild() == null) { - contact.setEnabled(false); + contact.isEnabled = false; } } } diff --git a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart index 876dd4d6..4c25b6eb 100644 --- a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart +++ b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior.dart @@ -1,7 +1,6 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template chrome_dino_spitting_behavior} /// Spits the [Ball] from the [ChromeDino] the next time the mouth opens. diff --git a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior.dart b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior.dart index ab98c6a8..e875a268 100644 --- a/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior.dart +++ b/packages/pinball_components/lib/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior.dart @@ -1,7 +1,6 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template chrome_dino_swivel_behavior} /// Swivels the [ChromeDino] up and down periodically to match its animation @@ -51,7 +50,7 @@ class ChromeDinoSwivelingBehavior extends TimerComponent @override void onTick() { super.onTick(); - _joint.setMotorSpeed(-_joint.motorSpeed); + _joint.motorSpeed = -_joint.motorSpeed; } } @@ -63,8 +62,8 @@ class _ChromeDinoAnchor extends JointAnchor parent.parent.children .whereType() .forEach((sprite) { - sprite.animation!.currentIndex = 45; - sprite.changeParent(this); + sprite.animationTicker!.currentIndex = 45; + sprite.parent = this; }); } } diff --git a/packages/pinball_components/lib/src/components/chrome_dino/chrome_dino.dart b/packages/pinball_components/lib/src/components/chrome_dino/chrome_dino.dart index 1de7b684..278c5bd9 100644 --- a/packages/pinball_components/lib/src/components/chrome_dino/chrome_dino.dart +++ b/packages/pinball_components/lib/src/components/chrome_dino/chrome_dino.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flame/components.dart'; -import 'package:flame_forge2d/flame_forge2d.dart' hide Timer; +import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_components/src/components/chrome_dino/behaviors/behaviors.dart'; diff --git a/packages/pinball_components/lib/src/components/dash_bumper/cubit/dash_bumpers_state.dart b/packages/pinball_components/lib/src/components/dash_bumper/cubit/dash_bumpers_state.dart index 7620a2e2..568a96a4 100644 --- a/packages/pinball_components/lib/src/components/dash_bumper/cubit/dash_bumpers_state.dart +++ b/packages/pinball_components/lib/src/components/dash_bumper/cubit/dash_bumpers_state.dart @@ -7,7 +7,7 @@ class DashBumpersState extends Equatable { : this( bumperSpriteStates: { for (var id in DashBumperId.values) - id: DashBumperSpriteState.inactive + id: DashBumperSpriteState.inactive, }, ); diff --git a/packages/pinball_components/lib/src/components/error_component.dart b/packages/pinball_components/lib/src/components/error_component.dart index 49be8069..243bfe1a 100644 --- a/packages/pinball_components/lib/src/components/error_component.dart +++ b/packages/pinball_components/lib/src/components/error_component.dart @@ -51,7 +51,7 @@ class ErrorComponent extends SpriteComponent with HasGameRef { while (words.isNotEmpty) { final word = words.removeAt(0); - if (_textPaint.measureTextWidth('$currentLine $word') <= maxWidth) { + if (_textPaint.getLineMetrics('$currentLine $word').width <= maxWidth) { currentLine = '$currentLine $word'.trim(); } else { lines.add(currentLine); diff --git a/packages/pinball_components/lib/src/components/flapper/flapper.dart b/packages/pinball_components/lib/src/components/flapper/flapper.dart index 11852934..b98e020e 100644 --- a/packages/pinball_components/lib/src/components/flapper/flapper.dart +++ b/packages/pinball_components/lib/src/components/flapper/flapper.dart @@ -161,10 +161,11 @@ class FlapSpriteAnimationComponent extends SpriteAnimationComponent textureSize: textureSize, loop: false, ), - )..onComplete = () { - animation?.reset(); - playing = false; - }; + ); + animationTicker?.onComplete = () { + animationTicker?.reset(); + playing = false; + }; } } diff --git a/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_jointing_behavior.dart b/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_jointing_behavior.dart index 8e487141..062d8946 100644 --- a/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_jointing_behavior.dart +++ b/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_jointing_behavior.dart @@ -1,7 +1,6 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Joints the [Flipper] to allow pivoting around one end. class FlipperJointingBehavior extends Component diff --git a/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_key_controlling_behavior.dart b/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_key_controlling_behavior.dart index b002420a..05bab08b 100644 --- a/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_key_controlling_behavior.dart +++ b/packages/pinball_components/lib/src/components/flipper/behaviors/flipper_key_controlling_behavior.dart @@ -33,14 +33,14 @@ class FlipperKeyControllingBehavior extends Component @override bool onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { if (!_keys.contains(event.logicalKey)) return true; - if (event is RawKeyDownEvent) { + if (event is KeyDownEvent) { bloc.moveUp(); - } else if (event is RawKeyUpEvent) { + } else if (event is KeyUpEvent) { bloc.moveDown(); } diff --git a/packages/pinball_components/lib/src/components/flipper/flipper.dart b/packages/pinball_components/lib/src/components/flipper/flipper.dart index cc6ef13a..9f040deb 100644 --- a/packages/pinball_components/lib/src/components/flipper/flipper.dart +++ b/packages/pinball_components/lib/src/components/flipper/flipper.dart @@ -13,7 +13,7 @@ export 'cubit/flipper_cubit.dart'; /// A bat, typically found in pairs at the bottom of the board. /// /// [Flipper] can be controlled by the player in an arc motion. -/// {@endtemplate flipper} +/// {@endtemplate} class Flipper extends BodyComponent with KeyboardHandler, InitialPosition { /// {@macro flipper} Flipper({ diff --git a/packages/pinball_components/lib/src/components/google_rollover/google_rollover.dart b/packages/pinball_components/lib/src/components/google_rollover/google_rollover.dart index e04e9778..7181fec7 100644 --- a/packages/pinball_components/lib/src/components/google_rollover/google_rollover.dart +++ b/packages/pinball_components/lib/src/components/google_rollover/google_rollover.dart @@ -105,9 +105,10 @@ class _PinSpriteAnimationComponent extends SpriteAnimationComponent textureSize: textureSize, loop: false, ), - )..onComplete = () { - animation?.reset(); - playing = false; - }; + ); + animationTicker?.onComplete = () { + animationTicker?.reset(); + playing = false; + }; } } diff --git a/packages/pinball_components/lib/src/components/google_word/behaviors/google_word_animating_behavior.dart b/packages/pinball_components/lib/src/components/google_word/behaviors/google_word_animating_behavior.dart index 2119c2f8..6e6aded9 100644 --- a/packages/pinball_components/lib/src/components/google_word/behaviors/google_word_animating_behavior.dart +++ b/packages/pinball_components/lib/src/components/google_word/behaviors/google_word_animating_behavior.dart @@ -18,7 +18,7 @@ class GoogleWordAnimatingBehavior extends TimerComponent } else { timer.stop(); bloc.onReset(); - shouldRemove = true; + parent?.remove(this); } } } diff --git a/packages/pinball_components/lib/src/components/google_word/cubit/google_word_cubit.dart b/packages/pinball_components/lib/src/components/google_word/cubit/google_word_cubit.dart index cd69fc9d..0d3fe209 100644 --- a/packages/pinball_components/lib/src/components/google_word/cubit/google_word_cubit.dart +++ b/packages/pinball_components/lib/src/components/google_word/cubit/google_word_cubit.dart @@ -33,7 +33,7 @@ class GoogleWordCubit extends Cubit { if (i.isEven) i: GoogleLetterSpriteState.dimmed else - i: GoogleLetterSpriteState.lit + i: GoogleLetterSpriteState.lit, }, ), ); @@ -46,7 +46,7 @@ class GoogleWordCubit extends Cubit { if (i.isEven) i: GoogleLetterSpriteState.lit else - i: GoogleLetterSpriteState.dimmed + i: GoogleLetterSpriteState.dimmed, }, ), ); @@ -62,7 +62,7 @@ class GoogleWordCubit extends Cubit { if (i.isEven) i: GoogleLetterSpriteState.lit else - i: GoogleLetterSpriteState.dimmed + i: GoogleLetterSpriteState.dimmed, }, ), ); diff --git a/packages/pinball_components/lib/src/components/google_word/cubit/google_word_state.dart b/packages/pinball_components/lib/src/components/google_word/cubit/google_word_state.dart index a1ee2786..d1075880 100644 --- a/packages/pinball_components/lib/src/components/google_word/cubit/google_word_state.dart +++ b/packages/pinball_components/lib/src/components/google_word/cubit/google_word_state.dart @@ -6,7 +6,7 @@ class GoogleWordState extends Equatable { GoogleWordState.initial() : this( letterSpriteStates: { - for (var i = 0; i <= 5; i++) i: GoogleLetterSpriteState.dimmed + for (var i = 0; i <= 5; i++) i: GoogleLetterSpriteState.dimmed, }, ); diff --git a/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart index 569d461f..490f566a 100644 --- a/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/kicker/behaviors/kicker_blinking_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template kicker_blinking_behavior} /// Makes a [Kicker] blink back to [KickerState.lit] when [KickerState.dimmed]. diff --git a/packages/pinball_components/lib/src/components/kicker/kicker.dart b/packages/pinball_components/lib/src/components/kicker/kicker.dart index 611f6032..d384255e 100644 --- a/packages/pinball_components/lib/src/components/kicker/kicker.dart +++ b/packages/pinball_components/lib/src/components/kicker/kicker.dart @@ -8,7 +8,6 @@ import 'package:pinball_components/gen/assets.gen.dart'; import 'package:pinball_components/pinball_components.dart' hide Assets; import 'package:pinball_components/src/components/bumping_behavior.dart'; import 'package:pinball_components/src/components/kicker/behaviors/behaviors.dart'; -import 'package:pinball_flame/pinball_flame.dart'; export 'cubit/kicker_cubit.dart'; @@ -17,7 +16,7 @@ export 'cubit/kicker_cubit.dart'; /// opposite side. /// /// [Kicker]s are usually positioned above each [Flipper]. -/// {@endtemplate kicker} +/// {@endtemplate} class Kicker extends BodyComponent with InitialPosition { /// {@macro kicker} Kicker({ diff --git a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart index b974f33c..e16cdb09 100644 --- a/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/multiball/behaviors/multiball_blinking_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template multiball_blinking_behavior} /// Makes a [Multiball] blink back to [MultiballLightState.lit] when diff --git a/packages/pinball_components/lib/src/components/multiball/multiball.dart b/packages/pinball_components/lib/src/components/multiball/multiball.dart index 38150aea..6ebb6271 100644 --- a/packages/pinball_components/lib/src/components/multiball/multiball.dart +++ b/packages/pinball_components/lib/src/components/multiball/multiball.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:pinball_components/gen/assets.gen.dart'; import 'package:pinball_components/src/components/multiball/behaviors/behaviors.dart'; import 'package:pinball_components/src/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; export 'cubit/multiball_cubit.dart'; diff --git a/packages/pinball_components/lib/src/components/multiplier/multiplier.dart b/packages/pinball_components/lib/src/components/multiplier/multiplier.dart index 64e64375..0d9e53db 100644 --- a/packages/pinball_components/lib/src/components/multiplier/multiplier.dart +++ b/packages/pinball_components/lib/src/components/multiplier/multiplier.dart @@ -2,7 +2,6 @@ import 'package:flame/components.dart'; import 'package:flutter/material.dart'; import 'package:pinball_components/gen/assets.gen.dart'; import 'package:pinball_components/src/components/multiplier/cubit/multiplier_cubit.dart'; -import 'package:pinball_flame/pinball_flame.dart'; export 'cubit/multiplier_cubit.dart'; diff --git a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_jointing_behavior.dart b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_jointing_behavior.dart index 06332bef..8c0f3574 100644 --- a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_jointing_behavior.dart +++ b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_jointing_behavior.dart @@ -1,7 +1,6 @@ import 'package:flame/components.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; class PlungerJointingBehavior extends Component with ParentIsA { PlungerJointingBehavior({required double compressionDistance}) diff --git a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_key_controlling_behavior.dart b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_key_controlling_behavior.dart index fcff816a..6846719e 100644 --- a/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_key_controlling_behavior.dart +++ b/packages/pinball_components/lib/src/components/plunger/behaviors/plunger_key_controlling_behavior.dart @@ -17,14 +17,14 @@ class PlungerKeyControllingBehavior extends Component @override bool onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { if (!_keys.contains(event.logicalKey)) return true; - if (event is RawKeyDownEvent) { + if (event is KeyDownEvent) { bloc.pulled(); - } else if (event is RawKeyUpEvent) { + } else if (event is KeyUpEvent) { bloc.released(); } diff --git a/packages/pinball_components/lib/src/components/plunger/plunger.dart b/packages/pinball_components/lib/src/components/plunger/plunger.dart index 488c79bb..397675dc 100644 --- a/packages/pinball_components/lib/src/components/plunger/plunger.dart +++ b/packages/pinball_components/lib/src/components/plunger/plunger.dart @@ -99,7 +99,7 @@ class _PlungerSpriteAnimationGroupComponent final startedReleasing = state.isReleasing && !current!.isReleasing; final startedPulling = state.isPulling && !current!.isPulling; if (startedReleasing || startedPulling) { - animation?.reset(); + animationTicker?.reset(); } current = state; diff --git a/packages/pinball_components/lib/src/components/score_component/behaviors/score_component_scaling_behavior.dart b/packages/pinball_components/lib/src/components/score_component/behaviors/score_component_scaling_behavior.dart index 5e3d184b..5cbe90c7 100644 --- a/packages/pinball_components/lib/src/components/score_component/behaviors/score_component_scaling_behavior.dart +++ b/packages/pinball_components/lib/src/components/score_component/behaviors/score_component_scaling_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// Scales a [ScoreComponent] according to its position on the board. class ScoreComponentScalingBehavior extends Component diff --git a/packages/pinball_components/lib/src/components/skill_shot/behaviors/skill_shot_blinking_behavior.dart b/packages/pinball_components/lib/src/components/skill_shot/behaviors/skill_shot_blinking_behavior.dart index ea62fc25..bf6d0208 100644 --- a/packages/pinball_components/lib/src/components/skill_shot/behaviors/skill_shot_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/skill_shot/behaviors/skill_shot_blinking_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template skill_shot_blinking_behavior} /// Makes a [SkillShot] blink between [SkillShotSpriteState.lit] and diff --git a/packages/pinball_components/lib/src/components/skill_shot/skill_shot.dart b/packages/pinball_components/lib/src/components/skill_shot/skill_shot.dart index a3ea2af2..d22b2339 100644 --- a/packages/pinball_components/lib/src/components/skill_shot/skill_shot.dart +++ b/packages/pinball_components/lib/src/components/skill_shot/skill_shot.dart @@ -127,10 +127,11 @@ class PinSpriteAnimationComponent extends SpriteAnimationComponent textureSize: textureSize, loop: false, ), - )..onComplete = () { - animation?.reset(); - playing = false; - }; + ); + animationTicker?.onComplete = () { + animationTicker?.reset(); + playing = false; + }; } } diff --git a/packages/pinball_components/lib/src/components/spaceship_rail.dart b/packages/pinball_components/lib/src/components/spaceship_rail.dart index 7dbabc93..a7398191 100644 --- a/packages/pinball_components/lib/src/components/spaceship_rail.dart +++ b/packages/pinball_components/lib/src/components/spaceship_rail.dart @@ -15,7 +15,7 @@ class SpaceshipRail extends Component { children: [ _SpaceshipRail(), _SpaceshipRailExit(), - _SpaceshipRailExitSpriteComponent() + _SpaceshipRailExitSpriteComponent(), ], ); } diff --git a/packages/pinball_components/lib/src/components/spaceship_ramp/spaceship_ramp.dart b/packages/pinball_components/lib/src/components/spaceship_ramp/spaceship_ramp.dart index 8044b79a..a8d11506 100644 --- a/packages/pinball_components/lib/src/components/spaceship_ramp/spaceship_ramp.dart +++ b/packages/pinball_components/lib/src/components/spaceship_ramp/spaceship_ramp.dart @@ -430,7 +430,7 @@ class SpaceshipRampBase extends BodyComponent // Although, the Layer should already be taking care of the contact // filtering, this is to ensure the ball doesn't collide with the ramp base // when the filtering is calculated on different time steps. - contact.setEnabled(other.layer == Layer.board); + contact.isEnabled = other.layer == Layer.board; } @override diff --git a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior.dart b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior.dart index 2c2c50fe..baf570c1 100644 --- a/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior.dart +++ b/packages/pinball_components/lib/src/components/sparky_bumper/behaviors/sparky_bumper_blinking_behavior.dart @@ -1,6 +1,5 @@ import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; -import 'package:pinball_flame/pinball_flame.dart'; /// {@template sparky_bumper_blinking_behavior} /// Makes a [SparkyBumper] blink back to [SparkyBumperState.lit] when diff --git a/packages/pinball_components/pubspec.yaml b/packages/pinball_components/pubspec.yaml index 7fe3ac5e..e18cdee9 100644 --- a/packages/pinball_components/pubspec.yaml +++ b/packages/pinball_components/pubspec.yaml @@ -4,20 +4,16 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.3" dependencies: bloc: ^8.0.3 - flame: ^1.1.1 - flame_bloc: ^1.4.0 - flame_forge2d: - git: - url: https://github.com/flame-engine/flame - path: packages/flame_forge2d/ - ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f + flame: ^1.18.0 + flame_bloc: ^1.12.0 + flame_forge2d: ^0.18.1 flutter: sdk: flutter - intl: ^0.17.0 + intl: ^0.19.0 pinball_audio: path: ../pinball_audio pinball_flame: @@ -32,8 +28,8 @@ dev_dependencies: flame_test: ^1.3.0 flutter_test: sdk: flutter - mocktail: ^0.2.0 - very_good_analysis: ^2.4.0 + mocktail: ^1.0.4 + very_good_analysis: ^6.0.0 flutter: uses-material-design: true diff --git a/packages/pinball_components/sandbox/lib/common/games.dart b/packages/pinball_components/sandbox/lib/common/games.dart index bee6a280..cc926afc 100644 --- a/packages/pinball_components/sandbox/lib/common/games.dart +++ b/packages/pinball_components/sandbox/lib/common/games.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flame/components.dart'; +import 'package:flame/events.dart'; import 'package:flame/input.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:flutter/material.dart'; @@ -18,7 +19,7 @@ abstract class AssetsGame extends Forge2DGame { Future onLoad() async { await super.onLoad(); if (_imagesFileNames != null) { - await images.loadAll(_imagesFileNames!); + await images.loadAll(_imagesFileNames); } } } @@ -37,19 +38,18 @@ abstract class LineGame extends AssetsGame with PanDetector { @override Future onLoad() async { await super.onLoad(); - - camera.followVector2(Vector2.zero()); - unawaited(add(_PreviewLine())); + camera.follow(PositionComponent(position: Vector2.zero())); + add(_PreviewLine()); } @override void onPanStart(DragStartInfo info) { - _lineEnd = info.eventPosition.game; + _lineEnd = info.eventPosition.global; } @override void onPanUpdate(DragUpdateInfo info) { - _lineEnd = info.eventPosition.game; + _lineEnd = info.eventPosition.global; } @override diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_a_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_a_game.dart index 78cebd95..40fccf9e 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_a_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_a_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/extensions.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -23,7 +23,7 @@ class AndroidBumperAGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( AndroidBumper.a()..priority = 1, ); diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_b_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_b_game.dart index 9bd2caff..9bfa70df 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_b_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_b_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/extensions.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -23,7 +23,7 @@ class AndroidBumperBGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( AndroidBumper.b()..priority = 1, ); diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart index ac1bc6fe..ada1ead6 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/android_bumper_cow_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/extensions.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -23,7 +23,7 @@ class AndroidBumperCowGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( AndroidBumper.cow()..priority = 1, ); diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/android_spaceship_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/android_spaceship_game.dart index c7c9b76c..6d2bb2b7 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/android_spaceship_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/android_spaceship_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; @@ -29,7 +29,7 @@ class AndroidSpaceshipGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( FlameBlocProvider( create: AndroidSpaceshipCubit.new, diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_rail_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_rail_game.dart index 9acee409..3955476c 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_rail_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_rail_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -27,7 +27,7 @@ class SpaceshipRailGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2(-30, -10)); + camera.follow(PositionComponent(position: Vector2(-30, -10))); await add(SpaceshipRail()); await ready(); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_ramp_game.dart index b19aef56..6f7d6dea 100644 --- a/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/android_acres/spaceship_ramp_game.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:flame/components.dart'; import 'package:flame/input.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -43,7 +44,7 @@ class SpaceshipRampGame extends BallGame with KeyboardEvents { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2(-12, -50)); + camera.follow(PositionComponent(position: Vector2(-12, -50))); _spaceshipRamp = SpaceshipRamp(); await add(_spaceshipRamp); @@ -52,11 +53,10 @@ class SpaceshipRampGame extends BallGame with KeyboardEvents { @override KeyEventResult onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { - if (event is RawKeyDownEvent && - event.logicalKey == LogicalKeyboardKey.space) { + if (event is KeyDownEvent && event.logicalKey == LogicalKeyboardKey.space) { _spaceshipRamp .readBloc() .onProgressed(); diff --git a/packages/pinball_components/sandbox/lib/stories/arrow_icon/arrow_icon_game.dart b/packages/pinball_components/sandbox/lib/stories/arrow_icon/arrow_icon_game.dart index 23af63b0..aa5adf86 100644 --- a/packages/pinball_components/sandbox/lib/stories/arrow_icon/arrow_icon_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/arrow_icon/arrow_icon_game.dart @@ -1,8 +1,9 @@ -import 'package:flame/game.dart'; +import 'package:flame/components.dart'; +import 'package:flame/events.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/games.dart'; -class ArrowIconGame extends AssetsGame with HasTappables { +class ArrowIconGame extends AssetsGame with TapCallbacks { ArrowIconGame() : super( imagesFileNames: [ @@ -16,7 +17,7 @@ class ArrowIconGame extends AssetsGame with HasTappables { @override Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( ArrowIcon( diff --git a/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart index b5e29a8e..cc4e0c69 100644 --- a/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/ball/basic_ball_game.dart @@ -1,4 +1,4 @@ -import 'package:flame/input.dart'; +import 'package:flame/events.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:pinball_theme/pinball_theme.dart' as theme; @@ -43,7 +43,7 @@ class BallGame extends AssetsGame with TapDetector, Traceable { Ball( assetPath: characterBallPaths[character], ) - ..initialPosition = info.eventPosition.game + ..initialPosition = info.eventPosition.global ..layer = ballLayer ..priority = ballPriority, ); diff --git a/packages/pinball_components/sandbox/lib/stories/bottom_group/baseboard_game.dart b/packages/pinball_components/sandbox/lib/stories/bottom_group/baseboard_game.dart index 4e86f732..d1af132d 100644 --- a/packages/pinball_components/sandbox/lib/stories/bottom_group/baseboard_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/bottom_group/baseboard_game.dart @@ -21,8 +21,7 @@ class BaseboardGame extends BallGame { @override Future onLoad() async { await super.onLoad(); - - final center = screenToWorld(camera.viewport.canvasSize! / 2); + final center = screenToWorld(camera.viewport.size / 2); await addAll([ Baseboard(side: BoardSide.left) ..initialPosition = center - Vector2(25, 0) diff --git a/packages/pinball_components/sandbox/lib/stories/bottom_group/flipper_game.dart b/packages/pinball_components/sandbox/lib/stories/bottom_group/flipper_game.dart index bdb23141..d73f24e0 100644 --- a/packages/pinball_components/sandbox/lib/stories/bottom_group/flipper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/bottom_group/flipper_game.dart @@ -28,7 +28,7 @@ class FlipperGame extends BallGame with KeyboardEvents { Future onLoad() async { await super.onLoad(); - final center = screenToWorld(camera.viewport.canvasSize! / 2); + final center = screenToWorld(camera.viewport.size / 2); await addAll([ leftFlipper = Flipper(side: BoardSide.left) ..initialPosition = center - Vector2(Flipper.size.x, 0), diff --git a/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart b/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart index 590638e0..636431fb 100644 --- a/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/bottom_group/kicker_game.dart @@ -24,7 +24,7 @@ class KickerGame extends BallGame { Future onLoad() async { await super.onLoad(); - final center = screenToWorld(camera.viewport.canvasSize! / 2); + final center = screenToWorld(camera.viewport.size / 2); await addAll( [ Kicker(side: BoardSide.left) diff --git a/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart b/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart index 12e8ec26..14886580 100644 --- a/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/boundaries/boundaries_game.dart @@ -1,4 +1,4 @@ -import 'package:flame/extensions.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -24,8 +24,8 @@ class BoundariesGame extends BallGame { await super.onLoad(); camera - ..followVector2(Vector2.zero()) - ..zoom = 6; + ..follow(PositionComponent(position: Vector2.zero())) + ..viewfinder.zoom = 6; await add(Boundaries()); await ready(); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart index d6e7ef95..a644af64 100644 --- a/packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/chrome_dino_game.dart @@ -1,4 +1,4 @@ -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -22,7 +22,7 @@ class ChromeDinoGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add(ChromeDino()); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart index 849e17a8..2520261e 100644 --- a/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/dino_walls_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -25,7 +25,7 @@ class DinoWallsGame extends BallGame { ]); await add(DinoWalls()); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await traceAllBodies(); } } diff --git a/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart b/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart index 1a9eb2e5..28482018 100644 --- a/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/dino_desert/slingshots_game.dart @@ -1,4 +1,4 @@ -import 'package:flame/extensions.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -22,7 +22,7 @@ class SlingshotsGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add(Slingshots()); await ready(); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart b/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart index 11f2b776..be270350 100644 --- a/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/effects/camera_zoom_game.dart @@ -24,7 +24,7 @@ class CameraZoomGame extends AssetsGame with TapDetector { ), ); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); } @override diff --git a/packages/pinball_components/sandbox/lib/stories/error_component/error_component_game.dart b/packages/pinball_components/sandbox/lib/stories/error_component/error_component_game.dart index c64e6d48..4521dec0 100644 --- a/packages/pinball_components/sandbox/lib/stories/error_component/error_component_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/error_component/error_component_game.dart @@ -11,7 +11,7 @@ class ErrorComponentGame extends AssetsGame { @override Future onLoad() async { - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add(ErrorComponent(label: text)); await add( diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_a_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_a_game.dart index 4d437f76..9fe514e2 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_a_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_a_game.dart @@ -1,7 +1,7 @@ import 'dart:async'; +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -24,7 +24,7 @@ class DashBumperAGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( FlameBlocProvider( create: DashBumpersCubit.new, diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_b_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_b_game.dart index 64af8c59..3145c7c8 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_b_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_b_game.dart @@ -1,7 +1,7 @@ import 'dart:async'; +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -24,7 +24,7 @@ class DashBumperBGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( FlameBlocProvider( create: DashBumpersCubit.new, diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_main_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_main_game.dart index 773ead8d..958c9cc1 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_main_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/dash_bumper_main_game.dart @@ -1,7 +1,7 @@ import 'dart:async'; +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; -import 'package:flame_forge2d/flame_forge2d.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -24,7 +24,7 @@ class DashBumperMainGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( FlameBlocProvider( create: DashBumpersCubit.new, diff --git a/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart b/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart index 3174f6f7..d4c4a1a1 100644 --- a/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/flutter_forest/signpost_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:flame_bloc/flame_bloc.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -30,7 +30,7 @@ class SignpostGame extends BallGame { await super.onLoad(); _bloc = SignpostCubit(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add( FlameMultiBlocProvider( providers: [ diff --git a/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart b/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart index 94389f60..fa258a58 100644 --- a/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/google_word/google_letter_game.dart @@ -1,4 +1,4 @@ -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -21,7 +21,7 @@ class GoogleLetterGame extends BallGame { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await add(GoogleLetter(0)); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart index fef1a145..02fc9e2e 100644 --- a/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/launch_ramp/launch_ramp_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -29,8 +29,8 @@ class LaunchRampGame extends BallGame { await super.onLoad(); camera - ..followVector2(Vector2.zero()) - ..zoom = 7.5; + ..follow(PositionComponent(position: Vector2.zero())) + ..viewfinder.zoom = 7.5; await add(LaunchRamp()); await ready(); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart b/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart index 83b53785..a6489089 100644 --- a/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/multiball/multiball_game.dart @@ -1,3 +1,4 @@ +import 'package:flame/components.dart'; import 'package:flame/input.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -31,7 +32,7 @@ class MultiballGame extends BallGame with KeyboardEvents { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await addAll(multiballs); await traceAllBodies(); @@ -39,11 +40,10 @@ class MultiballGame extends BallGame with KeyboardEvents { @override KeyEventResult onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { - if (event is RawKeyDownEvent && - event.logicalKey == LogicalKeyboardKey.space) { + if (event is KeyDownEvent && event.logicalKey == LogicalKeyboardKey.space) { for (final multiball in multiballs) { multiball.bloc.onBlink(); } diff --git a/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart index ae641623..e1fe3c3c 100644 --- a/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/multipliers/multipliers_game.dart @@ -1,4 +1,5 @@ import 'dart:math' as math; +import 'package:flame/components.dart'; import 'package:flame/input.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -56,7 +57,7 @@ class MultipliersGame extends BallGame with KeyboardEvents { Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); await addAll(multipliers); await traceAllBodies(); @@ -64,10 +65,10 @@ class MultipliersGame extends BallGame with KeyboardEvents { @override KeyEventResult onKeyEvent( - RawKeyEvent event, + KeyEvent event, Set keysPressed, ) { - if (event is RawKeyDownEvent) { + if (event is KeyDownEvent) { var currentMultiplier = 1; if (event.logicalKey == LogicalKeyboardKey.digit2) { diff --git a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart index 328afce4..914b5b1a 100644 --- a/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/plunger/plunger_game.dart @@ -24,7 +24,7 @@ class PlungerGame extends BallGame Future onLoad() async { await super.onLoad(); - final center = screenToWorld(camera.viewport.canvasSize! / 2); + final center = screenToWorld(camera.viewport.size / 2); final plunger = Plunger() ..initialPosition = Vector2(center.x - 8.8, center.y); await add( diff --git a/packages/pinball_components/sandbox/lib/stories/score/score_game.dart b/packages/pinball_components/sandbox/lib/stories/score/score_game.dart index edb4fa36..78fde2b5 100644 --- a/packages/pinball_components/sandbox/lib/stories/score/score_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/score/score_game.dart @@ -1,6 +1,8 @@ import 'dart:math'; +import 'package:flame/components.dart'; import 'package:flame/effects.dart'; +import 'package:flame/events.dart'; import 'package:flame/input.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/common/common.dart'; @@ -27,7 +29,7 @@ class ScoreGame extends AssetsGame with TapDetector { @override Future onLoad() async { await super.onLoad(); - camera.followVector2(Vector2.zero()); + camera.follow(PositionComponent(position: Vector2.zero())); } @override @@ -38,7 +40,7 @@ class ScoreGame extends AssetsGame with TapDetector { add( ScoreComponent( points: score, - position: info.eventPosition.game..multiply(Vector2(1, -1)), + position: info.eventPosition.global..multiply(Vector2(1, -1)), effectController: EffectController(duration: 1), ), ); diff --git a/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_bumper_game.dart b/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_bumper_game.dart index c45c4895..4b40e492 100644 --- a/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_bumper_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_bumper_game.dart @@ -25,7 +25,7 @@ class SparkyBumperGame extends BallGame { Assets.images.sparky.bumper.c.dimmed.keyName, ]); - final center = screenToWorld(camera.viewport.canvasSize! / 2); + final center = screenToWorld(camera.viewport.size / 2); final sparkyBumperA = SparkyBumper.a() ..initialPosition = Vector2(center.x - 20, center.y + 20) ..priority = 1; diff --git a/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_computer_game.dart b/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_computer_game.dart index b4002479..dfba57bb 100644 --- a/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_computer_game.dart +++ b/packages/pinball_components/sandbox/lib/stories/sparky_scorch/sparky_computer_game.dart @@ -1,6 +1,6 @@ import 'dart:async'; -import 'package:flame/input.dart'; +import 'package:flame/components.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:sandbox/stories/ball/basic_ball_game.dart'; @@ -22,7 +22,7 @@ class SparkyComputerGame extends BallGame { Assets.images.sparky.computer.glow.keyName, ]); - camera.followVector2(Vector2(-10, -40)); + camera.follow(PositionComponent(position: Vector2(-10, -40))); await add(SparkyComputer()); await ready(); await traceAllBodies(); diff --git a/packages/pinball_components/sandbox/pubspec.lock b/packages/pinball_components/sandbox/pubspec.lock index 5e4c6061..ac8ec57e 100644 --- a/packages/pinball_components/sandbox/pubspec.lock +++ b/packages/pinball_components/sandbox/pubspec.lock @@ -5,144 +5,218 @@ packages: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "0bd9a99b6eb96f07af141f0eb53eace8983e8e5aa5de59777aca31684680ef22" + url: "https://pub.dev" source: hosted version: "2.3.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" source: hosted - version: "2.8.2" + version: "2.11.0" audioplayers: dependency: transitive description: name: audioplayers - url: "https://pub.dartlang.org" + sha256: "752039d6aa752597c98ec212e9759519061759e402e7da59a511f39d43aa07d2" + url: "https://pub.dev" source: hosted - version: "0.20.1" + version: "6.0.0" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: de576b890befe27175c2f511ba8b742bec83765fa97c3ce4282bba46212f58e4 + url: "https://pub.dev" + source: hosted + version: "5.0.0" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: e507887f3ff18d8e5a10a668d7bedc28206b12e10b98347797257c6ae1019c3b + url: "https://pub.dev" + source: hosted + version: "6.0.0" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "3d3d244c90436115417f170426ce768856d8fe4dfc5ed66a049d2890acfa82f9" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "6834dd48dfb7bc6c2404998ebdd161f79cd3774a7e6779e1348d54a3bfdcfaa5" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: db8fc420dadf80da18e2286c18e746fb4c3b2c5adbf0c963299dde046828886d + url: "https://pub.dev" + source: hosted + version: "5.0.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "8605762dddba992138d476f6a0c3afd9df30ac5b96039929063eceed416795c2" + url: "https://pub.dev" + source: hosted + version: "4.0.0" bloc: dependency: transitive description: name: bloc - url: "https://pub.dartlang.org" + sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e" + url: "https://pub.dev" source: hosted - version: "8.0.3" + version: "8.1.4" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.18.0" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" dashbook: dependency: "direct main" description: name: dashbook - url: "https://pub.dartlang.org" + sha256: a022d40095694c7345cac93ade887de3b0a8935cc45602dc533ec75568f4ef74 + url: "https://pub.dev" source: hosted version: "0.1.7" device_frame: dependency: transitive description: name: device_frame - url: "https://pub.dartlang.org" + sha256: d5b4541a8755a36ac50b6605200e51db6d264438a38f327aec2ce31870e49885 + url: "https://pub.dev" source: hosted version: "1.0.0" equatable: dependency: transitive description: name: equatable - url: "https://pub.dartlang.org" + sha256: c6094fd1efad3046334a9c40bee022147e55c25401ccd89b94e373e3edadd375 + url: "https://pub.dev" source: hosted version: "2.0.3" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: "35d0f481d939de0d640b3db9a7aa36a52cd22054a798a73b4f50bdad5ce12678" + url: "https://pub.dev" source: hosted version: "1.1.2" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad + url: "https://pub.dev" source: hosted version: "6.1.2" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" flame: dependency: "direct main" description: name: flame - url: "https://pub.dartlang.org" + sha256: "79133dc46a3ff870950f41d0dc1598414e7bd7ae2c29bd9f0a9de208d9a70cb7" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.18.0" flame_audio: dependency: transitive description: name: flame_audio - url: "https://pub.dartlang.org" + sha256: "32e5788945469cebb807e741027e645a737e2618afc9b682e7f48607e0637f48" + url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "2.10.2" flame_bloc: dependency: "direct main" description: name: flame_bloc - url: "https://pub.dartlang.org" + sha256: "19d907204b65f81b08adf71da02e632e68757b1a6738378d8dd4bc024c1660b8" + url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.12.0" flame_forge2d: dependency: "direct main" description: - path: "packages/flame_forge2d" - ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f - resolved-ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f - url: "https://github.com/flame-engine/flame" - source: git - version: "0.11.0" + name: flame_forge2d + sha256: "1ec1c5b4978b64d2d16ca90f86de469959991ef996970866c3f9de580b3dbe40" + url: "https://pub.dev" + source: hosted + version: "0.18.1" flutter: dependency: "direct main" description: flutter @@ -152,21 +226,24 @@ packages: dependency: transitive description: name: flutter_bloc - url: "https://pub.dartlang.org" + sha256: f0ecf6e6eb955193ca60af2d5ca39565a86b8a142452c5b24d96fb477428f4d2 + url: "https://pub.dev" source: hosted - version: "8.0.1" + version: "8.1.5" flutter_colorpicker: dependency: transitive description: name: flutter_colorpicker - url: "https://pub.dartlang.org" + sha256: "458a6ed8ea480eb16ff892aedb4b7092b2804affd7e046591fb03127e8d8ef8b" + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_markdown: dependency: transitive description: name: flutter_markdown - url: "https://pub.dartlang.org" + sha256: "5a3ecbecfed294a464b952494daafc05cf97f6faf9441168f507e9c9400f50e0" + url: "https://pub.dev" source: hosted version: "0.6.9" flutter_test: @@ -183,14 +260,16 @@ packages: dependency: transitive description: name: forge2d - url: "https://pub.dartlang.org" + sha256: "40915333b688ddaaa616d9c8ab9ff205faea0adf83dddc1a6e617694ffa9e16e" + url: "https://pub.dev" source: hosted - version: "0.11.0" + version: "0.13.0" freezed_annotation: dependency: transitive description: name: freezed_annotation - url: "https://pub.dartlang.org" + sha256: "1be037f901137bf2b9a0c309e9bf2694d6ec77687645211218191ade4f41a4b8" + url: "https://pub.dev" source: hosted version: "1.1.0" geometry: @@ -204,133 +283,160 @@ packages: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + sha256: "2ed163531e071c2c6b7c659635112f24cb64ecbebf6af46b550d536c0b1aa112" + url: "https://pub.dev" source: hosted version: "0.13.4" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185 + url: "https://pub.dev" source: hosted version: "4.0.0" intl: dependency: transitive description: name: intl - url: "https://pub.dartlang.org" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" source: hosted - version: "0.17.0" - js: - dependency: transitive - description: - name: js - url: "https://pub.dartlang.org" - source: hosted - version: "0.6.3" + version: "0.19.0" json_annotation: dependency: transitive description: name: json_annotation - url: "https://pub.dartlang.org" + sha256: "2639efc0237c7b71c6584696c0847ea4e4733ddaf571ae9c79d5295e8ae17272" + url: "https://pub.dev" source: hosted version: "4.4.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" markdown: dependency: transitive description: name: markdown - url: "https://pub.dartlang.org" + sha256: "01512006c8429f604eb10f9848717baeaedf99e991d14a50d540d9beff08e5c6" + url: "https://pub.dev" source: hosted version: "4.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" source: hosted - version: "0.12.11" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.8.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.12.0" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" ordered_set: dependency: transitive description: name: ordered_set - url: "https://pub.dartlang.org" + sha256: "1bfaaaee0419e43ecc9eaebd410eb4bd5039657b72011de75ff3e2915c9aac60" + url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.0.3" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.0" path_provider: dependency: transitive description: name: path_provider - url: "https://pub.dartlang.org" + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" + url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.15" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: "32bbab16092df3bedab89ed9f2c1cfaedf25d96a5036f62f16d5e372890d068c" + url: "https://pub.dev" source: hosted version: "2.0.13" - path_provider_ios: + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - url: "https://pub.dartlang.org" + name: path_provider_foundation + sha256: "916731ccbdce44d545414dd9961f26ba5fbaa74bcbb55237d8e65a623a8c7297" + url: "https://pub.dev" source: hosted - version: "2.0.8" + version: "2.2.4" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: "1e109f4df28bd95eab71e323008b53d19c4d633bc1ab05b577518773474e9621" + url: "https://pub.dev" source: hosted version: "2.1.5" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - url: "https://pub.dartlang.org" - source: hosted - version: "2.0.5" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "3dc0d51b07f85fec3746d9f4e8d31c73bb173cafa2e763f03f8df2e8d1878882" + url: "https://pub.dev" source: hosted version: "2.0.3" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: "366ad4e3541ea707f859e7148d4d5aba67d589d7936cee04a05c464a277eeb27" + url: "https://pub.dev" source: hosted version: "2.0.5" pinball_audio: @@ -372,84 +478,96 @@ packages: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" + url: "https://pub.dev" source: hosted version: "2.1.2" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" provider: dependency: transitive description: name: provider - url: "https://pub.dartlang.org" + sha256: "7896193cf752c40ba7f7732a95264319a787871e5d628225357f5c909182bc06" + url: "https://pub.dev" source: hosted version: "6.0.2" shared_preferences: dependency: transitive description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: "1cd0c3c0be0826eb52362ab018a81eed13b616ad9a52548c6ceb1bb349e6b6eb" + url: "https://pub.dev" source: hosted version: "2.0.13" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: bc236594233d10b7668dd90414fe0e09d906115aaa1dfe269e478e5f2af532a6 + url: "https://pub.dev" source: hosted version: "2.0.11" shared_preferences_ios: dependency: transitive description: name: shared_preferences_ios - url: "https://pub.dartlang.org" + sha256: "69d593a80fee48b97c66787eb930cdd42941c1537e80a1ff88a8c12a926c47d4" + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: ac361c65c4cf342dfc0a8b9e45eab66b9b3ad6eaff9785850d4ec0cf6b474422 + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos - url: "https://pub.dartlang.org" + sha256: f063907c3f678de8daa033d234b7c9e420df5fe3d499a97bfb82cc30cf171496 + url: "https://pub.dev" source: hosted version: "2.0.3" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: "992f0fdc46d0a3c0ac2e5859f2de0e577bbe51f78a77ee8f357cbe626a2ad32d" + url: "https://pub.dev" source: hosted version: "2.0.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: "09da0185028a227d51721cade7a3cbd5cc5f163a19593266f2acba87f729bf9c" + url: "https://pub.dev" source: hosted version: "2.0.3" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: ae68cf0df0910e38c95522dbd8a6082ce9715053c369750c5709d17de81d032e + url: "https://pub.dev" source: hosted version: "2.1.0" sky_engine: @@ -461,149 +579,194 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" source: hosted - version: "3.0.0+2" + version: "3.1.0+1" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" source: hosted - version: "0.4.8" + version: "0.7.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee" + url: "https://pub.dev" source: hosted version: "1.3.0" url_launcher: dependency: transitive description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "2d9de5efddbd134ee68d73d0735e7477c00bcbf1ee91afa37514d6c876d38587" + url: "https://pub.dev" source: hosted version: "6.1.0" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: b693e6698f7e6985710d67a050e3acbdda3b9cfc4b43b9f1c40cdbe42c705b92 + url: "https://pub.dev" source: hosted version: "6.0.15" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: e51a93f0da65733beb69fdbc43cea524d86ed8e524479e9faefc9304cec34a57 + url: "https://pub.dev" source: hosted version: "6.0.15" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: c3ec89d52305ec647cf037eafe2be8d2f1149b5723d1f2ec716fc3d58469de5d + url: "https://pub.dev" source: hosted version: "3.0.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: c028c7f80fdb99cf48b94c471c0f8b9b855a188f4865df76e2a7663ae640e9d2 + url: "https://pub.dev" source: hosted version: "3.0.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "1b9c4dab07794498b83b5f938e26b20f68c3b460a3015b0307f9541cb34ef93d" + url: "https://pub.dev" source: hosted version: "2.0.5" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "2b5494722d4eb0fe1a12ceb15a4b132ba7dfc92793089c243bf109bed828d97f" + url: "https://pub.dev" source: hosted version: "2.0.9" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: aa14bdb9265fa22416fc387b33e44eb37fd38768bf465fafcec73d283f3457b1 + url: "https://pub.dev" source: hosted version: "3.0.0" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "814e9e88f21a176ae1359149021870e87f7cddaf633ab678a5d2b0bff7fd1ba8" + url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "4.4.0" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.4" very_good_analysis: dependency: "direct dev" description: name: very_good_analysis - url: "https://pub.dartlang.org" + sha256: cecd7a0e92978dbece97c255502c8965f2db3439cde5a11f4b2c65f1955911ee + url: "https://pub.dev" source: hosted version: "2.4.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: "8dd0c450f748d553a8181c6cb9fdf12b987cebaeccdbc75032186b89ae93907b" + url: "https://pub.dev" source: hosted version: "2.4.4" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: "060b6e1c891d956f72b5ac9463466c37cce3fa962a921532fc001e86fe93438e" + url: "https://pub.dev" source: hosted version: "0.2.0+1" sdks: - dart: ">=2.16.0 <3.0.0" - flutter: ">=2.10.0" + dart: ">=3.4.3 <4.0.0" + flutter: ">=3.22.0" diff --git a/packages/pinball_components/sandbox/pubspec.yaml b/packages/pinball_components/sandbox/pubspec.yaml index cbe1c7be..730aaab4 100644 --- a/packages/pinball_components/sandbox/pubspec.yaml +++ b/packages/pinball_components/sandbox/pubspec.yaml @@ -4,17 +4,13 @@ version: 1.0.0+1 publish_to: none environment: - sdk: ">=2.16.0 <3.0.0" + sdk: "^3.4.1" dependencies: dashbook: ^0.1.7 - flame: ^1.1.1 - flame_bloc: ^1.4.0 - flame_forge2d: - git: - url: https://github.com/flame-engine/flame - path: packages/flame_forge2d/ - ref: a50d4a1e7d9eaf66726ed1bb9894c9d495547d8f + flame: ^1.18.0 + flame_bloc: ^1.12.0 + flame_forge2d: ^0.18.1 flutter: sdk: flutter pinball_components: diff --git a/packages/pinball_components/sandbox/web/index.html b/packages/pinball_components/sandbox/web/index.html index 55e4c8cc..170e9cb9 100644 --- a/packages/pinball_components/sandbox/web/index.html +++ b/packages/pinball_components/sandbox/web/index.html @@ -1,5 +1,6 @@ + - + sandbox + - + + \ No newline at end of file diff --git a/packages/pinball_components/test/helpers/test_game.dart b/packages/pinball_components/test/helpers/test_game.dart index 57c7961c..c96f3c3a 100644 --- a/packages/pinball_components/test/helpers/test_game.dart +++ b/packages/pinball_components/test/helpers/test_game.dart @@ -1,5 +1,4 @@ -import 'package:flame/game.dart'; -import 'package:flame/input.dart'; +import 'package:flame/events.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; class TestGame extends Forge2DGame { @@ -12,7 +11,7 @@ class TestGame extends Forge2DGame { @override Future onLoad() async { if (_assets != null) { - await images.loadAll(_assets!); + await images.loadAll(_assets); } await super.onLoad(); } @@ -22,6 +21,6 @@ class KeyboardTestGame extends TestGame with HasKeyboardHandlerComponents { KeyboardTestGame([List? assets]) : super(assets); } -class TappablesTestGame extends TestGame with HasTappables { +class TappablesTestGame extends TestGame with TapCallbacks { TappablesTestGame([List? assets]) : super(assets); } diff --git a/packages/pinball_components/test/src/components/android_animatronic/behaviors/android_animatronic_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/android_animatronic/behaviors/android_animatronic_ball_contact_behavior_test.dart index 4d8bb675..d7d864e2 100644 --- a/packages/pinball_components/test/src/components/android_animatronic/behaviors/android_animatronic_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/android_animatronic/behaviors/android_animatronic_ball_contact_behavior_test.dart @@ -11,8 +11,8 @@ import 'package:pinball_components/src/components/android_animatronic/behaviors/ import '../../../../helpers/helpers.dart'; -class _MockAndroidSpaceshipCubit extends Mock implements AndroidSpaceshipCubit { -} +class _MockAndroidSpaceshipCubit extends Mock + implements AndroidSpaceshipCubit {} class _MockBall extends Mock implements Ball {} @@ -32,9 +32,9 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'beginContact calls onBallContacted when in contact with a ball', - (game) async { + setUp: (game, _) async { final behavior = AndroidAnimatronicBallContactBehavior(); final bloc = _MockAndroidSpaceshipCubit(); whenListen( @@ -48,12 +48,24 @@ void main() { AndroidSpaceshipState>.value( value: bloc, children: [ - AndroidSpaceship.test(children: [animatronic]) + AndroidSpaceship.test(children: [animatronic]), ], ); await animatronic.add(behavior); await game.ensureAdd(androidSpaceship); - + }, + verify: (game, _) async { + final behavior = game + .descendants() + .whereType() + .single; + final bloc = game + .descendants() + .whereType< + FlameBlocProvider>() + .single + .bloc; behavior.beginContact(_MockBall(), _MockContact()); verify(bloc.onBallContacted).called(1); diff --git a/packages/pinball_components/test/src/components/android_animatronic_test.dart b/packages/pinball_components/test/src/components/android_animatronic_test.dart index 55b564fe..a0b27ca3 100644 --- a/packages/pinball_components/test/src/components/android_animatronic_test.dart +++ b/packages/pinball_components/test/src/components/android_animatronic_test.dart @@ -18,15 +18,19 @@ void main() { 'renders correctly', setUp: (game, tester) async { await game.images.load(asset); - await game.ensureAdd(AndroidAnimatronic()); - game.camera.followVector2(Vector2.zero()); + await game.world.ensureAdd(AndroidAnimatronic()); + game.camera.moveTo(Vector2.zero()); await tester.pump(); }, verify: (game, tester) async { final animationDuration = game - .firstChild()! - .firstChild()! - .animation! + .descendants() + .whereType() + .single + .descendants() + .whereType() + .single + .animationTicker! .totalDuration(); await expectLater( @@ -50,35 +54,54 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { + setUp: (game, _) async { final androidAnimatronic = AndroidAnimatronic(); await game.ensureAdd(androidAnimatronic); - expect(game.contains(androidAnimatronic), isTrue); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); }, ); group('adds', () { - flameTester.test('new children', (game) async { - final component = Component(); - final androidAnimatronic = AndroidAnimatronic( - children: [component], - ); - await game.ensureAdd(androidAnimatronic); - expect(androidAnimatronic.children, contains(component)); - }); + flameTester.testGameWidget( + 'new children', + setUp: (game, _) async { + final component = Component(); + final androidAnimatronic = AndroidAnimatronic( + children: [component], + ); + await game.ensureAdd(androidAnimatronic); + }, + verify: (game, _) async { + final androidAnimatronic = + game.descendants().whereType().single; + expect( + androidAnimatronic.children.whereType(), + isNotEmpty, + ); + }, + ); - flameTester.test('a AndroidAnimatronicBallContactBehavior', (game) async { - final androidAnimatronic = AndroidAnimatronic(); - await game.ensureAdd(androidAnimatronic); - expect( - androidAnimatronic.children - .whereType() - .single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a AndroidAnimatronicBallContactBehavior', + setUp: (game, _) async { + final androidAnimatronic = AndroidAnimatronic(); + await game.ensureAdd(androidAnimatronic); + }, + verify: (game, _) async { + final androidAnimatronic = + game.descendants().whereType().single; + expect( + androidAnimatronic.children + .whereType() + .single, + isNotNull, + ); + }, + ); }); }); } diff --git a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart index 52e196dc..e58d844c 100644 --- a/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/android_bumper_test.dart @@ -26,123 +26,225 @@ void main() { final flameTester = FlameTester(() => TestGame(assets)); group('AndroidBumper', () { - flameTester.test('"a" loads correctly', (game) async { - final androidBumper = AndroidBumper.a(); - await game.ensureAdd(androidBumper); - expect(game.contains(androidBumper), isTrue); - }); - - flameTester.test('"b" loads correctly', (game) async { - final androidBumper = AndroidBumper.b(); - await game.ensureAdd(androidBumper); - expect(game.contains(androidBumper), isTrue); - }); - - flameTester.test('"cow" loads correctly', (game) async { - final androidBumper = AndroidBumper.cow(); - await game.ensureAdd(androidBumper); - expect(game.contains(androidBumper), isTrue); - }); - - flameTester.test('closes bloc when removed', (game) async { - final bloc = _MockAndroidBumperCubit(); - whenListen( - bloc, - const Stream.empty(), - initialState: AndroidBumperState.lit, - ); - when(bloc.close).thenAnswer((_) async {}); - final androidBumper = AndroidBumper.test(bloc: bloc); - - await game.ensureAdd(androidBumper); - game.remove(androidBumper); - await game.ready(); - - verify(bloc.close).called(1); - }); - - group('adds', () { - flameTester.test('an AndroidBumperBallContactBehavior', (game) async { + flameTester.testGameWidget( + '"a" loads correctly', + setUp: (game, _) async { + await game.onLoad(); final androidBumper = AndroidBumper.a(); await game.ensureAdd(androidBumper); - expect( - androidBumper.children - .whereType() - .single, - isNotNull, + await game.ready(); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); + }, + ); + + flameTester.testGameWidget( + '"b" loads correctly', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.b(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); + }, + ); + + flameTester.testGameWidget( + '"cow" loads correctly', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.cow(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); + }, + ); + + flameTester.testGameWidget( + 'closes bloc when removed', + setUp: (game, _) async { + await game.onLoad(); + final bloc = _MockAndroidBumperCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: AndroidBumperState.lit, ); - }); + when(bloc.close).thenAnswer((_) async {}); + final androidBumper = AndroidBumper.test(bloc: bloc); - flameTester.test('an AndroidBumperBlinkingBehavior', (game) async { - final androidBumper = AndroidBumper.a(); await game.ensureAdd(androidBumper); - expect( - androidBumper.children - .whereType() - .single, - isNotNull, - ); - }); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + final bloc = androidBumper.bloc; + game.remove(androidBumper); + game.update(0); + expect(game.descendants().whereType(), isEmpty); + verify(bloc.close).called(1); + }, + ); + + group('adds', () { + flameTester.testGameWidget( + 'an AndroidBumperBallContactBehavior', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.a(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect( + androidBumper.children + .whereType(), + isNotEmpty, + ); + }, + ); + + flameTester.testGameWidget( + 'an AndroidBumperBlinkingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.a(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect( + androidBumper.children + .whereType() + .single, + isNotNull, + ); + }, + ); }); group("'a' adds", () { - flameTester.test('new children', (game) async { - final component = Component(); - final androidBumper = AndroidBumper.a( - children: [component], - ); - await game.ensureAdd(androidBumper); - expect(androidBumper.children, contains(component)); - }); + flameTester.testGameWidget( + 'new children', + setUp: (game, _) async { + await game.onLoad(); + final component = Component(); + final androidBumper = AndroidBumper.a( + children: [component], + ); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect(androidBumper.children.whereType(), isNotEmpty); + }, + ); - flameTester.test('a BumpingBehavior', (game) async { - final androidBumper = AndroidBumper.a(); - await game.ensureAdd(androidBumper); - expect( - androidBumper.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a BumpingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.a(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect( + androidBumper.children.whereType().single, + isNotNull, + ); + }, + ); }); group("'b' adds", () { - flameTester.test('new children', (game) async { - final component = Component(); - final androidBumper = AndroidBumper.b( - children: [component], - ); - await game.ensureAdd(androidBumper); - expect(androidBumper.children, contains(component)); - }); + flameTester.testGameWidget( + 'new children', + setUp: (game, _) async { + await game.onLoad(); + final component = Component(); + final androidBumper = AndroidBumper.b( + children: [component], + ); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect(androidBumper.children.whereType(), isNotEmpty); + }, + ); - flameTester.test('a BumpingBehavior', (game) async { - final androidBumper = AndroidBumper.b(); - await game.ensureAdd(androidBumper); - expect( - androidBumper.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a BumpingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.b(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect( + androidBumper.children.whereType().single, + isNotNull, + ); + }, + ); }); group("'cow' adds", () { - flameTester.test('new children', (game) async { - final component = Component(); - final androidBumper = AndroidBumper.cow( - children: [component], - ); - await game.ensureAdd(androidBumper); - expect(androidBumper.children, contains(component)); - }); + flameTester.testGameWidget( + 'new children', + setUp: (game, _) async { + await game.onLoad(); + final component = Component(); + final androidBumper = AndroidBumper.cow( + children: [component], + ); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect(androidBumper.children.whereType(), isNotEmpty); + }, + ); - flameTester.test('a BumpingBehavior', (game) async { - final androidBumper = AndroidBumper.cow(); - await game.ensureAdd(androidBumper); - expect( - androidBumper.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a BumpingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final androidBumper = AndroidBumper.cow(); + await game.ensureAdd(androidBumper); + await game.ready(); + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + expect( + androidBumper.children.whereType().single, + isNotNull, + ); + }, + ); }); }); } diff --git a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart index 8c44a199..2fbfd1a7 100644 --- a/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart +++ b/packages/pinball_components/test/src/components/android_bumper/behaviors/android_bumper_ball_contact_behavior_test.dart @@ -30,9 +30,9 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'beginContact emits onBallContacted when contacts with a ball', - (game) async { + setUp: (game, _) async { final behavior = AndroidBumperBallContactBehavior(); final bloc = _MockAndroidBumperCubit(); whenListen( @@ -44,7 +44,14 @@ void main() { final androidBumper = AndroidBumper.test(bloc: bloc); await androidBumper.add(behavior); await game.ensureAdd(androidBumper); - + }, + verify: (game, _) async { + final androidBumper = + game.descendants().whereType().single; + final behavior = game + .descendants() + .whereType() + .single; behavior.beginContact(_MockBall(), _MockContact()); verify(androidBumper.bloc.onBallContacted).called(1); diff --git a/packages/pinball_components/test/src/components/android_spaceship/android_spaceship_test.dart b/packages/pinball_components/test/src/components/android_spaceship/android_spaceship_test.dart index a282865c..1ff2ebab 100644 --- a/packages/pinball_components/test/src/components/android_spaceship/android_spaceship_test.dart +++ b/packages/pinball_components/test/src/components/android_spaceship/android_spaceship_test.dart @@ -10,8 +10,8 @@ import 'package:pinball_flame/pinball_flame.dart'; import '../../../helpers/helpers.dart'; -class _MockAndroidSpaceshipCubit extends Mock implements AndroidSpaceshipCubit { -} +class _MockAndroidSpaceshipCubit extends Mock + implements AndroidSpaceshipCubit {} void main() { group('AndroidSpaceship', () { @@ -26,15 +26,25 @@ void main() { bloc = _MockAndroidSpaceshipCubit(); }); - flameTester.test('loads correctly', (game) async { - final component = - FlameBlocProvider.value( - value: bloc, - children: [AndroidSpaceship(position: Vector2.zero())], - ); - await game.ensureAdd(component); - expect(game.contains(component), isTrue); - }); + flameTester.testGameWidget( + 'loads correctly', + setUp: (game, _) async { + final component = FlameBlocProvider.value( + value: bloc, + children: [AndroidSpaceship(position: Vector2.zero())], + ); + await game.ensureAdd(component); + }, + verify: (game, _) async { + expect( + game.descendants().whereType< + FlameBlocProvider>(), + isNotEmpty, + ); + }, + ); flameTester.testGameWidget( 'renders correctly', @@ -49,8 +59,8 @@ void main() { ), ], ); - await game.ensureAdd(canvas); - game.camera.followVector2(Vector2.zero()); + await game.world.ensureAdd(canvas); + game.camera.moveTo(Vector2.zero()); await game.ready(); await tester.pump(); }, @@ -60,7 +70,7 @@ void main() { .descendants() .whereType() .single - .animation! + .animationTicker! .totalDuration(); await expectLater( diff --git a/packages/pinball_components/test/src/components/arcade_background/arcade_background_test.dart b/packages/pinball_components/test/src/components/arcade_background/arcade_background_test.dart index a5c336d5..3d577496 100644 --- a/packages/pinball_components/test/src/components/arcade_background/arcade_background_test.dart +++ b/packages/pinball_components/test/src/components/arcade_background/arcade_background_test.dart @@ -28,50 +28,56 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { - final ball = ArcadeBackground(); + setUp: (game, _) async { + final background = ArcadeBackground(); await game.ready(); - await game.ensureAdd(ball); - - expect(game.contains(ball), isTrue); + await game.ensureAdd(background); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); }, ); - flameTester.test( + flameTester.testGameWidget( 'has only one SpriteComponent', - (game) async { - final ball = ArcadeBackground(); + setUp: (game, _) async { + final background = ArcadeBackground(); await game.ready(); - await game.ensureAdd(ball); - + await game.ensureAdd(background); + }, + verify: (game, _) async { + final background = + game.descendants().whereType().single; expect( - ball.descendants().whereType().length, + background.descendants().whereType().length, equals(1), ); }, ); - flameTester.test( + flameTester.testGameWidget( 'ArcadeBackgroundSpriteComponent changes sprite onNewState', - (game) async { - final ball = ArcadeBackground(); + setUp: (game, _) async { + final background = ArcadeBackground(); + await game.onLoad(); await game.ready(); - await game.ensureAdd(ball); - - final ballSprite = ball + await game.ensureAdd(background); + }, + verify: (game, _) async { + final background = + game.descendants().whereType().single; + final backgroundSprite = background .descendants() .whereType() .single; - final originalSprite = ballSprite.sprite; - - ballSprite.onNewState( + final originalSprite = backgroundSprite.sprite; + backgroundSprite.onNewState( const ArcadeBackgroundState(characterTheme: theme.DinoTheme()), ); - await game.ready(); - - final newSprite = ballSprite.sprite; + game.update(0); + final newSprite = backgroundSprite.sprite; expect(newSprite != originalSprite, isTrue); }, ); diff --git a/packages/pinball_components/test/src/components/arrow_icon_test.dart b/packages/pinball_components/test/src/components/arrow_icon_test.dart index c8a1c5aa..96cef188 100644 --- a/packages/pinball_components/test/src/components/arrow_icon_test.dart +++ b/packages/pinball_components/test/src/components/arrow_icon_test.dart @@ -50,8 +50,8 @@ void main() { 'renders correctly', setUp: (game, tester) async { await game.images.loadAll(assets); - game.camera.followVector2(Vector2.zero()); - await game.add( + game.camera.moveTo(Vector2.zero()); + await game.world.add( ArrowIcon( position: Vector2.zero(), direction: ArrowIconDirection.left, @@ -74,8 +74,8 @@ void main() { 'renders correctly', setUp: (game, tester) async { await game.images.loadAll(assets); - game.camera.followVector2(Vector2.zero()); - await game.add( + game.camera.moveTo(Vector2.zero()); + await game.world.add( ArrowIcon( position: Vector2.zero(), direction: ArrowIconDirection.right, diff --git a/packages/pinball_components/test/src/components/ball/ball_test.dart b/packages/pinball_components/test/src/components/ball/ball_test.dart index 9bf0bf27..b65b5742 100644 --- a/packages/pinball_components/test/src/components/ball/ball_test.dart +++ b/packages/pinball_components/test/src/components/ball/ball_test.dart @@ -30,24 +30,29 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball(); - await game.ready(); await game.ensureAdd(ball); - - expect(game.contains(ball), isTrue); + await game.ready(); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); }, ); - flameTester.test( + flameTester.testGameWidget( 'has only one SpriteComponent', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball(); - await game.ready(); await game.ensureAdd(ball); - + await game.ready(); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; expect( ball.descendants().whereType().length, equals(1), @@ -55,13 +60,16 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'BallSpriteComponent changes sprite onNewState', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball(); - await game.ready(); await game.ensureAdd(ball); - + await game.ready(); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; final ballSprite = ball.descendants().whereType().single; final originalSprite = ballSprite.sprite; @@ -69,7 +77,7 @@ void main() { ballSprite.onNewState( const BallState(characterTheme: theme.DinoTheme()), ); - await game.ready(); + game.update(0); final newSprite = ballSprite.sprite; expect(newSprite != originalSprite, isTrue); @@ -77,84 +85,120 @@ void main() { ); group('adds', () { - flameTester.test('a BallScalingBehavior', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); - expect( - ball.descendants().whereType().length, - equals(1), - ); - }); + flameTester.testGameWidget( + 'a BallScalingBehavior', + setUp: (game, _) async { + final ball = Ball(); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.descendants().whereType().length, + equals(1), + ); + }, + ); - flameTester.test('a BallGravitatingBehavior', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); - expect( - ball.descendants().whereType().length, - equals(1), - ); - }); + flameTester.testGameWidget( + 'a BallGravitatingBehavior', + setUp: (game, _) async { + final ball = Ball(); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.descendants().whereType().length, + equals(1), + ); + }, + ); }); group('body', () { - flameTester.test( + flameTester.testGameWidget( 'is dynamic', - (game) async { + setUp: (game, _) async { final ball = Ball(); await game.ensureAdd(ball); - + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; expect(ball.body.bodyType, equals(BodyType.dynamic)); }, ); group('can be moved', () { - flameTester.test('by its weight', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); + flameTester.testGameWidget( + 'by its weight', + setUp: (game, _) async { + final ball = Ball(); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; - game.update(1); - expect(ball.body.position, isNot(equals(ball.initialPosition))); - }); + game.update(1); + expect(ball.body.position, isNot(equals(ball.initialPosition))); + }, + ); - flameTester.test('by applying velocity', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); + flameTester.testGameWidget( + 'by applying velocity', + setUp: (game, _) async { + final ball = Ball(); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; - ball.body.gravityScale = Vector2.zero(); - ball.body.linearVelocity.setValues(10, 10); - game.update(1); - expect(ball.body.position, isNot(equals(ball.initialPosition))); - }); + ball.body.gravityScale = Vector2.zero(); + ball.body.linearVelocity.setValues(10, 10); + game.update(1); + expect(ball.body.position, isNot(equals(ball.initialPosition))); + }, + ); }); }); group('fixture', () { - flameTester.test( + flameTester.testGameWidget( 'exists', - (game) async { + setUp: (game, _) async { final ball = Ball(); await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; expect(ball.body.fixtures[0], isA()); }, ); - flameTester.test( + flameTester.testGameWidget( 'is dense', - (game) async { + setUp: (game, _) async { final ball = Ball(); await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; final fixture = ball.body.fixtures[0]; expect(fixture.density, greaterThan(0)); }, ); - flameTester.test( + flameTester.testGameWidget( 'shape is circular', - (game) async { - final ball = Ball(); - await game.ensureAdd(ball); + setUp: (game, _) async { + final ball = Ball.test(); + await game.world.ensureAdd(ball); + await game.ready(); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; final fixture = ball.body.fixtures[0]; expect(fixture.shape.shapeType, equals(ShapeType.circle)); @@ -162,13 +206,14 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'has Layer.all as default filter maskBits', - (game) async { + setUp: (game, _) async { final ball = Ball(); - await game.ready(); await game.ensureAdd(ball); - await game.ready(); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; final fixture = ball.body.fixtures[0]; expect(fixture.filterData.maskBits, equals(Layer.board.maskBits)); @@ -178,24 +223,33 @@ void main() { group('stop', () { group("can't be moved", () { - flameTester.test('by its weight', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); - ball.stop(); + flameTester.testGameWidget( + 'by its weight', + setUp: (game, _) async { + final ball = Ball(); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + ball.stop(); - game.update(1); - expect(ball.body.position, equals(ball.initialPosition)); - }); + game.update(1); + expect(ball.body.position, equals(ball.initialPosition)); + }, + ); }); }); group('resume', () { group('can move', () { - flameTester.test( + flameTester.testGameWidget( 'by its weight when previously stopped', - (game) async { + setUp: (game, _) async { final ball = Ball(); await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; ball.stop(); ball.resume(); @@ -204,11 +258,14 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'by applying velocity when previously stopped', - (game) async { + setUp: (game, _) async { final ball = Ball(); await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; ball.stop(); ball.resume(); diff --git a/packages/pinball_components/test/src/components/ball/behaviors/ball_gravitating_behavior_test.dart b/packages/pinball_components/test/src/components/ball/behaviors/ball_gravitating_behavior_test.dart index ce193dc8..136d832e 100644 --- a/packages/pinball_components/test/src/components/ball/behaviors/ball_gravitating_behavior_test.dart +++ b/packages/pinball_components/test/src/components/ball/behaviors/ball_gravitating_behavior_test.dart @@ -21,20 +21,26 @@ void main() { ); }); - flameTester.test('can be loaded', (game) async { - final ball = Ball.test(); - final behavior = BallGravitatingBehavior(); - await ball.add(behavior); - await game.ensureAdd(ball); - expect( - ball.firstChild(), - equals(behavior), - ); - }); + flameTester.testGameWidget( + 'can be loaded', + setUp: (game, _) async { + final ball = Ball.test(); + final behavior = BallGravitatingBehavior(); + await ball.add(behavior); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.firstChild(), + isNotNull, + ); + }, + ); - flameTester.test( + flameTester.testGameWidget( "overrides the body's horizontal gravity symmetrically", - (game) async { + setUp: (game, _) async { final ball1 = Ball.test()..initialPosition = Vector2(10, 0); await ball1.add(BallGravitatingBehavior()); @@ -42,15 +48,18 @@ void main() { await ball2.add(BallGravitatingBehavior()); await game.ensureAddAll([ball1, ball2]); + }, + verify: (game, _) async { + final balls = game.descendants().whereType().toList(); game.update(1); expect( - ball1.body.gravityOverride!.x, - equals(-ball2.body.gravityOverride!.x), + balls[0].body.gravityOverride!.x, + equals(-balls[1].body.gravityOverride!.x), ); expect( - ball1.body.gravityOverride!.y, - equals(ball2.body.gravityOverride!.y), + balls[0].body.gravityOverride!.y, + equals(balls[1].body.gravityOverride!.y), ); }, ); diff --git a/packages/pinball_components/test/src/components/ball/behaviors/ball_implusing_behavior_test.dart b/packages/pinball_components/test/src/components/ball/behaviors/ball_implusing_behavior_test.dart index 53ab4553..a44c2514 100644 --- a/packages/pinball_components/test/src/components/ball/behaviors/ball_implusing_behavior_test.dart +++ b/packages/pinball_components/test/src/components/ball/behaviors/ball_implusing_behavior_test.dart @@ -24,27 +24,31 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'impulses the ball with the given velocity when loaded ' 'and then removes itself', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball.test(); await game.ensureAdd(ball); final impulse = Vector2.all(1); final behavior = BallImpulsingBehavior(impulse: impulse); await ball.ensureAdd(behavior); - + await game.ready(); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; expect( ball.body.linearVelocity.x, - equals(impulse.x), + equals(1), ); expect( ball.body.linearVelocity.y, - equals(impulse.y), + equals(1), ); expect( - game.descendants().whereType().isEmpty, - isTrue, + game.descendants().whereType(), + isEmpty, ); }, ); diff --git a/packages/pinball_components/test/src/components/ball/behaviors/ball_scaling_behavior_test.dart b/packages/pinball_components/test/src/components/ball/behaviors/ball_scaling_behavior_test.dart index 1fe84ae4..0efc7c8e 100644 --- a/packages/pinball_components/test/src/components/ball/behaviors/ball_scaling_behavior_test.dart +++ b/packages/pinball_components/test/src/components/ball/behaviors/ball_scaling_behavior_test.dart @@ -22,38 +22,50 @@ void main() { ); }); - flameTester.test('can be loaded', (game) async { - final ball = Ball.test(); - final behavior = BallScalingBehavior(); - await ball.add(behavior); - await game.ensureAdd(ball); - expect( - ball.firstChild(), - equals(behavior), - ); - }); + flameTester.testGameWidget( + 'can be loaded', + setUp: (game, _) async { + final ball = Ball.test(); + final behavior = BallScalingBehavior(); + await ball.add(behavior); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.firstChild(), + isNotNull, + ); + }, + ); - flameTester.test('scales the shape radius', (game) async { - final ball1 = Ball.test()..initialPosition = Vector2(0, 10); - await ball1.add(BallScalingBehavior()); + flameTester.testGameWidget( + 'scales the shape radius', + setUp: (game, _) async { + final ball1 = Ball.test()..initialPosition = Vector2(0, 10); + await ball1.add(BallScalingBehavior()); - final ball2 = Ball.test()..initialPosition = Vector2(0, -10); - await ball2.add(BallScalingBehavior()); + final ball2 = Ball.test()..initialPosition = Vector2(0, -10); + await ball2.add(BallScalingBehavior()); - await game.ensureAddAll([ball1, ball2]); - game.update(1); + await game.ensureAddAll([ball1, ball2]); + }, + verify: (game, _) async { + final balls = game.descendants().whereType().toList(); + game.update(1); - final shape1 = ball1.body.fixtures.first.shape; - final shape2 = ball2.body.fixtures.first.shape; - expect( - shape1.radius, - greaterThan(shape2.radius), - ); - }); + final shape1 = balls[0].body.fixtures.first.shape; + final shape2 = balls[1].body.fixtures.first.shape; + expect( + shape1.radius, + greaterThan(shape2.radius), + ); + }, + ); - flameTester.test( + flameTester.testGameWidget( 'scales the sprite', - (game) async { + setUp: (game, _) async { final ball1 = Ball.test()..initialPosition = Vector2(0, 10); await ball1.add(BallScalingBehavior()); @@ -61,10 +73,15 @@ void main() { await ball2.add(BallScalingBehavior()); await game.ensureAddAll([ball1, ball2]); + }, + verify: (game, _) async { + final balls = game.descendants().whereType().toList(); game.update(1); - final sprite1 = ball1.descendants().whereType().single; - final sprite2 = ball2.descendants().whereType().single; + final sprite1 = + balls[0].descendants().whereType().single; + final sprite2 = + balls[1].descendants().whereType().single; expect( sprite1.scale.x, greaterThan(sprite2.scale.x), diff --git a/packages/pinball_components/test/src/components/ball/behaviors/ball_turbo_charging_behavior_test.dart b/packages/pinball_components/test/src/components/ball/behaviors/ball_turbo_charging_behavior_test.dart index 09eabe0e..f043cb5d 100644 --- a/packages/pinball_components/test/src/components/ball/behaviors/ball_turbo_charging_behavior_test.dart +++ b/packages/pinball_components/test/src/components/ball/behaviors/ball_turbo_charging_behavior_test.dart @@ -27,68 +27,89 @@ void main() { ); }); - flameTester.test('can be loaded', (game) async { - final ball = Ball.test(); - final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); - await ball.add(behavior); - await game.ensureAdd(ball); - expect( - ball.firstChild(), - equals(behavior), - ); - }); + flameTester.testGameWidget( + 'can be loaded', + setUp: (game, _) async { + final ball = Ball.test(); + final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); + await ball.add(behavior); + await game.ensureAdd(ball); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.firstChild(), + isNotNull, + ); + }, + ); - flameTester.test( + flameTester.testGameWidget( 'impulses the ball velocity when loaded', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball.test(); await game.ensureAdd(ball); final impulse = Vector2.all(1); final behavior = BallTurboChargingBehavior(impulse: impulse); await ball.ensureAdd(behavior); - + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; expect( ball.body.linearVelocity.x, - equals(impulse.x), + equals(1), ); expect( ball.body.linearVelocity.y, - equals(impulse.y), + equals(1), ); }, ); - flameTester.test('adds sprite', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); - - await ball.ensureAdd( - BallTurboChargingBehavior(impulse: Vector2.zero()), - ); - - expect( - ball.children.whereType().single, - isNotNull, - ); - }); - - flameTester.test('removes sprite after it finishes', (game) async { - final ball = Ball(); - await game.ensureAdd(ball); - - final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); - await ball.ensureAdd(behavior); - - final turboChargeSpriteAnimation = - ball.children.whereType().single; - - expect(ball.contains(turboChargeSpriteAnimation), isTrue); + flameTester.testGameWidget( + 'adds sprite', + setUp: (game, _) async { + await game.onLoad(); + final ball = Ball(); + await game.ensureAdd(ball); + await ball.ensureAdd( + BallTurboChargingBehavior(impulse: Vector2.zero()), + ); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + expect( + ball.children.whereType().single, + isNotNull, + ); + }, + ); - game.update(behavior.timer.limit); - game.update(0.1); + flameTester.testGameWidget( + 'removes sprite after it finishes', + setUp: (game, _) async { + await game.onLoad(); + final ball = Ball(); + await game.ensureAdd(ball); - expect(ball.contains(turboChargeSpriteAnimation), isFalse); - }); + final behavior = BallTurboChargingBehavior(impulse: Vector2.zero()); + await ball.ensureAdd(behavior); + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; + final turboChargeSpriteAnimation = + ball.children.whereType().single; + final behavior = + game.descendants().whereType().single; + expect(ball.contains(turboChargeSpriteAnimation), isTrue); + + game.update(behavior.timer.limit); + game.update(0.1); + + expect(ball.contains(turboChargeSpriteAnimation), isFalse); + }, + ); }, ); } diff --git a/packages/pinball_components/test/src/components/baseboard_test.dart b/packages/pinball_components/test/src/components/baseboard_test.dart index 101e3e21..a2808eaa 100644 --- a/packages/pinball_components/test/src/components/baseboard_test.dart +++ b/packages/pinball_components/test/src/components/baseboard_test.dart @@ -27,8 +27,8 @@ void main() { side: BoardSide.right, )..initialPosition = Vector2(20, 0); - await game.ensureAddAll([leftBaseboard, rightBaseboard]); - game.camera.followVector2(Vector2.zero()); + await game.world.ensureAddAll([leftBaseboard, rightBaseboard]); + game.camera.moveTo(Vector2.zero()); await tester.pump(); }, verify: (game, tester) async { @@ -39,9 +39,9 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { + setUp: (game, _) async { await game.ready(); final leftBaseboard = Baseboard( side: BoardSide.left, @@ -51,29 +51,31 @@ void main() { ); await game.ensureAddAll([leftBaseboard, rightBaseboard]); - - expect(game.contains(leftBaseboard), isTrue); - expect(game.contains(rightBaseboard), isTrue); + }, + verify: (game, _) async { + expect(game.descendants().whereType().length, equals(2)); }, ); group('body', () { - flameTester.test( + flameTester.testGameWidget( 'is static', - (game) async { + setUp: (game, _) async { final baseboard = Baseboard( side: BoardSide.left, ); await game.ensureAdd(baseboard); - + }, + verify: (game, _) async { + final baseboard = game.descendants().whereType().single; expect(baseboard.body.bodyType, equals(BodyType.static)); }, ); - flameTester.test( + flameTester.testGameWidget( 'is at an angle', - (game) async { + setUp: (game, _) async { final leftBaseboard = Baseboard( side: BoardSide.left, ); @@ -81,22 +83,27 @@ void main() { side: BoardSide.right, ); await game.ensureAddAll([leftBaseboard, rightBaseboard]); + }, + verify: (game, _) async { + final baseboards = game.descendants().whereType().toList(); - expect(leftBaseboard.body.angle, isPositive); - expect(rightBaseboard.body.angle, isNegative); + expect(baseboards[0].body.angle, isPositive); + expect(baseboards[1].body.angle, isNegative); }, ); }); group('fixtures', () { - flameTester.test( + flameTester.testGameWidget( 'has seven', - (game) async { + setUp: (game, _) async { final baseboard = Baseboard( side: BoardSide.left, ); await game.ensureAdd(baseboard); - + }, + verify: (game, _) async { + final baseboard = game.descendants().whereType().single; expect(baseboard.body.fixtures.length, equals(7)); }, ); diff --git a/packages/pinball_components/test/src/components/board_background_sprite_component_test.dart b/packages/pinball_components/test/src/components/board_background_sprite_component_test.dart index 79e8c56b..f1b87ee5 100644 --- a/packages/pinball_components/test/src/components/board_background_sprite_component_test.dart +++ b/packages/pinball_components/test/src/components/board_background_sprite_component_test.dart @@ -15,13 +15,18 @@ void main() { final flameTester = FlameTester(() => TestGame(assets)); group('BoardBackgroundSpriteComponent', () { - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { + setUp: (game, _) async { + await game.images.loadAll(assets); final boardBackground = BoardBackgroundSpriteComponent(); await game.ensureAdd(boardBackground); - - expect(game.contains(boardBackground), isTrue); + }, + verify: (game, _) async { + expect( + game.descendants().whereType(), + isNotEmpty, + ); }, ); @@ -30,12 +35,12 @@ void main() { setUp: (game, tester) async { await game.images.loadAll(assets); final boardBackground = BoardBackgroundSpriteComponent(); - await game.ensureAdd(boardBackground); + await game.world.ensureAdd(boardBackground); await tester.pump(); game.camera - ..followVector2(Vector2.zero()) - ..zoom = 3.7; + ..moveTo(Vector2.zero()) + ..viewfinder.zoom = 3.7; }, verify: (game, tester) async { await expectLater( diff --git a/packages/pinball_components/test/src/components/boundaries_test.dart b/packages/pinball_components/test/src/components/boundaries_test.dart index c119719e..0b179633 100644 --- a/packages/pinball_components/test/src/components/boundaries_test.dart +++ b/packages/pinball_components/test/src/components/boundaries_test.dart @@ -1,6 +1,6 @@ // ignore_for_file: cascade_invocations -import 'package:flame_forge2d/flame_forge2d.dart'; +import 'package:flame/components.dart'; import 'package:flame_test/flame_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:pinball_components/pinball_components.dart'; @@ -19,21 +19,26 @@ void main() { ]; final flameTester = FlameTester(() => TestGame(assets)); - flameTester.test('loads correctly', (game) async { - final component = Boundaries(); - await game.ensureAdd(component); - expect(game.contains(component), isTrue); - }); + flameTester.testGameWidget( + 'loads correctly', + setUp: (game, _) async { + final component = Boundaries(); + await game.ensureAdd(component); + }, + verify: (game, _) async { + expect(game.descendants().whereType().length, equals(1)); + }, + ); flameTester.testGameWidget( 'render correctly', setUp: (game, tester) async { await game.images.loadAll(assets); final canvas = ZCanvasComponent(children: [Boundaries()]); - await game.ensureAdd(canvas); + await game.world.ensureAdd(canvas); - game.camera.followVector2(Vector2.zero()); - game.camera.zoom = 3.2; + game.camera.moveTo(Vector2.zero()); + game.camera.viewfinder.zoom = 3.2; await tester.pump(); }, verify: (game, tester) async { diff --git a/packages/pinball_components/test/src/components/bumping_behavior_test.dart b/packages/pinball_components/test/src/components/bumping_behavior_test.dart index 7a87a46c..e44eecd9 100644 --- a/packages/pinball_components/test/src/components/bumping_behavior_test.dart +++ b/packages/pinball_components/test/src/components/bumping_behavior_test.dart @@ -16,7 +16,7 @@ class _TestBodyComponent extends BodyComponent { @override Body createBody() => world.createBody( BodyDef(type: BodyType.dynamic), - )..createFixtureFromShape(CircleShape(), 1); + )..createFixtureFromShape(CircleShape()); } void main() { @@ -38,12 +38,21 @@ void main() { ); }); - flameTester.test('can be added', (game) async { - final behavior = BumpingBehavior(strength: 0); - final component = _TestBodyComponent(); - await component.add(behavior); - await game.ensureAdd(component); - }); + flameTester.testGameWidget( + 'can be added', + setUp: (game, _) async { + final behavior = BumpingBehavior(strength: 0); + final component = _TestBodyComponent(); + await component.add(behavior); + await game.ensureAdd(component); + }, + verify: (game, _) async { + expect( + game.descendants().whereType().length, + equals(1), + ); + }, + ); flameTester.testGameWidget( 'the bump is greater when the strength is greater', diff --git a/packages/pinball_components/test/src/components/camera_zoom_test.dart b/packages/pinball_components/test/src/components/camera_zoom_test.dart index a7f64eca..c0d18159 100644 --- a/packages/pinball_components/test/src/components/camera_zoom_test.dart +++ b/packages/pinball_components/test/src/components/camera_zoom_test.dart @@ -14,13 +14,13 @@ void main() { tester.testGameWidget( 'renders correctly', setUp: (game, tester) async { - game.camera.followVector2(Vector2.zero()); - game.camera.zoom = 10; + game.camera.moveTo(Vector2.zero()); + game.camera.viewfinder.zoom = 10; final sprite = await game.loadSprite( Assets.images.signpost.inactive.keyName, ); - await game.add( + await game.world.add( SpriteComponent( sprite: sprite, size: Vector2(4, 8), @@ -56,29 +56,33 @@ void main() { }, ); - tester.test( + tester.testGameWidget( 'completes when checked after it is finished', - (game) async { + setUp: (game, _) async { await game.add(CameraZoom(value: 40)); + }, + verify: (game, _) async { game.update(10); - final cameraZoom = game.firstChild(); - final future = cameraZoom!.completed; + final cameraZoom = game.descendants().whereType().single; + final future = cameraZoom.completed; expect(future, completes); }, ); - tester.test( + tester.testGameWidget( 'completes when checked before it is finished', - (game) async { + setUp: (game, _) async { final zoom = CameraZoom(value: 40); - final future = zoom.completed; - await game.add(zoom); + }, + verify: (game, _) async { + final cameraZoom = game.descendants().whereType().single; + final completed = cameraZoom.completed; game.update(10); game.update(0); - expect(future, completes); + expect(completed, completes); }, ); }); diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart index f5fd2b42..8f6a9a96 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_chomping_behavior_test.dart @@ -35,9 +35,9 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'beginContact sets ball sprite to be invisible and calls onChomp', - (game) async { + setUp: (game, _) async { final ball = Ball(); final behavior = ChromeDinoChompingBehavior(); final bloc = _MockChromeDinoCubit(); @@ -53,11 +53,16 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); await game.ensureAddAll([chromeDino, ball]); - + }, + verify: (game, _) async { final contact = _MockContact(); final fixture = _MockFixture(); when(() => contact.fixtureA).thenReturn(fixture); when(() => fixture.userData).thenReturn('inside_mouth'); + final behavior = + game.descendants().whereType().single; + final ball = game.descendants().whereType().single; + final bloc = game.descendants().whereType().single.bloc; behavior.beginContact(ball, contact); diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart index 69f57114..820f30ef 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_mouth_opening_behavior_test.dart @@ -32,10 +32,10 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'preSolve disables contact when the mouth is open ' 'and there is not ball in the mouth', - (game) async { + setUp: (game, _) async { final behavior = ChromeDinoMouthOpeningBehavior(); final bloc = _MockChromeDinoCubit(); whenListen( @@ -50,15 +50,19 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); await game.ensureAdd(chromeDino); - + }, + verify: (game, _) async { final contact = _MockContact(); final fixture = _MockFixture(); when(() => contact.fixtureA).thenReturn(fixture); when(() => fixture.userData).thenReturn('mouth_opening'); + final behavior = game + .descendants() + .whereType() + .single; behavior.preSolve(_MockBall(), contact, Manifold()); - - verify(() => contact.setEnabled(false)).called(1); + verify(() => contact.isEnabled = false).called(1); }, ); }, diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart index 0748040e..730e2cc9 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_spitting_behavior_test.dart @@ -33,9 +33,10 @@ void main() { }); group('on the next time the mouth opens and status is chomping', () { - flameTester.test( + flameTester.testGameWidget( 'sets ball sprite to visible and sets a linear velocity', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball(); final behavior = ChromeDinoSpittingBehavior(); final bloc = _MockChromeDinoCubit(); @@ -54,11 +55,12 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); await game.ensureAddAll([chromeDino, ball]); - streamController.add(chompingState.copyWith(isMouthOpen: false)); streamController.add(chompingState.copyWith(isMouthOpen: true)); await game.ready(); - + }, + verify: (game, _) async { + final ball = game.descendants().whereType().single; game .descendants() .whereType() @@ -78,9 +80,10 @@ void main() { }, ); - flameTester.test( + flameTester.testGameWidget( 'calls onSpit', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final ball = Ball(); final behavior = ChromeDinoSpittingBehavior(); final bloc = _MockChromeDinoCubit(); @@ -103,7 +106,9 @@ void main() { streamController.add(chompingState.copyWith(isMouthOpen: false)); streamController.add(chompingState.copyWith(isMouthOpen: true)); await game.ready(); - + }, + verify: (game, _) async { + final bloc = game.descendants().whereType().single.bloc; game .descendants() .whereType() diff --git a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart index 4b34940c..7ee8e716 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/behaviors/chrome_dino_swiveling_behavior_test.dart @@ -28,9 +28,9 @@ void main() { ); }); - flameTester.test( + flameTester.testGameWidget( 'creates a RevoluteJoint', - (game) async { + setUp: (game, _) async { final behavior = ChromeDinoSwivelingBehavior(); final bloc = _MockChromeDinoCubit(); whenListen( @@ -42,17 +42,18 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); await game.ensureAdd(chromeDino); - + }, + verify: (game, _) async { expect( - game.world.joints.whereType().single, + game.world.physicsWorld.joints.whereType().single, isNotNull, ); }, ); - flameTester.test( + flameTester.testGameWidget( 'reverses swivel direction on each timer tick', - (game) async { + setUp: (game, _) async { final behavior = ChromeDinoSwivelingBehavior(); final bloc = _MockChromeDinoCubit(); whenListen( @@ -64,9 +65,15 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); await game.ensureAdd(chromeDino); - + }, + verify: (game, _) async { + final behavior = game + .descendants() + .whereType() + .single; final timer = behavior.timer; - final joint = game.world.joints.whereType().single; + final joint = + game.world.physicsWorld.joints.whereType().single; expect(joint.motorSpeed, isPositive); @@ -98,7 +105,9 @@ void main() { await chromeDino.add(behavior); await game.ensureAdd(chromeDino); - final joint = game.world.joints.whereType().single; + final joint = game.world.physicsWorld.joints + .whereType() + .single; final angle = joint.jointAngle(); expect( angle < joint.upperLimit && angle > joint.lowerLimit, @@ -122,17 +131,20 @@ void main() { initialState: const ChromeDinoState.initial().copyWith(isMouthOpen: false), ); - final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); - await game.ensureAdd(chromeDino); - - final joint = game.world.joints.whereType().single; - + await game.world.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final bloc = + game.world.descendants().whereType().single.bloc; game.update(swivelPeriod / 2); - await tester.pump(); + final joint = game.world.physicsWorld.joints + .whereType() + .single; final angle = joint.jointAngle(); - expect(angle >= joint.upperLimit, isTrue); + expect(angle, greaterThanOrEqualTo(joint.upperLimit)); verify(bloc.onOpenMouth).called(1); }, @@ -153,15 +165,24 @@ void main() { final chromeDino = ChromeDino.test(bloc: bloc); await chromeDino.add(behavior); - await game.ensureAdd(chromeDino); - - final joint = game.world.joints.whereType().single; - + await game.world.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final bloc = + game.world.descendants().whereType().single.bloc; + final behavior = game + .descendants() + .whereType() + .single; + behavior.timer.onTick!(); game.update(swivelPeriod * 1.5); - await tester.pump(); + final joint = game.world.physicsWorld.joints + .whereType() + .single; final angle = joint.jointAngle(); - expect(angle <= joint.lowerLimit, isTrue); + expect(angle, lessThanOrEqualTo(joint.lowerLimit)); verify(bloc.onOpenMouth).called(1); }, ); diff --git a/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart b/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart index a2e1c933..b1e006aa 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/chrome_dino_test.dart @@ -21,13 +21,16 @@ void main() { final flameTester = FlameTester(() => TestGame(assets)); group('ChromeDino', () { - flameTester.test( + flameTester.testGameWidget( 'loads correctly', - (game) async { + setUp: (game, _) async { + await game.onLoad(); final chromeDino = ChromeDino(); await game.ensureAdd(chromeDino); - - expect(game.contains(chromeDino), isTrue); + await game.ready(); + }, + verify: (game, _) async { + expect(game.descendants().whereType(), isNotEmpty); }, ); @@ -35,8 +38,8 @@ void main() { 'renders correctly', setUp: (game, tester) async { await game.images.loadAll(assets); - await game.ensureAdd(ChromeDino()); - game.camera.followVector2(Vector2.zero()); + await game.world.ensureAdd(ChromeDino()); + game.camera.moveTo(Vector2.zero()); await tester.pump(); }, verify: (game, tester) async { @@ -44,9 +47,10 @@ void main() { .descendants() .whereType() .first - .animation! + .animationTicker! .totalDuration() / 2; + game.update(swivelAnimationDuration); await tester.pump(); @@ -71,70 +75,117 @@ void main() { }, ); - flameTester.test('closes bloc when removed', (game) async { - final bloc = _MockChromeDinoCubit(); - whenListen( - bloc, - const Stream.empty(), - initialState: const ChromeDinoState.initial(), - ); - when(bloc.close).thenAnswer((_) async {}); - final chromeDino = ChromeDino.test(bloc: bloc); - - await game.ensureAdd(chromeDino); - game.remove(chromeDino); - await game.ready(); + flameTester.testGameWidget( + 'closes bloc when removed', + setUp: (game, _) async { + await game.onLoad(); + final bloc = _MockChromeDinoCubit(); + whenListen( + bloc, + const Stream.empty(), + initialState: const ChromeDinoState.initial(), + ); + when(bloc.close).thenAnswer((_) async {}); + final chromeDino = ChromeDino.test(bloc: bloc); - verify(bloc.close).called(1); - }); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + game.remove(chromeDino); + game.update(0); + verify(chromeDino.bloc.close).called(1); + }, + ); group('adds', () { - flameTester.test('a ChromeDinoMouthOpeningBehavior', (game) async { - final chromeDino = ChromeDino(); - await game.ensureAdd(chromeDino); - expect( - chromeDino.children - .whereType() - .single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a ChromeDinoMouthOpeningBehavior', + setUp: (game, _) async { + await game.onLoad(); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + expect( + chromeDino.children + .whereType() + .single, + isNotNull, + ); + }, + ); - flameTester.test('a ChromeDinoSwivelingBehavior', (game) async { - final chromeDino = ChromeDino(); - await game.ensureAdd(chromeDino); - expect( - chromeDino.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a ChromeDinoSwivelingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + expect( + chromeDino.children.whereType().single, + isNotNull, + ); + }, + ); - flameTester.test('a ChromeDinoChompingBehavior', (game) async { - final chromeDino = ChromeDino(); - await game.ensureAdd(chromeDino); - expect( - chromeDino.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a ChromeDinoChompingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + expect( + chromeDino.children.whereType().single, + isNotNull, + ); + }, + ); - flameTester.test('a ChromeDinoSpittingBehavior', (game) async { - final chromeDino = ChromeDino(); - await game.ensureAdd(chromeDino); - expect( - chromeDino.children.whereType().single, - isNotNull, - ); - }); + flameTester.testGameWidget( + 'a ChromeDinoSpittingBehavior', + setUp: (game, _) async { + await game.onLoad(); + final chromeDino = ChromeDino(); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + expect( + chromeDino.children.whereType().single, + isNotNull, + ); + }, + ); - flameTester.test('new children', (game) async { - final component = Component(); - final chromeDino = ChromeDino( - children: [component], - ); - await game.ensureAdd(chromeDino); - expect(chromeDino.children, contains(component)); - }); + flameTester.testGameWidget( + 'new children', + setUp: (game, _) async { + await game.onLoad(); + final component = Component(); + final chromeDino = ChromeDino( + children: [component], + ); + await game.ensureAdd(chromeDino); + await game.ready(); + }, + verify: (game, _) async { + final chromeDino = game.descendants().whereType().single; + expect(chromeDino.children.whereType(), isNotEmpty); + }, + ); }); }); } diff --git a/packages/pinball_components/test/src/components/chrome_dino/cubit/chrome_dino_cubit_test.dart b/packages/pinball_components/test/src/components/chrome_dino/cubit/chrome_dino_cubit_test.dart index 80c01983..0df2e6b0 100644 --- a/packages/pinball_components/test/src/components/chrome_dino/cubit/chrome_dino_cubit_test.dart +++ b/packages/pinball_components/test/src/components/chrome_dino/cubit/chrome_dino_cubit_test.dart @@ -17,7 +17,7 @@ void main() { (state) => state.isMouthOpen, 'isMouthOpen', true, - ) + ), ], ); @@ -30,7 +30,7 @@ void main() { (state) => state.isMouthOpen, 'isMouthOpen', false, - ) + ), ], ); @@ -41,16 +41,16 @@ void main() { act: (bloc) => bloc.onChomp(ball), expect: () => [ isA() - ..having( - (state) => state.status, - 'status', - ChromeDinoStatus.chomping, - ) - ..having( - (state) => state.ball, - 'ball', - ball, - ) + .having( + (state) => state.status, + 'status', + ChromeDinoStatus.chomping, + ) + .having( + (state) => state.ball, + 'ball', + ball, + ), ], ); @@ -67,15 +67,17 @@ void main() { build: ChromeDinoCubit.new, act: (bloc) => bloc.onSpit(), expect: () => [ - isA().having( - (state) => state.status, - 'status', - ChromeDinoStatus.idle, - )..having( - (state) => state.ball, - 'ball', - null, - ) + isA() + .having( + (state) => state.status, + 'status', + ChromeDinoStatus.idle, + ) + .having( + (state) => state.ball, + 'ball', + null, + ), ], ); }, diff --git a/packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/down.png b/packages/pinball_components/test/src/components/chrome_dino/golden/chrome_dino/down.png index 58180a63bd72871305c17eacdda5895efdd4c3ce..c2c733cb343de256bb491df1de90b09fc46ab487 100644 GIT binary patch literal 121613 zcmeEu`8$;D`@fV&NvLdzL{E8)y^O6;5jABS#@HuOX@nSCjHM!#EsrK;tu&Y!X0(jm z(0C9+mN7Bb#8_hNGxqOIsrMi7{pE8UIXddDW9GiE`?}8Mb-vEm*+X+v<2`&5d|X^y zdoG+egmQ81y3EDJyL0DXz`qpHmUaMtY(qhf&vFr)Bu9b2>_DBpV6_wYLGN^Zz{Pc# z>w@7KtH9LnU1#=i$p}?e@~o$`)IST#Jhw34=6GUu5Ac;AKeY=JTbEqn@B{h3{vx|w zbnE)GYbE#A^#gvJtxK+iZM(Ow4jg;KQ0A(wrZv@w@ zEuR3nBX%z1<+4LS$aOE-ZNIV6-~U6>?f9SI$n_gZ@B5$K;r^XU&;Jiex9fj=>Cer7 zx)qnupKaONits~=)dDw3zyv>csO%Ae-Ju{J_nVje`*+-IikA@`1dKHpTJ!3n-0Y; z&)OwMO*Fb%+#q7ZF*5f3V16pM+vH^>&_-vyj=kHt!6NDH`C%>L!TwT+34exKjW|L| zDqgK7&>vk=ajo1bzVX_-4Cd_Ov*uOTjW4WwU2}=)sSVu;Tyuq+RbP1{KD&5RKjYN8 zzk^e%8F7(G(l;AUQbCvwPxvq265RM)w*tv>v%>C9tiA#~!KJi3h&BIhu@GLHL|6sC zTfA~=b*3{kbmiNuw=ddf@Wim!O~l3*SG;Y12-5lwIn=`Gac1deRKnsFZRMusV{`|H zOH4%QlJoJ53`F;=<%Z^j-N^TYCaY*e>q(dPj0ZTz1K(*@AzHt;BX%siG|+-1(f&ml z^znPEk8J50DUApFwr@P>jm?h-9Zqh%=Aw~e5|@@5s{0%sub1*kjCnm#$UR1_AgK*Q zq%1EZYQ}27Do$n3{)00n76NoNf$!f6D^uPKKtc{ta7{QxM@R2K5~E=ieUc*K5;LE9 zkBy#0r-rUF>)s5ujXts)pI7hSSg_uqpXb7Q&zPubnXU_^bUXDPKsb`F_ysF`7+2!E z{!TOOZ3wV4YBgWN)_iXJe7p(&9YHmk7@cYd}h;x>Og?wnb z#@*7B1tRGAv1(T*l3)#coiqOJOJ}F;ZC~KY{pnk8+y$Hy2N|Q*)a*1dNKor_7#-6o zSyGy&T`5jQcLeG7luXqP3{HQWn$}txYp7%QteI|n-}&d!9M%e1pslULli>RA^lk^K z*91yA^$6rm&J=LQvZ7~4L2#Az)p6Ig>FkU?iQo-05Nsfr1AlOFNsmkqB-X9CsWEEd zE)LaZM=8mTOc#xe3U8JVIejIJQ$77{WqNdWbiR;V8Tfqvz|S@JZ|{yF2?%c3xOED_ zW9N0&mo=}#9@C~i@(gWaxvwy-zan%o^bqyC?6^K){H{)lPZMuzWb_?C^zh?)3(EWF!O=rAO|xF_%F$B( zO7QXNs(`SR)Ud@2vBbrS?>#q?7#gDMix=lMyD_j zV(hj*rNXrbQlVJI#_tA~C$7lL%EqUoZ)^E`d&|dXoYIY9bkrlssbsy)yPVJD-eRp? zbFB$(EB!5Enc5~NR&?nOFokB`TnLRs)i!Z9QF35t%cYFdTc*XD!(wXabj^1iyqmXB z18pJY(^Q}0Clu+mwXsY&MBH7=lKB@|1g8To#|-S&Y_#NHCWPVSHNQ7H+LG=u7~c51 z5SwUBY8t|jY43jBQE=mC;muMaTcr1CTjjw8bbJK|Byp1YY6^q$6wXb?Uju7efeZPp z>;3n`OP1!7#9BD)q>6I`g!~EF&Ew3Sz02I%t~uHLFEP6v_8;y|!4nrlvVq zGau8c{IsRn`DAr;^u^mtL(;Dn$NjoP_ioB0mBX zF@X0hjg9MET>{_1Tfy>5b0V-FM1=96bQmW?QM3vbI6J)5MA``KT$R}oKf@XjFeIE0 zUx-Tdtg<^u?%Tij_SBR&+5RwRhiO)UiXvm6$VT6*in@Kcei;7Wj^QP;`n5n&mGlsmi7RdfoS8yI z=5?B1&$sl=r*Rz2e{BVCa}>$Yuw$J3;Nwe^UL^TcP*2tkqdVEE=%dGpXqvcXE*fhu zn8j@&kLqLl!U!&1C+-g@>`kaOTNjSa2t5F=Y5f4+ysI93$JQaEKbxAG8nHsAhom## zcqYR43m}t+r``!F>H;sGoXMDd7*ho+@W^}w#Z6h7@Z`3px)|83(O7D*RfyqhM@3_O zgf3cER+h;WlijDEQQ&cvECF%_o9x%M{P8HU-;c^ibMUO?s$e$p&^eT7gX1|xY3j@X z0ViY)`e&}cWzbEspl^RC4+%Ozs7l5ke=2bLHi`;IowX^xOcO2-EwwQ^qnIFr9s-tT z)zwdd6JT?vb~$gRM?KBok9q9t{vjA1|7wbM&)7_GK!KEH;siQ8H&REOxXjeqdw>e3 z;GYOMJ^W6+=uE@)7P}VVUt4wJk40ds;5E-I9yG9M6~kwpg3@SpwsYwoVl9Dh9O`U^ zT94O!P8ZsEsVQ5TttL_by}>HDr}Tr8_5Nu$(>C$qGIqae2PWCju&cx9jItD^Bw(G= zT^gpZCugw;*==yK9AzPNkv9dh4WInkTFbbZK0xR#{+8}eH!CmH(caHc78oEHn^A-l z966u>0h!IdR3-D(-UN!)R_m%aq54(q-BW^xbfp?^NQfZEG+H>d(ra=aCwGJsNnZaB z5JpNGFuB&*(2;mz__nQt)Ifj(`=|bVZT}V9ooPw-DfA%pn&Ch=H>P|Sgram#-TY)+o z-Qc$JZGh(1qdh?Ao}MZCWgciyrU-=}|dV6LrKJ%72@CvOmSxo&^ zGtq{5=auD#KH!}F3YQ04W}~$p!}f>PJEEG3!OSF(Gq@(^t~FL8Qr0`LL7L6N4l{ij z6FJKlWEHg6n4x4re!Yy>xt`7JKUUQf-wD-1)5r@n0Hy`SWMJ zR1r}-q{NYmwc`(tvBG1}5 zPc`@*yzyyDdu?UKc<)}@ynt;*h|o1#!~4xagtIQ24ua0zxfQ+xNik{`!6gk13fj8* z`Z1+VQfIBxi4j<^$tflsk={@}B=p{gu44Q_A)#~^0F*2h28%+Qds&MJ&5j;=oIR1vD{K)B&%wh6R2BSKr5a;gak4Y2Zkdy4~D zXVjh2Qbp<00}3i4)Ugr|b%E^;dX>I#58jL0aLIm%5yfR1ZQ?KxslVskgSxI91bdQcxXCaO@L(1QHL=@F!*-iK-i zZne*@wd2jB5`2krBFXrK-MW!1`d@@p{4sEVKK8VAVUN*EAQn{VTaHJpbh}XDfTNBy zYRj>uPsI&)SCl-e@p$PYw)qU{eZMk5V7BiNK_xvDd+a}0F4Xrk5*@20-p=-XI|G~e zQX%$NL;+*sJIERgbvKQC4WX4~Ej+^~``rwtK6c8q#N>yDu4U$Sj8}1zGQ#5U&qkld z{V<6KIltmd8lM6p4dGDFs;H0@z)!)0e6gCO`|g$tfJa@v~iA*W!5tr;K){CUr(c+-|LscZk`)U5AY5a)DiJj+aUMi?KR5eethH6UZO<+9uQtJ{TWg)dV zh@y6k&q>OjhhT{zG|>dMMWt=k%qh`){tQ8zX8=)-P5U_S7~H0_fW4{AD+ z4LA^2vHA;2AdGrOm2bn-yve$cL+%7!E9+G7pX%K7%7?0bW!LjSwlx3K95A^K{+5Y zBB5l=CMXuiXJ338BdF)+C4+W_U6q$2f_R!C5E(`3N~BmrRdB`X%q2s^rlx>9<*fDP zyax{ylS;KoPUVjlP+}sK&3DT=x7EC>wD$`N0?Eq8cJgF)jQ0eR^|U_$Ap;4r!hZ5l zdsfo)WT!_0Os*A7K{|bg{%N9cjvonfjtpHM>I9N^dEkP9dg%NZ z3>LUKcokl%!CD{MJTd^U@#~?F%C?qH3Q>R%5jtyUcz=rK+`D%`!QK8%K^p&>xQkIO z^REKK`VZ+{{qcR#p?l~T@J^0N9+eI3Q@LEo_b+1(FQMn% z?RWm;$C$7fP>?=LzzK^`NCuX;F&j%}b`6T{wScKx(E%{c!v`NbtFft$4o0ZFo*wC+ zxx4iA?z5Yl$;B1mNwzyTI2*m3sXcLJZ*1DZwVc*xSz|iRfgso!(0pj%r?!{)tOM|d z)(^SR`P}630*{l(GvfD2zJ9sd9`nAzRqg4%pD#+2Yz;0pnoZajLUW62dy7X<`30Eq zad=B=Mh4*EV$s;LAd%)x%jsACjil3nEZfR9csBMSQ^gg>ZL5REMmpz8N`*ss!jN4{ zSSmb7m)SiMgoW5(`OLwnR8%6Z)F-P;;(piR9kgRzd{4O%v1%6X)F(iSZ%@}n_%%!_ zI4{y^NH_Ol2jWm&oBpAi=xU$$remA6Dp#e)Z|s@|)Do2qRkdcB(~a}-qP9+L48DCPzPlk_qroZiS=+?b$>U=8aG?j4Mh^WjxXPAXawZ>4OpJZ*t}4x^I5}4Xv;Th9Qm@Hh={^HF8|hwZGFhQ4bS!i( z7^@wk@0po&9QGWfDMv5Kf1NddIfvmX2*9~{DtqY?Ij?I9HU=&WWqs9n(oyi%F3o5h zy%?o$JQyYTHNU_6`o=US7uPS`CV7sRl$_NWNjlZ`(We-S%CcYArppmvi(DA};acoM zgifHJ7$zSAWsCpy-<+DXIE2jY+jNeWj0D+XxeaTrsL6OD2D#^1NqX2G)*1Nc)&W9t zxUI`2;WE5;$SUON2K*aj_tjM|b~>+oUyN>fw^vO3_3nCu!Z^P7@ zZB&NHazY?&QUPHSnN79!UUYwMQ3+9qeEz=F&3J?~NWzp}8(RfRrZ+aGO)W3grLKYM z$gI*m6xTh>*(QeJWz~d@OQEIE?~j)E0lmlXN8`o zTlnMFcqn`1 zl6Po^S10o+Vz_POf%;EeH02-_xaGbBllHt%sNmG`Ouow@EIcTxQDjm^3=N4St(0@Z z6TRd|=pQ2~RO^Uhjk}f*ncSLZ--2ZvG2@NnNpBs16PB)6H#IaAT}FCVRIGRuvR9ce zD}c7&2C*Ub+b()4O7_jpefbjI8@#SRvaj|*9k1>P`y=)rL1;IsB6otMmkz*-;^ z%>|27cC7A^cgu^_@7z{~=Lv3?en8d3vd2kIKZ~XV3GjeI zf>!Qpg?*9Zw}FHD7s;bV7IR5~7 zJp8Eqk606`No2ci8XtWW1z|3Kh7lv3Id-MioZA|)2?XAF!NCotW#w<;Qh{CdgxF?& z$dLO5UUK|Hy#cBUC?cPB$cbfwEObsk;X_3F+UrWyfc|nj{*r(bjj*H@&COem1E6|t zB^hr)&O5lOckVvKIcW7(S&wJt8{$3;K>}mn9A5>x3YO7P@-rPBRBI(T0j(a-Y zuMKo{_+h9<2aJ40L0BUXAPqvQ0@~{?MG32!JMVkPkTEi4c>9%GT*tr;>>R9iR@M_zJKr&Pq>97gF>h zhAQ9@n~Y5V?3rJX>u+g_&+?0=#p>0T)Gn@eD^;YJQ?kHrEXcX%7#b{cOM*9XsbvYL z5#db3Tk#NDbt9KAIvViOpgx$K6|xU$pc_Z-yT$>{qaKl5G45x?)BD6vAa!%%$MZ3w z)*p1r3I!3j%_>$5)Q@d;I=C`;e`Tq+rlwy%*Mat)eSR<;B4x(&(no2T%4MniHyA7Y zXtcz`+mX5C%Beq*_57yv2;Gc)Q$6cp2ShgtN`B+QZC*O{W#y55t%E(B27z_rZL_Va z0pgE`0F}v|DiUxWosad%%pe`o(~fCw4iFjGh|jXJ0JQ-88lT4pN^d%By!{c`A^n8S zpayU*ox7^wCT$<ViObUiETehXJ&T%WS3aIUc?^x&eVaxcr#I+EsoD%V z=pU%pF#;87(3C&3PMjjK9Mzk6GN1zrE?@CiFDDwG-_in*2MF>&GooW$ODw7monH@c zY;}+LpdeKOg4OKX+v!jdSEFCSxuMQ%Od0>G^J8WEe_3mcVp4;f`v@WUm z#R*p1Fyi7CQ7ihz?%5#o(P@t=c(EUJ8A4X!2gho!WcH1twvWICuJ3TEl(P%JdYCunRHYbfHun@6hQlBPbnqpmA4x^!HG~pG9?sz%SQ* z5CP!hywr3@quP*pg#;NctNm6podY#B-v1YsAR zmv*Qv?VC;m)nnye1*JG)0m9S+p=j7%YaX7!>-W{Ue>ngYr42zVolmbEBe_nJ78Zqocw^(xL53g+HRdp$!@%M!cM=;2nwKCeinMm3{Y(z@@Wrr&piq<37b}=nZuNLpA*mA6_3mTQacl8So(a9GtsA*sj6`f6nV|Hq=-*l}A;bUG;HX#<;P=uLNMyDEYG2;Ey41n}cy6+QGwrVo zs(*0FkTdRRf4i>fgmZm2^VQHi1f})p0ctwev4_EdVUcW2w)ojc8Ob(=6u_Y zu#caF(rC}93%3E6K8nl#H`L1$CLb1$Jq!bJT=QayV)v_jd@*?9_`kH0Ic;pY8?OA@ zT~kNt_ut%WXs_prbsT&zJ#hCtsuD3yxJdy@P)Nx%cB4%zbv+)oex*T`^kfplgw z_yY}5H^6cb3Cyp(%IK>LFM-{t=ZQY6$Mt0Qnxv&R$cj(+KpPNQs3FTQFk#K{t4^yy zdT#swq9)fEzRXU({(AKD6Q>hoqMFG}Id0K1i`xeG*-Ad=iH_5Liq0`EY;)s;=FM|o zcs+PgbkCRrJh)-&Ze%-90Js-xNl^sXSLgvPCAB-+H_eCj>xBAGT#eC=AeJ>O3%;86 zDSlL=^Cgi_Y_#5DaJ(ZjAN@~`@K`J4j$9tA=b!M`+s#Y%T%mhpq5xDosZyA2m7{ls3OaOrq_-)_u8QkSK8d&@S`bhnRNo^TOgygfsdWJ~Gw)w*#qbH1-V`DHSn zt)=ftD&X_iWKUzhT7i|;Q6MxqIIK8Du2gevp|B#hX|pAYcKB8JXB=>x2gq|rPCY6F z27ry$CxVE^JQr5U2wP_K?L=(YNTqR% zXvF66a8+Lan;!u-Il>f6ih2VsRc-Pqj{^!7EM!}5KPlRSd`YEOp;;f6Nz6?o3Z70z=piqsK3fLdA&3Q$oAyDcLt+qXWqVja9$%$G_3 zg1dT_*O_81MJUGD6y`i-#**&W>gOn26l6c3ke9X3y2vXmwtL*lPoZL=ys;6Z7x{wnb&NW*Lb2zv!IBxKA3+wRA`30oi5w4CASOwgm@rb-KxV zc!Qc){MvHwYx0lCBDj?d!kc4==pn+DypHR#$9MQcxBcUi+_LPP&wS>8M;=uL$AUv5 z<)l@UODO^>qnF{6wvAW?vq*Z~gf{J(>O6($gQZyswlPQZZA{3y@}Wd8#~gbZN~}f* z4i9??V2@j-EQhyHI`U00c^MZq1^XI2y(-vjXy{tH{ykkcOf7k%9nZzN^{eFPd>W~T zhxAEP;j*QN;{=w)+a#&lI$s72;I;QjbL5)AnUZ4bd+EeeU` zkkJi}AGOKdjHcqzm|d+N_t?^UMWD&ej6OB+3t6F!sP*vP&c$+z%m4UZI+~sAM-}=v zRBG6_#r;uVuzbI8MqB-rz3eE3o@}o?aVLWeX+7f#X{l?F$k!{9(hDt0Yd$ZFx=SqC zFGg3N+`T*qu9d;|tkrw$O2Z$*HlL{JzCcqbPipUl0+bF3ryZJB?E_%jhJu8v48!Kz zJqxY#RVOBwoJy1_*(&L$Vro>v)AbU{HF3@#W=E7zeYfT1gF0QOdPCT2UwWnGs z)OD4A8xf5vNqZ%rYXWq)kW`xiiBO^^Ld#D|I-jo!{xZJ{#&S^iJgB)enU+IMZsNmd2Yg^iw)dQ}Z%5yp-@`IKW4(I0d6b=)Hq>5f=k z-2_CHQTMi5M3r)r8<-i<8>XIoLd3O|mJ7`#*Hy*|thGCM1>_ABsrd_+fnZdif^1!; ze;`;fDsc5S;O3*<2o8F#i#%*iJ)ZSY?_M{GJf zD+W&p%rEAR8uwMa;}F363jP-Egi(V+LPEsXGrZR27!y;rv>kgkQylBJbDDjrt9v+i z=1b-=G_1`(|NZ^*0M!U3ejnU!y#zCS?ZI%1$C2lP{a}SzRVKK6OAml64m`A$+GQQ( zGgPCH>!pND?(8-Xr@d{xr;v@SfRt zZGR*Q$!&oHSD7cSFDi4JgR_7PgcJl15S+`4zyns}Rat6@BH8|ZcZzxji&h6$!rQxF z06K)KZZ*KS>?h&^(xRIlHlgg_n4lYtLX;acCLKB1+3d`aeVa6XxZwUR;MTwYot=`P z{z-b>Xy=e~S#fbXztU)j56Z3^%dHD`CaC`N)c!hXDzVf^Sy8>(?qsKq1>$63RO!ys z*d`J|Qls3H*!UvLzygZ`*oEuN)Qdn2Tv`H)B)4w+M_(CM&ljJ)V410b#+$N|5A2hdUv}5%v)fMkh zZ;?i|NPnMN2)S!_)!AY$j9>=G|K7kUDPI6VKl~4ag*v~4hF>aVpY)H#y@0m;2TSn% zcma{^+uY@7)!v%xv0nr~lMyTEyvTe}8zi;*Jf5MIRRy2cX`|%={iKmV`7$s$UCl*sPVtbc|^_$-=ZzhB?#P1Zj4Y2v+J1+FXI3O4p z66FECla@b&K{@(GSKW$zEQlWBHn$u<*cQ{I0Jx}p54&hz2j|3dyp9I*fGxvl{3JcT z<6`W5uyb_H6RTS$g=wjL??&lUsP+lI?5-U(?zKun?#%>SGeg($(NfQo2VT{~s`>6&QpPYD_V{G5-}l}N zivgMKlb_OaSUQc>E5%u)d&#Ju2aH}fkJc!)(kMzIV72PnPI#;drpu)X_ica4`jc1ze`@kbUEm>u0=h1RvY=(*DRY zh)8bMg4R)*KXi9rLuBX5_0;9u)nc93;3NUpMK)wOf>dG(*J7lN+Y1#8F#k3YE&?Kc z4|#C=LfYxXyr!YWg#hvd|HV5Bt4`vN@i3%uj)9wFp%mcY+LpAkx#_N346A++yH}XG zG?HqyQ$Zvb(kL(0(73Bl-|;|a(SWVu_sI-SL|{BXUXZi)9;uQrVHp9{HPElQ*Fb*o zoeDoBv)NYURi_e92|WSFHk<>f2V0a^QrgX zY8**>W3m2LQto4ivbfFlDo=<|A$gjGAgfV8Se2KbY+Kh2atK|83YoB8TG=X!nJbY0 z=4UhYT~=+g7uwjS8YwANMOk-YCNx5;Br`RYct5zS2xwF;W`tlBq^SEc?>(++4sm&9 z9bp>OiEnO-$}ekW9o%&59@#Da2kn}i^$>*UDP><)mlLDZ$AbI#R7EJQv!|r_re8`* zJ(XZN+bF>1@dabhA~C7|KrjagPs~^sZ(N^BBqnv-sM(VD#&9oc&2DfCleF7;QM=?3 z%;Xtztjm!uB_a-lW&PtAGZvay3lOz->o?HpfU zYOvgUfO4YY>dHxhjU@(#{R-9630b@B*XKv4Xg(sbZM5uqT3QV)`|I?z69V`r+~;tB z88&=y(83q!z=|@6<3`M(yH+w%$)Ge#{K61@cKq92cOXuIK9L`$+6_MQzq{r%=YGB~ zJ4|EX1SIXCQ*+mJz_re%J>N~>)ERw%_A4{Esso!wTJ61PSmMMpuoP?4f+_rp0z7)q z?Nl~$lg;a&xMAq(B;~QORN#k&5p)JR*pD8ZcNdFtX_(jH>%RmGz?0nt#d&p0JZ);b zZqvxnWpS!jh$=bIVH{C7?ySqw60I z&`BNIZti>;msJmw@3wBcuX?j$G;)BDk{3ETiiBITzdEK@!?J*MR5dS=Fr}wZ1#j_I zyYe^x{KK+d{$@5}eXZ{whfR4xVA!vAJ30c*ff%|nCa4D+=Isn;l-8kl4lzqChGab6 zJfn~05=%M)y)5(AC-LBn?0fq1OT|wXtaK);&H>ErD#g>wEl(;E2Z7}ox?1fb_@07A zf^zkSs?5pT4zI>g$FAe1FvMOO+qA@!^ZihdKE{}BCP#YCcQex6zh}X-3N9X2jBshV?o z{Y#~I9DFNttU}I5-7FzW!z%dbX-K6Jw#~j?1N$YPMyDu`l) z4kdDTbk->cUcG1EF`yu4^eM;j#hPTp%lDVOiRbs{&SvfJ>~@f@SznvXUezg$TuRrU z-00ARv+w*ui^kv9XvCS=o@@hP^|G%F3_|9{2)Y1D9q@Mdcr~9QFcZ^u1VB0iU0~u8hXmi=i70NIy2g3OKR|eSHtAx)0scPw zg2tSnFH~VlaGg+x78)DYp~O?wk6E{kA|$cuREs{UT!ph|{TixjX zBSQB{qS4kdQlR;fTX9d_GsO4UuFUQp@EcSb8~<@5ZX7M=n|r2 z#+wbvTY>s2R2H*elLqt|00NXUBkO)5?@hH^f5z3W#=OMCT0s$QnJq(O=BrA~Wiirq zM}(nkc}#_Ihn;OJS^!k#+y3NvAoM885 zvMGzr?^=Ekt^xOcWw<*hb#-I8#R>DHZl>}P7$~2Gt$U`>ziP2azh?rchazMYr7Cr@ zW&pMwi^FM~xEOsPw3pzxo(L?y?pnc2jy_|)&==E9FP#L4B0s0GKpg0qHS*yK!5r_@Fr83>Rqr7y1t*6uYD*$h81JMe+OrMR}0O9MVC7&U{-e5te zG2G{{O+{?RRl(!3@gn9*=5k@~{ zU{jMO>*OOFW(@qW8j<8jwID#BYvRWNt!M+ejdifiiX5>U*i;Z42Zmtce9vE-JcQ;t z&l}_KvA?Z$uGo^5J^aK@EYxj)kfoOS^f68w#fB!gv6X`~9O*~zA(v1k0Tj`_39*cx zhM@9;n$G9&y>(aAR+N1iu?}gb>(c=?Ef7~pfJJ!|E08|Q?0hJQn20O2;NSy#WVD75 ztHMW0=et&!>LNv5C3>Ai^W_b)MRH@kmH(5Q!vO+<*SaHHtYtduxq#)O3uD56MyF(q zM$GHidJo(8R}fHmf_*TrR|tZu5d#_CkMRe4W&=+NATUpcBR(89<81sOLK$-^lGWP5E@nHOob2+3m`xAxtfi4MQ=(tmxxc8X{?r+?%3{QbUg5?nt zmwg{7J)CQ$rJ*1+_!`aqIZC!Xxk3p|-)M74N>PJm`pbg!H`X0q_}hTD*(xVx*2CqV z|9BQ_QMLK=zs<)G^XPRH?zlDRqb1%IyWI$vZwg3S!a7J~Ae|sbAaF2-$h- z_ax4kW~)hokb3L+BePX-$0@~()s<3*fGQ4COvT@wm4We$-^}zy2Y;7BTsqzD>{S`` z(YMPfPYMD4vDOEcNhQa;0pz|mrUicq;|N?}A{tDT^@9%(robUhMcl9pc%D}pA`nJi zi*Yj)zMOn8CWY@gHg44aQAa^02znG(5N}D#M_1NYEV-=NMm7(+ibUlBO{avSeb%hh zXR7MMhLagJ6MS$FNj-r0Db<~in!-rOOGyKp$(v*7zwt>&XJ$}Bzc#aJk1qPw0YJFD z7zOCo3}0nzG8zFW%j-QBIauk8jJwVk@6E3R<>P;f9d`x`z4OB8cDkv*I~9~^y7(i2c%zFC5eX+Hs7 z#*U1?w&T$&vbo;e?CmINwX{f!o%2MABfMfyl|5huCj`E)wXWpbZc`Iu&o^mpuB3A= z%-`F*MfC37wDEIyS+xQBYk<^d)On?fy)Ke4&gke>b>^TJokZU zU^P{*p8^FG`A^Q;0R6`9#pvpSYv}gtJ{lH3NLHGY$&GI7>0O^^txwc20U7Sh z_r=|N4|Jt0=&l!U>^4{2uXb{vU~-oB`-8%Ji_6OPSqwZXNF(O|4fU)}I!@cCDn{+P z>3PlZ2vFtlk@Uf};wk)+emzsQsX*nZtoV96+;W?u6l8xfBOhj}909XzbRR>LgbN6} z{=MFPge2iXtDd%ROmkxTUc6z!1M)&q?_c4#J@-x~-2-(?CA4rn* zE~-~A1yZvdvq-OZFe|>|NHbz3t481WXNpq&-3gM~Z7(3<;t$LN94vJq&>lYEKl99r zC)eeynoj=yf{}(a1miD~wS0ugSnv^(6A_kBkz9=wt+H3!ZEDYx52KR+$&ly+Frd3_ zYL3kJVXHHP9}~Wa>KQP!ZrqeSj`mR@n#2ADBzAwj^L;5!=teEZ@gl8w2-y5)yxfv zB!0=o;3*W~(9qyA+(O*TLfXF;3gpwm2Y~66jTh-_Oj|$D5s{C)>!h)B_o7foW<#}S z=&Q8L^J_YC_;-E(L|i>i%kn%TLTy#rRmDaFeI}mVrg;m(hh#46zS?GVTWpx%_d1w* z=;HXS+X~C8BAPPzgXVbAJH2l9QwU#~=io4jZ}Iiqsq?-8Cj7l+fZ({BGTMLXOI-7A z12x8khV3Fq1W4keCq7_Z8gb#^qh(Q9-kDPvHIssK2&4)&Br@Y--${`tW7qoNC3idL zLSx@_PGQ!x$-SRT@+Bz{-3rEEEJOch<+*;Jke!H!|B2)d-=dUXzO|II=jC{HacjUU zhch0+W6-eHbcrYyxaJU02^k1A!1G#3C3%;{i-4w4F(s*ypmobHbn&o6*y=pJh4by3 z>-)_j`Ecy-KzZvnD^%Snuh|F%!9+l}rRO7`2>gxVK3h`$QlM+rD052-;4})c!L2^w z)*uX86@ZJOvo#;kXMv4y%-{$O!by3JKhr96bsaN2GxY&DO(nkH|&&G z^*N92c{g6Yc@P6~zEL~{bMuzqB@z3|9@VTb(JNfvh;w_B5EbcV$2NTV*BnOW$pG)$ zW=n^K-`Eh1&%8*!{5X^ZhxrWOk6u9s?2P`;IZhRrg!ro=Pnu{^!Yd`)=A7*f&MDf5 z$;c1{b$)BMq>`Z?U65wkdE0Sav&gKKH;ks|y)G2|(~q2DcR<2<9DQ`(2KG(;GByR9 z8&kL@W!f_tWnfeHAetM7yG0w(c@>sXGmvdHekM;)kJ0P5Pub=5UWLiecRv>%Y9~eM z&Mh+A{3eC2%+4)_WQKXADLx$^DJQM3vE5c`Nt91cn^LuWgDp}mFbd5$1B|$^GN0Mt9F^$MCQRYwayJCXciBMX= zP=PM#@Vv@$c`U1L@}6JV(rm^#LtyfS2t|lf-*$*rY^ouqieK_}a2lz46)tmb;`Uuym>{>`<(| z`@b9GQ-E|n@4t^ZJOiPAU}Y3hdq@64%HF+Fl?pd&W0>s`c}7Y*t11lg!srV!4W?18 z3wKEQOE6Z!+k}^S{T;Tp8L2f)ZAV8>`3eeWR27)hsMqX6?`IX3I+}0x#q~sfN4Ux; zQWB-S!<+e)c5b370HJ@Mo3nDzj5z$1uzz$JT6wf@*vz$C zuc_-8AA$x*Q|Hj(4TVQj+OoXp+$0L-)yK(00Jjvnr<@7&-Ga=(?wCoOhkeT&c|O$_ zLs-#+D2ZHDQmC48>f5MnZhXoKxhy}2oiC3j4muzJxOae;cx~lE!R|G&3eEEK!W1AS zE9|uxIA&R#?Z5#&;YU1_!PfEjRkP~BeL5_q&-&5$Mud^n>K&*V=;H3MA3g6TZ z=2{P)-sIBJp1%-_SIg+AkkhRm4dlrjV0x#r?b->entdGT}K8!kG72%}b(0XnL53V21q{yhT)I^2q$N7j};XzG3tj0DJgBVebL5 zU}}k&2T0uC@3t&sLP%W4Q6rNpv29sfHe$%IaIo!6?wl;ZwTu+4PwrvO6BPI^GQ(>aWpj;GwfA z$J5*U{_y752p3oH-NZy0H=26st=gqI+2p}KK@12%`_uw-5f!K|T|9@nBp;n`D;lwD zl(Bi@c|DL(55*0lND0UkF=7Isv`wGuhHA+l<^OxA!=#1IXJF|_KUcd7MgrY4cPzIZ zjtLJEWj6siWXAVphxq`(aH@XC@(k=PAPW0#00RI`d?YL7l1i0UIPHSN1PGWQd~y$l z)vozZiNDA2Mg1&|gudJml`qj|G+329F#q}>S*}}Sn)%j-`09;-g=58S5uW4g^Nsqz z?!05Fyh8at-UJJJS69Ho8}S`zDaAzs6@Vj_P|AnE_R?u75ExT=>0ycuQX`BYprqMI-_6=5UQB*Mqicuvb3zfmf^NiSh04L zq6gdLC(%Znu+y7w#8oK;j2&bygv(t|0<`v&WP-5hjErJWQ~t&XVTjcP=)n8YLAFGj zuz|%uaKCCbu~NeJ&{cTeLs4^V zP1@7^tj2GPqe5RsyOq&Hqe9m1eq+e>SA9v2iOr&EV1K+8p&=XxXoXu3KnOn7fXLqku+ z;MxpRU#jU{$HyxcVu~AmweWbUU%}(#TL4}|=6<#tWF$#0!JkR|H zSZAW%JFTy|tFJBSuRp9wX)Iga2#A%n_qQ0gTfAKcSe(qWTi&-tRtHi95c5P5p9-e^ z{eNw~{c`B$D6B6B)Lp3Q>G)J&TjU2Kl#9@jdL7HMkWN9wDhMcGxy?~ksGvPA$p)7d z`~-2q_&v^m9R95H1Bk1G)Wwr04@3!tY|LdD>a%_uyruK$nyr6Y(YE=R&)X~lL^ub5#Ja4#6ZZ#6V_&sC2Z(TuF zR!ocuoZ!l0bLsf^b=@!QmF&%N)(n9yjccV6*`xbfgZL3Z2pHw90u1j1Et;MzsHHd+ z7~hO*Db;H!xvBH14XEc1PAW+Kjo&2^$;ytSX=Mds5 zS)pSPD-*>Q{U0`HG__%{BKG9!5{%eK3>kUgb2?|tdeftT$e9HxB`5o;Yj ziu$?`eiZuxKBi;ooUe@`mrQ8z)nhwUU|+i$pA+%c2Prx$W$UZw0aa@aFz#uvvw`=H zz#UMV5zDyNRqMLsvE(&}IhLDz#L#wlNWLd1!tWBN9#BC8Lx2ipX74DM&!x7YT>@F4%Q*I@ zoQZyo&TF^q-g#M*&rfr`Tc)Al zOdL5LINGsiq7hh)sH(u7CExGrEsCN;dsJ7hF#H!#!h3Jrt2eitkT3w#FTjRpSkbTV zIpeOsVp{=hs>dAFee`K;@vOUE-;iEv`xnPA!*%8VkE$z=hjM-2S`<2MmXxKkn;8*V zLMS1|K8&$XlEfhUI;c?DvW{H}LuN3P!B|FQn-R*ICBh6L`@a9)&gq=rw|{)_;lum9 z&vW0`eO=dmKNG6b#p#@B?&IT&n6q)JOrUR1ugW~CquDrGl63BG473-$%Y*#dN!p0I z8P?7Y^8_VXuU%qfh{vzCG_WbC|IxT>|1T`Mcgh-x?EI&aP(Jz}ulL}gF&qzcqkqXT z^u>OuPn&k5NZ!hkM{#vW;Z)n@gJ)`oOW(}htsA|)pStN0_@k+!KYfMA2%eLNbJeZQ zr-MEG0EVXLRo-DlK`qw&^km1zY$woc{bKc7duA9RO6K0r)k_vJ=6|`gWrYJ~{D#{$ z!l;dvMV?)c)vRyELv0#WqOQHw))^-T=e`+kQr9K|O6uRg51+d3wcA(|-VAj80OwkeG0eapU1 zauzD|+|+m;+su)Yr+SlAI|Wt=L-iV?yBy6|F&$dpJld7$YW4VLDBDqcPexo%P{wRF z?q-m_zg~Fp`6OJG_a~oLbBJtZe#=IOH;VDetLBvZ_>!dv2OnZ2v z$_2-G?*V>kWm;p!v$f+qN4)!z(we)auRB0YTb$`L`2cNq>!1)D`9N08vtJkCKepTP zqCA^~N94GjWc%k!8!F12sOR>hUOtx;e%Vu|YXhI?mXF%4aLlj0JruZ-q!TtAd4%+}+U33*0{I_tm*julccU=LQwL;+nKDi^H+ zG&UW5KB@Q|C`HH2-n2Pi>CZWaPb~HTxCxbu* z()vq2tJFE*ebwbGjqYzJ`;u#|zW$BcMr8j@C^xa>QARH`9in0_);~ci=A3^1K^^E- zWIb-{->;pos$Ws$j)`YsKM8;3y+J#26MN1_Cg88z;DYslg1vS#6}ezN{GGtjHzR8~ zXUvLgU*{hYmN_IEc*$Ra*hx=W(9vzxd4AV(ljhSK=>zLl7 zAuwpC5Jy855C|NGMFCC6#K~33Y7f`u2ce@s2s-@nYy zpKo97I-7N{+VYVHRV0?I{VV%FKF#qTw7JkBA)aFr+6HK+FHcSVxcU-^wKqgK4r?(w zSGiQY1S~`5?O5}lx>k74Ia|Ej^tn)*AEG`dzja*gf42DbGVCpT8I+OQFzaoVb#heK zN>0c}#VE_p(PjF*cF~)U2>peY(SYjn!7cgbXC}dSw>Cb`AcmqNamWjB=C*L4+BlrS zNe0`!M~gZ+zB(x0EP)Hia_KuXzMKTyPjBYDjVuw}o%QFh`4eVC3?5daRDK);N{4dm zx+~SLTM~i~yjDko$vcmv$s|&0t@y7)R^$9%tN>3_5r9*zSsI}3Js>l=Kh~e|-`=Di z+<@1D5kg?1oYm6w*AFHjo-$JEsl@ZPcQ9`O2+~D%9AcT7u^RhY?o8T7RJ)ha!V*iW~A7JFnT*2+Lc}K1B=Ygo=1%NMO&cZunL(Qs9LM!ls zQ^SC8n`L2}CaTt}jo>A-AW!!j*G&W(7!o{cr5`AKExfAQy}s{(|BWXxzW%H6eV{z#$<@M~BPt4i zO-ya~7c2ta@vtX=)X+Y5ebeaF>mO^|BkV`?JwDzhtpv`h2iFb!0h`<3Ik1~jYPDwI$*2++f5ukM9;ps;6+d&}`=HnWn<-l~v? zc~w>JkbOCc?LDBLky!50Au?TBY@r3qbC;&VvY`McF20#r2q>Tph+^&I$xb;z`6GY9 z3!+LXeIXtMB|7aV>>PfL553l3x2Fr}B6x%IHT-|~F#ON>0QOD5PXX}EuTD)T{y3vE zlL1uDErS5|z<#_1Soiu>EJYp$BspSzImg}@YdS_a4;fZoL9d}xv z&`*9uy;jvp8#xw>HI6GHKx49i)slP%9e*E-vzwL;wVKNH`RKtC+yMgmHg6RI2C5pw z)bRZh>ZNW1anSohG{A-LtYqz9MJfH-l)gh;XH$zM|LzqA@<5)Rp7$+??eo_Z$3WbJ z0mJXp;*B=X#r*-W-4KCDQ)xL~usU3DH<{Re->ax#mOjr{T^EkC*+&N+_@7jgsBm#k z0r{LRz!@q$>`f7_DnHdr+&MGk9Xv92?OROxZA@X+U45Vfd?vL$@DxDzv6B_dk~XG> z&TN0jICzhiq8YUB8}~w=En@67f(h5*bf@hd7abn*Op{)aOFN$+N5%Zlb-qs;@J)9c zP24ONw7Z`>nF~zn(S4Q+NFAme{6AZ=+yeY%{0V)MzyTOafB36KnfB9ZQ+$7CXhH4% z+n(~w3zNTq$m43&f0M%H`sV~yz#`M?2?yK${0TNJaNB%E)RjDg-M}7!Z*wWDP4@TB z{WWzgu*}%k0Sq+uNf0$~T!t>+3Iarnc#E?XMZBDqMqDZkH5*CdENb(J6$*g@eZ60K4pnLBG;@FJnE&`0F!;o`HN)v zsZ#O!u=Qx;iA|HxT7p`JBMz z_B{C1f{ZYZD>?qOjooBq_|OTeNuK$+2pTY`i745&H|ydw^gyL}M<*X=9j^1d*m0_I zWEe>I9OyxBe({H~Z;qJ#jduG9FGt!+(M)Z1uaL@T&c-#lU*YEu-fBah^5BeAXMg3K zrja)3T?eq`3=9S#|MrF4ybQF3?BHa775F>{msY(3>aKo>Ke5#FiB$BK1NmzlQNdM= zWVvt6$-QzK+b$0= z_Bw!|&DO3(y!;6;^^j^IWj!m-htsd#oyrF0ZJiu5*@Kpc5d!-y24p`@)hT~@((}$1 zf0u4q7yj|?XyAsGbkNGAuJnAszR@qm_;JPm%dI2#&OX1hJz@vQwpmu}F1Uhwa0?)T zTuEb*@Ul{IymGxO8KV5Hcga!|=SeU$cw3s|c(3JXFKi4OTPy|d2D>}z8`w6m@|28Q}hs_h?uP=)Z%B25g%)!d73jo~uV--u1|nX0!@Sg7*h&ak;sG z?cT&3^cvfr$!)G^*%Hc;`0|A9=EA3YrJstOhsrDMdCS4@dEB4{V3qDU%AgL&`Df$W zy*GL0tt>Tj8m=kWUgJW95}-xLfhr(-LnjB9v{hopR_jthW;OnrP2iq0n+nme!AC4& zOjsOlYno?{Qc=>o^{)z;o-LdqCaopPo4pWMX><0Gpb-!#WCP0uc0C_ zgxibThz4*G9`X!mJKvBdl3&?Iofe>n7|z-$I;wB{n6Z|gM^V+_Ou%rpw1bpir-pwT^hr+rI=S~o(JQ*f(~Irt8>1S(CWw8=|F0uu(`owP zb#Ra$M>IDu`K@|O_QE?bycBv2UlnA07Mew9De(5*uDy2`ZyW~5(jWSi%ji@6&j_l@ z!{wIG=6EL_n~bJE)CU|wxDlDPRG#9A?c1@!hyq9xa%ZusZXtbk_HKvgW{0^V?wxG! zxFk_7P@m))_saI^Y+34z`Rv{l+cQ_sO~;C z+2d`qi|{MFxsIIOodpZq)9WGR2Kd6k-kSrZvnmO$MK0ay9Pcdqqj09vCB5E5;j7a) z3p2U80vXva*DLJz%yS+Td$>qHA}U8W2OqSkWG{U@zErm`>W%#y?`FyVTj+m(&%WQX zp65VY-VYfwwcUNPH#|La+vaPIPoVJyVfY2@;}MQH80N5ILDG{kd1V?6B0n9lG+}uY zQpiBJl&g9*lI7Cg?=^8VD(I96eA%ryay=(z*2}%~%V^H2Xw2Xqb{%1U`*<*{(+13A z?1)cEPfjP?Ms%!w$yk$8-fs$VYr8d9jwzWeyTrrzjK6GNs8uBz0rG5?Si7+@Gs{w!O1PFQN)u)k7oaY2)HeAP5_`Y^uZ=^wN zu&PGQDL?koJ{T2jBib{Ha7^pL`)kn|nWx4I?K_cCV9&n^P0L-(-?A`(uDn-+U!VSE zwypgN7;9(;_6zMH&RWacM_T8=!f-=Q$b?oX>?<|b zvOSK#@Va`6$D;Th_70__G#O#~p@PSg zMy2<|sgk8QS&lY=tmoy<$G520gptn8C2_vQqEI>=Z_of1x@*@`5Ko{A3FT{2y&~c< zA8V{$gzBgN>jlW$%`^Ow-SvWNP)DS&*FeV>W+iwpS_^LJfU5}CE_3~hMgm@1%(K*wF@XIhCgu>sBflAnO_n5AWYfR`??3B6tA8rQ z#Qfiyv>pk8mELt*8prt7h1cauV2&N_1Km*_XKsp>w8_^<>lzfKpKK9~D{z|}&v@Bk zRZg$j=h^d00na6~IjA}aSiCEB&XKGxzw*jn?`T}VRIdKgVAOO%jyo!@mDp-~e}*Gg zpAljxz!NshZGpHZ2wv+qrXt3aV?0zlERvZsmP5+V7CkOII+o~~BynP}UHsO0R%Px} zyzDwXNfZ-k>l2&c%Mwl)1C2KpP50oir)R$AnuD^+?I-32>L=WvofD70)qg^?*bo}1 z*m7EbeN@(rn$?{#!5Q6*i@tQ&ETY6A={m{p%HaA>k52WuUdR1ffxmY~=#7-Cha!LN zk>6il4W%INv~YeNXiuK4a=?W`D8?76gF06AU5U%^O@*Z9YjBp&W)<*vCLm_*mjgs+ zPu}KYN{Xg{w#>6VnkkuAODc6G1G;nAfL({n?TQELkTnuGMdx*6lkQiq>ny|TUdEBi z;|YUn`d9VbN2JCm_gNdtQxrao8a)@^0f#|A_qT#RcrSB2)+Eog7&<5>7G{KZzw2qe zCQQ9>3WQi*Im2WI<$k-!RV{wDyf7Bw!QNfN($aIW?xE-E46{+mef}iblVuKzJw|Tw zs=_vB|9LdWH;>i-ea17Y7ezBXt}BqQmMIRY9-oF<%YrGU*1IXtfG!k>FR>)vHc?CP z3Mi2#SbPQxhp`y2K&RB_Oy3kHvc0Cs(_xLdJs7svc^%gv)?pq5EL-rLld-C}QfEQH z$sR337#WOV`?Qvt)PR7p5tYMgBc|fEH$3SvG%Pm_xj(E@HGQjkbcPM z%Ynl(!whhTX9Np@C=mZp+9Y28Io;?Qvnk#ESwSdA1Ol3_S<^K;8fQ&bAZ^X8Zpxs} zgieukpPJ}3u+Z_fArtosG@+*dyuny5(YwDN8hGH?;}Ma`;_BGRvu(+uuD(k2q@~g1lLn`5^_M3c?paLJ+Q6B0`XwS0 z`zhwh7((;*j!cx6;TuJ3 zpAq%exbnb{84?@Pv6%cQSlB{4|v?y^xUnyy_f`k-)TRyeACs{H?-GLARy&|NRoG=mbNRi zJC@-#ut<+Bk7Ivc){EAIS?I#HI)Wc5YEr?E=y-da(_P)^1|F#`XyokWmR|Fd%Nz_3hk%c< zc^CZnw5bU5ehPvWgj^Hi4?Bw3Oz<*$D%lIfnwdg;JfQ&*qtl=OF`vCfKHSHj#1h{< zj0@&vrHuE#$sz*&H#F}gQ$mR)Co{sT|CYZ;=6M9sZMk=5Rd2lp8ak`=Xbi+&oQq~; zm;+m{%#YNQI`sdE0;D>d!{`2s{!Ao-{Pi2qa*9MBTPf8mu18=az|UT6i;}<=lHsN0 zZ>)85MuC&r)I41p?ik7X^ozVn(h9fs2kKgKfr0H#gWDu5{VT^hFWW2kr^ENY9Kb9$K~(}#>e+!WKNutr#a^8ev`oT0=tUs9&c&Ry(`h|Pd_t%wI5;_PWcj!+EW zNeO)Q(ROCxP42;8&pLySqtv(iU!XaP9z0-8lGXK8vh#;Gm{-L!n+6T_lnw}rfvgHv zH(vfsFd0qY_N;OCvk*N&@A7D-LGB80QTlnTMC`cOYM)K$@%3N3V@Y*R zKxLWVF7jlz_QAsAad2}Ftq1OX?RwefMS3}1LCtSPdkfWk=RN57L1ox$X#e+PTPzGF zR*J2N55Cj&8R*^^&bnl~V+s2OO-5?gc;iB-I^G=kk*dC;q1ksq3ZfM$7c8hI?@lHr zloUp@B}F`qyT-i*ez@ao3;SHY40j3eMPa%OC~o(PyJroJgl#Zt!oj-p7_`^yWb|84 zeum*1V#Hv;j!pyrKOr&k&vz{`FghAD2u;7I1)B0SPU`^BUSwi;W4h$@L$Q-!_M$`+ zEroW!c1~Kz5sccTo?lome zvO?MhlWkNM=$lyjHp8^iafUGIX)rtCagC|W^Dpd$mup#E#A@4$`*U;FO;z*-AqC<| zaTUhSZW#11N6%cXeA5DYel2S+dE8AMDF=|yP_L&OS;@W zQq=FTsQTxtSM>Jw&hFu7_&N|BCI(ts#eU1fa;5qwCb;H7m;5f&Z^RL#u7ENKW#x{> zVyd6w2#=RM7ALmdql1QBcg??mp&RZB;6u|H;;%w7?&R4=w_6O7b;BEZI;J&?-YbHD@i+po6epK4Ep3QBg`by^hXTWE&dA)3C`cf%^mkSPr+c}-$vpJ~W}P|f z`K?CPG|%2k64c0N@9s_Uzk!zTmB%`We)5AhI z4m1LKv35*$)U>mx*ouQynt9^G3&JE6w&-2*|InjvhQFVi<5CxA}L1d=bk0 zJ8S-09vbSiG;$ zMg@M_1EvAwFLpw_pqPY>{8onjIkEq3W8@3n_hrM16|^Bu=KyzOa-C9?+nLFIiFZV?_xpOLE^8lkUJc8x zudg5J!TL{fxOn3a6tQzG%OKlW;x^C4HM^2*mB-aGqv{};SRxi#wSu) zmmTBAtqXK=a#wkHc^eB5ZDABD;^R&nYbXHNnNjI92x zju%?mj_zKDU(qV4Wk6MHYQ|&tX~Sb&I^B&zf87xTnTcQhJJ~oj7Iamy9XP+Mb^j*eSU**!#_XV&QBwC5V#W)}>^3028dyASJ zsReG`zF+d>H+xM+=4~P}DW* zc6N5^b1+$ZL#c-DW8!T1_3-0_SqbMpqqxPsay(_vNb9cAUSI^~Kxu-GkA)9K!lO5% z79N3pvS+JkJ{-TF-{8aVnEC5KJn{v)ugRe*3gpDqr2p)a-1AcHOdy`w;swxqrANtuf!#vPjp2T!k*Hw$4|{-%O=4OS7C~iciRRp9%|8 zJu1az-Yg)*e*g91^v<){h|a|GQz>v}y&%NXLf%gE@`I_~^c z!+%po=${Mmut5swi7G@hV)9fErIrbThC{=R`>^leVVXwb6&U?MY7t+ChcCwz&F*q) z)X~f7Oc)-OxPAI`=nE;tUm>&EE32@NDNz_Eooj4w-3#p8|4MykqL82Q0%NN~K9N9e z?hr}#=IG#r-rrGV>1ghvVovOIPhAy8p5z@5&CxArFeY>5hg+irGeG6?%ItWBSscI@ z>?NXQ*1@AwpUv|R$0ax*If9!xu_uUb@MTQCS*Kyb!(KCsb6cUIUQ;v;H%qPgL1zIZ zF<*p1md^I5W*6OM-`m{Tg=yx4xDk@k%`_Jcpr;ZxQtIcW@ zlRKRLz%?T7H-)#riFWSG+69f56T^>YmP$RoC=sp0EOQYgw?+CWndy}?j#)@gAmq9B z9dh)DVy|~cS%`BNnxyxnz*rL-)s`(q;w#3zfhuDvV0c)$h=|s9VYReDsx){ z2R6F{swLwhBJ`Knk#A1asCnMT&IhNq1};_WdC(x8+7e`joQa)k#|dvp+x@i4o|$&; zeh~6^{$TwhNXiM?Y>8ldfaHccgg0<^)d>Po5$EH|Sy+?qzeLMu=xMT4Y{}P@Ol)is zsbu&4>savKwQTmZGTDKyAdik)C^lvVcOAb|bmr!^1Nqr_8b0HP5U8Ulj{?j7rE z_BC|YFqcxKodj~On70tZ`LfTp0}}N80adO1eJ@Zk-}-=y1EOI;8AQIra_jW6_}RilhzV8^p@VmH*yl5OMn{jw z^a;-hU}X<}`fpKzpceGWU-Drw8e@9~aoFkdoatAyWei%S@A%sUg8PP6o{gEv{hJB< zFJqkqj;VW`lC(ule>wqI?seRAENU0I8^&yAHR+SEn;8qzPH{;Ox)^ma86er50~{QP z`?YRUv<@AaIbLl|6(qqA%(23rvfpVz0pFVv5HS&}bK z`Uh~itK9rwdZotZv-#FmX=u>Bx@$rv?Oj}$4zHdVU@Y@f~_&XgV1;sd-+ir zR+D~G5y1bpTs{{rgXzj(CEbCVlGN~b17R1b;m-2VS==0?iK|vnr>9|tUn4(ypU5@Y&C@yke_-$ z?#RO)`>3XRnWL;Glx~&@T>GW{Y%sU9+{&2-`8KL3fh_QDbn!web zCHnaI;QG}5sY3j&zW(1TWaNw}_SiJl!_}94<81Iemo_?W=19MK*QXSKF36W00H=*k z8^^NR?Z&VFWeCc!?>L{sn#7rW_=y%Mok{OJ-uRJ z+|2dbrsSi>_5r0g?V#W3un5)goJ9YlxejXbP}uYL;_=zdf`wzm%ZX|&FMmc(wqd|x zTCfX}V#C5=A~%^d1SUG;2sG4nr0!P3eHS-9p@I`{6MXXK>w=q~p>kk{uA(K{6omVm zo8mv&CZB5DUUMqIl^>)y(G!YSTeH#=mJ`SQy+~r6Y@5&Ro9|IZ%V<;O!COkI(R#@%JCIi5+NIy4J7p64NTrk$9h{NSD8# zvU4skV~b3rAck%n!Orqiz9k5=w|rmQM&v4&W`TP{$4bHfOHJB5u<_N8eR zf1k&1v`m#V>dkP?Ql2O@u66WCvKHt>+&Jc^L=!IKy0I9@^vA-E@Zn?$ne$p`N8=A% zw?|9_`ufb$F@$W}sPJ<6UbT(w&90Aub!#5vxGNJL+|@xsXXj>~XGITMlhe2aM37ypFuRFRNiVFgaIxo6i@_vh_kx8UnhRcB2-`q zkBv)!`(i@z8HF-(%n%=)_7s3O8bzuTmbVgB;hOVFnl=E}Q>05sO^h3ai{1QI<1G{a zSJ7Pd3XgW}yW3R=Yv_^32<7b?I*U$|H2iQSS9)j0`zsk7)Ar8jI-lg-in-rQa8lAQQ^b zLQ4lF3IMoz^Bcj4K7CE4H)!lL52(?PY+G<~oyvkinR}-8pgmUiXjM%L+`^pjOtax> z#2~3t!+GFV%onbrN}o3Xqj1vSWNtbyW+a;ScA_n2eU^jSR31vPkw6BXEsoUY8maQK zb^oi#tE@d+s}X{2D%Y?Px&C}suDdJp-wkm3j}6eTWKBLSO98|vFnTStzyLaMJr103 zW7WJ3@xi=`#X6r>@biX?LK9Tj&MQ+f0ch3B35}%Y>b4>JybI7m1p6>FhRGr&sUu>F zrmY1=P7?OHXs>E%1HE9gQ4AzG$6FM+hWe7T%<=hz`4AQ1Uj1`op}R+hSRP_H?kARb z(Gz;7UwFeTO#rFhQlw(LyjIwgYo3`8z>F^Vyv&tbKkV?n`=5(E#IIZvr9(ix@*HhX zZ;Bxgy`VuDD%ZQ7=X4%?l}|3OL$9ebJeE@YNRCHihLUov>E+>qg*g+p|Kw3sCboYA zC$J8!vuS&Kfe+b&OY7cOUm~KQEU)B*#%zlpW6P*4s!Nx<@4=@PuICGEQ9BXP4`89w z(d||tI==C=KK6F(C#Nmyc@E4bLXbTGB#wdOgGQ`9`&nxdg6Ja2wR3M7v3vP!}5SgN< zedHF14r$|o5Df3pGZX|v$@_}rRpu{wB%fstF$2CE)G2LY8_FK6gBtDv00`>au_-ZA z6kDmiizDWSu-t?76yoCjJJkI{wdmfBFJJJmWz-X03n~DE%JFZn0N5XR!&k@2<#-DQ z+2!7n2%Xest}T|Eg43^_qwQEmGlogs>Oj$JS>x%DEB8;Vr`>w|2P5M}85y~lct(2t z)HqDv0t@AU<a?U$}dGihEYGXe73hocc)2OWXS6d#E0X zl-CzGobPqvj)apgHq7tr+jW12J(f<1Mzl!86$IKl)|gMa5dqdPZOP z9Kcw7Kp$$0SQUJ+0>a+ia(25=HSM0_p%VG#F;@4;aW`azsG_Nm7Gq#DtOVEmWGIns zbtrUIFrj2H!fh()ymYgUvd724`&|RAd(v$uKJGjyZ48Sn{a{=rDYR4?Bh<-yZ(9N019y{K3c?k*Q=-;P&hwV>z&|)1sKOt23Z7=7ol5nwFd?ahQ zUMkG%rkSV$#DfuJ#&xx^?PO4*+vgzqymIRLXt7}@O7EGoTUyeXQ0E4E)dzvuM z-Z)y=b>3umnrzY#zl;gK*g(VQ=6>H!DS(B@8y1^Bc;_n7zI-^XDKGIsQK*;uO7B>0 za*2!8&Z2+Ew5TNQv9LVTr zo#&I#L}xB5sSc(1lIAW#UUMv(d#17*69uneyV zD%QDs-7B+ce<|m7K&k27gUd;O(PdbGVxV#z=mKP9z|{+c5o`&|I0A$3#Q^bg6s!$uV^%*-DfQ~RVsobBOd^deXR)d^z1@+IoK2T zy&TpT)SC`686RE6_qQYZ7ftQ0q=Vbd3+Kw?dnXORhd_)ai{vO??h$TO^}XuG`VlEd zA8!HVp}i?v=ps|X%So63(jn)~k?`h*!(lt#Bfz_?o15zMb{4dBHhNa_47BCw6ih@j zHrCB1J~?GHVR_={^!-d?xDz~{;GP&H=isaXunx7sYZQ2-x`gDnD!cQWM>b(h|K$`}waIz|#lC@|%X;l(1=!yHDG8 zO!3fT?Urt8#AO)3SSuVG@x$`lZhNy|%*$99@ok)^UbFDWs6kCVVlD}=0}#$_tNxP= zGcwYabG}XX9iX@6^166r4nfJdD~~GLufxj0n2U*Zk!2>REywHptVO#!Tw6F<3aF+9 zzb-xSD0Hlcxq7;z9mtMD#o6V3T)+~XbjET{0fY@IW9O{H#MA@(vq%V1Jo%qEzI^us zYv?~m``0&UG9rnDvOYk9mM+`7MA%Ip(AtueTPh;W-qV5(%n6<{bJ1?Ke7E{a>IzL3a9jGW1OI5n87ZLbh0Xq8-_EZ>eN0tD%@q+vccBQte(ex zzV=&F?BSyfr>$=2Gy+!`9erYq1Mwo$A9Jin3l=sg#o9@>Y-@Iakq+I0QhjDjO$D&j z`ZURRJ7alt{MiCe0bNQNeu?C6cRXRucsD4Xf|wrcQa}G*3$0kQ$&{q1c)QwRyYpk_ zkjR%R>)LH6sSYz5{$aGoa|d?s!vV9~?c!Ax9ZQh&zscmIf2a=DM)#NDqQJJSyZl#z z+WoG?#H?dA3}t|MF@o7(%HZ%Lu~J9eLHRPrnG>ocsUVqfW32lVn5vY9r3lEgg11pNg z6P)HfxWbK=YI&-OGQhtxn%n{QG)Y_-RwaYKl;Z)>V!JEI$B2Bm<5egz*wxns^}AxJ zal89Rd~3g&cc40Y!h}=YI(+?kJ)f<^?T`$~I8U#O%m!NS`h1KKxsH@!8E-ugdhYvH zo&C*WNvT6(I`K1uvJw_Wgges;S$4J9rRL9rg7@IQFY_FhQA<NaJBe6n=TJ@616=$ZiTP)2m%L%z}~0jJ|$)mZBwM%h$m?Q zbI>%&@m;;2^{EJP_N5+RUf1T-I8g71Qn&O0yT^;f%qVaBBtn$g_~N+0?Vr)Ty@k1Q$?V)J;)RlHgq7s)}f+L(ic~hvfz%km< zlFU6(LxU6jfT$**(9md zdQ5p;L0-rdwi^%+vIaPdPB-}PwA`=w$K!1z8o(AQh!#$Xjh()y&u*tlCkh%wpMgqr zR8`J-#v2oLXJF3TaA~rX*61J!MZ>-SDKW+vwYZ(0cdH*e;go(iPfw|aD=$qc@%(sD4_l@RHzGW+f zdN$-qgUOs8+TKt!OA=dWj(IXAacF`xXHo$7*r81_?R>S)(cakvE=kLhmpHx^Fe3!^ z>)au;)g^=Jc#wMm;*FDCRB=3EJqFN&fXhlWJJxD;$2}MrDw4ifqqd;yNa^}Dxt)iI z{M$Qf=)B+T#fHcq!CdJ!NJbO!>O^w!3+2+p!<-@|iGqc>(qsM>DatY?7YWBe7Xd3p z_EQ~lybvquEv69d7*(SO(^0$@2Iv@?p`6O1FwB`7|xjoQS%;y+|n!siWc&8ec4=1q$Is4TWX23)tfjl{3Cs=6k z7>6k-k0SsYT(n(N*1R_Tklg@9@(@aIpuTj+D4yWROov>~;-b?boer1fGDS#q?o5|t z3a}xHzcW;CEqrw(st%2$-=DI!90k` zlvI}Mxg6yROSmVv$bW{xGc$x)Fa{*gbd&!vhBeFGBRT#lZ9lEC zE@f7@^H!3Oc9L;rQV?3jMepi`gc8R#L5&8hNqK;enxfq4)F*RoTPWt59}4X1y>t*- zadJ*&^B{M4L1@A@%?+<+`7kPySJJxNE-^pHobdWF_dP*n3oEZgPq8cUO zyi5+^pP2*j7GN7T)ek}BVl;bZu{c*AD|paV5u|fpDkpoV1$o)`f*h?EFL4z0J_OAe zbpk#{pmkv9Kn>loPvN~mOFKav$2$#wQxY^~`w^A&|IyIyYg=B9;`xWUst|?rCS8n@ z>qw4maN7+yn6W!5aX1Xiq`i!JUu-%een<2~v{i^JPq*}j4jE?7p}k5MOoLtWE2=7w zE?)Z@$XksJS7RN<7dz*W9F2qgGDi=pKCBP6!oNn9E{s7D0K><=r}$(XOmp;xN2 z*YDYz#~+misPjv(1T-8{@6es7sLP8q^k1w24vzL2N20vQtS7&v!;+KMfFqQA*ni*= zl)O9_4~&!WhHO!%t%gbOK_00I1Q+XSuFl?OyW_f(i2Pv_N0FA<_Rg>Si!uY3ZoF62 zm~cfVy}EKh7WpT**0}v?)366tO$4bb0T4Uu!>ey34?Wa0TwZ>vFTiTIlGjWfD@^CH zb<{Olp>T_C>(49Ix;|U@^ve^SI!?IxycKdR1E|4YbDA_96`k^wB~H6g5EPlBN|SQME94AN>rJ4&SEEK`OkpR3mbvKWpkauJHZ@8?f!02nO4Njv|?J!r2rSyD+$Us zy#|HZeS=CsrON1YDERc<$I9M0zELn!bgIj*!MQmFKvWEoj0*VA177moV{2#{Ua_co zdU|r>soBNv7?j+z_2}9D@5Yu29>2C-I8G4h6I1GUnuvLg@tn2db%sFkP#?2%apxAcn-OQ9$%;}97 zwZyBPoh)qQMSo#8|9y7TBEh94$@ zUB=T@&vsDr^?sVBK5QUeGgN{zP<(5V-OWETPS6AkOB%nM%HNPM4{PYfc|4q(tQs++ zbY(e2eD!NZ;QPk)s?B~(PlG-!-+fr;K6eaIz?S;{S%*P`(gi!Qb~9oo{K_A1&O3;f!cm!CYU^*Mg+nmH@AR1B&Gj%8Sw)fsMqEpw#QNpm+~6^>oRJQ|)W+&RMFjFhgC4jCM+C~Tv&{kdr@aLDZE zoS57S7aIj3HBA+{M~9xV_M_>><*r>>*gkPx0pMS^l0+Iakluw`Hig0j)1@8hvdp=zcf> z@Ahb=;o(yyEMhr*I51$euW*JS4?RBBEY*HW@6jmNV3pz%=ZSYoQ$om-9uYCobv*WQ zgoc1C3jwxVVrTLh=I5H|-oMM$4New@0}A8+YY-#|us-U}SoS2v`sB~c5=K;Z#+-Ys zU;erUl%v|0sDfQRmi40PXN1}W!HQSXTjgunWni*Pg{V)~w^N_V8123*PfvVABWqo_ zGn@>gG?yw1J;1!NBtS+%=c0-&f7-nj*1V=L7$ekJ+Vxa^3{0a6Jc<|`-RDB$qm1zMEVLY@@nH=5sm?#dak@;-yl^q>k#qviM8GQoFaA~8`pLbJyg_cy|dgOO~ zs;KnU%#dV)srCG;L8NK?LtzsXt;_zb3q~+Q!5Vq3+2I2 zNc58xT7v2E!0968J-p$D#6e{rG=nkMrF9bu&B{?!gJ(k-UO@i6dnU_~jxPuVF!#jf zxLu*197qw^Nu$r2+!Js@00FaUf6%ECIXJrVZIpvZu&PrAblF8LavKZ$G6QnQYxFA6 zz_39Iuo6I0<~kHao#sOl2@HbEm~)49Uc#2)1(tWk89{O#<(1-k`cOI~LkkE>wyST^ zy>;tTCIZNTj)r4%Epu(DAP;RWy69=m zlX|A$vFUak^K~QCR~-A@=?n-fWwO{-><~oJMBV*s1~Iy*lZj6?&&O;?w^K3Rz9w5XMljs51ueIw;HqeWYl zWgxc7)vZ`8QQIU=&&BM0%|FC|hf5r;ol;Uc#Q;QLROCjJ6$SJ z!$+?X;&Qi-zV$l@+5(ER*}?C%9RP{wqGTV9rmKVB2VEY5i}}&}7A(;xo$cR5>y@jo z+;>5VA{}h+uI6<&Jj@s&$6fT~beow!7+P%_p}!4upH!d2j5Qz1;-K?zRx{6*aouJ zH7i!PcfK!PjU(jxuB~52Q*Nmu)C=#xH zjcZ>*Hre4Cg-V&1Yme;AYh59(DC1sbkBky7vUAOA-QUaiU7uh5mbM5eXQsA|N!sL(=fvzJOliP-eqnfYDIKQh!uhqoI zqDr%$=*FaYl)jT#)?RBkX?Ck=q;Rn0#@?&{Te7H~v;VyR#`*$2Pn%VEj@y&@wkNfx zg|(~&vw-A3Lff!;R+;0Wx>{(HvB5nmTiZtCSs9AnP`4OQCmXq-azmu01HyCH3S;}k z*vhtv9`+Rv)o+x}vbuDK!<99vA)drGwd?9PG%rM79dX8jW@WtHmO4e?-fdk}*YfJD zMtka)Ey_y3_UUS*xAydco6Jl_mIY;pecmcR^;`H^(hXTMgZ`2OG&pUvIzlo137_QB zw}8Ed*Tc&Jl%1@NfW5^48Hv1$WIi7C=OgyN9-?WpGmLBQCi+j&HmRt~fr^a~&$uS1 ztBfOD4dFG5DVjD2?F<46;`clVZxLIiGxC%=KI}PGgfn!dymxzqhl~(5z8N4 z%RXg>?xYUuFV$`Lv|srTIgJMVQ^;Ajw8QTTn_U9!x?8&q(xE?Y42!5=ym*QKY+9IB z=;zAQp<>sv3sQhfMNgjc3Uo;e2EHkkp?bnppF&~HMJlL#*FNrtA*(wzDi2d)v$KP_ zrmA3sL}^7?T)?B;j%LgdCIbM@9!vhv*wUm&=dca?$@|8AI3$_$7J1a+NKrZ&pUzwb z+PjZkC%3yc=m#3_r6bqlaql%iGot?tZU;j}C9|#A={z7Mk0Uv(N_$-kS2B=-bUdL^ z;Wi`t!(@^!@+&Ii%2{log0Ij)4f?uDbk2AVX;>H+ZTQh@I1W`;zEqPw~d>7e<%L zt=Ja@sG~>|k%;()v5y-B`WUxC0R?P{TR*A)F&)PN7~Gx^CW}&iu!xiuao8aVQ_A0V z`hH)XtOl*4%Efs9{pDtR)134dvKs>$FNd8e&jEM+#nW00DELu_#;-eJQ+9EfsJts4^^@N&C0FT5izOxm4R}T5M+Oi zSad<~g$J_DT%d*$;_N$>|;Xb+Di&+%jKo<}YJCd`~2{?Q5!*%UL3kN?_& zjVdFDiYkZInUm;?9|Ut7IkRV)RD}G z-p!U1PNcd*uA+79i5dRX-mmL4Aw>?uiPcLami%)+TnC-3^Wp`Nv+pjF3GJGuO{j_U zRLoi9&+K>CjASo2P<9%a*2%lVTf1-f3Msz^GdG0y7c|D10ygq8z4M5Lo0R#0qi+BN zlsngcphz-bsu<|>kO^UOV8RT7^+!zkGwFsWN53uN)xEu8C`ZsE4aJbqv2R`bfOH$T zeo=36?W>7b(znad2NLIOL8%s)nsd+MllMCpJ|oXNLKJ^mVZHEr!sgv1|D$U&jA?Ln z>6jM~7tEPRx~z?dH9>HMH`h-Mn*VHxQ9I}V(G*rhl?TCS0sM2`;7(jGWk9s*`^Bd9Hha-9 z7Gt9T%ySuac=3C~3(2*S=N)cD!fyJsv_Q29q$lOOmK0O-vai`=(i>e`V$b#Xq6>{5 zOlVEqunHC+xv*2J-tMjSvcHgB^>Ah%-tqN~My`K;ArsiJ=`|MfxwpiM`_9U;tDwMT zzXg28-o(ky@$uI0(v^rO(`OiF`8LUtg@IFDjYrd2^2CiFW2&M{q%E%L7MtnbiL}qM z){y5S=_Ul{2LGDW&UYpC=V~tD}r+QG0PC@H?9cy2Uozt zVSHq2a&;8)=*wV^Jf7ay&o_aHXG;cbZPuaudA8aPHEzi%=wWWT(63`yM*$rxSgoZY zDz*vA#rVR>s0}{kj*+9*`I3|!C4TdrrTZ6)%`$okC(%gJ7%TRtyFPiSo|~Cw4UX73 zhG5qNi`N+I4Zmb7QP~0y zj%2TIoN4%VD$o=tkPa4d$G@ht&}@X1@Nwnrrkauz2%Ob!O;wmf-7e0!Z(D0@+w_y! zB?2lAdbVSVk>IX)KdE%vKr?v7I4;cl(B=QG7; zdKxpuw{R22D3Kt)@;d_*r;JKMI~*@J;mi8nK9TAsce1#@@0CI6mA0cc4B6v4u`DNJ zBDdYTx?Q0B3+$g@gNXg_%aOy8cQ%+!pNxlO>^(h$JS)3(n6mgN0?Rh7a8XzvXqm<( zgEu>Ce;NRf4mW=4_I&+2lh!r#;&|eWtYl@qyT|ugyFaZI_J3L_x@~I_AG0Rk3O2vtv{f2X+K;Bu+TSuyiFW5q zR}zylZ}k`wSGz0D@p}CP*@&FU4{Jd1C0!hR4`1>lm5W0D1&W zv{Ll?ZoamPeV9E+VJhaTquVz%Vp?pEJ1+R6NQ!AiouGQX)(}TKHbX2d!(~l2otD*p z+jF}-JOBS2i~G_<{u#sDgAX#hSq~gdIY&C1Tr+q^9%!_K8g$_#JgW-!iu9*bcH*D^ zzv4FTv4|b(x4S13`51+>1tz&7?m?5Z{7VYzOsa;XC1)~kj9MuRtSGpMfmW|3 zw)pXWN;b+Uo$-102W~vg{TiUOpi8tvs{{kD=8PsPvntxft|g@|PTNW#T4L}AGX#J7 znb{Sz^md!P{*l4Tb8v0`V98-y<1N`G6;Oj2^fRkxF0~!pjs~u0m8J^M z$ZXOF>g&ZRd;KBtnEp@-DDm*SuTmv5UV|VEW}c^;%M9MT`ozgB%QGSp z^kEbh$0+q<><1KUnH-t+g9#9tTb;n(>|W2W85E~^q^G3hMlAF<=?&Q4*uf5b?7aR? zsb(0UT`)r7Yn#%?YA-r$vJAE@?7O;2O}O-E-hdr zqGRNSe_j8^Nz%3NHv#rb9UMyOfSAW{Ld6d>nJVyoYu4PBV?Ei02f9h_5yKH6A)?Yd z4T2UBS&l%B_uo;He)CUN7xRQn;8~&ywDruC>8P!H!WeZzlaxSfIeW)oUjTBtI?e4# zD#TC0WY8iwAFfQT_uxqRH`~#U*!{v(DI@|-%XPmXTW2DnTBkZ*JlHh}Yl1B9ykg!T zCllML?2Zw=rVsfxJKkOvd;;v(kId)k<6y_2MN>cC#!LHeBI?gj{R$7*xI`5=lNR9r za}~F_M<=tniZipJ>>;+v#jvN)SSTGqrulwV=ni)~9beX)uP9?fgP4*x z5|H9`dTsDF&J3)HRJQ4%K!%1JwIxCHJpTm;^D8Sr7e*ir1>L+)n{ntgsmnYBfZ{l@BNF8tHn=H0m#qL^G?hZGm9 z^&#^~16NYxNinYITz!($$qZf|H2BEvMXVOE4|0cdchlTzc@gO2U&h*p#e)YGxnolY z@9=)JPmFz(#LfQ6cPom7_7H+dC2+DEyzUAuyUFwO6LOcQPS8$vb9eR0 z*p9!oO~BHO-=Y0|;l151A!Yp<)GLd&dC`8JY`vyeEqD;%;G4I81wkHse-&Z1`H{;N z?eH#91T=hR3@c4oRkW(U{GYb!n)WfhI%D0%wv!;mHepFz-@}TXOF&99w=%Dk zFuC9u1ZKcb-y@pC#}yy3ndvz)RD|Rj^L1${R$yjA>h4^cI& z%r9Tss0ZmYD^>6OCc6AL&mh^quYEGQId4?lq4Vf*MGJ{p+i&{&4aeZFuOWkCmkwIH z1D?PRhm>_#rA}X!`2`h%Xq!^czRX6Vi*9NAy8tIgf9`55@E+-U7S%MN z7h)JNAl$;z(mJ)gq**&Mv}brXeHHCA z;1(HsD@uUYgQ*Z zImmo$Srx1`C%?w78VND&?NHo;SL^#(hG)sQ~YlPE-L5e zavI?+vo2bKVkgOUpjkAO7jc_Q-%)o%Bk`xS+teu)h-Q^k_^`U5?(<+113l}n9#ehhSaD10|c205YZJD_kXLb0V_gLz;QqX?XrPb?GBek0JNCY z$fl8a_}=awwbSSw!6KPi6 zV8!k}iun^O1a8%)%Q;J6^$ZYN4guY*&%LACKz*cwZoG=rYJ-{D}KmNDnIIh7wG|>HUU#` zKSBRJc8X75E03A?e#h8;a`kRoR(BQfxH|+yBw0I$8E`$=OZvRFe8}TiO)CSfoN3d= zm@;lI!IdKXTH(Ugjt90-iELz!F`t(53ZKKyk%HAIjGjq=Y?J1#-i0@(!`?c1+)%Dh z;x`XRbDzowoFaJQO})ubZc`6)!#7{8!$Lb&h>X=PQl?aY;G+`V-y}IFfL3naWIl&S zp9+nkeF?~^=7bW*cB>OXD|VYI-8{ZZA*!)4nk`C4z*t?wFYz$G;LI}dV2i#sxP=w- z3r@j7^zyyuC}ccNP}Ao=tZ}}0 zMU5A`|GohdEYBj~cH`nPxSy|aXYUFl!bP~j^u}4{8tZ!ZJ!t47@mNlQ#k{YXN6ghv z4fD~c&}N)hp_zIQmXGTbOc)`ai8R%x?=obKKeeDfF506PDnhoq;UtXk9`49A`o=bF zjV{f-E_qs7yMTpom6}W}gbg)zcmlI}ujd6G^Qa%&8_2EZ_(w%)zpwNw_x|#25)b9t zUKCSf@H6*!M?wbZr{N4n?C~0QB%M%r;tFyC&Bi0ZGn3L0*O{yWf$+k)oeMOypy#Ge z+oNis7V58D-=6KBeg!{DcCri4fnO0`M3>xKF>nL6b8ld}1gwc2Fl{R z><9ouT1*MbyLPTs4c_65#k3GkKRCbrDA(-E`DfXIRyo!BQO&VEx;a!F2JHn(IJ-&( z``(!xdyOnlq4k1kQY^7>szV)itlQIzaQJweyMTnVlk9b&XyrpH+$K}4N&9!I^gm5` zC37zYxVDaSz;BVzQjwJFznSkPslQ7z64gYnOp`DwQpot(Y0JP-ug@^tTgZ(nHCxfd zi|6A~SqYQHh?o_*bINhtpV8FPFS3i+v}Yilwm;_wMayylFec*_1 z2JMij5FAu2Q3kP7`{GXkn$@df0mbGbhpiq!{o{oJ>{aN2C*w8N&o^cQ8kr`U{P$!2iaza)^`e!qi@r$vqH34RruXwMm~tbf%onb)txV2Mgnrj-fdlXLs{ z@6GXd)kQocZ=cGExP+)uKjv#$@OHX|r zn;6$UWuJ3bnE5NxdL+II#od5%oqM{toFn@VqQxJdi48Bh0iP(m^CGp`aLvy15LKkC zJLk0W6rHsoaT*n<%Q0!gpu!$7y*S2*rR-t0Xcv~3&nzN#u!xVc`-+suHVvEXd&_%< z_o?;NanRXJw*(H5tD_Cn08REegYtB!j^WSBRdCJT!KUVk^Tt3QWaJ!SjK62bfe@dM zu|51zHSP-Aba_3J*qQSHC?_6}43;DTf}Ap}e43rD1()%J`ozpf`Q>pItwI}7>EWsM zpcu@UF%28;kjVXmuOIv^dTTozOhHNQ(v!Eg=+DOaGX#i=s<};zalV1o(V)^(dZYWU zGN4=N<6QMeGVCpEKb$nJ7~p9`%bto!w8JDXTYvUBEy1Fis8kJXI5b z;9Ut*ek7XznPb`Z>(cPe8V!lumbR;%wq?erz++s!;R!q+*-iaA)iBVtFH!(jcDMJw zJ6nnA`|MdV?A|LJT00do^A(vJtL^!?&%~(xQn6)!4KKL>%ZI`|m?=;03>g5t8KJ&q9>Rk_x8*#?opGJ~g?%xh^Qef1MD0%CNw$teWt113SN>lBFKqxe2ikOkq z6Ob91Qpn8$F>Xx=7OzteGW&FvVD&-c-Qtr zJcAg4U&U`DeVdKy!*Q9dLsTDt28N1iY#-r&oa)Dr^-g(6z(R5Qb;(Y>&W9zIc~?{) zBz*)=>7|5m@#+#T+Zm^5pzmEOR&5}l*>p-mXe|rM*7(oIHqYPhF|nQ}&_V4088DpW zF=PmOyb6Vy)fYi5D@|c+AjpxAE|z?!)R7Skj_$*W{YKM1|7mh0-SS?*t>ylT2mirB z?@76TUaq?Y_zT6>+tQK`n6eArszP5fnnS4>qm&hsP%pB(Div5hnDbs8enO02%;7BB z{lQJ~e>lQ6u8^yMccU468yh~jP)n2n?e@UBI-U0&qtX_GeonLr0kZEFu4rB$5k1NZ z8Yd%7huD?{!e|D{_D8qi4H~t2PJ7k^noYypmy~V8jc%2kUgSylIk}G+Lpt|aV_!`r zJMZRt-Cs-z7T*&{@?dXxzB_Y5saZl8p`2*@@XfpZOp7IsJE)zvKq+lEe!@LE8jakARGt1;j}e@tpBMoot$%g8P@{ z_)fa9Xk`v>*OtHKj&3EEyk;zG@>U^r_w74`J`hxRvBj3d ziI!6IPKDB=Rr4S@25RBAHcovt`^<}7B=rutV>EgdcFLg-Ai)AJsmIOJ50VB(u~ zqP8>3_lBLF20)Tbx3V9n61cGE;WwKT5B3<@WbDqG-;zB0hYnL-bY)kM4Sn{^_0+iO zq7gnI5U`sf(8aywgH$(Hhq_~Pg2lNJ;*EY$&te$SDUMm?K_8^aU;+b?KcK-a6mH#^ z8QN(gNRNkdBXYP{Emml4Kq{xqmNCVfmXbW=nE30@e){$IDRfPr9GzC795D5#sni$( z$WBSz=dA6f_%&eDc#nK(MqC7!j1_&ErT0e>8tal^5DH{`+~TH19H&6~nz(L($n1Oz z#WSoRf}K zoeVfWs!XhPY*&pau~(gdv33(w^zt3fFSDzV=blZvrc;7~vfl1}K8g9%>UHVQZfX-? z3?x(dfBU@-*x9=A+maC>3^_V_IMQb@PU{y+@ixxQM|2TtA5&yraO68P>@q%F%jlVK zird=uTYYI2&vr|`t0q$=_>^_BL~g{2ebmekg`*8)!0BX$o@UO{zgV70G;4c|o1YiP zWTh{cz1Zn&ycRXPR!dCOcz+Q}du$dy&@u~`$ZPc^v1RLX^p3e#s%-?!^Z1KW{Rrg& z8l2r`=bg?&R6t2cMKy>qIZn0P+3?HlqX=b0c#oRu2XQ)lf3&jU#q9d19!~P4%u#+2 zSsLGQjv#MZUSkB*!_1 zi0L7ZwcU+1 z_slOp;=Tx(?-nLD$L>=qy*S=T+p?YE7%91~YQXbA0a%D#15q*K)ju?H_v^h3i1Uwx zPR=->AB$rfjG70>5tI&!)PZ7f@cSMdJZe-C5s}yaOP49O<0ltP4~-nlT3Z1B!y;h& z1=t*ZIma5=o5xtsERb}C@cDY6P|X>bm@xs-l@ij0{i!6&LpAF&J$0O5m8c#MtB2;Q zxrT3UZe(p#1gzQh<^GnGoEW*)$OC})vsqDp775c?YjxzJb)$v(wNWg4pgvD#kc0aU+Xo1ZfOYkvbz z3&TCGwP854Ih5Bp0sFK+4ZO< zO}au4O|Z}D34|8fe5qOQs2?2gbb;WTDy}TU*NP-e1bTT@bf>5JQ$K<=y6;%=wXwtX zT;#b}R`;&Z+q!blTl-rnkGWc_SX5dBCT3PDD8-%O!x{mjMp+x}!iZ+!-8BuTme115 z7zKQzxpB5zJlHReuCbCY=!3f1esNvw#oo5g(206EZ5T|+HFyQzPlz%m>GCXj4Yo`~ z3LJf_6I8|Dt_nQ&52W00?$%)qTgm?xzW6X3c+EJ4ya^k`9-yq;_$Bt6B3u&)z9Pghx&N0 zes8<~wnU|!h>y)3eIh}gJBVa|=%~E0Rw8`Ot+;-3_+#P*%lts`(#SiWcjr7gG=pAL zg$4JC3NFCIq^UgHzdDIuhzsN~ZEUN1>TvaLoPYq!$z-RXMo~Gzm8PIW-A)$WOG^dX z9@801EE}bIkB*#4jAmJhY;(c*&829MX$%|ki*j&Wdr=R?4lW}DuBcDU@mnXLG>ghy zk_HvZtiVafzU=2hkTId+?p!(&1_k!@<$XW8yp^>a!#<#EtG?{%tsqVEADOsnj!BGG z`vitZnWaQ^UlxWHJa)k=+NP?0ya;}YIlW#DA0#Fj05Pg~wHMyK+P;yg0t7JYj}E^<0llbM!?yFa z|GgPE|JD(-DYk*IgTSiFo~60#HitQ4oakLuOW(_Tl2)1vV}C?XNf2aM}GyXZB?wtriT<^iP+*7@z_ zYTV4@MH^uo#GO+kqO;IiNvC**d>`#HhePvwzHochD`pZIQ0v8;5X7vi7p*}A|E-9i zjd=_r*k0(%Ti0aK=+7qYeSYb3wx>mf#S1Er8PYV`-Y4l^=avJu@tS)GoGacyXa$-j zxtwVs0MTxYA;I3+0DtKOy73w`9L06~{WR(n9F-0x*?8~{Popn@(g)<=hGv?TEEK|8F%XnM*=t8fyoa$m|Klf-@&O4p8rmBmq-s?#}P;08FbuuvaPq6RE-?0j9 zil1C-?oa!93r-bsE9NR*K!s}bxAlUZH7r7S0@R`dL+<;)5!bY5 zIPc7}mEBB~6H^X5oSDr5={ZHKepAL@2{(%>9d%if@yhX8SJsCnHtt+^@1S~I%?^F} z&e`~!TMNA&K;6&}u1(>Ha!sFm@}g*qSAqQ=NGQ&3!xU{eH_-@(pd z`rGQ#rr6|KLzI_ zLrUavcGE10&%g(i$|M804mDHMCi@ao3~1%!w=8s=U%tr-z1$q8vj-QaRH? z8e!3{CtNTuItn$Kk~ofo;!)^evW37E!2_px;C)-UPon6js`7Ie3Ub+cy%uwH2GN1y z@iHLYR$ECwno(REhnhT%hkqyy?B_AXy3K1Y+Roq-;ca4@pF1Fz{(tY|FGNpbeY_=co?^S zd=Fp3#{^L&o1~cQSjWtH-UN=&)2Z-yv#AI-j7eu&9k(m)n-#CeXx(M*4>^|n{QJ^; zBajyGDeCK;Ju#K<4YGRUpQq2*s7a0#{D_BKs)IA1eN=S?fww3cSU$jr-(;M%rwZ+s zRzMHm#Pe4$+Z@}b=Wu5@PbWeyzkSc) zcSa}D_wOzT>1if50*7qy-ZAZpz&TV+@sgpUIU4c2lRe727OgK$&&gZSC|=iVvKyG5 zuC%H|qy>rJj0$qEx^DpOmd_mzJNxiainS{LTtPYS3KAeUb1!@wXd{gGJAZdt5|)=1vRP}=Wph(_>BYPgPy4S{MhvQNzoIncML;X7Z!P?z4v>Jj&uF?WVdbn0}#)g zO?;k-ZCQLjW;<-1mlwFnwHozfGWd0g|2=$t;F+ zT>4`F^uAU2EV=-eoy`aNc`6i650B^qNs^1x66=_XvaVs_&D-i%qET^mr{wdl--5Ku zz4Ww_?qDO^b-2LldJMzC{FCkKBAiXhH%>(V1WMQp9G)UUO}dnx1h>l^h(uD6p|u|! z4w>VAxlKpC)^)^kgh!X_F>5(GvO{jgj;GK{zrNR@9oyW0*jXg^1JfB`;Th=3!R|u; z6Mmd6_xp#3K6I@iiV~W>Rrbbjb=sxNRDh{|G6(gR=uhd7hPJbCINs0c)wz%(=TV%& zl4b0*rplr6Oq1itqQI9QrxE009wZtB!xc<}O21~)pEcJ890+|&kIYe3fMd(k6m3UH z=QTs&V5q<=-SSUnaC{?pNy3EPzBV6ge1Y=?u;)y#U*DeF&%y-#CA=f{{DZoV ze_q~AZQ!tJ*lnbtJF}6z(QDlqBs_U*{)^sBIzNK^Q(!mKPnDp9NYZ7`56;)Z8>O*v zYZsy{P9zpVHfNU8QMp{r{H(NkIHFiAm>xcFLGU;_Vb4Fv#ZWT3<+e0+t-^z{AsOI0 zldB&Y@re(jb~+T^<5y!tt9N}vllp>Yj@cL047+LNT(gitgYU^1V+{5V9QB86=-Wnb zqC>}ygF|)y19c#MsO$46w^N8)-m>lI=3QHPF~o`7%BO+iRSR!~O>>ck+@>8#^{pt4S zk@WkAtv@_H=)X7^w4p&+8arP}8A_*(DSM78&7DxWXwi-)qtxPNGE&5_pV(XQ_x&aN znaBCoFWV>-;A95A{*=yi$K=mIb_xZQ&bd*COUJjPFquax`k3X4V!#F8qBKq{vr0SP25S9M{iP!$bkHARCb9gVYc=}U$FV}oLiW9G z_M=pz@BIz~i>2&-eQqS|VtZ=p){o222@&BClei`(*I3b*Y);4tHKF7|ZRpvT?KFH= znT&;vq}P||2U6^FDqr0f_dZ=qpNpIj%NDSU1S+H*C8t6RMmWvDBB)H;?ew=+flhNB z-gC7xb+a*eH`~yHmHN4b zbly8ZZ#)1(fAm<@`U-?xkeWrQ+hydZYV#SWgb31V?YnSvh;Si7=DVLFb(6e-p!_or zxMA0+%8dJYj69>+sBB{4$DliPwuSr??_>g~a+-GT|LLrgg#M-j zNl#bp8#d-a+aL-?=-mIFPGcEVMz06A>tlpvq8ObYC@UZC>C>kvjD9w^0s{(z@{B53 z|LU@Z#Tz&43%!N!WAmwF7~j-xc!=q{^kJBiKzWOC60$#~;r*icWw}PrA4f^%8~PX@b#O8Dy#snf<;>U1|On(UCuBLC4|#K%z6F`$L5(6TBL-M%D2iS-Mu7~d&`OY@@{J9F%MFMV&sC^u4w~Q zY_E5r+3c0Bv{C?}KcTO%#G`gHbH2-^xJK>@~R$hf563+?c$vzk5K8q1` zmZGxZy`{BfIGJaruvsPFLgEszKkfQ0fE~!7mMS({mX}Aka>>274dyaQx=gUDBtFD> zg=hhhudPwR*zc7y;|DtC-Px?t&y%MbqkdOpLeHpuM3a7-T)|4U`GyN%*PQqA5hsQ* zrZOjo8@3xL>|afu!&>Iw<=rzPFe|$d;(d<6tam51X*9KuUYiU(6(K^cC6@cnDW|`v zClErE@JP)PX0h^?dGhTA^c43@;^TDU=)O-aXBlojtv0uwit}ae>M3K_*)zm2Y8P2QcC)lj!bj6)E>pdp4Au<&$(sU$g?be?Tx6*nU zN~d4KKinQ7kRwdub>nE&GRg}gg-vT5P1s7}w4P0_=0!f+@VP{}_3Y2$u>MWMAV27j zykdkxcHxvMgyS$gqU1+!r$6UU%4)z*1kLb!Uw)-rsHnWMz6nIig8ogx;r1VUmP33X z{L1Mo%$-Q1dl}o}ZdD{eHcoZgAbd$V+Nf(*Qw#3>r#7kHeJuBm@=`{B((R$C_JF+x9 zy*wX_3FPGxmL539rO%Zk!pkv^Khhcote(HX!SUiltQT`hM1JAnF|jh>N7Q(VEgd1- z*(7(4+tEEZ^Q)bOS(C9m3b-L7|kCxF6! zgw%iV?(XLYv*qYsp`LXx@Vb2VZOU15`For)FKj39L>SUZ;#zb&yY&LIs4XuxjnQ>C z_Kg^b!L%T_(GFMn-{j^*dwjuo+4 zp^jr&$#dlB&?b1o>Iju|RR;Fl?QrM}?@gW+5ssj)Cb!Q)WiLJf&^|TvnEk4ut!@|! z!^x_xtUas;(X#-9bo8rGY(;TVUgN~Y!Z&_CKD56HP4d4@&gdUULO`@B)ra)`kN}>q zl)2-@me@9?Ed=Eq*f3Jl7;AOS|7gIS54R`*AAdhG zU|(3;*ZJ?&dN%|-4s6&Tq!^Y`e*HA;+Gh%wPCqj|R^ufVb+=r48J+ZiMnk=+e729X zRsWFP%M5V?ix^TrW43_U)RqL-4s22dVyBb|yl(LrzxjnE=aMy!&egf@dtK_Ga2a_} zU$YXWB;;q|7SSYhDB+qD9F)~nB|BZowa@7&M_7nkb*G+)0+ne{;$K)F}j!qdw`G`Ny-+KzJBPkTM$ClD< z#NFGA2pPTtHxKxuM~~V(`ggyBodttvXxYEVUvitKo$JFwNr7LUbwAUf>|Srf`&nQ2 z(k2Zg<-MA3BL9MKPkR+71V1YB-m>t~d%|#f1bMpSPOJ?2qE`fxE7D{0jmDEC{=3Q| zjuF8g-JiHxv4t+~=YlQ_9)mpokOAnT^G$u2~xh*VsH59@Q)u{_5Mq zV+ycVE?ZnwrUiWtZC+KOW4UU<6I1j9UeoZH(pqAn@w?Ve6y`obw@=-Hzu8Iy{Is3O~VS?Aqj{u4X_<+ifE+srjQXKi!d)X|%?4q|@v7sAziYubVU&1S1_ z--=fWKdXI7*eco)4>z%$wHdX zpg_IxF64vy?U`z#*`1razNg=Q2o;IGD`r=+J><5j26g{V{NlIZ-!Z({!l(cCQ8?|& z^6bI*qA$bKd3TQYuSGkiXF}HV=3FM-3YKz69sIj~8tAK)10VF4y_uR~^e*I-W)inw zl?R^d)Jk?mAG&T!CVa^d55tBdtsIlT$4yCT*6tav03j=%xc<6x=e;T}D9hKA`$mpO z4@+tL>li!{qz1m5Mn1(f;b+!6vu^)?d!3|E{seCvU=qca)c0Ox!z0ea0b7x~=cIie zH`p#OEKRIrDXQ(P7qU~mJwipb6+X7hMpgRWD95aRw^q<4VaoegNOce21*uO=q+H|U zi;e_%>Q4Eu_T600htG%-oZDO3!SRi&s7$%eB-m=Lc&%Hi>!omrF9tsNgjDw~+8r&K zm-X>H)s^-FaW=%Amk~GA?cC(F{Prxj(d#Ai#$>((uTRV-B;5-3W4}sL2bTOyJ4Iv; z+4GX^=q^}YxngT2tbn5)?o7m4@Qd>zH(ouhA^NFyb0M&9Z!L%J!7q1lndJ}*Iqx*- zzFPHo;v6p}wPHBn9OMZ>y)RciI#LTOWoy~U+dk^oe@zJ|8oH`Il=<${8zA(nL{7Q+ zd%kMbK!lm{{N9{({QA%SfI5&-%FzPmU;GHz_ibRSq>Rh%$_8zWccUM?q6%CNSO!CM zsD~}D!TmeyC8N3dv}R6TH;Tf9L5?$2S{ik*;x(My1|?1)@j3jCZ3qjyFHaw%qcG1o z!Q(F0%4{r4p6m5MKSrd8a%jHv`ldn(>`5V?Qw$@dqvzxUTOR^hQcph83%T}GlX z1?uGvY0qN7_^}2iqi9Td(e_GIIa=64e595$>vAoTpDc5`C1;w9H!i)G6r%@v6E5oO zJSJdmGEXR6HA*|asAdkbr>SB)zyLC;>lvzJ%w*^g^=pOq-@dXzH&skwU8tu1udc!B zKm^gaZCAs`W#Hk65OOVgy^(Zz@j@53>Xr{F?0*8t&41#V*+m-2$qn6gVCLn@gh(!>_04oW4oYwHOF|6zj2OwZ#;F z>%%gJmpbZAuC{Q|b%L_~5;H{~V#$J4BIuTDRO0An3!Evg-5vEpry@K@+}!C0_JrAW zS_{v0{!aA{uCw@OXBmCa*z40cvM3$d(1#Fc>e29(8joMmK-AF=cOsCNIJ+6;lu%YA zwsknw)>*}HwRLi)^LMTpx1-@V(FxY)i)&Pv=W zJD+v+`>^&jzZrF2vVs-63IqDMD)2T4wtF(`v^ zrmJ8NMnul}8l-<@I#bxkKc6#Z(2f!R4SSZE{ucC;+YE~Jwu;BLGY_5v>d4Dg`S8xP zJFOJ}CtH}-`-iuh=I8aUQXk(beA8*2{{7^zl+^osMsfJVLUDb4$yBdvp=C-92T`Fq+C(Sbe8&27?poHq4Cd-h0{*#zydnfszC>*> z?-ljUxfol^SGsd4+taR-iZnMfiNj{Y-AAMGP$snuDs(Ql(JHwyd@;@^jHhX*oz}ik`rSk8MoD{=4tf}a zRnJ9;@7S+Exy@Kyobq*UfCkS32d5a^^Rdl089Zmvxd{}%)X(g<&E@n3?v6SVD^Qrv zs+B=ROw3@Tf8sMMhs&XGH$c6$>B~=@@H;fWp?hA*d6QlGwPj&`)8+qN-+z0xkiiR2 zW+6i3R$j|zsY=@lWRIt&!4aR>FE8Bk8%qPT=ZdR#N653Rqjer$k8#H%({3(rdb-x_ zN-`drR?^p+l|@vdQ0S3Ct+eG#>bL;|<6|1J#;VG?u;CqKdP=fp6dVqULva~Bb$^xOR0=V zQe1mp`x3Hu_BG1No|lr9Trw|m$+}8Lu0-}$xXIq*n!lItXZ$|-qsODA-mm+5KgW5V zbDp;@s2Jd%uvZ}m(*PyyAR|;S`}4~rWLJeUg%6N_8CqAri73m+plXN zz&8$(B~ysqla&KtpU-}tAk4?zZ}9MGMU75CN6@mpG(2_AK-idT>54Tut9Bub9heJb z1mJhay>=IiQ+zWm@CMHkyC8IMBF@7j!sR#aEmM1TJqhu*3`fLR@9BNYI1q7&K}4#7NvqD$TtG zHQ;jV*ii(3v7YTGTVxy4*x}7#+EJBf@2eqaRdl>SelyqO$RCV*ZGQgY#@@}`B?FVrJ%NM`>*3>l zPhF@+{=@SZQ73l@`6b#h`KdRyzK>MGM$=V_GJa@M+=pmIr8Rin3pkP?d^II&A6~o| zsdvAJnHD|k$*L#V%R0oUhV@v4Vl--Ji?0z0Bgd_rm?IzQB#M6F>mf5N?@HY~Hd!KJ77$RhCgsc0O%#Oj<6LklLWI>g70cWM)0YOa zDHH~0kutMs8!Dx8wB--Kz>-oB3`?9pDffBEJC}p1)YL)dg-?7K#MKoao&)Cdxpu}5 zZ+jE|?$tK1e{gNDa&>Pi1>U(+cd06NPrP3E{xiPLv}gC8F5_e;u}*a8j8M-&FQetA zOL40z24rLhK5OqpuA&^?Jb6Fa?}6WD$yYIy)#+p=2AdCD#lPQU{;WkV@3_UHmN!myB7Snllx_68SeRvJnFT znul}4A8z7fJlM1zYvN!XviCoVw>{;RBLpA-+pBCg=izn z1&D!_Gy%s}SBhq499TMFmTMZO@pNUZJ!DfCv6y zVWc}5yZ3h*o8tb1qCtEpww8J5YS0N=iI>yHy7xvfxF=EKejtZ0@|;JTG_q8oLNOzu zk9$HMb%Pr19Z5-Thk>c}*#7KQl-@Ng2tCc3;*XkXE#ofbNexbOm-J&^U46q-up%H& z&b>q>n*R?MAdds-q=?<0-SLEcY^LklKo|^{Yi*>CyZG@4fvGeo2A`bRQWUFeY_xEi zQWEi9}VZ*jf334o}wUavyswaiLeb9R@8+oE+>>TVW&m3Ft1 zKuf>w$S3>rcTr@IaIgS=q(&+l*ZTm7E;2GRNuAR2Y?fS;QoB>!Lq6^$g(M}{pwoA) z4IekIq)q&NO=bha{>zT#THy#U0qxM#%I$4gd=d+wWbK*T?VcuNazxO@I}A#IzeaVJ-)Xx8 zw$ex;oZYaCsij#lAqXEwKHl%kknz?*1Irjx4&Zgh(^S-p1YVW26BvVDnDC;Zx_ zGFm(_*=%v8@FQR>x0??3@O%@uU43tegIOCM?Kxfr7Vna)0KL9fY*(mVx%J~h_0nok zLIT?S{>Z=HDYFXU|8cJULiS>iWw6@4`TKx@^D~x9GPw$8lVWbMhV&*=n>8T9w(E`_ zPbnLyW2Jl#SRmyly6xlj{&b+vhatHde8=;j*kvkO?}sNLe{mahAtT4#Oe;0h`tbk^ zLeg)=GwX=D3hJOrWh)+KDJ*dCgWL0TcMpQkXV}p9mySh9Fd9aoRhmH)uq@Sn;@kf~ zVwEyf0CrEv)DuH$lsd8Kmt_gYGns5)_gTJ~@=x59OUyj7So_>EXD1T@cMDH^z$1L3 z1*kwtfEz<409RfID2+C7HTL$}X~yu)78eEib1ZJN7*0~Ez3%c|xR5e!Mx$&XzHM(z zo0^P%K0r=b*xGv9Yw~YW`a`;S<})Kl2}YTKi)0gDFD!{9rLy>+YrB zpn(^}2eub()R4Rh7kduwlNvgQ$3-i@26%f)6adGzCzd(72a?G} z_wR7Sl?%&-)e>lt_|AJ+oD@{`tiy5wNLHR&6e{lJjJ$BXJsmJZZZ!QD0*WUlU8m9b z|8V=|Ai7AWbbRsC&x-(%VchoG6>JF!J)EISL(x6fH00$ulWp>a*n4&IQ*BzD=fR+7 z$?fIr+>8&H_a%8Dpg`7J&V=?z`W{qEr5XKR@BVpZ1KG{==ADbGKwV7Y+x>l&@Vr7U zB70Vcl$rCUH=0fc-a@gXUBwc>#$0jc5zhrswZJOre+JLcMcy_QFmSGC?M_2i^-`=; z_H27NgxsUcllOSx;)G zrd%AQEF6>?k`8p<2`_;YqcnKu^)=UQZj_MM#VPnl0>6;LFW}?zl*e{18u?pJ zy*WzzDf!&F}b3sB@h#g@dh0P?O4DR8j)1_-i&5y8+(}%a~9+C}?TR0fnlINie!aC-^kUOl{JSMc< z<06<#0JhGv^S$WNgW({@=42|Ss}`|<^faXHHCfsucqZWsE5DiygD%2H(-fUnMCO0Hu1SW%h#sz31Pz z=T*K}>MPhdRjSz^k@^4J18h0lpm>DdvWDC$7<34k@^>=Y3p_o4i0@C~1^7LLF7mzt zp5g}N=VmVtoM=73tr>YgH3c0$9F7>!D=SB9xM%E7Q7rDWeFi6XgBA-GRf~t7641V2 zmXT;Sa3+|tqE#kBk+9n7q8PpG>UZp&v@&&V+j4qMr$Hp$&jIs4##lGM0M zSPY^f`t=Y^MEmwGUmJ-Lg#c|y=pFoO8ptv3^sk?}XJ{`ap@^(~KRuAr$-)E6SNml< zfpWEmq;B*1?a25|w1r@WDoE7UWMa?71SQw)orzN~2Ia>o7FtAtU3lOg-3p`MdidpW z(c75p+s6c{jLtMPn=c2n%oGHJVop`Yv|lNg*%Y!7_&c)Ku1V3`G<`T3n63RcnMeF_ zG8f1qERuR2SG-OTYu46NXpT;iyBP(5Rl#||ZNcl-BZp7j%=j$s`t0S6cvWA2=8Bm# zU}F#O{pP(gK|R`;scE9bbBnZ4EqD1FAs`X0oj2$OvirMPnG-Oy1jDGym&!sDF!hYM z;34!i1-yXhGBB zRRxo~n|6AWCc_Z;(SQwYL1v-hc-KtBglnFX8+sP`C%z4U*gl#R3gFq(nr2|^w%D0h z_U9^_^ecivJ0(4Tom$SbzAh34( z&~vv0l*^W~6LR+B^o%}@?)V8E_z#&|L1@q=-Q2qxyk5<(a_Ux`d%& z%5?|UX@+Z}JoYQsfx%1AXeL0@=Qs3V6!%{(3;^c}b&b#6B?I4W2{g=qPz4|*`o%dSoz(fzb5Q21 zJU|jBtw0;6+Po14^!=|YTjuBO%9m?a<<5=H6}UXF1{KqfK8=;L%MLIF3l(0XMu!-I zw^pDtD;7>l3%6n|eXoyow|sF_xSsx$+q!uu%V9R_E!IQRh!k~h*Xw4=g)9W{m5O#d zmJ-w|Igol9#s`pxV4yxtLaW-@|HM7wxH{;t6pTRna9r*dnUqVNm3X-4_~m9vCw<{B z4mxg&5n4kH_dyeaz3X`+vPe^-#gS8^4^YI!Aw0b{Xaj3NTz~vtPmn|Hv@`;%)J9%)!uTIw5J!|3Rx%rLIBZnR4P2mENi3N&^Wz1o; zx}5Lho}F(IO8yX!Vw%g{K&pI9nui6@d!}d56&=p$;b5Ja?6X-C7!%RAbG9Xjfu-Ah z_+nw54ofTI)VE?3#lXP4*8A#V#=&%P!8+RwZrQ&{1HMy#sK)(qKsd6q)0|h_IAHN; zH5EHs)Gu559(({7_$(A>qHmUHf6=4ilp!C52l&ddSaRiwoVIAI~_%uFm7$Oe(z!nM3(KxA`o@G4yIU@j>MEsVPdwCH+KcM3a6#;p9m-gz5e zcoN{cnGUY&iN*-XU0m)?ydXCw2+_&BT?qhQu|;!K;D|3D1}Ggle{ouT&q=ZjEN6)( zK#Q6gD)A7zzx9jw)o#7($*1?1w<&Y}ZLWR(Jdzjm=oD=LQw>(d3Y;M{Q`}U?&O=*Y zUC~z)3A@Ed(JA+9A9J;2sPux{;*JyKqi^G~c@y;5NVG_7i&M^5%Smq7CC+#4x1ofW zNI+?KH&I?#u`Y4HqgIh+jIAo4%W&mLcJ3-u&=Ng1SnrZzRTh`Fcvh2|9Rr2iEAbEB z(!$ceJGnQEXi#qF0sTx_o|2aq1hP-`VO2h78!s3>*HoNFj&W4$PowvdeZ}7e9oRG=lzipa;6ITOS!rxg6Q`j1orVT8z3~76I=d&P@9Of* zv^YK7-C4FrMvO_b9i%(0wW}B23aed)Gh3EVI?i?P0dzk>{UZzDu^#TEb%*R^X#a~{ zasAOI+_khRNHRvuTf2bmv6rGGk_vf#g})qaO7}2l;sg1E zyqyaAC zeSxbywyF%#zg{TmbY6sVEq0C3L6883iRTO)SQ;zoe%%i|B2l00`2aTYUSpMXSw<_) zMM?Gb)hyFcNjzu7N-W}GH5i4IYOZ&56>;Zh-x=UZ-$Dl81jsc^;WRq(wB%Hh<9U!| zPP>66Ktag~7M$`vCJgC12*6vnK!1G%a9)U}VZibty-?Delj5}#WCnBphA=&hiLP?i3*G=# zHte+CLmh9kw#y$3#um#T%p&MgS`Rip&D_IE-MyD8TKRLejvWmKZt^#_EsD zVByi7gz{!jNNB9mmH5gPoKA1Fy&SrYM;{mEafKuhc z4(TJ%ggfo{&y4j}C+WdXdc&tvQi^CFbm(h0R2ufTgAS@*Y&-j{gl^ByC9->|EK3?6 z?Wwm{+$`w(gAesyt`RW2Na0}-cy0W3K6q_+y)_3IvCqS>hyh1wX?a8E-R|8&`Vz^F zfmnx#t^++Y)8qr1rn0u;RnzZWRDZ8%{nAeU$N8MG((XI{iOEBd`pnC#lW3czM+=al z*aSwbe1rBohfkF-P%N3ze38&aheqel3$!!00FeR5Zsx0|ssS5rIqHCS0@M6C^eXn+xio@kuU^G75gbF|r0EkC_=^0hPk4Kz%V@gwSJ`GvQdj@--1n zt^dZ>S9|FeXhH4*G5Ft=?9{D4L>>pX!>_%}3l*s6;j)b8J)%_NHp4`NdQ`yR_>h;jyhK8aqB*vKdRnsf9blyp;WLvD zGLo#xKy|mcUB~hMZV)K?s=;^cLxb%xeKiWr8~EZ(BiV!fRvm~_$0Kj`e{dP6=l`w# zr!E^FwKie~7?)sWlMo1rRLFVK7(gXsjh1~j{HBtM@7DQ9d2LXCl_q&S<$f$V+2GU~ z+Liwi1`lLd3Iem0p5qlhi}~i68HZ@xA+$W4Q>@r&O@&stN=OmlI?DKenIp!;X~VXB%Ngd75_IR;8y`$>G7^ZXp&u zn4UA6(|zBJ%;mf`@cSQuR^M*k*PhN$H8fMg7PWnK4fNXh2C}|mZDe%^X!${nxzJ?u z|MyD&j~S-I7pqsFg>q*vU$9CuwgfO*YNL3ULEI#TwXq;e2%$dDT#~28Q&^{K(J7A4f+4{t3}oj zAs^drJ<52A-y!sVuH$#x+SMB7Ez$W`^J4P1R1L?Ckc%--a$%Z%Gma z-Q)o7?G?+qrN^AYM{a28ufm<*mT7d{!#)$OJ7_R|SJrlPeLyMXZzt*Oj)ET_MLet@(kjrq*TV>;w$*i_3`^7EX8RFrqIX5HG>gXJ-&Fsr|-2NKJRtOCDN3r z)-#zRA=rT2xJuHL?aqW&4;w*~HANsw37FsBdz^aE9Av6HmL=;?oug*pw^l9~i<#7Q zFcvn7G_No?t8DNW!{5A2^~I%*%FxKC6bgC%&F{bt_b6HcLS9^2 zKpdL$?D8pwqYPUqNLScmUwi!2>yvgc$}X%Z9r)0`ORji=13F0EUwwLyuO<8dW5~Bm zr*(q~5WJ(>1`KPMZh{Kf$@i0Jo&r8pC;|hN#K8;ii-o%!2}S8|_wP#GEzP^y#65E> z34LoWEe#>j!UU#s$)wr!R2X^DL4|)96!-r)9(6#hL(!L+*d?QL7<9Xv(i~{Zr9xxN zjv+|`2HMlmNO`Cd9V%840>?s^Y4S7DtB^{~?!SejABZ_X$3J}MwaCnBXf2pJD)El9 z>CPfuhM_fx0emk@W0lWuU6eXfS7tL+k@Q43yXAvrC*}SZ-C}H&@X&7C0GJ)VDfUPB zJPqX<-<%H>8u((hA#)fKCI8)ComQXAiqX*B^+n;dx=A&R}R5Sg6Ri$pom&i4S9%8Uq!z`sw9h!%!M&xtj2%l|{euKt5t;vK9l2+&(O@}`zmP#7AufzPA% z_+A8plq6D3;QE)B;unfaaAd8VuRNUpv~@M0dG1RgN_@Z%~E%LsUROtTIbZV z0VQQ-VDXmQlUhyr!sdZvqLuMlhOYpW;k8s$Ho(`xo_MU*fNgZK)~d{1a(BGBD@OnT z6dbFSe2Ryn4>v-f+@TVmpqQK)D*b%nD?jZud&G~HC1Vop5mrXJnr~=$QuuTPQhMr4 ztpqc_PRU*3>5a5v)gO=edX`oX9;JuL-^l~BHn5;zX&-FjKsG>}$#tO+GMUT>XXWu`Qv?L!K0elNn_*sgDlP+3iyEN*VPsAbR&fcL$u?1{3gb&u&(#H{WQ7)T|)tRxRBe(=~>oYdi7Z{oC` zAVp_dX%+QYzWSqHOx_LMz#bb_Vj%ZPNYdun56|+Beo(8VF(}CQBCYEs>O2VJF#{>e zOG1oy5}xzuRB5+^_|&YzQD9CeOJ0=bBNFO->KasPbZ_c}6x`;Yto9kV$7;ajuH1X^l{#APL-`3IE38sPx_q7h(y zH11CrWm}z~La8Ra==bbC$f7EJ4+JN;(0pf*um@keS0VIb;c4uud6J%B>hFVnZY4~& z%L&EyLII@%Vi4n>)ehzWut-XrbQ|ghlK%$(*moZa3!#N%pqm~V;xPoY%Bb9Pp+cF4 zv$Y0qSROydUL+vVH0Q~rMv9>zcfU(t41ne#M#cq| znOx%%a=d}vn&3m}={^*P(se4xzZ1^qqd={ACX^%J>VE$54;R2^l6u$p+2;;6Z)Y?1 z3?V>+OEF?l)|R@f9!!sMyl(KMM~vwAew^}0;FPDTV&CpqV^=CoS|U2T>5`}jeyM2# zFJ!#yIp!GufrqX<-E&CUAOy^Y0o_Dty@(&DiDlUF!vF>e7C~CIVY?7`Yw-r) zKRcjR1pwOrbDdyy3Yl}moucM>cYj|879<{I}|9 zxM~I7$hpf)*X}o`99~@vgKXFBfr&4L%nv%_hcuJnR#iA;>mTm_O-h|M1l9MKdAhz)V5a9WJ z;3oW(pQ&U=kTAWsmtG@_6s{d=*OYn%RPSlOOor^;z>sxgsJzCwgAvQ^G55=jJ5o&% zrwc7nSOgz$n8+ySQ_fZGGO*PPyiUC-mN@Et+tM>&L<_I3%+KIve=Nj};(_)C^28{4+oZ3z1&A)I5?y)lJ=Y`kfb{T0 zqV?C3gu58Sia6LN5|auzx0jeQ5%~Yl)_&+t z>yW&^l99F%>2CevWCw|Gd;cO!3i|^gxa5x4#ygWA-YaZm%UrdN{1_b2SQ9y{_|Q5~ z8dS|)D`@#~L4k)n6VaFU{N`;Usuw!t+IwJBmZCU~^%c-JrKLPBW3p+I7Ue$_AArZvbHKw!v^MBd}VMs$KRj{82zS6L9iVZURW5M+u)r zfS<>+-m2a8;}DxfM+s@g*uS-OvXB28Q{0tJn)D;}>!nM9^_50bv;&Ohb@d=+wDk$& z98l1WDYdaY=6`0#|9w8-qcZ8r_CM&22FG2;{jBWF>5fhPvQeh6x1V>gL?0)e`EBvO z9OIq3;)5@B1x}cJ5BnDvs9*vF=tjq~Ln1#z%0>DPlY1GCJQdY!z&7MXX!&HtqOK61 zDVPccUpp_*xn(Y;4F*4x@rl~Hnor!v8v*h7mA<@qs)!Rem}{K8PleWQ)TpU_g0jzq zmS}AthdI)?`nAMUF&3Nx#;And{aLHiP}2RZ;bd;E;EtSJ*!p1AWXbg_FNCfrsi>Y( zHz1CNNSDK{Cj;#rMZ283cF&-CoACkP{uW=(j{SjCh*I#GOUAi?S&^I%1FxXd;Om^b z`njVI_xlY*r72YMiMy1k(s6MKLS?5UEOg|-hmp`LeQ7itSGyZG9xry~_*kos2Y{9R}#h3?C1Dv<_e&sk+6*`lLo}EB9nEH4naeF7XKK9tj()|JL3< zRDm1YC^wO4&paib=-()F8d_c?mj`yQ9vDJC$`SZZ#2`2ApnyQcw6)7q zqFdCj+1qc8gSk`Ru5pAv6-g5?_Wa3RlKT#)IC-bcs`mYRsL}`j8bJ;I)1jwu>ZgG5 zF~c9*V|_W@ni~TN3HW`-kk(4*3eMrpuViUZVN$6}b&?G^Ix&N{>?2fJ#}d#xy6Qv? z0h`d=E_AL|grYOIE)@W?z`sSdI@LorGi5gIs<28QRF_&Ss$2(~9(=C0R}*|E;D>Tt zy>A$WFZO!So)9c?7WgbJEdc=&a0lviE~?E?kkA9`6Nv`_QrI5rU{N_GDED~|-e@~I zX!LI-Cr?cGpDK@F0FW8e`r8l zuF||=ErdFi*~Y(W-d^8TA=rO47)vT|%ZC&70Z2t4#684l@t$jCKH%O)T%7CYgL{@~ zy;{qlrA<|7BK8AR%qyfNFD_EpxsAw2Qtul$v`vH<-Pf*8s#jMRQZ8C+$wk!O&mVOF zEMrqSM8FVASnWoHWxyp~_A(oUDr#2fb!n03h^R$r{ZdYHIW=rRQnXRLwmVyv@>>Oe zb@t7F91l3J-Z(!0A0un#5bX*kunu=;W^Y7pjqLT#Zs6XH!==@uS2^AGL2|Y#-vv82 z!Qw>m{Byrx)#MMt=@slWpf=B{a;5gYow60?BiR54Ya5W{WaXqk!{Fi5;if}fPOJ50hFN5r0lVJ@E-R9gn-K=QKEpY`gzOj6-80{!75(`Oyh$+UN`- zy9We;h}8%=he>Im;}c|O;~;tw#=_UK6)9>KBY6v4mY3ll9E08a%*$+XqL2y;5^JfDztkp1q=< zKX7_{t2H<54#+8lE<{&rhF=q~hy~gi0SX}o^=jo8%HR9%-I9i)?it z0q*a>$^b})gy5tHONb7I`C|zhE*0u0uQ*c5xE0*v5N4VEvu0xZ4ZO)^;YvydV1Uo| z?3ChKC=3lx7C6m$yfr8gv8Xex%W+~D!_q!6F3P;s)gH`92Datb7Ek3f*D@{&KsSPl zj+@3Xk(k%R4FtmMc!7QL7laGKovsUKlgLayannnL?&Kl|eA&TW4lPlCZj&rs&%-7pE$#8g|f170(r-80FZz z*n{Q)4nsXKfFZ-X-qw_K(^o=&Ml~M1ty5H3wi+ei$ z#-7W18`~;& z;^5O&qQJd=YGmtZDFPb-mb%03N3#Rn$(k0ynqcz=$IB95URKs{Pgq~GM%3KeEpjBX zrn0iHKT%&3Pb$x7_-O`jDCxBvT!h~A-PpSh{H$c#p9I7K-fhUt>ZDV0`3?=WD*_=h zoQ?n4xD0?FXoLN1v0t{Z8b#Fx()hptP$be=$9X+;%6|cLoG0f4Y`3q359mChpEs0I z*FAY|N;rHhU+Pbjy7d%ZnZ@D_1%#4^St;nM!H{_~1zQPMmkG%MwBcR2jcZzO$F4l* zstm4|Bs*^b9?r$l(O6oxV9S_iAAGNgM+CIEW_+9m-TQI)?gZ)Xl{h`rkpq z>I-3qu*d=Xu#;)@;eh!`$5?XC5pcDfA|E~JMxO-99|*695t!EP$CPy#nQ!x$qHv7r zif2AynrcAkG#)+P!>B>0N(>{GP79do!;-& zKYX;Rzo!CQNy%R++)o7z{It6CO1c-^G7%#p@yIrk$4Qucooe?y?ebY)l~2Ean9H%) zM7jPd>#P%%wrxRJl9Wsyp)!TdQAuELoZ!&CUvmE2S9AoT|7jcZKmAt~=Ka8s4_%^< zEZMXP{HbyKz-B!)W=KNE}#sYeT0pdJKU6GjPYK!=ikmtisxQU2Fs=& zRVRI^bRM}!`~8-rbn%1a2pUd_v2R19X4rG25pO@QO-|H$2myxQnQ6uQFHY(7IsAea z^T4}J=Tf37Ph+O-2^lXuRzBYhm0Y3fV%)3eckR@%bR)o{p&`)zAe%z!eJq$C6WnWn z)`(;^z=Y!dTmmqG3(v%`m{!JDW79Xr*@YJb4G12)EF%xlrb@E!pO!=Ux+MDnKO4k~tp zX}RsLuxFqZM)0GU^4T99^M*ZvhqHDG`WQo+l)_>>8?5qc6HUZ{zk%qe&5ybZJKA|k zHGsdVlt*hlS4DmBTR2+;uIJG3G8hSsOixGf9OUhsnI{pxEGl;=W~*kHUx%c9$g&>C90-SrioBdP+4zMDv1dbGCVlDMtPdeJq*%Wwgt zr3)H)VZ!5DLH{(N1C$HZqH}z7<-tGcg)ggvE#Z2Cq(VH#%78+&cQANA}m z0P}pF{d0*P{&|VMF4i56AIl@vxA;z4I30FG7^#+4Yfu%=Y*QaOk1T^^?i@3o9A;CD zP96MQJ-a;7I3NusSx*Z;3z$5l)wk0v0E^6ALhiq$Keg+qGL=eI0CU&1&)ESiRq@m? zt!#+#=|FWN;`7m6wiQ@Xho8>GZtcbZ)6-uRu=`lzYA{byeKRB3mIRF?h9JZ4M~mrt zcIe3pd@njRlcoKMP!KS;|?2>(X*QfPlmXI*%6S| z|2~yU>;K|Xh%-vpe`p*>%7x=|k9rY7L7cbaTy8pnetkD0kQ}mBaJ-dG+`}s<>1I>$ zZZ;gRZeYKV`#j}3KBomELa}&7d@w;5Uts1WO+;nOBkWDBk$so!M;b4J{IUqVbO-G3 z0D+tlQeLBTmqr1!0WxQT2jZSfSWxy1eAbjwj+6mnoPxcXH}7RYB$50ba1RQz+uS6V4O9AOYKx&Y&N=XP2Fn z4X{1{a>J#Zhf@6_(E4Ik*>Bl5I9aIqg8E#6*W#}42Dk0Wj?0n$)0kv58?ZGUuk|SQ z{#MCfK57?638a;EW~h?degQrm~NpT*U67YHLW~JJcE8Jbn6ni;V6l+p#V^Lf~q$DxL=Me=c-omTausjE{;x* zBZ1u(HQ>%&A~=FN2j6K%5L{e)UB{s)*C7gK6kORu@6`ZCggsoa@HzL7`6BrU%YTbJ ztUSkE#0%Ejqj|;f!&bS7ak?{6xgS3r%l94EW*;b=ng^V;Lm(%|L2I1E5bW;fY$8bD z$tr;{9c$#U6qRJ0#&uJ<>KpO8pw6ueKw2Q|9pmrmusu}bIVj{yu)+0z3wX1A8Zsz3M_2k`1|AA!!k)%{s(B~oO^i;+K+4-a5A z{?aS!_E8ADzcd(vbODv6J3#3478>K}OT`_Z!*c3QtiM-FKxd^8W>j=$C5E)Av%m`b z+gmG@Me!*){}(S}z7VXke2b(!?Q@Dg5}_1}s#X{LotE<(C-q6H{6})GyvreuI)}Tg zofFJ&P82m-c1f$HHEh8j=_P_Ty@PrFB3Kc5FH^GnC0_y4uItJ0`pVJqNDXZN3CIZLH%ReE*)XXV2ybQq088FM~Pew#|$;>qyq!lA$r#w`8eB!PTa79UjHC zmeW2BPLCpAoPP0l6MZ~MQ+)8(*HiWhkJZL`YYgg#7#2?iJ}tfzV$=9?neNY5<7JY{ zyjMqJcaKNwTO{SShl0cgms4ZNqIeBo^{>ArF;SNzjy$0A>kk;H{W_NupC~8j{~=*D&fd*y#$>E*1yn-s79^^+@gk^w(Av&j-#VNp?_dG-(@Fdm!9{jOas ztA}u}Ge8c9I|FGUt_SSi(>u~DEmVO&4*Cwhb*Wo+XW^eN6J!PTYVTTH^w`j4u9%5V z5RAHi(e%}v4w2rgJ)F$97<90Ea=90@AAK)ZvyC^iY`k&_hb*4Qmp)n_P#d{U4W z?G-oS_n@S!l#PX!BJK`l+o+f3-1*@?byJtK!h&@yx3QF3 z7qi8tVp|-3lWK`VZiWbr?JBpzf~}(lf=kJ}_8c`4*3vf4wE7v1`RaVl`vaXLpJ6N? z>O?A3{2&63;NWR75Oc@uNFh80e< zBXX%d77Zat-mMGLKMa)f+({a?zZP|+4ffallMbdU|KGI)KR935od^o@^Ie?`@F579 zaXDvazwVxx1F&MS!Atl@&f`z3(PMJ^?VLB_ngjo59Q$iC>C z5xUH&{Yt0Iv3)q-*W9mtdU7em4ml_JlvKK4sq9M2EPK#xS zuV2S*?`ja|^J53sj8ChH93W-y@1KQS9^?%kuyx`f?)kGF#(D1LbGiJSQ?T zMT6>(C8`M0bJXQ2#?;HSi)fj^hq7KD-s_zFb!5&@GJ^kokwfT)99-aIFjR)_t~7LwKdF1e1Ehw`)bI>Y7D=QAxqqYD;uhFWp89@9P^R8^nJcB8l7 z1av-TPdj`M*8&mW}O}o18RlQDiX1bv=5;u=N2#r-RQ{Vt4f7@nQFgT*csw5af>Q*3L~V zanhP#kC_77SiAZ8DD+cn@SqBE*;@2mw;mU0fuF2xC=jX{;6%Z!V{#skb|hS_;AgZF z6kXtV-Skzlj}dH!SjOA4gWQ^ak$sifB0W6?NYHp>PYYh;E8!8qLJS>$BQ5T9#7llvUE1poa z6eO4q&bN{`-^q+Y%Gkjh9+eJWx>DhpA8n*|EPDF5)!hX?6LDl@7mbV;nUIo14)yCu zT2`*v@ui#jRiYws#4>>k_v^gaBGwr$o_>9o_$WgDSMCBa;@;HJ-R@5tD~?6qX|QW# zt;?}(Hz5bQ$@ZA2h=aZ=$dBqV=QEIoZN@1Q$OpUutxdq;8#(3p!Xd#Ab*XB}Zl*3J zrAJSzm(M(sEGQtoVjFAr0@l^MPpjIm#lz^zqo#{3`t?I5j#Ek|M(50n zN7{~$-1m_-s;zD&oxd}=rujw3&3dXy-*6ZeessuCh7so8d#ocx&%GVL6#4{M+}E79 z@I!ps1UNS`Ky80ZXe#ys0|M@tT>e#rJVLEjyJn=Coh01lu8*B(X%PHq-BMU&Re1{GHp4G5B*gjhDgO8XV0iMsymD?$|hLFxhK` zGs9c8gsYiv4h08{$@i7-K}*qk2!`;)VR!Vov4F43n3M&o3O&$i6f)Gcsy!KVFTG z9FxwhHdy>louFudGoCvBHg5TD4=NcrR{GfVdi8C#G?5qXrWz!=zx>8G(}#RhMaILg ze-^sYtgVB_sdlo!%yn7k^hIB6zv?S!@q0T`-3HsY_BcPQAjkk8xgu;$`v$2tvWN5X z)!x-2>MLJ^jzlV(Vp&n^dWN-MaLgRx^X>l5x=eO@f*Xi|dDD%b!d&T5=#-|Tu_lJa zC&eMB4?iyzb#(IwaWH24ysFy3H3^=eld3W02EFxu{kMc}JB$%Vy^^KvP&Hx#WAatM zjei}vI4mb8Sk)UMbOW27nfcAh;rq>M<(ntF!GDELuS;iy|Gr7NtiuPKhzlwzD)WB* zy;?vq8-Uz28ON zu^ouYo#?*krp4B=%Lw_FCCgQIJAMRnC*DlM%%+U26$aG`MLJ6lpA_W>giT0vRRoiZoo?cS#7 z{@G%SG3L~ZkKVi}bzIE6bz?$FY}b!yXDRXLxT@({R_ki|oAI1p{wx-S$|~zWn3N^1 zIm-)S==$=WS}>iDMfdN7Jc+UHqe^1byIBaOLG!Nf=RVJ&R;s3F+c{D?zc*R9OdfKF zFj7buv9Z~GGjqpdU$suwZWKenz=(1{dd~^P4Pp-CGfpLyc9*TmPT&o$cWYRuAsw}Rb?0Hz(eZ8rDAw;Sv;HU zi-RTtYwJi#s{o^9nm}C^ zz0yCp>#45^q=#AyN=g-*U~V% z>>^xEO${G+{h%Q0dTfzVsroe#`IhdEMD9_337U-NwIDJCp~RUj|1>TxbU4MJ|2lv& zPW6v}zdTp`h+Q+RraOz_2S$*O&;F0B>kg;7{r^X0m5gMj6tc_SD-}gX=8>5#Gn?a} zkZhIgRb(C<^T;}6oyf=@$0##S$T;@lcl$o|^jz2Py6UgG%IEXB@Avz)-uF#VAzP2K z{ru2=l!L#w_t@yDmoU57x_{?*r7;5E5{UO+Lg_=ku6VSrWNUn4R!)DQ^iV^AvoB9S zp8P{v5LufzF`~;uz`r(r7WTACMT+L|Ic7B^g(eN0kWwEt=XK+=%IyV?qH=TnQ7Y5H zGdv*X%#uoWw`~G+) zN6+TNUgaO6Pq%)U6V!f1ui>W&gz4}qre`D#Gdo7HNM^hhcEBL@%zUd{W!2SA*Lq_g z;wT0);>mccW zgKc%z<2P1!4r>h(!%H34^BB*;TC8hpRaTP%+ad_i=h3V_yy&bajhA zUDDnb*uOlY$f)+%uPSKebjv6Yoms(V{sD$Su7FBQwllvF@Q#&nnP=1qu*jR zX+_zj>~DN1$WIfL-Mv>-v7 z-w4*@^e;&LcbEeCpY_A6Mpep!`Q&|A7bxJY;J(05c||s)k)HMquzK#$=Iz?ii`5w)u3Rq zr-OH|f2rh=d|GwoLl?d0zORMkhI~vUchATL>sh{ctgLOWwcU>?7%189{-R-L4alGM zR%Hxj%X)$uw-dE`tKI9gL?0Q(TO+$GRa+AL@t9e*_r~ENu)q9X{Za(_vJ@-Sa$Q1pm#Ewie8;Y36}L)nll}1#Y@Rj zx(G2zjcsO58bDF0FrG9H)2Wg_Kg1G2G)lwoA3XA^-06d9V2%c|Yl|f{V)`F=IOc&bcJh$PazMp@V+4?^v<@2buoZXC(anBv}rs#1P(A z*w}->qF?gqF^7p8#WoiNLlnaV$@-prDL#|vy`~}1+tc%%Sm5xQ>p|+&F03qIc@on$ zz8QI%2Rr<%C5TI`SXI4@nIqyh&UXvf=@@UYz=)whg*tNC$OQB^->27H6fmX36&Ejj zUKBNw?sZpcovq#8wSRb=HS>W{-ePy=FfIbwMgDMsKG+`jNkt3U;Yu)uSLrB@y(=cA z+dQx;q1$ZG#)uYn*z$NR6LxtkDl5-GMkgj95Mwl)9P)Hyu3#(4usFt6cGIXIKT~2o z;f7n8ksa{d+k9C3xfhA+z?zJt8^EniV_N3CAManm4--Mq=&B!-j(2|4X)&9f*LL;G z*R;+Y<31}S5!dEYRUqACRxi9CO#8n^*%$MjKIEU?aQChzHO%UpBxL}8WQyHcU_65Q zK8pP!Ms28doT4J&pgMpSjX{g)yw{FhrTEhbl$E&R~V0?L*!X_FCL$GrXn`JRth%4H&YNQjB= zROyWtCCHD^mR_TaX6MI)1m{0bDtkVk>2y0*pJY2 zJ^lkL#*tXq)LhwmvZAME9?Wl(=RgwM^Dj3|733Dg^n_<;6tc{#DP4 zK*t>&GjNG3DYV4M*{H+33v@D4{hM``1_JbpH(rup-)-=S+wSf2m8XkA& z6&E1dSk!3;HhrkWT=5fam~a$x{q_0A63o|^$!urKHexmpCrp_xjOui(LY?qv$_YfD@V>tf9}2+;TMjf*SWr>zB*FCPFs?7)S8Rtvt3+~D8UBABr) zuyiS!$V?PP}qKas_C&Ii%f=G&ze%a@Hu3=j)pDdt-Lee&{2ZY!q@z=+`;PAJEJiZ5 zfhXkkp~(6X;o#*I2DId{H%6vjDH}UY3h;g8ci*wKOs~B2(9|s}XT|){8H8)T6KOo? zimsGj%tr8wdCiFDy)_EtU$*@xswB_ZW#+^!>bvV8C5ivRPe0n5{`)G-0}+MF*+dYZ zj@bJ96Q-i%U($l~+P&cz?=ZaI^iHY;;b-7Z;D-|kl549RKyg)p{M>!ijlt@hm98_8 zjJOwM8MKjj?pQgy1``=M;x7w7_r6$6+B=;G;^UDhLh}C6bJXPHj$K~4m)m-=aTdF5 zUsDDX{99)Du973Yc+tX0Rxz-CRxmy_Rq~e|CR84!HgJ61sw^h$-tF8WOmGzK?fJTP z73graji;56LVEXyU1)J_ZP&|6eD)Nen!MhY*emkqgkouW;q-t!< zW=Y;RYXN_i+NlQ7*z9|hxemQM-_MVt9jQm~cYUlQOC4Pkm@MM``3F9LF_IDS=8XfP zF9j70RXF&WhVRc`$>Yy5-axDNnja4Jx%#($&3&STjYMu0m}V?$I68bX?^N4h<^nQT zgFKzX*AV_qn8+MYM7eYs#dRtc$;Z*ituOnAN(T1lK7C2Nd3{l@QPcQFXIe7dVzI=V zCytx$9q##hah7;8hc`d~k%@o5t~XTivq9>a(|-J(j}lzqxM8x+`%#f*@#n=$7@vystI?WAMax$ z@oRxU?pXNm|MV@R3=V?iv+@)`REhP=*zXVDcUG;t)H>F3%$TmUM%T_iP8L_bjC(8`hg6G8afY_Bz?7LWAtWd<5XXGBz{a(c+nIjgT(E;7SO&hLaKsjFEP z0!RZ^7pGs9#9on#vh^R32(z@;5k4iNq{W@9*%o6ajV|{eN~SFXh;!v5TedUw$H$DM z&??%vvLHcnF|Rd^+$Bd;#aa%NnG(%ougeP@{Feyw*0t0llQp|%o50Z>yeV+&lF0m~ z&cnjbxA^XUaAI1LRxJ3|X{FI@zcbg{zOgE2u_CFl1XK$9Dvkv0ohQ{s|I;iq(msP% zPTpG_kz*3MR0h6Omj}HQ zvH3G)lTcki#=8V@RL9?1BmpCHom@NWA#K|iI9^y&8Uz@I(NPx`qGw|f&!iW9!Sj4J z28x|TJq4r%gFnk%*F*2JH?G@+Ye!)HwY?ZSBqfDWs?P7JG6)m8{<%LaG9#=_A~l?$!mcd=`L6&jI?J z4T7gf!tp`^kOZ0n_XGr}aYnI|DKZPBN1K~%uqPuyfX^za66;!5pBs$jqcuy$d@PaJ zaAz5Mr(&?YZys0Ph4s3@8TWOoz_wnt=_W}b9{2({}-enZHF$GI|;|{8y0Z9&z|UVnMwwdX5d?lO1i%$ADQlG6OPOwKMD z(m7H1(CJ=&S9iC$lhX~8zy*=a_Hh_W-e)%~>hz2%$Tpc#}l1 znp2l1VWY&m5n9xEyw|HT%hyJc0^}-^%L?4f{dWpZ>L2Q>JrIN}l=T;egKeJXq-K^} zJzKj3TidX>i7p=pg~2GqI@Dkvs?-LyZ)wRrxL6P1)kajc8iE_Th;mfz_+p!D(YoF~ zJgPvyB?(iA96H)+@T!Xjzb5M{zUJ4|JP+Lesqg_8$EDGP{A}mI7Ib5_2FBh7)pKcO zh1|JF*?4^T6TT`Dyvx&mt<{lSVXH*8onhw30QpvuH*pT)gEeA>Kv+f-Lzv8b z=J>{H>KW6geyj&yQ5?(S7kRV6vS%w~J+mv!s z(%(Dbto*OX1$j%gUHkI~kg~R0YXprpXs~JI6;mhMOU>!S1E@Y+Xou|+uaW0-Qd^b< z%ItfOVnZ)_m*5OtSm~b-D?YQ)AxY;#@6(luSKp$5UG}J>^>K*;8kgc9AQ|VrF{i>J1rt4K7r4wL z4_CFk0Xm}>#EMr@7jVRKy1Xh~w4v9U1up`b;EcsSFsXi3etqohMK9+B`yz5QBw_9^ zhu!#vK3K(oJDz|5+PlG4QeygC`o)?QS$3ZVImVR+v)&YLuD0SAN!Vfc>(M%6SNHW==(#2`2Nn@VCLkZPFvNIK zVqBm5+@F|j?Kog2zQq#0$P(Hz0{My~etHglLviln70V0edMq6y)b~0T3$CKw(jhUl zpIoz!{QUh-3^L<)Wj=x?7}uz!r6rFQ$(Y@GKHl>3$r6_*`8si_yzysY4ID8t{`;cF zy$|wgJcG!Lx;b<6Dn=`u9Q~M;`kF9|cDI0(XfX}Kqlo+lM4=j3j55|w$leMyye4ZyiE!aE8x*G|CHdw+3VhivtGnc9%f1f z-w!}KVkksv;?<+Y7>bqb4uO$ksS+M zlIwvbw#<7sgkQ?VD%ML%xiH#eqm=iqBDy$=R!9s`9ngVjexFS_)=N$+zT50Y4-%1% zIM+WC!CysdizAniffRaO_0BXlWO z)lmVuw29B)&*DX9#DkY6&z`!D!QYEW(hbSUEud3+1p81yOGN+F(nZKlgdeRu?hdhe2)VA_E=-QwtOtsd!9xP^R|LbfdTak*3f%Ee^E&oeFy63w}eT}-)~WniSPWS z;-%*jMOA-onKWeR$g8Bm^!VW0b!1%$G4kJ{Jo+D?%K3|3z&G50DiySv=VYfL@ATsw z+|SYr?t=r>hY%Ko1T#2o3~QsDN#M8BjnBtw_BrrFJI>SAS^ByO!>-DDgDrp~VuUvvrx^KigT}beieMM|&Uwj*(cZ1jPkyIq(*rI=K zAES@_b&Bj}GURgS&RFE!9Ku=fP(;-3!Y~KtW1?F*%Pj)|0S*I^Pm+isdA%8_pJ%E6 zKXsRQzN4`F&VVW*%BD+1!dGyy*b4S6bo~O4@K%+YcI!BUj2dD zaio8>n#sF^97Q=f9HTYIM=o^L5>Xxc*&59tmog?AwaYe{fLJ4}`BCpo98`J`YDXF< z?@_VdAIUu0Qh8!awCLga5w^d*g_dRSlp|pWW|`)YTHv z9r`Vt=Dry(o%0-6GAA1uw!WT&&1|c-^%6tlRrQJj4|5c*4L9z9yKr%N3Its1b|~Jk zX6Y_(3U5T7n%Ii>F)U{aB}am1%FC8lqPzj&wJH-qnqUU9iZI zT4#hjc9z~_a#8Cgf>_)ONa)_geF7P*!tXBc^e+=^Rc$qz3t?@vqeY8M)MiT>>8qM& z+)+DeziWH@r@ur(f(9>eXhs+xIR!~b^g0d6aNC)j`Ix0*5ZzvB0Cf<~5@wH$Fr(>v z%Va{-!NE`1S2*5Oz!YPg)kl!NLz=TaGHa?Mtb3pDK_FE}gT)Ak4)F;4x+d;Uwsc{g zVzrhmKBd4YVOg##eCQ3roPS?S_Gv!`qUtv#d4<7wN<1}+%EUspVI$IwcgdFOjYVgTUw$7w@wYR_G8s`)U&A_($H)&q_Sxn-|=UW_PB2>(esus zUAmp#ifD{JH?b!ZjAWIVs<=3a8|90aFBxZ;DGtUxw@qGr9Ep6ZF>;i*nzaPI6#)K& zSkmkOyL{C7sLEeo@e>o{hq9^bL*W(B))bxJA+HP;#(&k!Nsg{3d}}_7b*-=oGCqp9 ztIAII7)d&6#r5JaBNdx?n4&Y^?Np4WY=-Gng&$SGo)c9VR^cf8Wh=}-n`c<-B4xUd z7R%$ zXE_*X1e3WFP>DFsW{Z9}{aUvmR z76=%-Jgx@{f$NbLCY6`XK}e$=3i)b}I_ag-D>1U@_%!6mx&58QvOz&VFD|1M!WP0b z-PHSVTV{PDv60P0KtN!2wD?{tLDupDG_W-2{egpq(8|fjefmKQ zD>9csqg|_!^!mvdb6F-q)+SIpKIMMi@WRNJ6f^d0!dS|~#*#5d3uo6@NlwbSwdiO( zVuK~V;3ObYP;lrWYa*c6Oa~!A=E$Y=`=Et-?#HJjSZmaStb_X{#Sy%h72jIE*gq6=H@$zaal@FKrRWjW8;V%grywZ!j%&|p&-FZ^Tl>M};91g^0! zmG;qu(JHxD(qpUk9yG*8cQR)=IL$rpuuE1rO4*H9 z@ug}oY%BQX^_ZS|rBoW1B&z%m=8~ZQ>o3=aC+R?Q^YYv=QNV2s1+)`E;_DET-GyHs*(tcVwDr6C9DN3i1N%$&}MM8OCkJKS3EByM4x0N z-wIjV<2Q)QGBPp%@rERsO~m_MIT2-^;T8kEiBx<*S3D8Iu;L*$kM%^!AH;%daNTE5 zk~@Mi|1KBWzfqOcsIw4VIDS7f(B!*+sFDE?y=($u(dD!>3HziF^sxeg3!(zgk@0e% ze-DI@w(EH14H#*gw$0ld(nm4YU*ttT@Y3opVJM_c0|UxtEq7MuJ&M_i+C455whFc| z`rd573vxYH(vt5NKFw)lTcHC;ef_=;vTF(Y%-`)HnUq#H{QQ+U+u|t2Ya>^+ej3dp z(o+J4nq^s5+}(ctx>2*!E`gfnAD92SLwNsv=-m%hxsofY843jM@=UhlSY+rY_(kGd>cvDLv-xGfZK*%->r1+atw6An(lJ)`fK!cGYZy{ zID$$U2(WS(or}qGgy&F1l#(>$M$peB8ByoPj!+f0r`yxD$b}{zqofmzPEk$=>S<~!)b(g9d#QHHE^OBxosrp0$^lqNW&!g;UPV6C+8*t+3V9TaSB4oDn$YD**xv?Ahuy~DsSeV z*yxG}o|>a5Ax~e0aJVXb z)N*=LtQ9e9_d(?m%9Db%Oq}ks=R`k{#OyT$webCirf|*$<6A3+O+2McrV>9pa1r=IpgP^c(acP5rWdtB<8O&om;1;|YnEvHmSc-P{NE+eXO-i_Wlc_;GXYSU%iia2u#ZlG^H~ya3aTZ^HH$V zypJkBZ@#}v<~~pg^2MlKRkf9fQ)S`>O9qOAR1s&hip(8#kZ^C|zyP}S`01vj(~sWH zNm4H3f7;$}xX1fOc*HtJXxi3)rMASNIyLnp3?CtR)I5fn-(2h5$(?l9Dz=U*iMb-h z=8S}aQh@#FcGkHvqeN!%ySYvt-}C{PNvJt*{!{OqLPgDPXS6G9-oBQiCG1bNQ4jhn zwmZ84DpynETfZ=*z~?N%WnOGzLW}c4q|4YocJu|1(%!klvyY?5x!RUc_;b3N>VJB3 zY~vPJKQ?CCmBI8lR3aC5=V0fXLnbWmW1tf+>+2;)EH%A)d%2Ts{!3HypL5QnCn-l5 z!NAJ==9pU##rsf-kj|b0CkBIyW<=EML+>ovZY-a*lmNB?^JfdbO&qsz$c)1Vd}Fb% zn$^Qtfx+nfc*euVSP+N``;t9cuv^Gb`{Tui)XG?$Sy5hIUfZ~MTc^09adB4;*o&`w=gIgOJdR6&WJ0)!sLV%1#%;xLD#m>^1*ASZcggKqAjhp&p z-Gi$3c?FA)zBtED?_ddzzBZ(^Ym{jWw%lcO6_Rr(QJTbrEu zdZ3h^!J7KRJ%dS8DtC8bH9__w!z#{Un`gvx>_w_=62tRs{GJ4i!a6k&aO>U_Kotl& z0;eGpUI&*uR;UQ!k~<5^;?@{Xxz_hZe9GrbAqQt}#2uOHAp#0^RkhTkYE9Pc+R00^ zBvoe%%Q?a3Yr5C=KFmMly-o0qrC-`xf# z>%k5G+f)x(%#(@e1z{o9u&pvo>%M>E(Ur2J-8+G7JvB9Dlq20JH65B^ju}2rN&-wo zSLUOO_p0oPl&GY2!7QgY+bSgIrEbaW!tfndo!HWLGLSXv%?E}CD8xLocMTTYqh{eA z;&lhZ;D^^vz7H3>pS%`~ZkURHz&H94ZaCqrY+!VG4?W6O6tP`r9^iE)X8S!fbGkH9 z?d!7B^;ikJQ^Q`T`Kz_>F?KA<>cust8p>H-(!!YkiFU;?ulI`oDZE=&J1=?z*rib+vp-(P3Z-9&<5 z`-(479|Ea(0QjN}d?*sG%O_kPWyvI4Y+TPfj5FHUxkUlW59FP&zuk}R;HpA6E8^(e z2;h&9rUACD7kk&$)WymV?%srJ%9H%@xl78{6Er{Ro;^!UWDVI8Pq$Fn||mAfy`@ zcA>OnJz>N#sY>+bf`$g7{7t8x87j5kAl<(CsV`RzNED+N@IOwHKNTze{fk1)^dT*5 z2oJwoy$qP;xU#I$)W+Gcc5n)$!$1TtVU%vNU_jmff@f>cT~{ zmbE%W`dk|t$oe+dWHY)H&aRH zZFf0^)I$mk0Ta{0(Y##wrueqs%BMb^WF7+>xL$!I*|qG?V`Ic+Q+6nDA)Qj_?=dO~ znZJ0S4WTJ_SZZ+mo%QIs!6K(QQ(Q@ky3{8dcXypLYTY)%Qh;mwVO z&ttP+$cryL&C1&4y}29r?VS^eyHE_hy^?DP_fOO6-Oj;tY&2#>ZE>Y=3Es;yZ2@1g6WRcW271qlUH6u?eImZB(^=7=KyvuY*xq8_FkA6>7fV9b8W<1wCk=4wugahW z5`rCPk`w_ZVU?y+GAQ=Kel&45vr{%$*nVLXV(qMyuZxJ^+IUCi0FzEG+6-bqL%^_J zy7wu_)cyk(QV5Hj8zbabk;{JQ78<>lZR5yfC!A-R+?D1pe;OH$$J-BP&$}*3- z48~ie_6I*mcDCs%xnZJe<{z)tW5bXvPIVt$QPlh`QN_TwSEZI(QqVp=nBf>f?5a+8 zZvOh-!Y+?>3suq&9(Gz;^l>(4!ZBQF+kbJ72(s|5HX^k?RD@x^SNN5GBX-5gNV`{) z(=1)e+mt2G?b%>TV>6A~OL{poVY{7oF2xu4>gF!AxmG3DY;A00$o*-x z+-?6_y zpX>4rsor?vKoedv2G=rPb#%DdKlv-|D~AT#z@a`S9kS8PJ&r8XMe zO}KUl`ZW5mDbGFkM)c6_i#C~6_WlgbSLrqOyyfPd51Rsy&>nIFNzMHw-_27xia*-{@X0dB2?kkor9tt;Ie-Zc zTI8UR1)s#-Uk!anvPqH1_Q&Unf!R*9=R|UO36Iqv3&nYpUVV>+5H=Yl}UKAZLa zGR@nyGj`tP)8`bC(Vc@9tLT=u;ibd1k3Q#I33OuLgKf+)K_0<#I1_$rNK%lQ=InnU zJ+OXrch)iqtgZWgjXO0KP8#v2o-HvkS%c(nS;?ii5B6d;CEK&yy*v9DuAMbv6}y4_ zFPnP2db3A+?^I+>^{yQ6cEr_K25g>QW5C5S50u?BtKl8iV7clAKbg?WQxIBiINGI z)zKjK)sH{5CyBlkzH9$=t|%P@oeC9Z*lkeuAZJ;Ty*q#8q?(I-{ZWsQvX>#{Qz(sHz`7z2s@Kp z&JyhWa!t$ly!|eLuDlWA21rGPa6i~NwKPskMntD%7|d_1bmr$7(fIwVe zvzH(c((M%z$l(A3>w{Q4oYnjlF>n|@2?f0l_VW(M>*_h*fquxZ(;`YZ?G*Wmh$f*n zV01gUO_Q7Tv2VM_4R`xwT&*PrsyapnSiPfh9#>F)It6lW7WTu}eSDU4JwEFcD+tO+ z%bEI7b?<;{&Ry$gC0~4cH7iNh@*PRo*we9?tcRUV_oBZ=Y))bKT01Yb6^dFc(z!O; zzbd!n>8?X#Ull5;K~)Nyw1SxqHhhpXUC*rV2I2>F$=8nvC0^k~3dUB-%3c?LsZaa| zo_K72`9S;orK@0Rl2vy*+&dj!=5zRKg(J?XMs;%W6X8}n^ndXz+vv=!Ccfv$T z>6l|gRn6u19TN$^64>wE{a?%z5^#ifxqo69EKgRSOtBIWxb5uZBfIQ|FXu+<>aTKY zL^GSkf0rx?LppY?oHMcQQlO(u3ZSz`3Q=U26s6-;tzJEX(Rx{=HB%RZZkTE`OgjKy$_i+E~&uZ;pLf-g1Sq;aVpFb;-QD=d+5bOTeZ;1YRe@ zjX~{r#9Pj&DDRTnn-R3hMw%jHG@V)Uq&CaFC50L3SsH1&4jFI_GdoVr=~8YGW+MMRSJFy)eEbDtGJF*;~#| zp?auas%D4-+~T^d=ArSBZDMKd#^k-M-*^@BpJ!L05(NR7TIFw6Qze?8mWlWBxyVk7 z8a+Cs3B8tLBwTJN!8w>jldzYRs|aMb{li5$hFkPz4YMX|BoLOyS&ft5uG0nf;1*W- z_|{toiE&Q!>D=Iui%U9BD{rh>e5|pv*R7#OScQmb!>t1v+JinbF`DsQ<7I0F{R#M) zj5RZe+9ITTto2=+|pUu5qdNuo^6&jC6TI18nhzS*X!ZS z75VBN`Clvh-t-36nqHFL>wYj8>sBR& zWbU$?{b1J?MbN`g`6_$$B1Bc8!ARb+#iX6+SDdwLJWNfD4q+JoUZt3~*A~Qojx1q& zpI@{4;CqjvJ`&~cs`YU zZ|sW7VBQRCW8;hYeB+UB^*6k*>ByjL?ufhKDiv|py+PZ7sv5$(^4j=xZ>Nfv(ZvaP z$x8(M0s3XjL1M)sPI8GpQ+1+&7u*$@_RiM5>W10Qe(qt^S}T3>KTBq7uI)JO<-cz% za@Ig?bgy{&5CUGAkb(piWOrimi2Q$wNIYN1nM-0O_AR3^U(-~FoU7W#CnCP)VqeE0 z44s%@qnzeTMi)}Bv?*~QH*p|lcKT{K5I~<-A8Es|>E3e00{&wU2JisB+Npi{;ppW| z$qCK0(xnD%`dg(ICP&V2hX)UiOjy1g+YyPmvpyugZqF#h z^hJ2SuxpMFSj)G*o&y%l{i(c_R;ZGhQ(TGi(D+CGVH7y*3RJ<=Zm-oO^Pr=PveTMD zH9CuLR>+2WRqWI{+zZbw&1(n*89kwpYh*HWavW2T`MrItT~Ga)E~SZ9dvS@keZM0U zmh+JS+(2sF6U&XE{J7HG+__r2v-GbrL-Y!E+YP5|fhP;qhn}QF7OUI#vjcx!D-+MV z)~0pT>&8pLtQ-s1^@%@M9<|#kF2)<7dd6Tx2(7IPa~{Y6Zan>j50`?d29nsmWL}D_{uqaAA{z+$ z4D16CS0_2~nrO?moJhIanU2s&>v}RpC&~C-=U2c;xFE6g`ujT`eNOi*y+<*#VVTpy z<4$`bQvATK8iTzB;Y*==L(bm&JL;yh9qt`l#qSh`iU#^lA-G$0{pC&c)9CGozQ;bH zT=;X`z}?xIGk>OJ*_b0!#LdMU;&N~10(2N4@^fxISP+uF3pk6{k9HuijBFTRvVD`xg8Ma75~XT2K>m$!yU z2ycoSoziPEj_To?7M}C3pJNbYxb=7rJ4f%W8&@$0Ivx!f1eP6`9E;q?2NR}<&(o*P z{gjGiO!huPv7ixyRNUI{!ScTRzwUondlu=rXytOcQPQbn+)R==xYFB{3NbDoFzE~} zB6{raf2Rm&cHOyY&6Yp`tug|D^iw$#uzZ$ej$0}Qz6{yZDeOf+!?6xJ=QnS@=nT=F z1s_M8{DG1-TLQD?rQ2AJBCX`O(ye0RdqQQqonTDk69@lhFH-R>_`K9-o`;^rs;+!&T zN=siUq|@9=c5vTF^X+;^?J!FJEO<3r9=U9LI1}Crf!OP8_XxuX>yt{m;Ec{xnA$F1`5cQAx80PqwNcW)}9j$Z< zXC&JXrgx^^W2%jA6qz*emJC!&o_>`Y0-X3x=S)Ws^8R#6Ikpr{m<}+4`FeWNDg0_? z2*)DYx5Kb8$o*@tZlKFeP?s&0wOcqJDLvhM9dC_Obggqxegw$NX60t9mXBpCl>N1U zedoEd{TF06e~old=$*{dEuMwyhKgEg$<9!8Pj4q@~!yL;5s!3MpGVyjXw zsx2LF4v(+$m^^>S$FoN7`-^Wq31NS-0O~dA+$aKTw1%OY1)zCj4ujc6YD9x0c3ZKQJ=EF1zuW z9UR|sHlbURCgF;mnshU>C!oi&$G*LExV39>elfZS{(2Y&^}7BV zg1fSoRrH4lPLufL5Is(`Hj6}Kx9Ou1j}5)>-A-Ljbjq0#&l|KDWuw#JOD27%1JU13 zHL=#V2V)$CD)$UvKgc1mnKk^wvFUH)YM+4%fBu{SB>IHn-!p*hEW{-wgcLHJinqT{ zAIp_FP0eyyb)5`?L`Q%s^6VYMW6L|rhUqa;<<1|-9yClX%I+KxLCgakR&9zY#4Dlb2X2n6hWhxr*y-3urm~!ZnGUG z`~Set+1ef-5iFd}WjKyRyVdzdNqx8f+6qoadgAU*TM_w45LL^@u4)bAtvlRR6=689 zk#cfOflUSZRjl@})?_Q;;hM-)N$g>$(pd0=TCj~6>^C!OMQ zKE^ffIh5UuDD48Z-+#DuKb+b;8MzsFjB;Uc7)i>QyL#bT0&aYkFRnIr?fmgT<`r`# zS6$wpJW-`l&$!4UGLZp^mw20(&t=c-<<5)) zrx@k16}d0=oML1#_msZuA${4n#_f7T@xV%ir^~HFQTvdpC(bUT!r4U~$_4@f>#-ja zq0o8M6RlTi*r-x9Q$^i*M#Z2Y=m<D#aD2WA@L9U`oVuxFFP(N5X1ZT44E)zH(+Tl&3AXJ%dYKB zCzfbt%11B4d)@o-IYWGs9^c-5Jl^VxlFbCEg9NS5Ka1)wgYg`mvJ#19vS9v=u~ZjbBJDz+9uyC}XGfMaQNMy58W&XxQ+$@Z1b?e1mQ^sW zt6s#1jw(8_da-n<#)zbkNBrQ8IAdHtbY3&>46@*yI|S zcJGzzurzM*u?LXU^ZUP&2mVuklbwywv8frp{*1AL9?F_8?bd9o2bdK-AJ!+{4-xBgc*ZVG2} z8l8yug}NbnUZ)bA_Vr+?G>@;7e*Wm3M&>ZF%llIyQIRJ8Y;hMB58;amIz+{k!Oz<~ zoBtTFnzlNaWuP#>>NmF{VGuH3>-_y~p$OL%THH|lJvWTwlR9{bSo$T--&ldIcG$V- zcv15=z`v`hYJWC*fB)C<;W>~nA%?IXHj(yQR*R#4EYqF&QLp-9lhjzT;gEU;Ny2cK)`S=U*&o>Qs>T zc5J9ymNO#zHHuaA&NZ<~-gGx`vKH~W9(7yT*&}T4)d-rHU9L{ShygHHs~Eo`z3D}# z*+y7IxGXY;z9uUHb8a04J-LggHrC^#_vFpK+hQa-<487P1)B`^$3CVE`XWL+D~%SO3XH!{-gLZ7a`YS9o!(N(pe zWM#Qzd%Dn$i@EKUX>P<6nZV2SbRVdW;52t~>~xwi-HXV)2&TJMD=aQ!-ix7y^UMmK zKs6MK$Xl*@vyLp0>RCG8%MUSso5^e)j%=O1-ELUI7rXxO=7n?Ja~-X5>S4u}MRO2p1~@260P`>EtM^lTcJk3{ADs z42zsGK!@YG4=*EEZ8X5y68xLn!ZgF+gbHp3b9FE!{p@o=R+iHpUyR94(@w?gpf$mt zUu4NX4~zlC7Au${6V*H&sth5|L}CdyAXh2gG>`^%ls^AyMb659 z`|Xd~4Os#2$sPF}UkiXgf=p4w?`||N+gJB?Uyq9jx|%#FDiWvGeD(mRd}qomw)7}) zdsR-Y{Gf>H&`8feH6!&V`=jzAMic%H26D6EQAtUI=VH{CxEKYiCuna{Jr?W;eHAyy&9P;d1&jG3zs@VUo;trbHADWj4C>antLravYMQcf%YD8I?k8R>sizF zgnB+vW>(1rw@nqmdiT<&rG_St?%?5z{+FVaf2NGbr?IlK@(s}n3B4w%B6(4&(fz@a zE^vXMz_hrqxVaAxEhTw@ET`^y=d3pWtKVk{I>OzZb4e^DKKeTU%W@LpQnuP_MFH95 z*y5>@$H9(t=*}q3D2#fw2Zk~xI{La|QGfzg5p~ww+VAZhli=G%!K;(@RU5zb?s7eg ze}NRn;Sfto@v1E8D@W=#i;Kw3h#-((Sz?EQ_|p&wq>1<;C4GDghZ+3a^WCp618zud zkIu$k$8Wev53l_kt59huElqlfWMfN6NI3a7TRT-@gig0S5k0SNAQZ|MjMR<9#O_cT z7BeWbZ*RWgt4ps3e{}|PyrjvwDA2f3_@U(OZP9q`{6e_=Ig|63(7fnr-mf|=at4S> zSjmk=c;|D3Vv1IG3-nR?M5DA%qkbK1su?M?|F_kMC=nv7;e}ywLWm-IvkonT-fcSF zk>VYAP|bxuKVp(O2+sellaMj7&dnRp(63XSCHswKRIi41c*{e&q_&?+HZ%L+>aJ2#yTs@z+G=xf`frJF1@nLsB1^+7Y?M zRU179{?d=dj8@(UJ<2926&~v6?zHifbq*ME*nl}Y7TMO%i&PD)KAN9i)M$Z%l$1@3 zw+!+|ntZ((QRnFYI5><1URK1gYN}-s>SWyygxa;_f$Kv&QR$t7>8wu zgE>3jEJ#dDcmuP(em_`=}qzj8k5(`*pvr`?{Xj^LpOb{SV;KHYf<}vWLMwN(G&= zv&@58$QSz~S6&3WIjP7erN<`k0K*rT*`^4_FQgYrS%lj^KI@ZXszaLL zk*lpAf`Jhuioj?BimSN-7TDMb21s^niko1Yrd^T}FkfI*h|(cTBi!yLofL*E9{+H? zyLgNjYM0w`vY?^C*LI{59A)BKFN#>!JR8pGC9b!u^OGxm`|lq9yN6V*6<0)$&h09b z#v=~^&gRIGUiol(;gZ0*cxWE&s|RoUf_!Ghb?FmDkh&yWK7_Np0mDa94c^`Lf8!s43pl&`W&XZ5ypkblC+ z=RG`Wvr8#<9o1hj@`Rk6>i0>Q5ZT5ixrD`_mFe~&A~2{i7-qv%B=omDL3{>PHV^qi z9HY-CrI5E}&D0^mQn;r(8Olm&n;{aGDm|&iVdKN}=UICee}3@dtrK3`0<@N~+l@a& z%GLK5AhLhCJr&tkST#}g@+==$NZ~ODgZAx~iT#Z?uh;sMrI?s$$kZ)G+*IUo^)BSy znt$elrl&3h1gM0bf!brGVId5C4s7_ zuwZ(tVU_lvuEBnxL`PX#n-Gtd9Yl~R&uY*auRHcA2uCJW`-BY4c(xAF+S(dc_`~t1 zCS4s94F^Ia?FxCI9iI4wV72=<&spDAh_NZqKb=p%u;*POaEh?(-oA4Mq`;i%ka{Ps zyiDf6s#XOvg(Z{O$C1y(a^>$jrx)?!0)r1UipRzKYldiZvagDX6|XFSp38EB95O|rfWhhwo@62~gdK!R)6sgtP#^O3@uu|eQIMoQPwrKt z`@|D89n>V#+YN(^g5q9S?@H2gxOwA^>}*SV(ME<~WhD``30p=rHS#d_4D~KB+Uj2; zk2`pIfssO!}nTunaY1M*tW?hmu7BI+hZm8(ZfULg?9 z>4nyxo!>c}Ca;{{RT!I>x8yl84q6D-2C;olq40F0Is~5?HQ4?~7}Mc+==#VT9iR32 zH}>|P`laa`A?;~a-Ji9=;|xdK*tNOhaVxms1+R@z^s>czrzs!iy)pbg%rInmx(ED{ zy$O>L1exGBkOuk^1;aAt&ZCmPzszMbD zBeHs;rtCVjX}6}s;hvq27)IgP`YRL5d(>4nRy7a1QjS&Vo$;8%+es-=TLL1n%AVNt_3Pb|jZfP%jF^hSaNmWG7&G>} zKCqins77?pW+a^Z(`=u^xpU_lbh(3U8tY(Fd_&OS;_+sl_iopk3ww)DyYZi=cRmKb zPw^3W5MkGL)Na>%ei}NwAi;l#eFXFci3jQgC!e)fUrY=-{gf4hlPn2K;l$|oMVBwY zH+aRQ%D2|WarEfdg$ONeRE>u)h;3zN1Pfjyabd;We7*%qDXAVhpwCa*Zki?Ws~1z8 zDbG}IFS6f#(&=QuRS|5N&#U4DThu;>^pw8q%Ucogz*a=D_gbDENR8RCzH4ZW|L`lf zxF(bqM3HSz(@12f4+c2GU~X>c#9q5^cMpA*tdsXQkbhEiCg+UtWQP!<{{G2=B>HS_ zef-8CHX41>xAT7I;w)0k#=llm8HB?7&+F8a(5_xNc<-ou=n3+ZE?kEbuHi)&@)5nM z@n(ihU`;)=e6!t{r0tfZX5+iTHETgo?;%X%w&ngD8m;tL0OoDUs}4kZA;788E!zsB zqSn~P2ENO};9*#3YuEC=IwW`*w{9J;0g+Nj2#0FPqHhd50sEG*%W+x>JRlGX1g_?8 zrRX4VW|r4iK*I-PW)l5EQ3<8YUX!Xhm#lt~*@qM0sH^IUymOu*HfBiqDP#!Uh>gU` zMm)Bjc@3<8pb%*z@rj-4{XrGn{dfAW5Alr~t;BYa`6gN3%&~6Nm)*Z>6D$61 zw6*H(i=baR9N45q)sPD0KC9UnS)r)Q$V`ZX&Q|sA#7Z?8nJ)DYmM`qkRwbz7g8(%B z+q7RFc0n?>yV@UB5_(Inz+1c^YS6@T{7x59z#}$%%u5X9i~CF8(9s!T_eH2Mo_0(n66G=<5LjGKNO#O$tuCL)FX_ynOE) zKe))RLnbSRtC6Y~*IItEoKy%tq@vgD{)87%(DM2N0XMZY)sfEVIVkp7lH!8U!oJ{e zJj%;e0b0ET2L0;8Zarx5_V1jWO&h4Z7u1)GrugIWVY@`mxK2z=B=9~?sTyiy(K>nJ z;^GOI5O?i8Zs!!0^uZ%w$UbiOP9H~A44kdQkPjB{=CQnksVmGKckRLMl+&!nMvRv0 zz5FB>T0q@n$Hn}lbHH_{$028o)Ou6b5b`!Vo|o-Lxvxm5Sab6Wj!;?(n<3{rN*bI4 zl1NDnka+MbpQDuDTp8WQ;$Wmeh`!|2K(~nmZnse`M@A25F~FHFvX6cSAGJ?g5>2Jz zdV0)Nw1VU{Lf5ns>~Qs6ce1<2uSs2P zh_$02ar^`agA`NIQ8~`3qpi}*DHo59U((STTvR=J`ggzAddRRp5q!`O9RM=W<7?3| zUMBz>bJKS_($UdT#pg zac2-aBotUZ$Xz~;!Q}2(#Ckl*u|ciz-Yn8PJ1y87+ch21iC$(8Gp+<7%2q!n8J*S` zav>$$vVzrrY|b(q=(aS}zo!%80x}9{;C*;leR~jm6A}x&(`?StlJ9TcMcsUPnXmnNIcr@l z-f~5p$68ebMNmfGIiFLVk=N<>06z>bd25>U7Q{f7{0!pVUX&UlE1@$zw)#pALC;ca zKgw@eV*QY_yPIO8QSw_Pb-B$D!0*}gfpWUhpJpF?D_Xk#U?i~!U7p#Oql=Dxl#gtc zkpa;E7^Xn-w=^y7gR!w5bDnN)ia4Dlbd=}nwhoK?iXNesQ($r_lw8?-!a zSZ6%0WY$xhd0WdNNz2aNf51f3fy0W1FRBQm4w0E%>Zklx{gGWBPjG^D$(K9#dcC_%edt$z>B}z} zIVNq5AsMST?4jJL**qs9B-*a1tfb;)97e&vE}tO@p1{PHLq|>mh!LfwGq))A8Ol{` zy;l!4^OzUy@+0^3?%RvnpKaX=JS+Jz-ur|?;?D%Y>fAknx7+(P=>t-IFxa&}V3A-r zS#o6r->&LD#K*gJn^=ChB)u&+DJiL&ip6?QcQz*)lDm$XGV}5bM-+g`97#B^8Pjgv zIzX!#Jd8JC0u}A_O$!iY~t=kX|?vs2382@?v zks5jb_t8=JFLrPo4?cMHtufVergGwR_7MI2PCu$V=Iyq(3mm$OUsKTYCM%qlzmgPY zc%x>}67?6_?>8cn(FJfB9|x`KZ>Kjss?ce0SiM}pA+d+UwU66bNl1Vz)_YXN#OBNT zs7fgFq3$SGBKaawoyqAg_w+2Gby`TY$nOFi6omdZ$Guo=CyG z@wyF?syquN?xnhEp5l>;M1D$JJNu6ivSco1dPKQCS=A@d?!cY&bX51kQ84;P8!;y! zbnz%*YHILzi^EXx)AspI1ib&?h2aeS%_MPtsl(J@^ILJzr=x1!_b+6AzP}VBVQY1> z`d3bANmWYc_``7ZelJHe!Eg{(F;C9uHL--yII({(3f@b|eP?q!_Prx7pG2U>6?EnI z;o`r|1jD5aEb|Z$;RvgS)1Yk2)zx*=@?tK^pO-YS3>{cVHeNYmu~JQ`aO!q$hdfDQ zV&Z)F2UJv()P^1mW*fSCZ_8FKtkWMopF0E|Bt~CI7<>rrU7ntb*?l=+?oOy1W64)h zT)*Lp#L*(E;PIuO9(23L=om%F5gg^kGZ$4Ri;s z%0KUsy2+V(moz2$?!in!;70Drg0ICc1c@0mK4%Ti&f@6UkW!?yyy$+#)_V)>eA?8q zUG+sA+~F%aNVPp??i|gS+dtiIiVxK|VEYj64Ui0fO{@IxuB^fL+RHls)dE06wvXAd znR(w42JC)}U4(~atAc`x)wfeg5k(X2zIAZ_jrRt!GG9OTPenz6P8PdlGy9IR`qwMh zdy9*UYh=xxZtceR|BTO23{P6M!LCT3@uP|&Oh3J)w|_vAwvA+>vr}q_7A}1Sv&2g& zMLqYIaLN&c$o;5$KrAvEDd`a<=~3a}Gt*vmYrkW)C?eZzN<+6rb^4TO65m})mp6{{ zG1VQ==;~gtq$$&ba91{QQKa0K`P<|&So6j4p%;i5n%<{${000#a#hJMlB@^UnWh`u z_ynG*fR%BI1K2>7i(To7D>ne@RItdJK$-2-gh+W`+@DE8JK*h(#bzj9Hc$lf&UKc>eu5~zZH{z{X}$^L}cb7{TP zaee}4T}d%9xws5aFEqhK8u9im{UItHryd*Y#pdZ%lBkvm_ixM`D-fgpS~ZHVOKrXFms)FxEhmKAEZ!e0<2X<7%%mR^vG9`OkMv(x-i^z)22& z_4FiHEQ(YyKDK{s{2-#8#)!qpPSD!r))bYLPI1nkEVwJmvSafmP6coXL-PY6x~@ZW z^a(>uV$FkrQ@kjPtG%f->kT)pJ(oDF73vM^AldK72&ZG|Q-f^*~S8X#0 zQ{w-+kgN^m@UjMR_0!E+%_)_tst?FTxXu}L^<*U&{-c?xttF~;UUz89%x|{8@{<3o zZSX>3#z)$5P2aOnhjs?=HN_PbFKwy)sxDp{I)Vt==_V&9r$k&mfwb=YQHP|?wOHjUi()Bb}L0CNn7^HE$Ed~sM`k9;sZ7?s{HE+!_K znxQU?y5|xh)Q_-xqYs$n@}Z&@yPU`#B5GG*)U5NrI_zh%1~M{Vqw!UbYm<``Kc8Kf zYF8>Wm=^Nfm^%CPO z`)}bS?9j$oaMvDuaitTZv+!I-`Cx7naib5L$Z)2$H}Er7Jp%_kNSUAAmZ~q5!?`Y6 zHBU+cm}p24G5wp64KJ_5S)$!{`PjuN!NJAr3*}{ zaaMb}mUxb7hDn_EQmu0$=3zFj^MkJ%1on9y+craz{;la>I|1hZ_IWn9+&ssmAssun ztC_bpOIFVljKvGi=9%Iy_4vdq>+*fgR#@Tmvpe1)7>J;u^ihBS5j7&+zz$tB!q;s@{l4<)m25K&A_V-l?>Ye9WdQsDilCmaqN0+_*o4M&AHQu` z&*W_luFr@4>Zdra_KPW}E-bzn;&q)0<{+uFEGS}DcAR4|@x<9m12EY=)8X;xn>p!3 zKn9lxAz<~qUd;M}GXH4}IHe}q0JymlO3pz9IB2!lO2S+{R~P{kh=n)I!8O1DobH`D zqj|Cz;oEcu6o3Ygk%~P6+%OnT>$aujmMl&S$EW9K*UkeFu>Ngj2#Zy0r=4o*lANLi z`jOP%?E*7C9kYciy`<u8YwHLaj7^R60KDUjv!Jg%sjPMj5~|ha0&7?}~ly*n>CA;}jhI z1OEu_Pa7mEm4fTR)Go?o9t0Tbz6biJRNSm@V}92cXL)~$Jfqop)?CE#AMNNXMd^d3 z6%>2oWQI2QxAHcgao2tgEd-9I`CrJ@-?^~Ck^rAV?WGtpZbxy6XxG-VIGDi&;tjA# zNFP>D7R=y+XAV9QX=1N0droq`d^J0US-)kkE)n}uSDiY;PmOg_Ja^8$dLoF*-j%@1 ze?h)%9dXNoWIZEEX_-D1PU zJdL}kETSOx4P}k0YsGy#z0g_NokBjTwkEZtgd>zVsSfA z(NT2))rz3^#~Z(;IGLF1O=1Tmw2r6*bMx;PNX#=CA%6CzG4V}znw_qvR~>Y@gvDGNGU z0yl*xnP7w@aHv~oVa-Ad!~lw!r#f8ToV`of@3Z$5rXl3Z=P=|rHi8zEA(PE*XUC0? zXV*|>t5}&m-_Uiv)#}IFkh9^O&5UPk;N50k3DSAWVPoe>4DKQRbC}q`+-ArIaY8j; zMaTYIFx}(y2)?5x=?%Pz{qvTx?ufU-@8vM-6wVX@M^2I}1C6!QwAD+`p_WgZM_!@tS>#CFr4H zPvlX#kTw9Y$52Xn^d8qV^ecZW5t^=CDmi{RNbt8gAh9bu;8_EEY!A`p!7>C@L5Np9 z2j(m-LkT`U+=oan%BQ<*Pzn1qsdWC+$GM>+xuHQ$P%sEtTONl#?SeF^)h2+wUi5q@ zD}9A)>$?I~|Hb9E*oI*lb&X_nA+M0VF?%VP>t#=6H*MTjJcrhDAT!~_7|iQ~UH4M2 z+qHgKNLX z-@j&2^*)Q)ZDGs#@?w$$d`v$#8tGOkKp#)v=~o;5Z3aW47thRE9Z*Z6tpqiG)h=T_ zf>U&YP(%js-1ALR0D+ClIW4Mj=&P1J-y)kqmXqj}tOOAbUZGrP6YweI^-KY+35X`J z&!_DTD7wsns%4h++I=%xdOAdQh$*xxK*f%)k&>EO2PP*p9a*8@3^pEa;h$0nadC|GVc7qT<9T}Ooa+(?Lex#16g3Gg_V0Zx&TPfji;N6fAZ4pQQYL4!4 zF)-ebj%PK_C=1QE-usp6U9WrhPRq!EZN_C$QMt1xL^*C#;wb=3UiG6!ck7JNJu^xa zFT4n3Hec0t?Y*i4t@85{TUD+Ask4AS`4&n14a;V~eVrGNT`#n>v1?@kSaUkP2q1HH z$~+dl0oBrU74*=e|Aqt1*Fbz0kZ0qI`&A>0=r_W2lZ@2lpGB6SXUMMpIOz2ut)BeLBEPFPra%X|NFn|f>=nK|?wqwhVhX7cA zl>R+Cn#?P8rcJOXCntm2u{`sPXsuapat%&POFUj0bD1dFrVo;eGmM%I2+4Z}()>?@ z6uAooI53pJo6CdyQ1={4!N_C9#0>8jsGaz|lUQx85e_eGeVtE$Xm(_?cFUC_cRee< z-t90w+wtEA|8i`?bp84PX`Yz4iI=<{TgcR5{WeM7MN5q%OKP4WuCx^C)z2%ZIUGig z>@Lvo8Vp4J+mal1y{WjQDvd#1siuP0I)j!QepgoZ+*bE&ID9%3PJjnhIozBfEAscD z7S#;x!0DEIL0^zhH|mgtiDg>a&(BLTJT+=B+<5ii)7iQ!K}%~l@c4oDdy9*U^9?jC z;F`L$93@{|T(nAR<1;R9x6#|Q{f+PG0L`c2*3IgHI8(4owt3Y+I`9;PKaZ}gH)uB( zuj;82qN0c)eSHZ$$-();%TU-;Qv(hDEXt%gNCJF~q7S>l9+0Mgi+s(CAV#X>x^_av zue^?VA@*$GdGk(H3NrO0Qijy3nwCy(;P69`Z;s6*;< zw+~4}vCpdXGf2K08X}^iy1To1Pih}+C&bhgr#((_;@(Hbl6`C?t z1H@%t?78A%3T~RXSxQgC{&!e#;Qo&fEfWm+t<)uBu=*1L&J-;6QBUSk=hLyW%r=jx zoQpad7NDARv1{rTd?f^-I@nfcSvx;Jj}rnmLs$OCPbH#gXY7fXBkub~`ulCo zfEeo|uGxf}&yCqK6^GrM_3m2X?&)ba7%WXAL{mm4bcqZ=zSzp(+7QTv!lc&$bMEJU zZi3b}>6eupSt=vrsZWd^WNupVWJ6bk8o0p%MJ_q}L{2UBP3TOyUy_GQL&LPJhMxDqTE8hE~(! z)h!Cmez-&wF+tW{4>RPy7YRL&V00~DHu{5qp ze#ED)RKbEx*6nZgYHC0vG5~BMtV<;8SdGNRa1uN!e=^yhdxNiMuAuNB2VdE9P}{X# z>97`RQ?pnbab_#mQ2vR~_V=x2-pJ5K{A%ScDX!l7oQU65D>;+2sH;y7jB|Q>t=CEZ zp*|%;t{!BF7p7_HFU zpMEU&2Y)kjLV0|{kQox=49Andh81s(IPobA#g%SeRh;YaP){5MIn2Fa)Bfco&>KL} zm*hD_0oQOer}~TwA*gfoSK2!tsHJK*MW++Xn18AApd3%9 z($^yZn(5`yH zCtiC!qGElabpb;jjG3}aYzBaZ1q?#yvep(T5z0jDJ;EO|75JKAN7X~k6%`dHIM{W< z(Dka{jt71%{sWv`9v?OPB7QXWWC1c{JXMp!4WKNyC=jRDZZy<>c{OZ7RSEB#QI9SV z?n1oI3!MZSgt9(7-Q`+oXCP})Fgo}~C)E359umPwoTIDqKZ2Xr-r1T3A;V8ObQj>) zhPOAbqBgQoMoj8L8SvxVk@o4Gj*g?v)b#@OJ}6pe+Ov1OE8B~@=3D)Hdi)&xA@v!J z;nKJBtqca#gjN(8d`;(TzPdgtNBoys4ZebiGR~>%N$yrn)}hr~3i#lzkAw}j7C{uC z*6>HrpyVi`yW|C;ZZ%493s6UXW7okCB>xQ#DEwI4Mnzo+hYw9ZN~)ZnuyG6w)X+fF z;m8KGHK8kzJ^T*-ue=rosLtqaXCCJnWq&#N3dn2lL)s8g2O{n<{=%~w9j^v>u^0Lb zapgu?*6pDvz&!%Nz)$c^>SoF3`boFuFl~Uc*G(iw{#Z!*M8sxrxqXWP* zP*8y)y&teo{raxQIf|DrflPX?W2m{lHD-z$wrRsD6+f1hCk18;_}Ktj75ZxwF+xe`oD3 z?=7_^cmx5S8a{AL*mB>!q!meKps{Pqwn7evV`*h&7&jnD)-`34Vwa9~b#;C1zl+%q zZtmr;Z+^Irtf22kni2CuL;rJ}BJtHGiNZsH8-WIHv@_s7H>;A2m-zxVxK-@t3 z33w@OerC4Zjw`>oDwr2H)b{87VOB2Rp%Ua2+8P8+q`1jBnc09sX-GvYRKW#mCr(U# zAK(x3{BN@V0(+L825M_*9R#fyQWr6PeriC*+-@nxueM7HGYl*ID=ODQzL|Q7@SGV6 zge~4g7m_A-&?X#&SV}Mz*cYhdMg!6;xC~+idzp9biA1HQ`uaaQS(2;84M~^_5(CZ> zOY7j?wX5bKg-~1uFL&eY&af>JqwnyM`SZe zYyWvp+R&A6@_nA4aGOdr6GQ_DFSAzQ@X7=XOQE34r|aF1cD?@Q*gBPbb{ zmgXd497D*HDO&6sM2(#^SPaTEWX zySrU)spmLn^>q}TBu05m;*Ijwy2?iP8D~Ie#Q?=&;<40J?G$_Smc*GswUb~I4p8~L zHiE@0)2QI9kWl0;sht6f=K#xWGq~{l%^(#ksMYqDptJyuYt|nBFNg3$?^JY>bI-s~0VW!g(?V=m|{ zJc}RW0044KC-_n&1r_i>EwJMxs78k)OhkwEY6+kz~<)1ltX-^D*IAh(- zqo~1UTnIrW*|jNQZm2DC zGp>~NF`zm2KC?eD-NyFl*JcQHJ3rkjn$6Wbk0^?h(v}btV+YcL!1MvT18I8Ad}Hv; zS;sYr>{oy#KLl~2+|Y*)RfwgcUB$8@;DF9jdSz(f0}UCO!$=9SEq5X=`+epDJ!v>? z!w_iNII-%3m&`zY=71$o1%lGws^uzgA*#MfD)0o;Rk*o0A|m^Z4n|&E1U#7SG0>|4 za(F^QX{N2Mtq(y5tkX@i;AE6H_MqQRg(+S%Gau1GG{cjuVM`DnXCa^D8#2Pfkfl00 zIs*CKvLXNoa62jM-Mtv?GiLx=;7*&-Ha&*;EcnwHqr1-rw?p@E6eLkO)eOB5!TO26f7`n9))|xo%~)^YbVcbh%n# zJ&;xQ2TrB~G-!UnuC1-jz1o>%HU+qEeNm^A_yyOuW_usT#>Y=`%uyH_rRwQufL)UZ zS)Ef2OBC6d+Ym#nr1*XAewLNo^O8L1KNPZB3E7pL&ir3BQs{jnuL{k_Kf$Ss4a1#W zZop+uw%h_x&k>YpfZOY~bgpqYOzBlq`y6<9lZLD~3zx~{+v;wz&$SUtB`?T|d5~WF z4P`p)Itt(`2@yls6^oKqOyL7k2hpT;TW*0c;&%1Gnx89Lv08^!rRHDNkEZrspp%e>U1*j|th&7y8QU9@ zf8^hM1ity-53L7mlc8;2jV|d#*GU=yyrx;Z^mgP{Zu;wmp@W-*0=qYi=ezIwJwK?BPsue@b3Fx95+;*{ubJBXle50k40*(7ip?7?(sj4q?q zvYUmKZnCpHgecr}H!t~JdsCAO)Q?S#jr#V^Ckw!i=%^^}G*-YC6T3ZRYpz@n8GyY2NU?sX9|as;H5I=58_U`|`^)mty%(rUO9Pq{I9C#{QDO zQeNwOJdn-B>dWTE9}B&N&4?)KVrZrpHoAhDGsQ9cU0u90*`<&-6c_()G}rzk3~<59 zfIkWbJEnyOZC8NRfZexaquZaJEI^bd$H+{pKQB6#rU@aD44gKk41M}^>fftd#=?aI z8tMJ!%5wt}AN%LjjEszU&(-IihV4M;>pU#gFl+&WaiW~*1gBC}?(5R@d`)|!NP8P` ztm!$j%h9jxh#nYFfX?@*{|X#$nYHD`)?Ww~PzyeQCt6*NGWnE$q)eUxs7?h1!w{!g zU$c06z99%lTVW^=wq;X~bXw92JvOa%BE@y*Y;i^Rag_=XX-uVfckRnlfpDU@r0XcE z;$8nyzW^tX*FK@)&QSV*16$=FCoZ&9{O%p7ULHVz8_mzhV=rs0bUVh6`%&AWEpmCz zCQ>(g}6Ca3UJl1)!+| zx*J~h%I9#gyhdw#&rU7W=g`$|z^S~mA+)ms1JK|y!*&0?%yj}nVYBEB@d?#zik4Mr zO-))SkfIpc?E|;J5d+E5fg-~C(B_tyNwKY$`pEs=MJ=;?#N>l=CSz<+wR-O$T2GD=!r;P=wBePmjk+7%lpeEM76ND~$*MpP84{Eeu?bxRuWzNFcXmKP4F<|fSnd<-%M5Vjhh@p~vt4X(gj_7f zzhZd3&gDi7ql#0R4b3qQD=+q0s$z3X(jy8K+B?e!&^Bhef!|)gvA42g^*Bx}RW1td zfPY(Cs`vfXI==z}3J(t@oz-SwOyre~Yai2+X)N>7#o~&8b{09&6oELTa!v%gtgYzx z*O|5pdKq>(ZyOV<281sa`6WY1}as+ zITq%DN*l8m^JUd&^D%K5-=_z6t@`a5M?ZIM;{PJH`0t4VxVKPDF3%QP_*;K!7n8Qu zEc9b-)b~q3Kj@#@;*p^5=f7|DgT6l!`#&%CeTt#KxC7f_|Df+evcGH=+cv)+dG_NL zF+V2i|96WLQ0=rfC0j?vJhh(;G<-g_<+GtRaO0=Vzk$Bi{`lX}H2j#8ty%bC5Szf} zhe7=C5St6)hkN|)7k-3{t%>+y5I+p!2Uz%S13%E?e<$LHd;H-Zf2@Wds{zcw4_ENR e75qP4!LQZIyGN{31Vhjq8D2Ai73$sj^M3$~o!s#N literal 121661 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�EK=e}1=oaJc2v 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

}xPM7bPM&2O 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 %JlWuSMmPbCTsq^fmvBk%{W%D5uW`i|cLK*> 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