From 71da09cd80cdd20f51273f7e382d1e70a6aca547 Mon Sep 17 00:00:00 2001 From: KakaPatria Date: Wed, 11 Feb 2026 23:08:57 +0700 Subject: [PATCH] Initial commit: SPK Jurusan Kuliah sistem dengan dashboard, analisis Naive Bayes, chatbot AI, profile management, dan history tracking --- .editorconfig | 18 + .env.example | 58 + .gitattributes | 11 + .gitignore | 18 + .phpunit.result.cache | 1 + README.md | 66 + app/Console/Kernel.php | 27 + app/Exceptions/Handler.php | 48 + .../Auth/AuthenticatedSessionController.php | 48 + .../Auth/ConfirmablePasswordController.php | 41 + ...mailVerificationNotificationController.php | 25 + .../EmailVerificationPromptController.php | 22 + .../Auth/NewPasswordController.php | 61 + .../Controllers/Auth/PasswordController.php | 29 + .../Auth/PasswordResetLinkController.php | 44 + .../Auth/RegisteredUserController.php | 59 + .../Auth/VerifyEmailController.php | 28 + app/Http/Controllers/ChatbotController.php | 122 + app/Http/Controllers/Controller.php | 12 + app/Http/Controllers/ProfileController.php | 71 + .../Controllers/RekomendasiController.php | 245 + app/Http/Kernel.php | 67 + app/Http/Middleware/Authenticate.php | 17 + app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 30 + app/Http/Middleware/TrimStrings.php | 19 + app/Http/Middleware/TrustHosts.php | 20 + app/Http/Middleware/TrustProxies.php | 28 + app/Http/Middleware/ValidateSignature.php | 22 + app/Http/Middleware/VerifyCsrfToken.php | 17 + app/Http/Requests/Auth/LoginRequest.php | 85 + app/Http/Requests/ProfileUpdateRequest.php | 26 + app/Models/ChatHistory.php | 24 + app/Models/PolijeMajor.php | 14 + app/Models/Recommendation.php | 37 + app/Models/Student.php | 12 + app/Models/User.php | 64 + app/Providers/AppServiceProvider.php | 24 + app/Providers/AuthServiceProvider.php | 28 + app/Providers/BroadcastServiceProvider.php | 19 + app/Providers/EventServiceProvider.php | 38 + app/Providers/RouteServiceProvider.php | 48 + app/Services/GeminiService.php | 258 + app/View/Components/AppLayout.php | 17 + app/View/Components/GuestLayout.php | 17 + artisan | 53 + bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + composer.json | 69 + composer.lock | 8272 +++++++++++++++++ config/app.php | 215 + config/auth.php | 115 + config/broadcasting.php | 70 + config/cache.php | 110 + config/cors.php | 34 + config/database.php | 151 + config/filesystems.php | 76 + config/hashing.php | 52 + config/logging.php | 122 + config/mail.php | 124 + config/polije.php | 107 + config/queue.php | 93 + config/sanctum.php | 67 + config/services.php | 38 + config/session.php | 201 + config/view.php | 36 + database/.gitignore | 1 + database/factories/UserFactory.php | 40 + .../2014_10_12_000000_create_users_table.php | 32 + ...000_create_password_reset_tokens_table.php | 28 + ..._08_19_000000_create_failed_jobs_table.php | 32 + ...01_create_personal_access_tokens_table.php | 33 + ...6_01_28_143443_add_role_to_users_table.php | 29 + ...026_01_28_143445_create_students_table.php | 31 + ...1_28_143446_create_polije_majors_table.php | 30 + ...28_143448_create_recommendations_table.php | 46 + ..._28_143453_create_chat_histories_table.php | 30 + ...02_06_000000_merge_students_into_users.php | 62 + ...0000_add_student_fields_to_users_table.php | 45 + database/seeders/DatabaseSeeder.php | 22 + database/seeders/PolijeMajorSeeder.php | 35 + package-lock.json | 2034 ++++ package.json | 18 + phpunit.xml | 31 + postcss.config.js | 6 + public/.htaccess | 21 + public/favicon.ico | 0 public/images/SMA BIMA.jpg | Bin 0 -> 308517 bytes public/index.php | 55 + public/robots.txt | 2 + resources/css/app.css | 3 + resources/js/app.js | 7 + resources/js/bootstrap.js | 32 + .../views/auth/confirm-password.blade.php | 27 + .../views/auth/forgot-password.blade.php | 25 + resources/views/auth/login-new.blade.php | 262 + resources/views/auth/login.blade.php | 331 + resources/views/auth/register.blade.php | 387 + resources/views/auth/reset-password.blade.php | 39 + resources/views/auth/verify-email.blade.php | 31 + resources/views/chatbot/index.blade.php | 258 + .../components/application-logo.blade.php | 3 + .../components/auth-session-status.blade.php | 7 + .../views/components/danger-button.blade.php | 3 + .../views/components/dropdown-link.blade.php | 1 + resources/views/components/dropdown.blade.php | 43 + .../views/components/input-error.blade.php | 9 + .../views/components/input-label.blade.php | 5 + resources/views/components/modal.blade.php | 78 + resources/views/components/nav-link.blade.php | 11 + .../views/components/primary-button.blade.php | 3 + .../components/responsive-nav-link.blade.php | 11 + .../components/secondary-button.blade.php | 3 + .../views/components/text-input.blade.php | 3 + resources/views/dashboard.blade.php | 264 + resources/views/history/chat.blade.php | 109 + resources/views/history/rekomendasi.blade.php | 118 + resources/views/layouts/app.blade.php | 36 + resources/views/layouts/guest.blade.php | 30 + resources/views/layouts/navigation.blade.php | 100 + resources/views/profile/edit.blade.php | 258 + .../partials/delete-user-form.blade.php | 55 + .../partials/update-password-form.blade.php | 48 + .../update-profile-information-form.blade.php | 93 + resources/views/rekomendasi/hasil.blade.php | 273 + resources/views/rekomendasi/input.blade.php | 184 + resources/views/welcome.blade.php | 302 + routes/api.php | 19 + routes/auth.php | 59 + routes/channels.php | 18 + routes/console.php | 19 + routes/web.php | 42 + storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tailwind.config.js | 21 + tests/CreatesApplication.php | 21 + tests/Feature/Auth/AuthenticationTest.php | 55 + tests/Feature/Auth/EmailVerificationTest.php | 65 + .../Feature/Auth/PasswordConfirmationTest.php | 44 + tests/Feature/Auth/PasswordResetTest.php | 73 + tests/Feature/Auth/PasswordUpdateTest.php | 51 + tests/Feature/Auth/RegistrationTest.php | 32 + tests/Feature/ExampleTest.php | 19 + tests/Feature/ProfileTest.php | 99 + tests/Feature/RekomendasiTest.php | 50 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 16 + tests/Unit/RekomendasiAlgorithmTest.php | 130 + vite.config.js | 14 + 157 files changed, 19080 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .phpunit.result.cache create mode 100644 README.md create mode 100644 app/Console/Kernel.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Http/Controllers/ChatbotController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/ProfileController.php create mode 100644 app/Http/Controllers/RekomendasiController.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustHosts.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/ValidateSignature.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Http/Requests/Auth/LoginRequest.php create mode 100644 app/Http/Requests/ProfileUpdateRequest.php create mode 100644 app/Models/ChatHistory.php create mode 100644 app/Models/PolijeMajor.php create mode 100644 app/Models/Recommendation.php create mode 100644 app/Models/Student.php create mode 100644 app/Models/User.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/Services/GeminiService.php create mode 100644 app/View/Components/AppLayout.php create mode 100644 app/View/Components/GuestLayout.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/cors.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/hashing.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/polije.php create mode 100644 config/queue.php create mode 100644 config/sanctum.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/view.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php create mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 database/migrations/2026_01_28_143443_add_role_to_users_table.php create mode 100644 database/migrations/2026_01_28_143445_create_students_table.php create mode 100644 database/migrations/2026_01_28_143446_create_polije_majors_table.php create mode 100644 database/migrations/2026_01_28_143448_create_recommendations_table.php create mode 100644 database/migrations/2026_01_28_143453_create_chat_histories_table.php create mode 100644 database/migrations/2026_02_06_000000_merge_students_into_users.php create mode 100644 database/migrations/2026_02_11_000000_add_student_fields_to_users_table.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 database/seeders/PolijeMajorSeeder.php create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 postcss.config.js create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/images/SMA BIMA.jpg create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/views/auth/confirm-password.blade.php create mode 100644 resources/views/auth/forgot-password.blade.php create mode 100644 resources/views/auth/login-new.blade.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/reset-password.blade.php create mode 100644 resources/views/auth/verify-email.blade.php create mode 100644 resources/views/chatbot/index.blade.php create mode 100644 resources/views/components/application-logo.blade.php create mode 100644 resources/views/components/auth-session-status.blade.php create mode 100644 resources/views/components/danger-button.blade.php create mode 100644 resources/views/components/dropdown-link.blade.php create mode 100644 resources/views/components/dropdown.blade.php create mode 100644 resources/views/components/input-error.blade.php create mode 100644 resources/views/components/input-label.blade.php create mode 100644 resources/views/components/modal.blade.php create mode 100644 resources/views/components/nav-link.blade.php create mode 100644 resources/views/components/primary-button.blade.php create mode 100644 resources/views/components/responsive-nav-link.blade.php create mode 100644 resources/views/components/secondary-button.blade.php create mode 100644 resources/views/components/text-input.blade.php create mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/history/chat.blade.php create mode 100644 resources/views/history/rekomendasi.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/guest.blade.php create mode 100644 resources/views/layouts/navigation.blade.php create mode 100644 resources/views/profile/edit.blade.php create mode 100644 resources/views/profile/partials/delete-user-form.blade.php create mode 100644 resources/views/profile/partials/update-password-form.blade.php create mode 100644 resources/views/profile/partials/update-profile-information-form.blade.php create mode 100644 resources/views/rekomendasi/hasil.blade.php create mode 100644 resources/views/rekomendasi/input.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/api.php create mode 100644 routes/auth.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tailwind.config.js create mode 100644 tests/CreatesApplication.php create mode 100644 tests/Feature/Auth/AuthenticationTest.php create mode 100644 tests/Feature/Auth/EmailVerificationTest.php create mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 tests/Feature/Auth/PasswordResetTest.php create mode 100644 tests/Feature/Auth/PasswordUpdateTest.php create mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/ProfileTest.php create mode 100644 tests/Feature/RekomendasiTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 tests/Unit/RekomendasiAlgorithmTest.php create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..8f0de65 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[docker-compose.yml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..478972c --- /dev/null +++ b/.env.example @@ -0,0 +1,58 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e6bbd7a --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea +/.vscode diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000..022401b --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +{"version":2,"defects":[],"times":{"Tests\\Feature\\RekomendasiTest::test_high_math_and_coding_prefers_teknologi_informasi":17.81,"Tests\\Feature\\RekomendasiTest::test_high_language_prefers_bahasa_komunikasi":0.186}} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3ed385a --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. + +You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). + +### Premium Partners + +- **[Vehikl](https://vehikl.com/)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Cubet Techno Labs](https://cubettech.com)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[Many](https://www.many.co.uk)** +- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** +- **[DevSquad](https://devsquad.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[OP.GG](https://op.gg)** +- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** +- **[Lendio](https://lendio.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..e6b9960 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,27 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + */ + protected function commands(): void + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..b1c262c --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,48 @@ +, \Psr\Log\LogLevel::*> + */ + protected $levels = [ + // + ]; + + /** + * A list of the exception types that are not reported. + * + * @var array> + */ + protected $dontReport = [ + // + ]; + + /** + * A list of the inputs that are never flashed to the session on validation exceptions. + * + * @var array + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + /** + * Register the exception handling callbacks for the application. + */ + public function register(): void + { + $this->reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..494a106 --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,48 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(RouteServiceProvider::HOME); + } + + /** + * Destroy an authenticated session. + */ + public function destroy(Request $request): RedirectResponse + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..523ddda --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,41 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(RouteServiceProvider::HOME); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..96ba772 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,25 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..186eb97 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,22 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(RouteServiceProvider::HOME) + : view('auth.verify-email'); + } +} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..f1e2814 --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,61 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..6916409 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,29 @@ +validateWithBag('updatePassword', [ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', Password::defaults(), 'confirmed'], + ]); + + $request->user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + return back()->with('status', 'password-updated'); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..ce813a6 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,44 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..a95caf4 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,59 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + 'nis' => ['required', 'string', 'unique:users,nis'], + 'kelompok_asal' => ['required', 'in:IPA,IPS'], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'role' => 'siswa', // Set default sebagai siswa + ]); + + // Simpan info siswa di tabel users (kolom baru) + $user->update([ + 'nis' => $request->nis, + 'kelompok_asal' => $request->kelompok_asal, + ]); + + event(new Registered($user)); + Auth::login($user); + + return redirect(RouteServiceProvider::HOME); + } +} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..ea87940 --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,28 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } +} diff --git a/app/Http/Controllers/ChatbotController.php b/app/Http/Controllers/ChatbotController.php new file mode 100644 index 0000000..9c814bb --- /dev/null +++ b/app/Http/Controllers/ChatbotController.php @@ -0,0 +1,122 @@ +middleware('auth'); + $this->geminiService = $geminiService; + } + + public function index() + { + $user = Auth::user(); + $recentRecommendation = session('recomendation_data', null); + + // Jika session kosong, ambil rekomendasi terakhir dari database + if (!$recentRecommendation) { + $lastRec = \App\Models\Recommendation::where('user_id', $user->id) + ->latest() + ->first(); + + if ($lastRec) { + $hasil = json_decode($lastRec->hasil_rekomendasi, true); + $topJurusan = $hasil[0] ?? null; + $recentRecommendation = [ + 'jurusan' => $topJurusan['jurusan'] ?? null, + 'skor' => $topJurusan['skor'] ?? null, + 'nilai' => $lastRec->nilai_akademik, + 'minat' => $lastRec->minat, + 'pref_studi' => $lastRec->preferensi_studi, + ]; + } + } + + return view('chatbot.index', [ + 'recommendation' => $recentRecommendation + ]); + } + + public function send(Request $request) + { + $request->validate([ + 'message' => 'required|string|max:1000', + 'chatHistory' => 'nullable|array|max:20', + 'chatHistory.*.role' => 'required|string|in:user,ai', + 'chatHistory.*.text' => 'required|string|max:2000', + ]); + + $message = $request->input('message'); + $chatHistory = $request->input('chatHistory', []); + $user = Auth::user(); + $recentRecommendation = session('recomendation_data', []); + + // Jika session kosong, ambil rekomendasi terakhir dari database + if (empty($recentRecommendation)) { + $lastRec = \App\Models\Recommendation::where('user_id', $user->id) + ->latest() + ->first(); + + if ($lastRec) { + $hasil = json_decode($lastRec->hasil_rekomendasi, true); + $topJurusan = $hasil[0] ?? null; + $recentRecommendation = [ + 'jurusan' => $topJurusan['jurusan'] ?? null, + 'skor' => $topJurusan['skor'] ?? null, + 'nilai' => $lastRec->nilai_akademik, + 'minat' => $lastRec->minat, + 'pref_studi' => $lastRec->preferensi_studi, + ]; + } + } + + // Siapkan context untuk Gemini + $context = [ + 'recommendation' => $recentRecommendation['jurusan'] ?? null, + 'score' => isset($recentRecommendation['skor']) ? number_format($recentRecommendation['skor'] * 100, 1) : null, + 'profile' => [ + 'nama' => $user->name, + 'kelompok' => $user->kelompok_asal, + 'nilai' => $recentRecommendation['nilai'] ?? null, + 'minat' => $recentRecommendation['minat'] ?? null, + 'pref' => $recentRecommendation['pref_studi'] ?? null, + ] + ]; + + // Panggil Gemini API dengan conversation history + $response = $this->geminiService->chat($message, $context, $chatHistory); + + // Simpan chat ke database + if ($user && isset($response['message'])) { + ChatHistory::create([ + 'user_id' => $user->id, + 'prompt' => $message, + 'response' => $response['message'], + ]); + } + + return response()->json($response); + } + + /** + * Tampilkan history chat + */ + public function historyChat() + { + $user = Auth::user(); + $chatHistories = ChatHistory::where('user_id', $user->id) + ->orderBy('created_at', 'desc') + ->get(); + + return view('history.chat', compact('chatHistories')); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..77ec359 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,12 @@ + $request->user(), + ]); + } + + /** + * Update the user's profile information. + */ + public function update(ProfileUpdateRequest $request): RedirectResponse + { + $validated = $request->validated(); + + // Handle file upload + if ($request->hasFile('foto')) { + // Simpan file foto + $file = $request->file('foto'); + $filename = time() . '_' . $file->getClientOriginalName(); + $file->storeAs('public/profile', $filename); + $validated['foto'] = 'storage/profile/' . $filename; + } + + $request->user()->fill($validated); + + if ($request->user()->isDirty('email')) { + $request->user()->email_verified_at = null; + } + + $request->user()->save(); + + return Redirect::route('profile.edit')->with('status', 'profile-updated'); + } + + /** + * Delete the user's account. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validateWithBag('userDeletion', [ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } +} diff --git a/app/Http/Controllers/RekomendasiController.php b/app/Http/Controllers/RekomendasiController.php new file mode 100644 index 0000000..71b1bf2 --- /dev/null +++ b/app/Http/Controllers/RekomendasiController.php @@ -0,0 +1,245 @@ + $user->id, + 'nis' => $user->nis ?? null, + 'kelompok_asal' => $user->kelompok_asal ?? null, + 'foto' => $user->foto ?? null, + ]; + } + + return view('rekomendasi.input', compact('student')); + } + + public function proses(Request $request) + { + // --- 1. PREPROCESSING NILAI (Kriteria 1: Akademik) --- + $scores = $request->only(['mtk', 'fisika', 'kimia', 'biologi', 'ekonomi', 'geografi', 'sosiologi', 'sejarah']); + $validScores = array_filter($scores); + $average = count($validScores) > 0 ? array_sum($validScores) / count($validScores) : 0; + + // Kategorisasi Nilai berdasarkan config + $nilaiCategories = config('polije.nilai_category', []); + $katNilai = 'Rendah'; + foreach ($nilaiCategories as $category => $range) { + if ($average >= $range['min'] && $average <= $range['max']) { + $katNilai = $category; + break; + } + } + + // --- 2. ANALISIS MINAT (Kriteria 2) --- + $minatRaw = strtolower($request->minat ?? ''); + $minatMapped = $this->mapMinat($minatRaw); + + // --- 3. ANALISIS CITA-CITA (Kriteria 3) --- + $citaRaw = strtolower($request->cita_cita ?? ''); + $citaMapped = $this->mapCitaCita($citaRaw); + + // --- 4. PEMETAAN PREFERENSI STUDI (Kriteria 4) --- + $prefStudi = $request->pref_studi ?? 'Blended'; + $prefMapping = config('polije.pref_mapping', []); + + // --- 5. ANALISIS PRESTASI (Kriteria 5) --- + $prestasiRaw = strtolower($request->prestasi ?? ''); + $prestasiScore = $this->scorePrestasiScore($prestasiRaw); + + // --- 6. PERHITUNGAN NAIVE BAYES BERBOBOT --- + $cfg = config('polije.criteria', []); + $logPosteriors = []; + $epsilon = 1e-9; + + foreach ($cfg as $jurusan => $c) { + // Prior: uniform + $prior = 1 / count($cfg); + $logPrior = log(max($prior, $epsilon)); + + // Weights dan match probabilities + $weights = $c['weights'] ?? ['nilai' => 0.40, 'minat' => 0.35, 'pref' => 0.15, 'prestasi' => 0.05, 'cita_cita' => 0.05]; + $matchProb = $c['match_prob'] ?? ['nilai' => 0.80, 'minat' => 0.90, 'pref' => 0.85, 'prestasi' => 0.65, 'cita_cita' => 0.85]; + + // 1. Likelihood untuk Nilai + $p_nilai = ($katNilai == ($c['nilai'] ?? 'Sedang')) ? $matchProb['nilai'] : max(1 - $matchProb['nilai'], $epsilon); + + // 2. Likelihood untuk Minat + $p_minat = ($minatMapped == ($c['minat'] ?? 'Umum')) ? $matchProb['minat'] : max(1 - $matchProb['minat'], $epsilon); + + // 3. Likelihood untuk Preferensi Studi + $prefList = $c['pref'] ?? ['Praktik Langsung', 'DuDi', 'Project Based']; + if (!is_array($prefList)) { + $prefList = [$prefList]; + } + $p_pref = in_array($prefStudi, $prefList) ? $matchProb['pref'] : max(1 - $matchProb['pref'], $epsilon); + + // 4. Likelihood untuk Cita-cita + $citaCitaKeywords = $c['cita_cita_keywords'] ?? []; + $matchCitaCita = false; + if (!empty($citaCitaKeywords)) { + foreach ($citaCitaKeywords as $keyword) { + if (stripos($citaMapped, $keyword) !== false) { + $matchCitaCita = true; + break; + } + } + } + $p_cita_cita = $matchCitaCita ? $matchProb['cita_cita'] : max(1 - $matchProb['cita_cita'], $epsilon); + + // 5. Likelihood untuk Prestasi (boost jika ada prestasi) + $p_prestasi = ($prestasiScore > 0.5) ? $matchProb['prestasi'] : max(1 - $matchProb['prestasi'], $epsilon); + + // Hitung log-likelihood dengan bobot + $logLikelihood = + ($weights['nilai'] ?? 0) * log(max($p_nilai, $epsilon)) + + ($weights['minat'] ?? 0) * log(max($p_minat, $epsilon)) + + ($weights['pref'] ?? 0) * log(max($p_pref, $epsilon)) + + ($weights['cita_cita'] ?? 0) * log(max($p_cita_cita, $epsilon)) + + ($weights['prestasi'] ?? 0) * log(max($p_prestasi, $epsilon)); + + $logPosteriors[$jurusan] = $logPrior + $logLikelihood; + } + + // Convert log-posteriors ke probabilitas (softmax) + $maxLog = max($logPosteriors); + $expVals = []; + $sumExp = 0.0; + foreach ($logPosteriors as $jurusan => $lv) { + $expVals[$jurusan] = exp($lv - $maxLog); + $sumExp += $expVals[$jurusan]; + } + + $hasilAkhir = []; + foreach ($expVals as $jurusan => $val) { + $prob = $val / max($sumExp, $epsilon); + $hasilAkhir[] = [ + 'jurusan' => $jurusan, + 'skor' => round($prob, 4), + 'kecocokan_nilai' => $katNilai, + 'kecocokan_minat' => $minatMapped, + 'kecocokan_pref' => $prefStudi, + ]; + } + + // Sort hasil berdasarkan skor (tertinggi dulu) + usort($hasilAkhir, fn($a, $b) => $b['skor'] <=> $a['skor']); + + // Simpan data rekomendasi ke database + $user = Auth::user(); + if ($user) { + Recommendation::create([ + 'user_id' => $user->id, + 'mtk' => $request->mtk ?? null, + 'fisika' => $request->fisika ?? null, + 'kimia' => $request->kimia ?? null, + 'biologi' => $request->biologi ?? null, + 'ekonomi' => $request->ekonomi ?? null, + 'geografi' => $request->geografi ?? null, + 'sosiologi' => $request->sosiologi ?? null, + 'sejarah' => $request->sejarah ?? null, + 'minat' => $request->minat ?? null, + 'preferensi_studi' => $request->pref_studi ?? null, + 'cita_cita' => $request->cita_cita ?? null, + 'prestasi' => $request->prestasi ?? null, + 'hasil_rekomendasi' => $hasilAkhir, + ]); + } + + // Simpan data rekomendasi ke session untuk chatbot + if (count($hasilAkhir) > 0) { + $topResult = $hasilAkhir[0]; + session([ + 'recomendation_data' => [ + 'jurusan' => $topResult['jurusan'], + 'skor' => $topResult['skor'], + 'nilai' => $katNilai, + 'minat' => $minatMapped, + 'pref_studi' => $prefStudi, + ] + ]); + } + + return view('rekomendasi.hasil', compact('hasilAkhir', 'katNilai', 'minatMapped', 'citaMapped', 'prefStudi', 'prestasiScore')); + } + + /** + * Pemetaan minat ke kategori yang dipahami sistem + */ + private function mapMinat(string $minatRaw): string + { + if (preg_match('/(coding|komputer|laptop|web|aplikasi|logika|programming|software|development)/', $minatRaw)) { + return 'Logika & Komputer'; + } elseif (preg_match('/(tanam|kebun|sawah|hewan|ternak|alam|pertanian|agri)/', $minatRaw)) { + return 'Alam & Tanaman'; + } elseif (preg_match('/(obat|sakit|rawat|medis|gizi|sehat|kesehatan|perawat|dokter)/', $minatRaw)) { + return 'Pelayanan & Kesehatan'; + } elseif (preg_match('/(bisnis|uang|jual|kantor|hitung|ekonomi|dagang|usaha|entrepreneur)/', $minatRaw)) { + return 'Manajemen & Bisnis'; + } elseif (preg_match('/(mesin|bengkel|listrik|las|robot|motor|teknik|otomasi|elektronik)/', $minatRaw)) { + return 'Mesin & Listrik'; + } + return 'Umum'; + } + + /** + * Pemetaan cita-cita ke kategori jurusan + */ + private function mapCitaCita(string $citaRaw): string + { + // Return raw mapped text untuk matching dengan keywords + return $citaRaw; + } + + /** + * Scoring prestasi berdasarkan keyword + */ + private function scorePrestasiScore(string $prestasiRaw): float + { + if (empty($prestasiRaw)) { + return 0.0; + } + + $prestasiScore = 0.0; + + // Berbagai tingkat prestasi + if (preg_match('/(juara|menang|champion|first|gold|emas|terbaik)/', $prestasiRaw)) { + $prestasiScore = 0.90; // Prestasi tinggi + } elseif (preg_match('/(finalis|semifinal|peringkat|ranking|podium|medali|silver|silver|perak)/', $prestasiRaw)) { + $prestasiScore = 0.75; // Prestasi sedang + } elseif (preg_match('/(sertifikat|training|kursus|workshop|peserta|mengikuti)/', $prestasiRaw)) { + $prestasiScore = 0.60; // Prestasi cukup + } else { + $prestasiScore = 0.30; // Prestasi minimal + } + + return $prestasiScore; + } + + /** + * Tampilkan history rekomendasi + */ + public function historyRekomendasi() + { + $user = Auth::user(); + $recommendations = Recommendation::where('user_id', $user->id) + ->orderBy('created_at', 'desc') + ->get(); + + return view('history.rekomendasi', compact('recommendations')); + } +} \ No newline at end of file diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..c34cdcf --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,67 @@ + + */ + protected $middleware = [ + // \App\Http\Middleware\TrustHosts::class, + \App\Http\Middleware\TrustProxies::class, + \Illuminate\Http\Middleware\HandleCors::class, + \App\Http\Middleware\PreventRequestsDuringMaintenance::class, + \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + ]; + + /** + * The application's route middleware groups. + * + * @var array> + */ + protected $middlewareGroups = [ + 'web' => [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's middleware aliases. + * + * Aliases may be used to conveniently assign middleware to routes and groups. + * + * @var array + */ + protected $middlewareAliases = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \App\Http\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..d4ef644 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,17 @@ +expectsJson() ? null : route('login'); + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..afc78c4 --- /dev/null +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,30 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..c9c58bd --- /dev/null +++ b/app/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3391630 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var int + */ + protected $headers = + Request::HEADER_X_FORWARDED_FOR | + Request::HEADER_X_FORWARDED_HOST | + Request::HEADER_X_FORWARDED_PORT | + Request::HEADER_X_FORWARDED_PROTO | + Request::HEADER_X_FORWARDED_AWS_ELB; +} diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..2b92f65 --- /dev/null +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,85 @@ + + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate(): void + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + */ + public function throttleKey(): string + { + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + } +} diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php new file mode 100644 index 0000000..49a633f --- /dev/null +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -0,0 +1,26 @@ + + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)], + 'nis' => ['nullable', 'string', 'max:20'], + 'kelompok_asal' => ['nullable', 'string', 'in:IPA,IPS'], + 'foto' => ['nullable', 'image', 'mimes:jpeg,png,jpg,gif', 'max:2048'], + ]; + } +} diff --git a/app/Models/ChatHistory.php b/app/Models/ChatHistory.php new file mode 100644 index 0000000..d0c96ec --- /dev/null +++ b/app/Models/ChatHistory.php @@ -0,0 +1,24 @@ +belongsTo(User::class); + } +} diff --git a/app/Models/PolijeMajor.php b/app/Models/PolijeMajor.php new file mode 100644 index 0000000..8d229cf --- /dev/null +++ b/app/Models/PolijeMajor.php @@ -0,0 +1,14 @@ + 'array', + ]; + + public function user() + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/Student.php b/app/Models/Student.php new file mode 100644 index 0000000..96d1279 --- /dev/null +++ b/app/Models/Student.php @@ -0,0 +1,12 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + 'role', + 'nis', + 'kelompok_asal', + 'foto', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; + + /** + * Relationship dengan recommendations + */ + public function recommendations() + { + return $this->hasMany(Recommendation::class); + } + + /** + * Relationship dengan chat histories + */ + public function chatHistories() + { + return $this->hasMany(ChatHistory::class); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + */ + public function boot(): void + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..2be04f5 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,19 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + */ + public function boot(): void + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + */ + public function shouldDiscoverEvents(): bool + { + return false; + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..f859850 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,48 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + */ + protected function configureRateLimiting(): void + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); + } +} diff --git a/app/Services/GeminiService.php b/app/Services/GeminiService.php new file mode 100644 index 0000000..9b1f26a --- /dev/null +++ b/app/Services/GeminiService.php @@ -0,0 +1,258 @@ +apiKey = config('services.gemini.api_key'); + } + + public function chat($message, $context = [], $chatHistory = []) + { + try { + if (empty($this->apiKey)) { + return [ + 'success' => false, + 'message' => 'API Key tidak tersedia. Silakan konfigurasi GEMINI_API_KEY di .env' + ]; + } + + $systemPrompt = $this->buildSystemPrompt($context); + + // Build multi-turn conversation for Gemini + $contents = []; + + // First message: system prompt + first user message (or standalone if no history) + if (!empty($chatHistory)) { + // Inject system prompt into first user turn + $firstUserMsg = $systemPrompt . "\n\n(Percakapan dimulai)\n\nSiswa: " . ($chatHistory[0]['text'] ?? 'Halo'); + $contents[] = ['role' => 'user', 'parts' => [['text' => $firstUserMsg]]]; + + // Add rest of history as alternating user/model turns + for ($i = 1; $i < count($chatHistory); $i++) { + $role = $chatHistory[$i]['role'] === 'user' ? 'user' : 'model'; + $contents[] = ['role' => $role, 'parts' => [['text' => $chatHistory[$i]['text']]]]; + } + + // Add current message + $contents[] = ['role' => 'user', 'parts' => [['text' => $message]]]; + } else { + // No history, single message with system prompt + $fullMessage = $systemPrompt . "\n\nSiswa: " . $message; + $contents[] = ['role' => 'user', 'parts' => [['text' => $fullMessage]]]; + } + + $payload = [ + 'contents' => $contents, + 'generationConfig' => [ + 'temperature' => 0.8, + 'maxOutputTokens' => 4096, + 'topP' => 0.95, + 'topK' => 40 + ] + ]; + + // Try each model until one works + foreach ($this->models as $model) { + $url = $this->baseUrl . $model . ':generateContent?key=' . $this->apiKey; + + Log::info('Trying Gemini model', ['model' => $model]); + + $response = Http::timeout(30) + ->withHeaders(['Content-Type' => 'application/json']) + ->post($url, $payload); + + if ($response->successful()) { + $data = $response->json(); + + if (isset($data['candidates'][0]['content']['parts'][0]['text'])) { + Log::info('Gemini API success', ['model' => $model]); + return [ + 'success' => true, + 'message' => $data['candidates'][0]['content']['parts'][0]['text'] + ]; + } + } + + // If 429 (rate limit) or 404 (model not found), try next model + $status = $response->status(); + Log::warning("Gemini model {$model} failed", ['status' => $status]); + + if ($status === 429) { + // Wait briefly before trying next model + sleep(1); + } + } + + // All models failed + Log::error('All Gemini models failed, using fallback'); + return $this->getFallbackResponse($message, $context); + + } catch (\Exception $e) { + Log::error('Gemini Service Exception', [ + 'error' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine() + ]); + + return $this->getFallbackResponse($message, $context); + } + } + + protected function getFallbackResponse($message, $context = []) + { + $jurusan = $context['recommendation'] ?? null; + $score = isset($context['score']) ? floatval($context['score']) : 0; + $hasRecommendation = !empty($jurusan); + + // Keyword-based responses + $messageLower = strtolower($message); + + if (strpos($messageLower, 'halo') !== false || strpos($messageLower, 'hai') !== false || strpos($messageLower, 'hallo') !== false || strpos($messageLower, 'hi') !== false) { + $greeting = "Halo! 👋 Saya konselor BK virtual SMA Bima Ambulu. Saya siap membantu kamu soal pemilihan jurusan kuliah. "; + if ($hasRecommendation) { + $greeting .= "Saya lihat kamu sudah dapat rekomendasi jurusan \"{$jurusan}\" dengan skor {$score}%. Mau bahas lebih lanjut tentang jurusan itu, atau ada pertanyaan lain?"; + } else { + $greeting .= "Kamu bisa tanya apa saja tentang jurusan kuliah, prospek karir, atau tips memilih jurusan yang tepat. Yuk, mulai!"; + } + return ['success' => true, 'message' => $greeting]; + } + + if (strpos($messageLower, 'kenapa') !== false || strpos($messageLower, 'mengapa') !== false) { + if ($hasRecommendation) { + return [ + 'success' => true, + 'message' => "Jurusan \"{$jurusan}\" direkomendasikan berdasarkan analisis profil akademik, minat, dan preferensi belajar kamu. Skor kesesuaian {$score}% menunjukkan tingkat kecocokan yang baik antara profil kamu dengan jurusan tersebut. Sistem menghitung ini dari 5 faktor: nilai akademik, minat, preferensi pembelajaran, prestasi, dan cita-cita." + ]; + } + return [ + 'success' => true, + 'message' => "Untuk menjawab pertanyaan \"mengapa\", sebaiknya kamu lakukan analisis rekomendasi dulu ya. Dari situ, sistem akan mencocokkan profil kamu dengan 9 jurusan yang tersedia. Kamu bisa klik menu 'Analisis Rekomendasi' di dashboard." + ]; + } + + if (strpos($messageLower, 'prospek') !== false || strpos($messageLower, 'karir') !== false || strpos($messageLower, 'kerja') !== false) { + if ($hasRecommendation) { + return [ + 'success' => true, + 'message' => "Jurusan \"{$jurusan}\" memiliki prospek karir yang baik. Lulusan dari jurusan ini bisa bekerja di berbagai sektor industri yang relevan. Setiap jurusan di perguruan tinggi menyiapkan lulusannya dengan keahlian praktis yang dibutuhkan dunia kerja. Mau tau lebih detail tentang posisi kerja spesifik?" + ]; + } + return [ + 'success' => true, + 'message' => "Setiap jurusan punya prospek karir yang berbeda-beda. Misalnya, Teknologi Informasi bisa jadi programmer/developer, Kesehatan bisa jadi tenaga medis, Bisnis bisa jadi manajer/entrepreneur. Jurusan mana yang kamu tertarik? Saya bisa jelaskan lebih detail." + ]; + } + + if (strpos($messageLower, 'bingung') !== false || strpos($messageLower, 'galau') !== false || strpos($messageLower, 'tidak tahu') !== false || strpos($messageLower, 'gak tau') !== false) { + return [ + 'success' => true, + 'message' => "Wajar kok kalau masih bingung! 😊 Coba jawab pertanyaan ini: 1) Mata pelajaran apa yang paling kamu suka? 2) Kegiatan apa yang bikin kamu semangat? 3) Cita-cita kamu apa? Dari situ kita bisa mulai mencari jurusan yang cocok. Atau kamu juga bisa coba fitur 'Analisis Rekomendasi' di dashboard untuk mendapat rekomendasi otomatis." + ]; + } + + if (strpos($messageLower, 'skill') !== false || strpos($messageLower, 'kemampuan') !== false) { + if ($hasRecommendation) { + return [ + 'success' => true, + 'message' => "Untuk sukses di jurusan \"{$jurusan}\", kamu perlu mengembangkan berbagai skill teknis dan non-teknis. Skill teknis tergantung bidang jurusannya, sedangkan skill umum seperti komunikasi, kerja tim, dan problem solving selalu dibutuhkan di semua jurusan. Mau tau skill spesifik yang perlu disiapkan?" + ]; + } + return [ + 'success' => true, + 'message' => "Setiap jurusan butuh skill yang berbeda. Misalnya: TI butuh logika & coding, Kesehatan butuh ketelitian & empati, Bisnis butuh komunikasi & manajemen. Yang pasti, semua jurusan butuh kemampuan belajar mandiri dan kerja tim. Jurusan mana yang ingin kamu ketahui skill-nya?" + ]; + } + + if (strpos($messageLower, 'ipa') !== false || strpos($messageLower, 'ips') !== false) { + return [ + 'success' => true, + 'message' => "Kelompok IPA dan IPS bukan batasan mutlak untuk memilih jurusan kuliah ya. Banyak jurusan yang bisa dimasuki oleh keduanya. Yang penting adalah minat dan kemampuan kamu. Anak IPA bisa masuk bisnis, anak IPS bisa masuk TI. Lakukan analisis rekomendasi untuk melihat jurusan mana yang paling cocok berdasarkan profil lengkap kamu." + ]; + } + + // Default response + if ($hasRecommendation) { + return [ + 'success' => true, + 'message' => "Saya konselor BK virtual SMA Bima Ambulu. Berdasarkan analisis, jurusan \"{$jurusan}\" cocok untuk kamu dengan skor {$score}%. Kamu bisa tanya tentang: prospek karir, skill yang dibutuhkan, perbandingan jurusan, atau apapun tentang persiapan kuliah. Saya siap membantu! 😊" + ]; + } + + return [ + 'success' => true, + 'message' => "Saya konselor BK virtual SMA Bima Ambulu, siap membantu kamu memilih jurusan kuliah! 😊 Kamu bisa bertanya tentang: jurusan apa yang cocok, prospek karir, skill yang dibutuhkan, atau tips memilih jurusan. Untuk rekomendasi personal, coba fitur 'Analisis Rekomendasi' di dashboard ya." + ]; + } + + protected function buildSystemPrompt($context) + { + $prompt = "Kamu adalah Pak/Bu Konselor BK (Bimbingan Konseling) di SMA Bima Ambulu. "; + $prompt .= "Kamu adalah guru BK yang HIDUP — bukan robot. "; + $prompt .= "Kamu MENGARAHKAN siswa, memberikan ANALISIS LOGIS, dan MEYAKINKAN mereka dengan alasan yang masuk akal. "; + $prompt .= "Kamu juga bisa menjawab pertanyaan umum di luar topik jurusan (seperti pengetahuan umum, tokoh, dll) secara singkat, lalu arahkan kembali ke topik konseling. "; + $prompt .= "Gunakan bahasa Indonesia santai, hangat, tapi tetap berbobot — seperti guru BK favorit yang ngobrol dengan muridnya. "; + + // Tambahkan konteks rekomendasi jika ada + if (!empty($context['recommendation'])) { + $prompt .= "\n\nDATA REKOMENDASI SISWA (dari sistem analisis): "; + $prompt .= "Jurusan paling cocok: {$context['recommendation']}. "; + if (!empty($context['score'])) { + $prompt .= "Skor kesesuaian: {$context['score']}%. "; + } + } + + // Tambahkan profil siswa jika ada + if (!empty($context['profile'])) { + $prompt .= "\nDATA PROFIL SISWA: "; + if (!empty($context['profile']['nama'])) { + $prompt .= "Nama: {$context['profile']['nama']}. "; + } + if (!empty($context['profile']['kelompok'])) { + $prompt .= "Kelompok asal: {$context['profile']['kelompok']}. "; + } + if (!empty($context['profile']['nilai'])) { + $prompt .= "Nilai akademik: {$context['profile']['nilai']}. "; + } + if (!empty($context['profile']['minat'])) { + $prompt .= "Minat: {$context['profile']['minat']}. "; + } + if (!empty($context['profile']['pref'])) { + $prompt .= "Preferensi pembelajaran: {$context['profile']['pref']}. "; + } + } + + $jurusan = config('polije.criteria', []); + if (!empty($jurusan)) { + $namaJurusan = array_keys($jurusan); + $prompt .= "\n\n9 Jurusan tersedia: " . implode(', ', $namaJurusan) . ". "; + } + + $prompt .= "\n\nCara kamu merespons:"; + $prompt .= "\n1. INGAT seluruh percakapan sebelumnya. Jangan tanya ulang hal yang sudah dijawab siswa."; + $prompt .= "\n2. Kalau siswa sudah bilang minat/kemampuan/kesukaan, LANGSUNG analisis dan arahkan ke jurusan yang cocok dengan ALASAN LOGIS (misal: 'kamu suka logika → TI cocok karena...')"; + $prompt .= "\n3. Berikan REKOMENDASI TEGAS, bukan cuma daftar pilihan. Contoh: 'Menurut Bapak, kamu paling cocok ke Teknologi Informasi. Alasannya: ...'"; + $prompt .= "\n4. Dukung rekomendasi dengan fakta: prospek karir, gaji, mata kuliah, skill."; + $prompt .= "\n5. Kalau siswa ragu, YAKINKAN dengan argumen kuat — jangan cuma bilang 'terserah kamu'."; + $prompt .= "\n6. Jawab RINGKAS (2-3 paragraf). Jangan terlalu panjang kecuali diminta detail."; + $prompt .= "\n7. Boleh menjawab pertanyaan di luar topik jurusan secara singkat, lalu kembalikan ke konseling."; + $prompt .= "\n8. JANGAN awali setiap respons dengan 'Halo' atau salam — langsung ke inti jawaban (kecuali percakapan baru dimulai)."; + + return $prompt; + } +} diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php new file mode 100644 index 0000000..de0d46f --- /dev/null +++ b/app/View/Components/AppLayout.php @@ -0,0 +1,17 @@ +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..a5a7dab --- /dev/null +++ b/composer.json @@ -0,0 +1,69 @@ +{ + "name": "laravel/laravel", + "type": "project", + "description": "The Laravel Framework.", + "keywords": ["framework", "laravel"], + "license": "MIT", + "require": { + "php": "^8.1", + "guzzlehttp/guzzle": "^7.2", + "laravel/framework": "^10.0", + "laravel/sanctum": "^3.2", + "laravel/tinker": "^2.8" + }, + "require-dev": { + "fakerphp/faker": "^1.9.1", + "laravel/breeze": "^1.29", + "laravel/pint": "^1.0", + "laravel/sail": "^1.18", + "mockery/mockery": "^1.4.4", + "nunomaduro/collision": "^7.0", + "phpunit/phpunit": "^10.0", + "spatie/laravel-ignition": "^2.0" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-update-cmd": [ + "@php artisan vendor:publish --tag=laravel-assets --ansi --force" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + }, + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..f07862b --- /dev/null +++ b/composer.lock @@ -0,0 +1,8272 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "85309d4524da1baae35ac151622b248f", + "packages": [ + { + "name": "brick/math", + "version": "0.12.3", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.12.3" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2025-02-28T13:11:00+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "doctrine/dbal": "<3.7.0 || >=4.0.0" + }, + "require-dev": { + "doctrine/dbal": "^3.7.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-12-11T17:09:12+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.10.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2025-08-23T22:36:01+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "481557b130ef3790cf82b713667b43030dc9c957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:34:08+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "21dc724a0583619cd1652f673303492272778051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2025-08-23T21:21:41+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2025-08-22T14:27:06+00:00" + }, + { + "name": "laravel/framework", + "version": "v10.50.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "fc41c8ceb4d4a55b23d4030ef4ed86383e4b2bc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/fc41c8ceb4d4a55b23d4030ef4ed86383e4b2bc3", + "reference": "fc41c8ceb4d4a55b23d4030ef4ed86383e4b2bc3", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.9", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.67", + "nunomaduro/termwind": "^1.13", + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.4", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", + "phpunit/phpunit": ">=11.0.0", + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^3.5.1", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^8.23.4", + "pda/pheanstalk": "^4.0", + "phpstan/phpstan": "~1.11.11", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "predis/predis": "Required to use the predis connector (^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2025-11-28T18:20:42+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.25", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.25" + }, + "time": "2024-08-12T22:06:33+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/console": "^9.21|^10.0", + "illuminate/contracts": "^9.21|^10.0", + "illuminate/database": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "php": "^8.0.2" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^7.28.2|^8.8.3", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sanctum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.", + "keywords": [ + "auth", + "laravel", + "sanctum" + ], + "support": { + "issues": "https://github.com/laravel/sanctum/issues", + "source": "https://github.com/laravel/sanctum" + }, + "time": "2023-12-19T18:44:48+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2024-11-14T18:34:49+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.11.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/3d34b97c9a1747a81a3fde90482c092bd8b66468", + "reference": "3d34b97c9a1747a81a3fde90482c092bd8b66468", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.11.1|^0.12.0", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.11.0" + }, + "time": "2025-12-19T19:16:45+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2025-11-26T21:48:24+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.31.0" + }, + "time": "2026-01-23T15:38:47+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.73.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-01-08T20:10:23+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/tester": "^2.5.2", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.3" + }, + "time": "2025-10-30T22:57:59+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.1", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72", + "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.5", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.1" + }, + "time": "2025-12-22T12:14:32+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.4.15" + }, + "require-dev": { + "illuminate/console": "^10.48.24", + "illuminate/support": "^10.48.24", + "laravel/pint": "^1.18.2", + "pestphp/pest": "^2.36.0", + "pestphp/pest-plugin-mock": "2.0.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^6.4.15", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2024-11-21T10:36:35+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.18", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ddff0ac01beddc251786fe70367cd8bbdb258196", + "reference": "ddff0ac01beddc251786fe70367cd8bbdb258196", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.18" + }, + "time": "2025-12-17T14:35:46+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8429c78ca35a09f27565311b98101e2826affde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.2" + }, + "time": "2025-12-14T04:43:48+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "reference": "0bc2199c6c1f05276b05956f1ddc63f6d7eb5fc3", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-13T08:45:59+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-30T13:39:42+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8c18400784fcb014dc73c8d5601a9576af7f8ad4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8c18400784fcb014dc73c8d5601a9576af7f8ad4", + "reference": "8c18400784fcb014dc73c8d5601a9576af7f8ad4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-19T19:28:19+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T11:45:34+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.4.33", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "24965ca011dac87431729640feef8bcf7b5523e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/24965ca011dac87431729640feef8bcf7b5523e0", + "reference": "24965ca011dac87431729640feef8bcf7b5523e0", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.4.33" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-26T13:03:48+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.4.33", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "f1a490cc9d595ba7ebe684220e625d1e472ad278" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f1a490cc9d595ba7ebe684220e625d1e472ad278", + "reference": "f1a490cc9d595ba7ebe684220e625d1e472ad278", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.4.33" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-27T15:04:55+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.4.33", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "73fa5c999d7f741ca544a97d3c791cc97890ae4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/73fa5c999d7f741ca544a97d3c791cc97890ae4d", + "reference": "73fa5c999d7f741ca544a97d3c791cc97890ae4d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.4.33" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-28T10:02:13+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.31", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "8835f93333474780fda1b987cae37e33c3e026ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8835f93333474780fda1b987cae37e33c3e026ca", + "reference": "8835f93333474780fda1b987cae37e33c3e026ca", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.4.31" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-12T07:33:25+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "7409686879ca36c09fc970a5fa8ff6e93504dba4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/7409686879ca36c09fc970a5fa8ff6e93504dba4", + "reference": "7409686879ca36c09fc970a5fa8ff6e93504dba4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-04T11:53:14+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-10T14:38:51+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.33", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/c46e854e79b52d07666e43924a20cb6dc546644e", + "reference": "c46e854e79b52d07666e43924a20cb6dc546644e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.4.33" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-23T16:02:12+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "0dc6253e864e71b486e8ba4970a56ab849106ebe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/0dc6253e864e71b486e8ba4970a56ab849106ebe", + "reference": "0dc6253e864e71b486e8ba4970a56ab849106ebe", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T08:31:19+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:30:57+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T10:54:30+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", + "reference": "d6cc8e2fdd484f2f41d25938b0e8e3915de3cfbc", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-12T19:15:33+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T13:41:35+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "6b973c385f00341b246f697d82dc01a09107acdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/6b973c385f00341b246f697d82dc01a09107acdd", + "reference": "6b973c385f00341b246f697d82dc01a09107acdd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T15:07:59+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.4.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "131fc9915e0343052af5ed5040401b481ca192aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/131fc9915e0343052af5ed5040401b481ca192aa", + "reference": "131fc9915e0343052af5ed5040401b481ca192aa", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.4.32" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-01T13:34:06+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2024-11-21T01:49:47+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/breeze", + "version": "v1.29.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/22c53b84b7fff91b01a318d71a10dfc251e92849", + "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849", + "shasum": "" + }, + "require": { + "illuminate/console": "^10.17", + "illuminate/filesystem": "^10.17", + "illuminate/support": "^10.17", + "illuminate/validation": "^10.17", + "php": "^8.1.0" + }, + "require-dev": { + "orchestra/testbench": "^8.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2024-03-04T14:35:21+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/c67b4195b75491e4dfc6b00b1c78b68d86f54c90", + "reference": "c67b4195b75491e4dfc6b00b1c78b68d86f54c90", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.92.4", + "illuminate/view": "^12.44.0", + "larastan/larastan": "^3.8.1", + "laravel-zero/framework": "^12.0.4", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.3.3", + "pestphp/pest": "^3.8.4" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "dev", + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-01-05T16:49:17+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.52.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/64ac7d8abb2dbcf2b76e61289451bae79066b0b3", + "reference": "64ac7d8abb2dbcf2b76e61289451bae79066b0b3", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0", + "symfony/yaml": "^6.0|^7.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", + "phpstan/phpstan": "^2.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2026-01-01T02:46:03+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v7.12.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/995245421d3d7593a6960822063bdba4f5d7cf1a", + "reference": "995245421d3d7593a6960822063bdba4f5d7cf1a", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.17.0", + "nunomaduro/termwind": "^1.17.0", + "php": "^8.1.0", + "symfony/console": "^6.4.17" + }, + "conflict": { + "laravel/framework": ">=11.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.4.8", + "laravel/framework": "^10.48.29", + "laravel/pint": "^1.21.2", + "laravel/sail": "^1.41.0", + "laravel/sanctum": "^3.3.3", + "laravel/tinker": "^2.10.1", + "nunomaduro/larastan": "^2.10.0", + "orchestra/testbench-core": "^8.35.0", + "pestphp/pest": "^2.36.0", + "phpunit/phpunit": "^10.5.36", + "sebastian/environment": "^6.1.0", + "spatie/laravel-ignition": "^2.9.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2025-03-14T22:35:49+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.63", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33198268dad71e926626b618f3ec3966661e4d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", + "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:48:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:25:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "0735b90f4da94969541dac1da743446e276defa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:09:11+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-10T07:50:56+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/8c0f16a59ae35ec8c62d85c3c17585158f430110", + "reference": "8c0f16a59ae35ec8c62d85c3c17585158f430110", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-json": "*", + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2025-08-26T08:22:30+00:00" + }, + { + "name": "spatie/error-solutions", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/spatie/error-solutions.git", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "illuminate/broadcasting": "^10.0|^11.0|^12.0", + "illuminate/cache": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0", + "livewire/livewire": "^2.11|^3.5.20", + "openai-php/client": "^0.10.1", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.20|^3.0", + "phpstan/phpstan": "^2.1", + "psr/simple-cache": "^3.0", + "psr/simple-cache-implementation": "^3.0", + "spatie/ray": "^1.28", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "legacy/ignition", + "Spatie\\ErrorSolutions\\": "src", + "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ruben Van Assche", + "email": "ruben@spatie.be", + "role": "Developer" + } + ], + "description": "This is my package error-solutions", + "homepage": "https://github.com/spatie/error-solutions", + "keywords": [ + "error-solutions", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/error-solutions/issues", + "source": "https://github.com/spatie/error-solutions/tree/1.1.3" + }, + "funding": [ + { + "url": "https://github.com/Spatie", + "type": "github" + } + ], + "time": "2025-02-14T12:29:50+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", + "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", + "php": "^8.0", + "spatie/backtrace": "^1.6.1", + "symfony/http-foundation": "^5.2|^6.0|^7.0", + "symfony/mime": "^5.2|^6.0|^7.0", + "symfony/process": "^5.2|^6.0|^7.0", + "symfony/var-dumper": "^5.2|^6.0|^7.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.5.0", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/pest-plugin-snapshots": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-02-14T13:42:06+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.15.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", + "reference": "31f314153020aee5af3537e507fef892ffbf8c85", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/error-solutions": "^1.0", + "spatie/flare-client-php": "^1.7", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20|^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-02-21T14:31:39+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", + "reference": "1baee07216d6748ebd3a65ba97381b051838707a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0|^11.0|^12.0", + "php": "^8.1", + "spatie/ignition": "^1.15", + "symfony/console": "^6.2.3|^7.0", + "symfony/var-dumper": "^6.2.3|^7.0" + }, + "require-dev": { + "livewire/livewire": "^2.11|^3.3.5", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.8.1|^0.10", + "orchestra/testbench": "8.22.3|^9.0|^10.0", + "pestphp/pest": "^2.34|^3.7", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", + "phpstan/phpstan-phpunit": "^1.3.16|^2.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + }, + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-02-20T13:13:55+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/24dd4de28d2e3988b311751ac49e684d783e2345", + "reference": "24dd4de28d2e3988b311751ac49e684d783e2345", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-04T18:11:45+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..bca112f --- /dev/null +++ b/config/app.php @@ -0,0 +1,215 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + 'asset_url' => env('ASSET_URL', '/'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => 'file', + // 'store' => 'redis', + ], + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => Facade::defaultAliases()->merge([ + // 'ExampleClass' => App\Example\ExampleClass::class, + ])->toArray(), + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..cae0028 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,115 @@ + [ + 'guard' => 'web', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\Models\User::class, + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_reset_tokens', + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..9e4d4aa --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,70 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'host' => env('PUSHER_HOST') ?: 'api-'.env('PUSHER_APP_CLUSTER', 'mt1').'.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', + ], + 'client_options' => [ + // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..33bb295 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,110 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "octane", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), + +]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..8a39e6d --- /dev/null +++ b/config/cors.php @@ -0,0 +1,34 @@ + ['api/*', 'sanctum/csrf-cookie'], + + 'allowed_methods' => ['*'], + + 'allowed_origins' => ['*'], + + 'allowed_origins_patterns' => [], + + 'allowed_headers' => ['*'], + + 'exposed_headers' => [], + + 'max_age' => 0, + + 'supports_credentials' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..137ad18 --- /dev/null +++ b/config/database.php @@ -0,0 +1,151 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..e9d9dbd --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,76 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been set up for each driver as an example of the required values. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + 'throw' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + 'throw' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..bcd3be4 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 65536, + 'threads' => 1, + 'time' => 4, + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..5aa1dbb --- /dev/null +++ b/config/logging.php @@ -0,0 +1,122 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..049052f --- /dev/null +++ b/config/mail.php @@ -0,0 +1,124 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/polije.php b/config/polije.php new file mode 100644 index 0000000..8aec8ad --- /dev/null +++ b/config/polije.php @@ -0,0 +1,107 @@ + [ + 'Produksi Pertanian' => [ + 'nilai' => 'Sedang', + 'minat' => 'Alam & Tanaman', + 'pref' => ['Praktik Langsung', 'DuDi', 'Project Based'], + 'cita_cita_keywords' => ['pertanian', 'petani', 'kebun', 'sawah', 'panen', 'tanaman'], + 'skills_required' => ['Observasi', 'Kerja Lapangan', 'Pemeliharaan Tanaman'], + 'weights' => ['nilai' => 0.40, 'minat' => 0.35, 'pref' => 0.15, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.80, 'minat' => 0.90, 'pref' => 0.85, 'prestasi' => 0.65, 'cita_cita' => 0.85], + ], + 'Teknologi Pertanian' => [ + 'nilai' => 'Tinggi', + 'minat' => 'Alam & Tanaman', + 'pref' => ['Praktik Langsung', 'Project Based', 'DuDi'], + 'cita_cita_keywords' => ['teknologi', 'inovasi', 'otomasi', 'mesin pertanian'], + 'skills_required' => ['Problem Solving', 'Teknologi', 'Inovasi'], + 'weights' => ['nilai' => 0.50, 'minat' => 0.25, 'pref' => 0.15, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.85, 'minat' => 0.90, 'pref' => 0.85, 'prestasi' => 0.75, 'cita_cita' => 0.80], + ], + 'Peternakan' => [ + 'nilai' => 'Sedang', + 'minat' => 'Alam & Tanaman', + 'pref' => ['Praktik Langsung', 'DuDi', 'Project Based'], + 'cita_cita_keywords' => ['ternak', 'hewan', 'peternakan', 'peeternak', 'sapi', 'ayam', 'unggas'], + 'skills_required' => ['Perawatan Hewan', 'Kesabaran', 'Manajemen'], + 'weights' => ['nilai' => 0.40, 'minat' => 0.40, 'pref' => 0.10, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.80, 'minat' => 0.88, 'pref' => 0.80, 'prestasi' => 0.65, 'cita_cita' => 0.88], + ], + 'Manajemen Agribisnis' => [ + 'nilai' => 'Sedang', + 'minat' => 'Manajemen & Bisnis', + 'pref' => ['Project Based', 'DuDi', 'Blended'], + 'cita_cita_keywords' => ['bisnis', 'agribisnis', 'usaha', 'entrepreneur', 'pengusaha'], + 'skills_required' => ['Manajemen', 'Bisnis Acumen', 'Komunikasi'], + 'weights' => ['nilai' => 0.35, 'minat' => 0.40, 'pref' => 0.15, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.75, 'minat' => 0.90, 'pref' => 0.80, 'prestasi' => 0.70, 'cita_cita' => 0.85], + ], + 'Teknologi Informasi' => [ + 'nilai' => 'Tinggi', + 'minat' => 'Logika & Komputer', + 'pref' => ['Praktik Langsung', 'Project Based', 'DuDi'], + 'cita_cita_keywords' => ['programmer', 'developer', 'coding', 'software', 'web developer', 'hacker', 'it'], + 'skills_required' => ['Coding', 'Problem Solving', 'Logika'], + 'weights' => ['nilai' => 0.45, 'minat' => 0.35, 'pref' => 0.12, 'prestasi' => 0.05, 'cita_cita' => 0.03], + 'match_prob' => ['nilai' => 0.90, 'minat' => 0.92, 'pref' => 0.85, 'prestasi' => 0.75, 'cita_cita' => 0.85], + ], + 'Teknik' => [ + 'nilai' => 'Sedang', + 'minat' => 'Mesin & Listrik', + 'pref' => ['Praktik Langsung', 'DuDi', 'Project Based'], + 'cita_cita_keywords' => ['mesin', 'bengkel', 'teknisi', 'listrik', 'elektronik', 'automasi', 'instalasi', 'panel'], + 'skills_required' => ['Mekanik', 'Elektrik', 'Teknik', 'Presisi'], + 'weights' => ['nilai' => 0.42, 'minat' => 0.38, 'pref' => 0.12, 'prestasi' => 0.05, 'cita_cita' => 0.03], + 'match_prob' => ['nilai' => 0.82, 'minat' => 0.90, 'pref' => 0.85, 'prestasi' => 0.71, 'cita_cita' => 0.85], + ], + 'Kesehatan' => [ + 'nilai' => 'Tinggi', + 'minat' => 'Pelayanan & Kesehatan', + 'pref' => ['Praktik Langsung', 'DuDi', 'Project Based'], + 'cita_cita_keywords' => ['dokter', 'perawat', 'medis', 'gizi', 'kesehatan', 'pelayanan', 'terapis'], + 'skills_required' => ['Komunikasi', 'Empati', 'Presisi Medis'], + 'weights' => ['nilai' => 0.45, 'minat' => 0.35, 'pref' => 0.10, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.90, 'minat' => 0.90, 'pref' => 0.80, 'prestasi' => 0.75, 'cita_cita' => 0.90], + ], + 'Bahasa, Komunikasi, dan Pariwisata' => [ + 'nilai' => 'Sedang', + 'minat' => 'Umum', + 'pref' => ['Project Based', 'DuDi', 'Praktik Langsung'], + 'cita_cita_keywords' => ['tour guide', 'pariwisata', 'bahasa', 'komunikasi', 'jurnalis', 'marketing'], + 'skills_required' => ['Komunikasi', 'Bahasa', 'Kepribadian'], + 'weights' => ['nilai' => 0.30, 'minat' => 0.40, 'pref' => 0.15, 'prestasi' => 0.08, 'cita_cita' => 0.07], + 'match_prob' => ['nilai' => 0.70, 'minat' => 0.85, 'pref' => 0.80, 'prestasi' => 0.70, 'cita_cita' => 0.85], + ], + 'Bisnis' => [ + 'nilai' => 'Sedang', + 'minat' => 'Manajemen & Bisnis', + 'pref' => ['Project Based', 'DuDi', 'Blended'], + 'cita_cita_keywords' => ['manager', 'pimpinan', 'bisnis', 'accounting', 'marketing', 'sales'], + 'skills_required' => ['Manajemen', 'Leadership', 'Keuangan'], + 'weights' => ['nilai' => 0.35, 'minat' => 0.40, 'pref' => 0.15, 'prestasi' => 0.05, 'cita_cita' => 0.05], + 'match_prob' => ['nilai' => 0.75, 'minat' => 0.90, 'pref' => 0.80, 'prestasi' => 0.70, 'cita_cita' => 0.85], + ], + ], + + // Vocational Learning Preference Mapping + 'pref_mapping' => [ + 'Praktik Langsung' => ['weight' => 1.0, 'score' => 0.95], + 'DuDi' => ['weight' => 0.95, 'score' => 0.90], + 'Project Based' => ['weight' => 0.90, 'score' => 0.85], + 'Blended' => ['weight' => 0.80, 'score' => 0.75], + ], + + // Category mapping untuk nilai + 'nilai_category' => [ + 'Tinggi' => ['min' => 85, 'max' => 100], + 'Sedang' => ['min' => 70, 'max' => 84], + 'Rendah' => ['min' => 0, 'max' => 69], + ], +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..25ea5a8 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,93 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + 'after_commit' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..529cfdc --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,67 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + Sanctum::currentApplicationUrlWithPort() + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['web'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..fb7cb00 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'gemini' => [ + 'api_key' => env('GEMINI_API_KEY'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..8fed97c --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..d4e8835 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,40 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return $this + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 0000000..444fafb --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + } +}; diff --git a/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php b/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php new file mode 100644 index 0000000..81a7229 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php @@ -0,0 +1,28 @@ +string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('password_reset_tokens'); + } +}; diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..249da81 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..e828ad8 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/database/migrations/2026_01_28_143443_add_role_to_users_table.php b/database/migrations/2026_01_28_143443_add_role_to_users_table.php new file mode 100644 index 0000000..60490cb --- /dev/null +++ b/database/migrations/2026_01_28_143443_add_role_to_users_table.php @@ -0,0 +1,29 @@ +enum('role', ['admin', 'guru', 'siswa'])->default('siswa')->after('password'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + // + }); + } +}; diff --git a/database/migrations/2026_01_28_143445_create_students_table.php b/database/migrations/2026_01_28_143445_create_students_table.php new file mode 100644 index 0000000..a863eb0 --- /dev/null +++ b/database/migrations/2026_01_28_143445_create_students_table.php @@ -0,0 +1,31 @@ +id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->string('nis')->unique(); + $table->enum('kelompok_asal', ['IPA', 'IPS']); + $table->string('foto')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('students'); + } +}; diff --git a/database/migrations/2026_01_28_143446_create_polije_majors_table.php b/database/migrations/2026_01_28_143446_create_polije_majors_table.php new file mode 100644 index 0000000..6802d3f --- /dev/null +++ b/database/migrations/2026_01_28_143446_create_polije_majors_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('nama_jurusan')->unique(); + $table->text('deskripsi')->nullable(); + $table->text('prospek_kerja')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('polije_majors'); + } +}; diff --git a/database/migrations/2026_01_28_143448_create_recommendations_table.php b/database/migrations/2026_01_28_143448_create_recommendations_table.php new file mode 100644 index 0000000..f1374df --- /dev/null +++ b/database/migrations/2026_01_28_143448_create_recommendations_table.php @@ -0,0 +1,46 @@ +id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + + // Atribut Nilai + $table->float('mtk')->nullable(); + $table->float('fisika')->nullable(); + $table->float('kimia')->nullable(); + $table->float('biologi')->nullable(); + $table->float('ekonomi')->nullable(); + $table->float('geografi')->nullable(); + $table->float('sosiologi')->nullable(); + $table->float('sejarah')->nullable(); + + // Atribut Pendukung + $table->string('minat'); + $table->string('preferensi_studi'); + $table->string('cita_cita'); + $table->string('prestasi'); + + $table->string('hasil_rekomendasi')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('recommendations'); + } +}; diff --git a/database/migrations/2026_01_28_143453_create_chat_histories_table.php b/database/migrations/2026_01_28_143453_create_chat_histories_table.php new file mode 100644 index 0000000..36da3cb --- /dev/null +++ b/database/migrations/2026_01_28_143453_create_chat_histories_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->text('prompt'); + $table->text('response'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('chat_histories'); + } +}; diff --git a/database/migrations/2026_02_06_000000_merge_students_into_users.php b/database/migrations/2026_02_06_000000_merge_students_into_users.php new file mode 100644 index 0000000..0354aae --- /dev/null +++ b/database/migrations/2026_02_06_000000_merge_students_into_users.php @@ -0,0 +1,62 @@ +string('nis')->nullable()->unique()->after('email'); + $table->enum('kelompok_asal', ['IPA', 'IPS'])->nullable()->after('nis'); + $table->string('foto')->nullable()->after('kelompok_asal'); + }); + + // 2) Salin data dari tabel students jika ada + if (Schema::hasTable('students')) { + $students = DB::table('students')->get(); + foreach ($students as $s) { + // Pastikan user ada + $user = DB::table('users')->where('id', $s->user_id)->first(); + if ($user) { + DB::table('users')->where('id', $s->user_id)->update([ + 'nis' => $s->nis ?? null, + 'kelompok_asal' => $s->kelompok_asal ?? null, + 'foto' => $s->foto ?? null, + 'updated_at' => now(), + ]); + } + } + + // 3) Hapus tabel students + Schema::dropIfExists('students'); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + // Kembalikan dengan menambah tabel students lagi (kosong) + Schema::create('students', function (Blueprint $table) { + $table->id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->string('nis')->unique()->nullable(); + $table->enum('kelompok_asal', ['IPA', 'IPS'])->nullable(); + $table->string('foto')->nullable(); + $table->timestamps(); + }); + + Schema::table('users', function (Blueprint $table) { + $table->dropColumn(['nis', 'kelompok_asal', 'foto']); + }); + } +}; diff --git a/database/migrations/2026_02_11_000000_add_student_fields_to_users_table.php b/database/migrations/2026_02_11_000000_add_student_fields_to_users_table.php new file mode 100644 index 0000000..658f3c3 --- /dev/null +++ b/database/migrations/2026_02_11_000000_add_student_fields_to_users_table.php @@ -0,0 +1,45 @@ +string('nis')->nullable()->after('role'); + } + if (!Schema::hasColumn('users', 'kelompok_asal')) { + $table->enum('kelompok_asal', ['IPA', 'IPS'])->nullable()->after('nis'); + } + if (!Schema::hasColumn('users', 'foto')) { + $table->string('foto')->nullable()->after('kelompok_asal'); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + if (Schema::hasColumn('users', 'nis')) { + $table->dropColumn('nis'); + } + if (Schema::hasColumn('users', 'kelompok_asal')) { + $table->dropColumn('kelompok_asal'); + } + if (Schema::hasColumn('users', 'foto')) { + $table->dropColumn('foto'); + } + }); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..a9f4519 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,22 @@ +create(); + + // \App\Models\User::factory()->create([ + // 'name' => 'Test User', + // 'email' => 'test@example.com', + // ]); + } +} diff --git a/database/seeders/PolijeMajorSeeder.php b/database/seeders/PolijeMajorSeeder.php new file mode 100644 index 0000000..bd27718 --- /dev/null +++ b/database/seeders/PolijeMajorSeeder.php @@ -0,0 +1,35 @@ + $jur, + 'deskripsi' => 'Program ini berfokus pada keahlian di bidang ' . $jur, + 'prospek_kerja' => 'Lulusan dapat berkarir di bidang terkait ' . $jur, + ]); + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..504a76a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2034 @@ +{ + "name": "SPKJurusanKuliah", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.2", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", + "vite": "^4.0.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/alpinejs": { + "version": "3.15.5", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.5.tgz", + "integrity": "sha512-l1R4em/uCUr7eJimcO/b0L1+H2tVcB1Y7cQ3d+pzwVnv0zWs7gw4MhwdsLjfLccWV2iH0ahlfaJWitNRFOZdvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.23", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", + "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001760", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.4.tgz", + "integrity": "sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.279", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.279.tgz", + "integrity": "sha512-0bblUU5UNdOt5G7XqGiJtpZMONma6WAfq9vsFmtn9x1+joAObr6x1chfqyxFSDCAFwFhCQDrqeAr6MYdpwJ9Hg==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.7.8.tgz", + "integrity": "sha512-HWYqpQYHR3kEQ1LsHX7gHJoNNf0bz5z5mDaHBLzS+PGLCTmYqlU5/SZyeEgObV7z7bC/cnStYcY9H1DI1D5Udg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.0.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", + "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..d99c136 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.2", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", + "vite": "^4.0.0" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..eb13aff --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,31 @@ + + + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/images/SMA BIMA.jpg b/public/images/SMA BIMA.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6633826041c56982dd575c64a4746b315b857dff GIT binary patch literal 308517 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

pEI~QSzELS8_e*O)Qi@|rwb#w;4;=7vvOaI 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

C-;jNY#Lz5tv0gmNh}gd zx;12mzK3w9kh{wi8cCEip407Az%Pmu&EnD!kdc7$&Ly5B@2IKVmyVaMn$R(o3Euv( zd)cHU?sim>nP#=VjtGIeH2jzt2W47O-lLftdTD+R%RILtB^TJzLuOR!S2}Mf8=T3S z1S}{UuhN=YQvyjKnrut$>3hMFFqrFoc$~)Azv2l|Hzj^JGf`x}U8$W=P4z4$OmxHS~iZE4FCX!lYF z*zQA?vytwG43_!TvoG&pB{ym*cyv&Cqcs>Z6dVaV9hf+TOND;w+2jw4PvRA#eUeny zTaU@1D#ajc!>XbA>saM>W_xIwna>k=M}U?tnlS z4H7byZ)(m+X`&Q^?^T?!hiDiEx}7dt6`Rwj97@63JJnG<0pRWxaUvefvY;H?l_YOB z`jcMJfNqIL?F|*YxQBLE(&r#Z%9dKGf0K**BTuF@lA|ePMyubq?FebZ5Gy~R*765e zfeu8*g0-3@IF}+ONm3P#=vlJXQYyszs!(NiwGd z=QMIIDLd3jCF;wSOC%9SqNF6N8egZw;?thTIQ%Tvvhw?qD1P^Y`25347>;3397)A5 zg+3bK_)Ft_2ggf}Z#pwbg>E%^t2L&F;6Zn(;pLP|EU8JlIy-bwDKTc|#ZR>*l1j$4CYwQhzip4|EXq2Y-*2W$ z48S6?5N5d1|6+z{Nwdu;>B78c3q!lCiX zqx+bq%6f>@ZNg84MVIYir!ANTV(-$FYRwW=yleFr=+o&94pvh#D6CzZxRPlzS2Y0W z%Ma?O#p2=@2FT z!X(XgB&B>^_>0;}U7cWERgckvBTaW`DpOW7AxYi{Yvi6U1&4#desOyh1aD-XiR6(rw@~f;pG%3#j1v_M5PX@%T_`|lBAZpES7zgf0Q!i1kgDs z?UCP@-sDP!#oq5OF6uk@jx65rceK=1fwjUZP*|kteBGrN`f-!<^I@Xv${c@u?KrH0 z_^jOWer-;ws*sOMjHkAcfGL?_UQ2^Hlvtt?IzO&F9t?9lG%Z1xSqUt8L$kw<-|G1t`}D)Pfkq_yRNS8Zo9LZ3WK3B98<$~3{F zypBYB$sweo+b`s&+VOaKW|lRmp=1+_DhsJ5s=ln(RVf@QQ1C9_X+{!P#rC|3<44K% z*cbDBpY0WtC!0NgBmJa@;RodVcuR3z-2?4-#?>D~?bye{vh7K=SW_xeQVAl3(=cZ$ z9qMNDt}P)}Vw%#X=U}wSDk4g1R%v#}W`@OP5JD)CiQ1#Rrh@GkmIa=U$Zb~WN5L05 zzjGN=Mh=18%cB6akke4lwL%ZP11}eNXWK8wN+Qfx=yg)>Xt~^-6?ACyzvCbu>J2es ztWk!%j?%4;WgJ||H&M_aB_FYjkVcB&kkS*` z$x%?fb^BPQ0&vCGy+VyBaAPf|bnaPXuHOtaxd>#xoZhg_Tx?@!D2oJ{vSTinE&2UamU!t(ID2oAl7= zX%Q@DP#Rr7qf6O%Gg8eULU)$Dy`PugRUNF$VeIK^#b*HeE^DnCnu9#W;9m=~l}Vg# zz2;5Ms<$G&eR_M86ct8%qm{3-)sD8$WA`n7zUaSU-q%_{`h_gvJ zT7b+2A8T3g&I$2$$kYYxVEGkCDGpSt7KGxKGg_kj+G54QpKPxdTK@o-L}~Q6a+;~C zf&DOE4EL7IqXddE{{T>cem91JjUo$nRJ$r#Ab|x-*yJ)zm|zV+eWMyu3WC*9S|nBW zosvtvqCYYoRSJp_$3}ryeCiHWM;#Hxv-;ei@~;=!^4hP3BQ0r|;2-SlBkRt!bVn=w zpNG6jO`=ZkYIgkGaaqM8i74<6L$#h~kDCSoTS)H(c3#(9LFc@0-D<}Vf~ z0M_Pm#*xv>l;49>s;;dAS|hZj0bErcNdjrSntJn2$h41m1bodJXsQj3C0(1BZB0II z(x~Gol?OfmJ5jXS5ED}x20JS0_xZw8lmkjSj?`U86`WJ0`l^cbY5c!x=GmV&&6n}{ z#)-_R`lttwlNLvNe%6eO&9Uzc=^bwvwd_+2XlS5(+(*HtrCkF?P@Uvens#*kDf+o@ zc9M;*R7rTa?s9S<^bU1MoPz+zFN?BTZ5A~m7$jPhK)EmWW3-ogp+sZ-MbZAwS*&15 zI#WE|M=E?BM$5dIGSujz&Pvs-q!O)6QrMO;pGZ^)-7))3`N#1o)P-H)cYE{n=0-H)|Gt zT2;&5#+CcRti7)XgP0;@rALT3QhAatafI3d8;`G${pDF{xyql4;?f3X3`<66tL`yK zbQyb8pMD_kKt604tn}P88V?|0h8So5oT0ix#VT2<*two_rVkeZTEv85gIJ9?Rod18 zpreqk*BLwB4)}+Q6-Yf=RFDY-R|jdC2?aAL_T{cTax26?+Ej`Opj9`d)%M?K6a{_b z&{AsqV#2H@4&7#1<(UW4<&9q&erzP*q4Q`o;$Z#hJt|%=iHartL*mPZG(?rF8aYvd zMOul*;O>bY4ACr^7P2u>V4l)|98*$$PY)s1bi$slbxd3(Mx->0EGA>jwTc1J+Gn6r ztVt>HeWO`EnT&2O))ePX*Dy24vxesdrb#pRN}<|reUE2R3banY%N^fqR6-z_a`$Pv ziP+?7r-LVZ=4O%yi^t1@<1B?Jr2ImT&%BoyK)Ir=DeqH3P@>*}|k?xjV>Ez2V}oQHxG#BO8gETSzR;qSvpNUBt+55$Ji{J+CtyPIW4h32ll|TKRnm7d#oBi#sy9>Nf zhH~6Z+u3*O3kIxQ(8UWBLXPtP0QXBrSde_if%7VicfGR;2Mw7OJ|{z{YUT*tp`-y` z=?Cr7{S8#bH2TNUr7`H!9cgt-vaYokhJp?Z=CybVHCEJ=`>Aq^KV*fSsx)?`DOI3q z_9*GB+5=B2WXNLMcx{dBEplq)C=?s(6gp&hb}BGHIlT_xVaK(R-s-h zIS5LHYg>!DB=~51yKRwv_GB~cQ|6H|MpUN0@nu{6X$H+YYff?cG7}o8?^D6vqpgW{ zgP7eO)4ic6P0n1nUhOFOgS4R9V?sqLS>-O!e)AL~1dPYTuoQ#6^I3-Umxj1&jlt#@ zRQ%q5eP1_U`6Uubq(>6X?}?g1qg{;iXoaqsk#i`8E>fd&KFuBuPVUU2F*gPUFHm$g z{MF$>z1s*`&XJRNY6MrwgCPhiWphd5?0_Qo02>%hI0Zv0_Z$^Dh+`qS$Z10CYD&B5 z$K^@=T;jO7K^VJCmODyqHg!=(NifPx{^=EKm@p4Dxf>_SuXB>MGM z(PWGB$bMA)?;y6vnwd@4wM`H!Nh_uKPxZS|O$?E#CvX*ZxQg?I-L~f}GTO65s;ehE z<+oZ6!xCwz#g`D8&bZFd)_anJiVYd&J|3W6%@hvrHxo}G@nWx+!IchVo1C@i?{U?V zgF@&*bxNt`H?i%B-Wj5!9T}yXH1Cu5X&G9=P%2Ii0-TXXg)1n)3ck*?_du#5lem`w zf)ki!QC5bEY6j+SDL4N1zU+jm^c)WD3s4xBA~%O3H-{p3xl-iLYQ|WSIyB|&D*Mp> zhs<3nWLFABU1m(S#bY|^JT`f56)joTRCeey!nAJ;))@EY8eARf*Xt`q5fw(qGIN!$ z9gRU)Uei$QQA(`bE8hD$)eWXel#J0Ii8~zN*hF69i&)E7Qv_d-X=jo|a-`n-GG(NK zQY*Z^%(TRe60!J8v0AN2N-XiHtSiEvFZOoZ{{Yn5V@TYQn7+;yDG5xfSR#}o)nLOu zOFT>XY2fT@PXemql_Q-uZ)e#j!$3um6AWXJ7bkgSLdM@Jl95#?By}!RBDxGca=EPt z=nJ|gnwN49gW}V()oD581u+k`r7@r-B8eLumpQR&#jd@lXB#uJ1ZDe9(Aru$P|>WV zN=U-3C8W5EMK-hzts#zQ#i0Ijb#9OMz9+=hmdL*c#K$sxT*Z4R)Cpid(ULr2ByR=U zd)pi}#QFxj|}oyNw$80C4Rgrsv3;u`dd_vV1ja zmStf;(UCQ9pu{Fnsp4_6OWlRF#Rq;92il=C~sY}GWaj@HxN%m3@nFsG= z2QBn+CmOkyR1h&%05mLF&w0h>!QymHaA_e42O2PHOX863yIYW>(VQCc*ymQzg3hBi zYQy+KmG&@BEa+*8a2j{=iUGn8>RP+YYLyyxQETbAJ1wmj+3j+H_@ymgi(HAK=8&tJ zYRr*co>R|2br=?*B2Cx)L9CBvPl4Xlxb{?U z4QV)%@|+YHqmZPzce9%2IlLX+qh~wNp|2K(ftr^gipYyBe^%10o{g?C3>QZ28eGypA5q-RFov)2C^R z4Va+^`GxR}-B~8{Qg`c%9<-nNTRk?KACu>jjX6U!fcU+otdmA^hcPbMnLWzQQ2(`NiOwzjCA9*e`oi*)?X94%TBKrg(+t)!0h$Dg`rqb zxNq9*>QTajd25JBA&k{X;?spbItG@O9MZyT6pBZIeZOsnfq5oR;<^6RX5)cL{HCw= ziq3eu&+@rM_GC>Ra<1_2#5AR(OC`nGkTFA;r67+9Q2TNxW3i1Nph59KZrRIAgUIXcpWhEfLQVu zcaYt4jX8napnp$MSlryEBZ_YgRRHhvhA3I#@}jD(T#G`gFLLKiNTWRI+-_i}LzLa} zWGGzITQr^woViJ7=FL;&z_WW*B@Q_)Hi{u6lK%i^?6O*Z@oZOmssY{LpZ91)Xb3_= zP%r}k*G8gnc(qW_;P|vOcr%_pq0dV~LBVOGs#Ie)rC2osnF=%^+dG;i7oG0dWfW78 zZ7$nNr3;`KmumahYFSW&?EBQ$@m}#hEYi_n{{Xu9w8KMJXf{g$%k^dCM~kwHC6N(< zeJ}C`tcWVy&2`11hFK5Br-zs8D?ynhJHweB!eK@rHD;wn2y3Xy(9i<|D^^upT>bT( z3mB1qj*8gUtnY=Jny6~cPpAxP8TBbKOtfJ_UA!vG2}!JrKt2w~1gkPij`3&WQGK6e z%XA=kI~pUYLXUxC*Ted8l8_QO}$W88AhgBP|E~!{4H-gr=5C|7J z>V!w#<)N!T^=Nz*`ZLN@%RGwkd|Kn=!Q-dZwGYCUeW7=$pJJ|rJ|`N~Br(gB+z51p zR#^&;;O#0m;N?<}5u>&D7Hq)PYcw4lb4p3AO>3a`exESEP}Ldit07G&A_3acisTh7 zbIo1O6>TjAMvlgkD=r(KX#W5;Bv7d3NuaA)QL4+5D8X9AX@YmY)U;Za%t8_{N^lI5 zj)|p`Rr|~RHMh?U1R-}I5-xUy+IuP)WFV}SW~Yl&Q#vRFl5h{SEXzET#;*lCWF6rK zXu%_DgSA2ZG=Js}*<~2oAs^cg*Je0cAwSz5LrXV`v^?;S!cW`eAH*NZKUM@|n-;3M zXb~7aOBrGcII8~uLqDSzGme-(RD|?up=+*U?NZ0XD!y*eyFw(+YEpexI^xx_;P{_| zseClmHI0)Lp-IFSAd<|L4?Us?lmwGTf^Y>_xlnjjS0)J+C#R8N_N|f`mkOssWJ#e1 zW4BqC{{YlQ{%4fJ2q`(Q#iNFv@XKs&(xy z)l}d8J)f37r*4PHyMhOaV4aRK@M@qfVQ?qy)NA$Cq2_6kHnk{&O^()-tvBB1+8wnf zflkvMDi$5E8qnPBK&jdcwn>w=HP`0lC>3_JZ8USoCklg6rYx4KHB_HeG#Vc{aO9u9 zPYUtzb?#UBnQFP4o-Y=BfuB%{uF}4MG-V96E5GTH$WmOSmaXih#UiQ9mRySax^HBaB?_WT8;Ucf4QmGI+aKnuj1s0+(%TD#ys2y`2|YtL@VU zf0vN{64#rtsqV_5q0qJDvD#Jc#IMn$0L`2sS>n#Em(i^z;DmwT$QuXAqwgK1V~T?L zQ}P%7=5N(r$}!ZIZfE(V^o)4`MV@I@ikCs?a#hunC8(rt%IFD7a2%oR@OKA>gEGQ; zwPq?kUN7Qmy^rOkR{1}7sv6d{&|J;z>3G#O1T;}a$@OACn0Y%+$71@^4Bp~zFZQWd zi#41l@koDj?VEL^5hbch9f>(d*w;%+71i3&6dC1MN?o;9+3ji~h)7OU{QQQqgluaw zs?jw8&ob2Eur8L1Xp&3MC&KMrj+D|kl}?vF)3PF+-JK`KLi@L}8Dyg(gPyNFCLeh{?_nGn>M|fXpT7n8=wMvk71wPg7AsVCa z)TFB8nIOADtriJ$(=uiKK=K>uqQYIM080cS{8_1Xp$BLxH4~CZ>)>mPy7si75?s{@ zBLddua+f{s(wQm`D$-xIMJt0P9UY@J!IH>A3YCCsGS5?n!1-+S-dL|}*?dpvUJs7K zt<#5tkt$M<4e7^QLZGt`IRtz0%4CGRqdkk%nINx9nsd8haGVBNmagu9C%GLb8ipw{tdmPla#V7iX zB_$-RqzC@)%@+Z9Qlq>oul&{_U{EMNCeiHZ@t+``x1MKnz4$n_j62s+5 zCG*rIA?iH%GhIf5L#owVnNeYyB(<@Y zFg${V@w3SIS*)7zYs7WKMGw4Af<6$ZN?h@yO4lE=#5`|xEEGnNe09T9M<#UNi(W|1 z_B6xP4&uU{@*L&J6q}mz#J>irS;wTamdJOOX@)Mzypk#@Q7R1 zr{v>Ldudnz0FJ}*a* z`!zfny`N`xiOFMuKY)6%S8->`UJm1`b0CJA8aqw4+MJNDEIU5BzGUxl%qbRvGqnU8C+b06~333?? zPA)vgr-j>o?!2ezs~(MGinXo{WSm-^rz#G|?FMH^P-Hm#J}#ux;#zCl5S__U`yLK1 z`pGPN(|3!Ly|Tuw=?@JgHoHjd=(u>NP~GmdrZfbm;4};{*WI9>lQlIgwdHFH4KC;O z*z(^jo-X65=5u#;Y6HxpMrw4rHoU{T+lXi`U@YWnWttaW=~drz<^_zY18}FT z4AGx3)l?OH*Rz&S78+bhUm8L24#<>~mgbzM_GqBfOG>)l;O=b3LOJFcy&E(;8TKmh zW|j+C{{Tpb7^}00(q{OL!@-@kYS`AjnJLvR9o%U`c73c>*9Sz!kR(yqqcg2)jV|_=F;yMY{%6F}R(v|_WDvmK+T3WMAzaKsWP1;_X=y}eV z4RLXIR(PWK5(9)N-dtf2-Lm$Is1tP>^GIlJ78fYPA@*2%)^+ ziD#72mTzU9I72K{hfeN|HChERQ2ky$Q|bdgaeFOzvwP)GBSCWv2gLDk{pLteF;cR+ zRY4+vCV+I)7xdOTFh^!ujXodV!%kQboyliRJc6ocA}BFvrLAhE#TT#>+ctQ?yFc~o z0+Y`j>D{^PEjh!EJC|I|RIt`wL=@=10<>Cl?Amk?IV*aGTN(a^q7%Cs!C zHD;Y>tG&(lc$F?()Y$uWEVNuwB=o)8V3_jBe&cgiYf1b!X?YsUmQs&=G6B4~v0ls) z%}so&qwRIsXHA`Euu7^^-B$M_R;SD~nlfmW15M3MO>H#{WjY>Ik0Hh0UN0BJO)z+C zgU4JnuW+MFv+BCezZRofGD2$2Nj_{|I`Egnq4tMOn#JGtm6|Q<6=!P|G-jzt-dzxb z;jQgAS6&}A!Qy<7edD!k={zYp&!a-YXPGJawPv24;GOEjz8 zlFvDEWU|Tlg&sP`-rMZx-m&&x@T*nLcQbI%*9YUEt`9ZW{fsMWnCjP-o-HKWBHf&R zzEaKAKA=09^9Cp%S8~f06?ctP%~bJp`_SJ*M~c5MkstKiLPpwtuXmGXrtJ;RRYse! zEp+XhBL4u?16(h5a*|aVkL73`(NQ}bAtSwuhiGzh!w}drA1}o5csNx$@{dW}?lc=6 z6B2iw3p(Mfz1M45RrvD!?t4SI)*}tIKiwKEeiF#G+Yx0+_9y~LdhQ-+d!$!x$8Hcy z?ZwLYn&F)_NlKamctb3PK~qzsIfE1owKDgz2|g`e(XNmLd&*+1F8taGtZK4_1q?x} zSA3GB?Z=~7G)j0==fAY>x0K!G+dD19Ew5wCXcoI zMlKstkLE}(_Kw~-lV?}D8rlM6nP&vDRC63lG*dNE zJN&;!WB7;Zs`-+g!mRr*OOqnfuXRBEtlrD!JsrQfi|&!1YbfU<;ZOVN$6d`#u(hc% z#wxX(sU2OJHY*%fWSZm`o#$y~maMiVej)=r&P(Hu`$x$-Y}TdVua{%$l_C zX`=c(DDF$amc4(CkJI`-CH_&VxvVC^l%8o60R3Orr(G}85#=pa0g?XzCuKkCr}byZ zDl(i4S<9A=PV(O_zOt?ojigES8ImKn~Nj`05@b>O=Fa$+Pg+5fcx54(nQzoeZOdo z($Qlid(kWRKHad&Dc^*h%ecPoRTCQ0pm!Gm#0PDj6_j_1^uE%cZ40-^eiXYzi^WuS zn4!GM&Eo$6Xyl1pJ>ojP*RtDG0F)tnmvjB3?CT_=EaqkH?(Ye5qG;114N{>{TD_$@ zYlFp#%z?b=#PQPy!>$hG9xQ-jqE)__MX?C{oZ|lkB5JH z@K3MTdB4s%&+|ObXZNKTFeBIj;&Herrw1-kT_%@G_gYDJVzkn+>Xu-rnP#91H&kNB zMF?dq5L9GZh?S@h#tPJaoGGP!6C_r?7*H#oxlXIGq1C8kNf^tNRO7**na~3RG#oOW zw`UpcQmA@11B|r1LFZXVga`wMEP*p+m0k&VyS*SMbZxb~uHdKrvTlX$hppPCMOjo*kp}&qFa6bQLtu^_`f6+j3Dq~#JKv}mp!xOm z@T%WKt70?vu5k&d0C{alhnd`~dkD}8>X)qUU!qs9!(xIa62V-jSM4+rtT`mS5>AVD%O%Qnqi*_!8CEmu;+706MSuu`*G4? zpJ#;{C++SlA`=bsh1b)Q$*y?%Lc49P%u)pnI&N%jXx1MxwL4uFPjAp@;TLw)B8v4? z3hB7-K2krc(;g~>^B5q+5F9y&g2so=x-@V@hq(W8@Q*V3zdt!Q|G^Cjpp{Uv}P%M6hG@r2RcD?Y5y6r(u%xUX+^F zEQlTp0&xLxIPhmlzA|ucz1^qYQoyn`2hiHK&smTK4ztyqh4kcwZHZSfl)tO_2)`c(pO5MYb1_#BHc~!|Uc&?$|mZ}ulA@UVx-Ws{(C?iYj(U#`Zxy4bF zV=;9siiyK_F0DUeS?E_h+_EaS2;+&G(fI2uD$!A1=2!#C&v}n4vb#x3IWttq;`tht zBeiHabt#8vWmB?FoTu9yx!ZjIoS=3}v~+$=ucq>hutz`PSd4pOSgMFFjLkF-;mWQy z>SsO~%xZuWZEP7lRi);;&(phY>Vt@G>aHk|^i=LNk5f>t!zI^Hj5HRcdvfO6Vw$*r z%1)eR>~80i2g>3X=D^-5jtyJPV0(`I(tgi*7ha1LGISt^9qXZo3HN!8n{bJ+#}m_g z4m+-%=rX=Aq(ycsD}olDQ6*!Gs~zBs))3>%68ri>OvEZfM@G2gBu$Z;AJih4jmZ!c zQLX0Vy`S|>4Ed8Yvre8f@+R>WFI7}WC6z4LiqgY;&CUNKB`QAAB&p~y4i_)3bA&ifzOL%6&!0!qJ zI}P>WIzrMf@EpRy{g>e5?#AgeoUUtFP>2o8+n2G z47)U;+Xvh&U9%o9$&rk@S(iliser9F;S}-~v1W={_d@PuggpoVcNgzk?F{lZi%oZl zaov0n<^7jPTrtIB;_y^dTZHLB+Wln2gGtZokKC-cLxV+taNd}@7kP@Urf!^{=(u`3 zdM2CJu6*|8Sd@F;kT6;7yz_~k!MwYN?}kMX=Sa9wav{5CJbk6M8?e)cf}O-&RHeL` za1ix{2gFT8ohUO6tNaqbap2e9L36smNj_N8ypzxKDL~>c5f%|!2?#s*E3`_qatnF~ zQ-(fq{`^alxO$SS@`3b91S>pWnCf|}Gg-KSD!e*0`@tX7gzd#at16{UJnkFd1)DoKYfJw79a3qGhktyJiI|V@$AjP8-P$29F(jwcWTM> z(6qTfC|S8TIM#p&Ps9}LmNUOv{q&}tXzX&yYdYT&lnzgz<%bJ9+XK_VHT~~7MIxoR zs>zbITaa+Q$dnH2v-&rDhT*~=FZ3IB?0~+}{@4lP>^s|a^U+q6zpCk4=hJ9Fy6eJX z+j8>1(i>Id_j1;TRu9=Pi#JT|BKwjBhU?{!%e@YXFn4#BG`1uEAa{w%Oh={^bR%`b z+UMbPcZ{@e|Al?AL7h#dBF9EEYkk24)2|SCm_e2y^D-7!Ilt7QZFzgP%W<|7K9S*a zk2F^<ljI_H(D|a!ts^ws9LUQO{3>zKA-u18MTzR!jWctbH{p608g2V<0gLkpJju}my4rha#mOo9n z+gO5|L)FV>Ri}NKu)jn_+x$`KzTWgln`Ex|lT5^VEj z_vVK`H-K-=51N{m6)dp4l+CPQb+^62^Z_vx^)~sg!md?TS48xZ7$6sx-rYC{fuQ*j zT~O$t`QcjMGo5nJ<4sx1%MZm1rs&2}oLjp*`&(Ma{+9{Yd_Jkd^xrP#44ES2-wNSY-&p5hRc~Wjs`smZ0XyF`_VKQbD%z%h;fjfja!!$)XZ<6s{xAhTF5`~H4c z0{Y(~zvLWq@d~SDE^QVZZJx4RuJGJH7Rkb7y{T&1gDvqh4i8G?$|eiVO-i#<5&KXO zdpNZ1b|Ejjj8bxa?eS_q`-R<`ztY&h-ppy<&EMMj@@Q$ zpFbL~SXp;L?dg9C-c8Ut%2&=j4~Ed&QCwf*G@GW%?Rm7<`51zKKSmFlb|9oa20+la zboN$>2I6^S5R-O*PQH1;XM=dh2PEG(C4;AsWnxHKi(Fnwqv(;5Zh_fxoS3&4wZNZD z9?GjDI~HuW1x=w7`r3s3iUWtx*p{mA@j}h3QQD=(F4N;0LZ0$_|FFI2Sm`=x>UdNb zv6ubNkx$2a*VKMp~ngQy#{R(n**YfM($%{L3Q zM**#4dG%i>hfhhGRo0{uZU|totU^__Vj<4J-ofS%_o4R&@u=OQx=*zHkUca*1z@WD zB=i-!zy_N7WM>7{W&6=dVPtx6_P4${>9+NK4L?Dae@oDeKrX8F55~mVCUEvkhYtOSD|m>UQy$d z81E50B(vx&GC8ho)Evtdic0i~3aPBN>D>>1E?thprpyGIjUn8n)Z?@TJs~%O_RKRn zw^_4Te|ttw?+@4+rovokDi<=x)wA^`qF3)*JMcYhoX|`pCJK1Av@2sdYOvg?B(KGEBd z&<2n@krymNcUd30ZCEtJ2eZNF2}Z-nT@VMISpBz%9&{=wApL!tQgXhhbmR~zf>7-2s9H*M1?1yf{W=` zUwhundy~~N!{`|by${s+zt`3m7JA_+pLy;>(&{UgH5vi?t{NV^DBYXUpG+TLtjgP{ z1<+YYOb_EAVJ(1~=ksuauCfKIlH8(k!2AfINe*Kv{d|vLvr!`t2>CEM%YtvUjyZdO zhR#uW>Ma`i>QEVryFvnWnK3K^7a}Y|XY#$OhS|)0ipGJaB|Y!=$H{>}`60_9aCS?e zTCBID7{5 zUo#f2ek~Ms5NL64e!Rk}2K$4j9x(s)+2#0i$YIlHHKPl6Rb-ZKxOCHWRa^R(z!bDh zVIna8aYC!vU@u2~%YXCN-B;fnyjici{c!s6v$QSZ^LU4=>@PmQg6=jxF~5LS4NyBx z2D0x3|H+E;%@Am|F?22rC!qVE+C|?p!DX`q9v|h(_0i`{N-so=N`B z;?CA)E~&P?ZcaR}N|f7gSA*R7XAjlGxHLr63yKo@#g<`ri>wA!fA=LLtT$s)$03NAeGTqs}imQI6)m#|a z?VxKmb%20JeIQGq!dTs}m33%)huf)76$=BEiUE#}?o=mB0J=RMDU-b--f_%+|KuIpCG)`4_U z<;%hcLKk40<5!t2_HoZ1c8738RtWnBOfFQ3=O)D&PolOiZbr8v<4iw=p=7X~l!jH7 z+mFlyLg00Ul*soCA$J_YWIN~{nz!69u;tZ^2RN*Q#|;Z}@TgOLwW$NXMZW9TRU=5c zNBud+4eBa43^abH9LGk_Wj+iw;w&h@0aF-1g%3J8$)=52vYih`7<=gob-mqvn-k86I(FoY8@fF;cmNJ@j#n-om?qQ=PQ7qHLQZ;b7(N8@}r?xwk6=p1$#< zgpQ4i0KSMP8%XAE{p-hrfKtdADMyvYPTO@{hSkS+r3b1mSp(aqg=xSRsNx@rH@DP~ z?O~(FU0t(}E)hyCnt}b5BY`Ves=i?kuITLHx7DguBTV(0%o##MD=zdj%Z60Q3#kWs z#`fB%I#$U0vB;IR77;;*8$|)?f^z1RUwEIYB1S47`V{COWDt4|cS+j48dwZ1aSg{6 zsxiXuX}hdIQWVxhw5!$b?M<9pLy=UGdy$hh09-l zn}6nevqAk)G3l{jxAys-@NEi*WVoKA zCJq^et;%^Ubw7|qFIKmhdAt6jz6!XpX7zQ0Y%;24cNk? z%a-Z83*%aL2}xI(enzqRR>v~5T6leL4k0{^O}DA;=fIyz*-DzF4VK4eQg2xXN|vgJ z1RBw!xF@vx!?s6g3ac!tR>qXc|-y#B8EOZp^0_xNF}}lc5I5Djvlxlc!MH8r@u0? zO2u#)e&?R6VPQ943~kN(D1S=fYQc7B$4Omm93?Nu*b0&1QJz|Ii4<{Jt84#@D(Zbo z=7&MHp9}PwGFKf^pOEItL>RxQ`b(ttm#APu5SaO#rGyXe_-%MF>a>Bj<@*4AxZugu z!!*_{=k{7u0-G_I-tN=Oq7X)ma=7&Khw2hviRih=#pOvgjGLJ+jAr>R$i_ z$_oIOPkz;Q{e5n0-tZZH)zTN#v`ov0ti3E*8=;I{FX?6-j zgh=b<3G*a0Lqrk~BY3kL(hXl2sqf|LId&#D;zI6kAL^rKF8AiUYt6QZfMxG3)=k%r zXYHXGY*#zb z2yECUJJDcCv4{D(cVM&BVQxj^<7;h$vpEegG*qjbDO7qxWZ3ql6s|}OX-^KBXOMyD z3qwMB-XJF^NZtq%vvS-D`mllv!XX)U1qxv_)X&FLh?N~%LPxRr1H7~Jz>MMa-jO62GH1G!E1G^)0(nLiOdl?XK?_gq|?Dg3zk zWk#*c;kSvH8$U}#IZgNYJd&hO1@H2=Sa&8)rz5^B@yRgfdz!Ah&=`yuWa@C8eA5wp zbJRMa?RUqMbFQ_vTHGU9+B$t;Fu5Dq7)iQqC?WE0FM?Te65UM`>j9;+m)HIWums0Y zVSJ6o+kok)E`89y>gLT6#(Rft1;2%9@Kpu=2*01#G4^8k@_YYzTHUNc<|y3L>sDiU zs-CMU?xvtgzU9bBms=ypSO$Ud5sY}?eP(CjmqLV#DXY#}d(OgOssXnb`gl<7yY%J6 zua9{%>R=n_H~viJ9~h(@@DatFtoKjdWhRVodp0ObWdKYXL%-65%Cs8FZ@+w!?GnM{ zK0GqJ&L@r8(Qj1#5;^65Hl%Z2t_s|(?-CVJq5tW>@%2D0QD)D)i^cz~u@}wq$+Dj3 zjd9DJKFJ(Ixd-m?b>*Gq;Uq(SPW@PKG{izixBeuvY^sAFVy>}iVQltt@r_Ps7tMGb zM_nutQ6lv7k3^{`+bxw|{eDKSyoF}+SGc|eMSwc7QhF{w76cixEldkKd8tvpqyz+o z%>n>MWT9im##yFs)rQgweL*V}W>0&K#ovZzcYR-BSiw}o>2|Xo#u02v zL0D~{TF2InT7%Ox>a?eeW%m<6W&y32Y77TkJ_vK!(=$;F3cIKqQNs9E;_;BdsK>J% zmUkuQgY2^w*EdeQ2ByaW-N<#`3wMDgGq`d2i`10=Zn<%MrB(8XQRRu0phTOlph~jA zZZubU=vb;R&rY$>Z@mM9b3h~V*338^$mme!ANAV?pHGGdunj*TyOjS3mjJQte%s47NELg5$YSm`v413MX$}QWyBJUKFema+Dm|)P z0x=u^C4z@M$kek-q1RH$ytf+%;xy@J%;jx>Iw%+&r#fimFZ4UTe$3A?8D8QkfZ;10)qaDjs$&ZdquVs&xdYFJr)%#)*e4p!sF z2G~Xu`?agAUqM?!1=d_zZb)!02UO}k3M2DbU0ER^N9*XRJ+_^8a{a;)MTwV)Ap0nI zBePU~!;ag&-z=cxmrQAw@sg6?TU9O61iw6Eo}fM>56;|zMCA}eC`vs z=VsXcojv=;bk()yw^>t5WiRPo!vp3A#->5@(v-n={z$1sjg1bsOg+7K0=t+7OJVY$ z1X0hD>-(?!FVZM2c`=X?$ZRWxO}w_Hv{ep&#`dcj+uu`3(~O5@lVa6nGSo-e{~c#)L&osf`wQ@Ga=o&c;j3Y*WO^r)EsO z{NvHb1=t=axSUkdc|$u!7ngM0b7VR}(RkgqVI0rB?~sV{E-gO&T_(s7-eN-<=uCV} zkKu0m6Nu*PCAC1<;acHw)t?|%h!nhX@XyrUw6;^r+hbE|^U|Ri6JhkHUoro}dp#&Y z@}m6C?0etWd&BRX&t)ws&~{<8EFfl4;N*KrWOF)FCp1n;-G0ab6;In~L_9s<(e&c< zA3!k-Ha-O8wZOvn@bkGWWx*phtF5EXXU@aHqt4zD`DrHNJlwuLgB;#~gwfk`Z|j`V zVajUzZB$$%p92ExEJy61fM?b+q~rio3+)?Y)dUE;Y|{6g?4}X*rLBL7>O6m6_ZU|# zuF<}0M^dck982oXV}j)3vaUBFU-Mr-yX_~=y)>}=6#<&FxlV;ir&1Y|ca8ZcnmyVd znYQH2YN%>U*`P8liFSjau1(qZ^tU{6Oty)Ye}v6X!SCM>Fd1VCX)wx|TI5~Hk1CQb z1O(mj8~X%yxu%=fe3xI2^|*bt>IENjybE(T=ULOD{n{~>XU=w5d88IFPgUT*`mv;tbS zeXWK;K#*h3BvXZnH!(nl%mV9otj-OC^za+<=|>-GI@K2JLmZ;>-byslV_Uo2p!PLK z`4^!MU*^+uGWce3PAtj_Yv{O#h)R{%1tA{;XHSbH`o+RYV1V`|SFurhsbbQ4-Ksod zwQGh6@W_tcQGCmItqIfJ*r(ovG}`MM3JivAUiF9D3?NaHl}G6pR@c)JJtcHoM6-F9 zwy-3Newtpva?JG#ucNW?VblnD7Z8)89)SsjvAOL^yRHQNmi!p~TsDwy0F@XY&}4b@olZ6q&oSoP^?izg zThtbP)SJ?d;ia7MOgsrn7L?FwChBE5MtPjH8b8t*M`^xSXpcR}9C2DffPq0riIX60ISkLV!8c=1a#+3$4w(0u!_3pQ>*P{=4tT6Mx6g zsN0-<(E%PvBeR<$Q@lCHqG#AP(aXZ`znVvr=5#|a+TLNHD=Dilz)aT({6&|nEIT#3 zd12vl>W@((Ac)5dTJfA3JG1`mq>k!-8T*c}f%$wf7dCgV7vNHt|M95Mi;z}^MpmEH z6c{%?m0}B%i6#TsXMPrbaaR((PW$mEl?qwkOE0|TgvtDHBt^PaQ5L)zb!iK_3oK6v zG{b37Vb*a=dhCKU<nKX2Pdp~V57dJ5 z8>F;dv{-)ft*%g8n$0v|O(-Nt-hT6USZ=E~$Xbx7FjRVKt|;3Iyy<&Q?7(sFGmBtQ zZTm+iRL=hk@Q>cJ%%VpV=gGQB^sTupS=bTh^UebVw{boFW}blaDb%uic8>sFGMwwU zQe+`N^yDAtJy%QR6F0aq(rd}|;7`@3JY-Aul%Pl!$^_(8Z$Y>p-833hPix>y<+WW2 z#;eNZq+b)CSK{!xUe*i!gpJFdS%#cA*cYn;^fel?qkQiA?s@k$(GkMxdMd3aFF<}) zv`%Q#9G2A8X0<*r{nvCi{Om=Ox#n8mw)hv~%as7O=|^=0ky z>)bC)diML78^mSVV!Xs} zk|TA2LK#J})o*=fObQ@wp(Aj=21bNScK((}Txo$3TYGkK^i_3oKqx{CR~YowhQul1 zOvFb`hx;F~aRJ~zC-QA^5A4*NTgq!&3V)RKb)Zi8OBDQjbsl(NBJvlHqJ}7z^JoeP zx5eY@nOT7RDR?Z#VmA1U1E{n>e~BCc z&Z=>M;j4EPpwn8v$H6)PPc~ccP7+8Z&LWN6>BYK=^iv#GO$M z&Bp?egYrm=QqIM)TMPeRv$W>jTNnom%8VFO)@`lRigPsrf~c~PjxKy25$3$_Zmzr! z?1zu#J7!5Y5Ll>RFQQmo%|YpLJ{?#q_cfUYP8fLpB+5&UUog3Ju{lH)%e2P}B~7_W zps-R1aW#P@OC800`#8@?3GtapLDyHByy@BZ15TqE&q>sOY*Zz@=-{P6g*s+Q0u;QYe@o+o5=+hpjC7$7_uGa8PG8wiew zp`zk6UViKASGo16nf)nMrp^~cW3+xl)dh;aPI|5vo(9BxGynB{t6x_8d+$6iZ~uv# zal{@V`5%D0LG%HJG*;h>-v@(M>p5N943o?asc(CeckI zk%?e0jAKL$vm}drdpbcN2F+f_)-y{j>2VOYN7;t0(-WC0kL~4gZY@QLVdjVE?up}oT|r(<)$$g>cRBv( zIrx3rH|1?xaIm(rR1V@>e*7iFB_6nhVC=#5>R+O2;2KQpl7|I$_5ARyXAQ|fE6Nn1 zyVfgXBz~P~$r)jHcRF)_7zmDsL*So#@(m}xNi=@{fo;@0ZE}YYMbi4UkRe98M#S9l z|HA(-QBXV~{?bQY_>{tr|C&#@4?-7qCBB$Z+w^GrRz+V()ThY?8EvC{r6DKdiSg;u zkJDpu8T)D6_vV@S>q7^*=18E>qh^HlsoKV_YQc+OO;J@hX(~~dkM&QTs7d<@lOMj| za6@S>mk7@;z=a1I+`GG*mU-NEa=1n%E*`66+5gF{2-edsp>}Zysfs#vlX{j_$FY`ZlC`OyH~8_L zSjQC~NOxmYL1!EGSuM|^3|L>os^tN9^SZb0dHpV`B)mQr+Mx}Zk35yXH@}HDy!|$S z@#TCGwAxn))or6@b~KOS#$UN#8@uCPcbb%Z7yq8~muQ=C3j3FmeZ{W1Oz{hr)Z?6A z3_qWS?F`FRo1*kJ2cZ13(&WTZl+R8PnooD>TQdohv}s0jh?Zb37M**m^DIRmAz*3h2yz^ry5M}(@H3J z?dURybV5DiSfK@~c~CrZC`UWc6w41xm(oyLeOm23^&V((rtJ6pj zF_wH!iiBJXUvSQi;<}^&=xR-D@&))ks)ann@4_&RaD9xrndhPta8|aJ;?Y>_2a&#U z{r%En(ubkfIzH!oaft4EJQvjlf!X+@ z?8~xKUcl@Vb^Sc0C1S}IKqb`{jzxc2-L*>we0gA>!LhYJ1^I}~=c8T#A`1aqZ45&O z26S4j{&#-B{XH7El|4(1EQf*%a^v|sO^{SP>gZpef>oLL7IUNZSS5RgKGqJ?+|YLw zDyn-QTj@2>nCc^&AkUsF9Jp|u?(;5}r)hz1xu6{q)i+TEvQ_u8w)&MrS!e?iS#JCTvhZSscd53rZlubX ze$sb_I|XX|Gp0N=u{@)(DC$Zz`FLU;OcOnxRAuy-m1r;(Gu)_n1=E6VQ+Pk~P4v5; zc4L>yVC(GrfbVxo)u>a|8|-9tHz|HSy@?DLdTVC=tt>0BMR&}S&brhWn9>5SI)?q2*0IIimU8v)P_zD0|0f3v#M($nAQ(* zEs6(Y3>Aof++(-lMh%1$uWMj5me;-T0qO@UC|Th^vp+_K<4wlb}Y{U(iqA{@&=F> zGiS(W5qQ7L^dPa!vwJ^^FETcC#V;)|#8rYOETQCeDL=va{l#6r1#} z?G(-2s;pX{LV&<$3yvSrn3h~jIf{+e3HuA50$8)u@M&j*pKD{$8hM|Vj+%W&VhAKcf$$GE6)1p1mrc}U>D?$tC z!gUqo|CnLvwi&z)uENjMuoeO%C$WR=CD%Yb+dtP)8F_Tuj}x}!M~=N_(j|j^DV;BQ z`?Gsa+B%~f{pp%Z^43C3t2P6E8`I$T<6)=Lw`_VJZ6p&ynYftk=4fIDcNSE&7W$Gp zM_Z3w*%fM(ENz+c2AF>WALKv6XPQ2CfoTq?Uft$dD(_z30_z=i#FJzH!ED^XxnU>! zg$Oi^yipK_O4De+Tj$+!KGU3ut$dzB-z{- zqlQvqrX}D061iU->Q+XX^|Da-we_C$Z|3bgW7f)0lztR2N4n~tFa`|j$Qu0qx)}an zphy@jOX8=jPC%SPX#y(5VWKb1>$cwrEBT+dEVtn(vSs>+_*2PC=9wf3QyRH9e~I$h zGY!vWmeEa+bA;GWNUJvUK@mP;dBpD?WAQNPr{&$#%FBj`jp9QatsH4z@mwY*^_bdn z6Jm!c0k;u&*}Yu(rUSJfsUITNQ%LAVGqFAC*U>N@hc5ulPZ5y}nP?B4z;C@5^5O3G z|94>fXs2;t)B$Z-T>0VM$9B!X9svyXH!!+s^bth?bz7apcx9=>3cWaGjLmOuLK7!T z6OeihIZ__9zYy6oZ_pQa#FZ$Gy@(IxkW#U9dU;wtRKei6I@OC=dKGcq4YRmX`4;FodU3kd2U5< zdxOEcZ~;81woLsJmp{DAgbFZP`GDYIun*Uo(RluBbbFjxQYYbTpJ21x(ff~9{I4AJ zb-44Fh%`8Vjs-wpf`RiYWc;Laph`r{PV7p_Mxj|?nC)A-4)?G-D8j9{m<^s5;uw}~ z?hD%}ZI-92(dg}DlOs#?%CjG}+N-zLYZ)??g2*}P6-JF4XY-zzY$3rcD4kE;v>FpM zEdAtO^3r~E^eZ4oAR~Nd@(qL5knDW0WV(G-as$SCVMX($45={`ur**83OU4}8FO;w z+6JoZw)vcT@P_H#PD$;+s|z}nZ03h`PsWU@je{Jezpwg?+%#fgknhoye%^{gm+r zhCE!AEe=IVK2P;TllC#xGlX)MuY;ecYA}q>wb4Q61^_IEC(CC6hXywOd0GvG+Wb+n za({5qJjUx(EeUKKoOWmb$fIpapv%JRt1(u`oz#i7UU!yqhn=$@B!-UP%2m1=y>Z>~ z6HnXm_+y2+#rAiR;(NWiWL`SQQL{HmOzGU2Wb&UyII{`rCYQTHquv1}{JpteK~W{D zfuA3J!x)z|JtHCW*L}^Fus#NSkzA?WYg3!wU1zYjOs>}h3NRYx=VN$8;Ed$H&yZ@G*1y9m(gFU{Nfjd!hBHX%y#}j$t>dA;tuK46`UTzrz0Ou; z;Wvl{{ND$PsdJrtFPT0#x0V>hV3$<&RI5&yJ|ZSy#Co-LWY6#)3Awj*Q!+RWWc+gv zz_9IE%w+)z5{od{(D9fL^bH18gd1*B{e6CFyqZ!2z{~ zyEdkAHw&W36XZuI+cUD7Q=yk~3mRwDp^+BZDse=!neDb~4HX4)2yvf;#zd~9$>KP` zsTDDJ>XphyXnhpkMjw=B2u^_7Jqewr7_buE!=QREG{b}c5-scqtRUhVM)RNM+w13YHC`qn|j_xJI`N<^ld9U5QwNei0*% z>>%&f^`j=?#Nj!H@zXd|Ku2fUQVuvIR9mMOGPtmJv{19w2+J}Qe19znk`buZ>m-au z!chU|8kZRhqucQ;`^G;`Q*Q&hJxYDGjz8p_09;O2kVSfK|KQDepXh39e{f01=-zn) z_zo~pwD`9B*m7HKO2zY&-%}6>x-HvlU;u0;BE|6V-e=VDV1N($ET%V9x*C2W6+L8V z=3h4zo!>$_^#s*p{w15+t0;|+M+=v`>gA){l9i~klWz0nkA3|0(>nUtIc^t}f8r`>&Y6MHv z0N}(WdAz{bP&1Qv0~CCCz8hJ-)q!Qv|0!K=_QdbY+^NZNwa+j=e!k$^`kl~~WJBn& zKKD?E*rg@Yn;;=!`rxu_h?|BVywPH3opC@Cy;U$pP@&KyUB2RY_pH^*RhpxeG%>gh zKgFz*nbp<02@Hw7L@;Nyz*}}OzY6ew@;kaCVrAtlflm0yquQiIv`2(2^g*kUo0{)$ zhV+A5iA)zo=IBYpeHQASeL3_9de_E~Ry~gU4w^AtW^Gs{9%-QY=$j0D32#i!sm1lJ zqE!lq5S#Qr39}Sl>x2!%@}hOmpZz7$Q+{Gs!Ew_VR@vY{uyHVM}zUP8B>s zZ0U~0A)wRzOSgF+ySynHJhaIUXf_vyndvkP(!4lBX;?tyKkyyea+qst2Nx!E`l<3$ zTbs_B*m1E~s~dj&f;vvezdm4s0plh4`)(}-1%Fmr7FXGyW4yi|u;M-pAW%y{6csNV z%x{Vwyny^Wrv^DAVJhbXo0TdJ0dyET|1+id>TRE?i_XYq49ewFnSO&YORD59>njt$ zIEZt4x;Wy@*Df|JXidHTkF#RAZBEtREC#|DI?IJ$@E$zA|O_Z!YhW)NK_-= zwF5$CkZ)D#+Ng=_4yygSBgk0tNf)ts328naJ$H0nz9@dTMR8$L1kl;;>{d;U4g(%9 zqg!mci`-iSe!>fR*m-o3@FsUlZei?>x_x7YgeIsw{0WQyoXIhTOne?F`rcn6I=U>u zdq1^0#&4HDN$CWj!Cy#V$CT&j#ZelSq}Gq}9{0KhH`#uyw%axE$%JQ3^0#19xi86Y zUI$~R7&AP-w#P#W_xZ>JK9K~lLV>!NVHP>ubE{RUpPvnvOYPuKpsX5JAxj^TsLp#E zC1hRKWn_v*3#9P^AJeI?y}ZxA@c^@AN0Lp)FN?)qpjLRi9+3nVy>`HJ&h;mtxXes- z8&c$>*li+5OH@{}6rHQ2^@^UOIPspw9tkM$H~0zF>rln(FIOxiie`yLQ#2qqP8jQO zB67Ge`o~k@AV(ewYI+w}lyACg8w&ASXobbmc!8gLdECLvK z0N66P=k#cfU9rdShc5;7QDYf1)fBmFRCIQHWlJKI=8RM68;_ThP6%fnYYAiVN1QW@ zy5Xni*of2T9Wfvns2ISCk3Q^jNmDzoOza=rN|iVFNm%zE20xY#69L-y^(z*ZXYIlF zi*dDar&Wv@CTph&HVSwWD5`OKcbp8D_^AGHfqJj`m!I1EL8;s@nKAOI(bPZ4XFoa- zj<2xo#j=dqV&I>Cs%gs(Mn~DcKxP>MbgypPhVf2A8mHp}pa~e!%f#?A#*!N4>x?U_ zTL76F+{NF93Xc3sB+OmPSn?IrE}M}^Sv?{O9|V}!@?ZS4n*=d*bN!Fg41pdW=!7hW zPyr1{sfbhJ%d$``J+P7bY-mKLfN z?3I%BUjbqtaA>4iMe5chHjm;#F!JKoUy=F&Pi240w#@Al7J;oVAl(}WNWHoXZe!UN zCGb!cA0bfyUwI&oD)alpN?vyB0rOUtC-uS6$B8PrLTjUEptU_F%HLayR|=zF&_)EU zr?1>k;O>x0Z9n2GhQCC4Ma6lCRHpT+??SV5P0)+8zA%vAx>; z*aST#gGI#*o}b0cl4e#Fl`~_hf0YN`s{AE?W6=apc?L;IkAU+}J#*u@O0`k%HWmSd z#@B?$*W(Xar1yCDWm?a3{w!UK3Db8h(dxapdUKR@W`Kzg`cQsGQVTJlyD!cLj+Ojj zUHD00>_-F*!=U1$5*54l4nYP@QuAC5{;$?~)CEG^{|OOoExLY4dZ<*|JvtdFUCTZ_ zr@HE(_I*x$;vu_hh|GVtIeeZXU8wx?FN%vis@&X+*jn$ND(pGaT4IMrOqU7FqK>q6 zoe%xH2a79wuxPva^cO2Q$it>ekl-49gPaMVS{M(0%w)3y7!K5qyDpT)lcj7!kuSnj zJb3yx!tUZGIVTd!a~SRNZ<~h*TE|xE7v|?CD)v5{mYQ z^|feM_vrr;eak8iMfW4)-VwSk5RT}G_V3u4`RVJr7b)=|f0!ezx7}|9Tm;eB_kp`* zfjhP4FD~1oy&0v|Kke{&v<-!j{;C6s9^5yzkw9_)9%r&{w3ur1$k9}|xz|1Ykn#8B zTgn~U%5{8zIrQ-_%o&xS^E(Ip5-^tEKWaUbY+zwx`hZJBn-tX~!k#gAr?+dbrQ ze*c3Q=U9DOe<=7=v23p@(3<&Hn2j|m#wC&CMC(a7v^K7>L)${+x#-5%@xTwQ4|`l1 zd@Vs>w(p6H%N?DJ0J1KY*yElU<}TEd;Ff4ue?C;2^e12suFhZ&_uO!oZo_bb9@o*94lPnz@* zTIk^a{zAG!_XStlK%&ei`@#pd;h#ou3@_|PhMC1~1G2PHULHNa5kpO^x5C-? zYNJNmQ%iVne>Hs1nWKT{@P^V)={^ZlEoyr$2&0cCkesUk+5zD9ewl}58@&6nmeT+3 zX`CKQ9|X|d&gXF)R9ztZpcq-7z!;_7fEJZbnr*rg=H-aZ$n0Q#t^~|kL8u@YIXA{!^@*}2voNX4yBsfp{L8=xUy->u)ZE-PEZaA&io+yR z20zW*Kk;jLmvOa=o+Rs2a>W`q7Yd!kU{Jh(77$DJfG1UJk&aFd1G~>)ctcvz(d6K? zHtk~8H>ozRajYB(!PtMW{hm4^FUAiQ9T1IK@Hz>@)_p6eX)mnfiI=N0FZ zgR1Hqg7*$>=~uR_ai@2>^m*odr+niIR+QI~*IixYTyCBr?~5rz?T=W8EU$oV`qO0= z4~HybT7D{5atMX7tEV^O;K&!8w#23x3+7yV@iu@i4!>>4SAQsHPDBSI`-!A2?@d=8 zcV2){?$cr?U;(YO+py7mZT-mqaJc$B)xTS8coPgPj^!GE<1WUz3{};ifB3m;WwfK( zoX;P(UM*c=Do80jyf|fx9x0C^h(8+hgncQitm-m$)f;JyE}kaiP-TI2>+kPtxH)G22ku^fD7sDRp=ipiO0sDnKF` zWW{I>x);)l-;qY6Nz-x(SnSI4;NT|8mmo2s?v!q*$@ zD17vK3|Tgmn(8a?sM?YFsWXwY!pcP8jAf$LIM+L6R78j7WOo;ZD_l7~J_W=k`;ZItu@KDmU|yeYLYaC}tmK<{-Pjyx)P2O`|M@K{{QYMW59 zcK*`CdF2hrn)|onZx4g>dMdBr8@EzdA=|-)*M;H87V?v!!jqBz`xzr#b}o+`0+_LJ3vG-wn_U`pmOqT{M}BO14gQ{TL=2b75#Z7#^d=LY2IWd~xWdRD ztjZb%)lK5%!FStVV%M`hRjV`aOg+7~16iLGkEm>4%NA>Oo9zp+LJO8wLS78dy9}Ih zcXV|j=$Z?vF{d`IlLIw=H-6D94)BK*L1p3eK>H3MFW7}@C}SB{VZjKoZ7|sy@ma$rk+tI&N)KKsj)@M^sox zoamU#dZrY`5Kk^;|3uH+uV70SM)&~+Gl(0-h&wko|2~7vc=FOuewG<^fLzTC~7NksZD(V4JNuz>M} zg+*@tYVf?awv6;5;9b{ZJtx86!UaZ`V-Axo-KTqD&(0aVEsGMD+~@Mp)UK5?(N)o3 zX2J?&K^(+cj9{hsaCT041d}gFJOivlBG`rNoF9RYXKzNzJ|6rv-l-;bUa8GrFZ^93 zB@w^k_rhRjYUh@QuHs8Px z7?5{L|HG+NlAjMz;rHZr(^zQRBPSTyc5k;J`sS-)9DxWf7P)41obV%Bm07Z|9D8*8 z2_97q?j?UFBB%W7`alR|Sz6(Er*{qR?zRSwx7uM4*dNf$7={-USSd4v2MN}v*Q!2N zvWy3MZy_qAHS&0#$rIOH9)S55wlR2ZZl22-up;y9O^^#w7>qHC7c*##ZwXWer@Obi zgwCn9)0ZzUT%Oxn{d!WUe!)}IY7QPqJ35;^FrQP&WZ8zdpls1e2@w-PmvK>slNyGes!N_i!t9@3Vwmky%AXoH z-UD@og}U!vCCbOe6yPFjVdIWU!P536_wZ*xbQJCUapK+lF358wY^}`9Hc5|#8kj^Q ztw2IIObBsIpMAfG)l5|H&R_Tes~Egv{eN6*LF!FGN(Ltx+#8vv>sZa6l_ZWXkhX{~ zm@;y8z6Ez!3kOCAduC7O=52&Lw;ywPYPVA|yMf;~5u9BiUvup((c&LsI9GihdnQCQ zWCcnJfouhF>6g_kjX6*Lel8y&3m(X0&trv4hdcysm2|^R{569uk~Z1p{|d`zya+3eSqmof2)As-noM>2WfOYjD` zGeWR8AyuqdEn;kRSoVjT>-m9f9>c;$2^zm*_?%H#kYGBi1G8H4%(oIc$Y zIg?<8U!<44aT~Z7KoOjxSBIEiwossB!ZALd_M6QU0q_&M#a*$EI0(-H%icVnbxT|M zy9w0aiozKEThI$lzScjN^Sga0JKZhaqZ#@PGgR{G{SF49t$b}&-#j$KMVuTbk#XhU4Ctad2 z?4dh{q=7Iw3rJd|wk{a}e^8IgXw&SpVjXe+1Kbeo+W~DltzizpK44h|2l^0s^ z8d`VQ4lyf^fIuLMACF-&dFnJYAH%lln($TjK5+z&10;NMJoQLlaH%8_x03nu zF`eJpQzRAvynDbVcMWfPO@ACHRFOVAd><<8Q+{TfI1MyZ(hXNu?K8qTN0;|!edlLE z(otEAvoIEMH2Ks4DG{_~F{yJg{WWHMed3pU+uYo)-{!!Y8MqRnB2?n-?I7ka3PEz& zL24U@mpvR`<4>brbc=Dh5N}|ZZA)ZJcQ?${*OrR?r5LC;y{HeK&|QXHHq*O-%Y<;3^5_8!S5WUVxm#I93(R^zPB%#=B#Cn zykS$K9pd02zd4qF)c=((}{y7=tbF9uWo zQgi+AI1O^6vduA&s|zvG#O`#N93MAy5Tg7)81DL{X* zZ|Un|sa$R>PH*)@Cn-PA%r+_u|IDs|voea>w^<@8;{>Mj10*4dVf0!58%6EmF=7E{ zDtIU(r^A+ydFZJwOy>gqsfVvIgjxnkD#u8E0)zQ%J^0|TrvMTE0qNz`?e{^|G&kc@ z@kp8V7$%DvnYAd1wz=@{g5_>C%IhN^?#SQhUvkLGPL!v9K(0N6SV0h~!z3bkViZXL zv8JIRi)C>9Ic)jKEaKe%#lLlBZ|gqYQZ8c-a3Gb=d?UYD$nta34q!+>v#V1-18t1- z4YIOGHBgt^mFamW(G}LGJ7|Z{Z2GO=cNgc}cM1u?CW_zD{EgC?7O_o`cG2bBfRtJ9 z$ywpdzb}U@l`kfG_{;1nguI3f?)Y~bR-enSN_+HGi80?thcoYu@Xj(WfU|(XnX@uZ zjsVaD2y2h-JLa#?Z|G_|D$D-7T71d8sE@DwFZ(LqjIqtoi*7E!z|C{tch-EM6N|Ch|3RZ`A`cP40TXH%5Bf0zT6Cba7O>k$2ld1gL_9 ztFNl50!O+n)VIA-o8XQ#3OSV@wm#c}-gng2+*oQjdDCr*(s&~qOPnY{$6yne!uWhq0w=NG{}IgF~luXHmx7`wyQfzSHln}$P5+Jy(T369?nak$N2cf5NQ;x)}1 zXBY_;RiJ4X8T%sw(JIUMA6J8Qd!f$DaCX^p#;7E;64#_fYmwH0=@%Gp zi|NaBSq{S7Fn)T|1y$%5?zfFYB~F1k z1s<*+2>XdXeqy(<01AHz=FfsOnAw(~va(os4+d!+2n{Cre>rvYE_9Vvby_Z?Tg8~7xPda4rb<;t9u+BS#r+~y^4}l z%c>HO;JT)dEn<~ir{IA~{AX1h?#bveKJ5nE3O*p8=^>K!m}vWnA!M!5hjT!0v&6%b zr>ewX%(-o-=McD#8LHqcn*_xoyR@LKPBSkw8hnGXCLGlF zwAjlZ=~qVKtFM6!+kyUi>B!mhbJf=XS82-SJPT0@+?xam3{%yFpC%82 z-r1Z72{{!Hhd3O1N1kytmbFmQ^Uf=gCciwP+Buk=n=36rdBaz*=}l3OY32E_flvS% zPW*2qx!DwGXx-$+^0eS)I+}k<)E>^OFX{yOM#zD0!I1VAlk6e7jy%w5&zfL)UR~OY zPdUPa#>_Vc(1|4t+tpi?v#d(v_7i?t!mNX1BJ5I z@zO>?S{nl_VTnqa=AWefbe#4!m2ONfiqT7a=pM?E{F(74y zr>pbbU2N+QeI@?3T?Sc*ZKmRC9it5hjQVN=3h8aaO=jgKtLUb&B1q66K0 z2hf7ED3Pc5;P0E!G`1J2hyv+2k5ujEo%Mz>$7rjntbacAy`WH5t zQ$MuxF{uW?S~@6p#5p*hJ@g!KYF?|@P`D|+f=Nx>Q4%7m2%w*p&GqfB-sjBDqioOR z%jF*izKg!ZT(v*|H(q;wBv6H4y-0o-lu;UJN3TbeaV}B|&M}}~%d@PUC zBQlm7FdY?D+oNpZKin}`xD_2sc&Z_@7#RC-D-pjxfX!%3L*+$d%e!@7dy`p(K_XElxwm?^tiCCHI>y~`|(sQsIkH#);X1s{k0@mBBp z)<*HL?)lyj@<2Wny9a&idndQ-s@87V`m&?2^$EZO@nDU|dJVl7{t^H8RY%Hu@V`~Y zeO3wO|4p^c{Xt(Jmg52=F7Wu=*|MzMr3vubj+;iV9zzGKzEky_(2EUJJaTB zI(=m!pS*v|i;H%~V5!Kc$`5_j2mU@Cq0*)%_$tQV3`weLz#%MIG-1W4h0A?byw2%) zLe5~+Jg5Q%K|wIt?DgfmhhMhHjBN{ksW<%OI-X-tp2HuHH&J)A+NHUYsrU4ODnFU& zu_k3+bSbZe&nL;_msa-TUk@e=*KU}VB}&Lw<+<7d;VBybgZkE|uQMpub`$BouoJ}w zm)og|=iCuCeXLi%UTS*KxAstu(Ls)b=vG1Z0Wp4EvFlpmV5jZ}YXlUCj4g2cTO1qm zJ+6>n6EGfH9!{BwZY&bIPTln0S!U(gSMdKCW_Kr)t4n=`+Zeo!=f+nJ}9@E+kbu#l!G6kUsP20@CWl@pa1aHoAARLA*>+rP8)X}UEJGp zX^{5gf3~xxhLFOovXU^bm*3L#-qRgu8a*7cx~s$80BPz6APZDK?27VMv}@HJY)|Cj zoRDo;32tAb_&b5uL1{-*IhPknK#|R;8pwDkzMJ_G<;mQI`=E72aeCX}-9uk9ibwMp ztgx%Rgl)vJ8E{yWzrV&VU^A_`R_*^HfG?v*zowjS+md`Y#o+UCISke}>~0faGkm}Z zrxYJc9@__8_Vsevtu@%&_3-${D|zVNN4sX&Mf{6DCIIBr{7=OPqtjQ>f4TOLcm4{Y zzq-WfmdM!2vyOkY`>l_Zjy+o0x`w3+bf>Tv|JNvJt^9e%Y_NdxhVFF!br{7z z0w`{8lCU_KgN%`hk*N@DEJu9`Qx~fQy=xAOKVT6q2lwkQY+LUOX#B}*s&XprDV(Z7 zu~eWydi3G?9YYy;d+)PKK!ethf+9if4;Ks2NHf0!QWYqK4A?Sy!#Z<-se|gBaN!hr zSR#%MI4T8PwO`RJfg;BOeT;=C+b7P-b)ggrdu01|EnJvs2DXFyJmZc<9SIsW)u_}; z-BcsJ00-=W22TFy8itCt)Lm0EskQ=MHI#@CpTqp2JfMPIisBp^P z4AnNPIAD#2H0a&C&r)%JLCKMMmb~%Sw7k0M_DL(D=@^@A%zjbom{m3dC?nLe6a`Sb z^NV8FcSJ*CUz--K@>wZMx6kZTK_N7Eg+i%M^ry_~c|HAtkvfzyInoG0Wtq8#5n}wpGvwBbzCVg6Q6Uy9)4tF4C0A*TV3|3${7bsxSS{>< znQhl48$1rq=P{PDwx9Aazz^jl#>>PZ!p{CU-2F0?}02 z4Uo}!!>cgfH3}y8V2EL*}8zK zxG7OyS$Htpsf`afGY(}tx6OwJeJlFXLiBIu3-0}Hc;AZ_rKT|JeP2dZ+z<&n?EsC- zF2dhI#m-#+1AHQUfyg2RdlY29i{)Es#)?v&Dz}aiEwQ?MFbY3@kC{4poQ5_eg9>DH zNlaI*QH~6M@|-kA!sJqRQIvqo41$98OaNQ-HD|m_%8P85wCoC*pe_TJ9^*~l?*ms| zet$#$7PdM20YH?mG$+B0YsnruE6F}O>&ZT@8~^`T=R5u0zrs#gZp%iY0BbHp+p)p7 zsxR%u%BaESyQF2xzAG6cqTBu-asS~U@C|S~z5P!;x&9hOp;%AVrvE%I7?!6L_%Q&- zLk>Js)}Z#IGVktdI0z#4Yx#HCE1fqa%OXZO)Vg48ss><{LxGqJYew_=GAo-?YyJIm zA&|}0p{AUef6LUlU*%3U;9ng2564-zmNkBKOlmDS?jLj1p!(sg3Hc~ z6WOk9A)0c)@sz%}Of&x*N-G@|;f3VQwt9L3{B zuzxU)kSU0B%9L3LnEoEm8-v!_>znK#Q~#jNJ!%6Vggw%P;K-=beiy&BEe|dd%Jf*d z?e{tl-fF(r`9gIK@Dlxj?Z*?rX@*M;Uzo3IwnNN6+|{S|2|?e|SiO#Y)n9%=uV8Pf zUAD3A$0Rphv~oxP;Y?xmu%tJ=Um}iEfQ`uTsrs$BK)iM3)te9uzub)4W!+`;>MfvL zV6cS6rdVG(GR|9;NNWsbI`(&nj{F3cuX<5;d}aSXoPC;mQ~Ol4pU*~;hPf_lfLLiW z|3CQumTfV&*3Q~V-oP`?+$rTR8L?`+drjX!jr(8!;TX1kr9oTo!#*0uTJOWrZl=?B zn}OdY{xnRu6nGfD1MQoVLy|%~bfkKQgNlPvKR2ZVpts3ck5X4{w<< zMxKZ|A}&)tbACyLMSwCu7!0_{J*m_xIz;NgmI}A#1hloawK_n^J!4be7Y0XNTpQ(& z)O9_L$THefSRH+}Y|0IA9c(cbmi$7os>f$9TH;mZ6AVfh*ox3 z79&E+t@Gm5JFlcsJ|2b1StV%B*^TM9ybGD7TxU@{yzjL#)~!j!K0$WsyZ;GFIkdiPcn^cNI6i6A?k4#m91ABHjYj&cTO&dR<3}tbfUHuwO2){C3o$Bl0!e-K9^iAgok@Lmyg z0)YIj=8emiN&lcO-7OXdP-Y&z?rg%>{g+v}1lwV`Ki{QaAoljf1Yboz9U|-&>KT)0 z%Z;DOTwu^+u{O0#pq^ih%8Fl8X7N5))IL_JRU@nvLwcE9wOI%{SD~F%YAmR4=TU^| zXs!3p^AAlyN#yu60ru`l4G9aDJSm>Mt`m1WZq>s>}Mw6j7C($BcBr3l26=}TMc za%TNI-b^ZLr48%UQH(mIRWZG>&QwVM9WJ`R8BhTz3s|7JbR1vf&Da*Xa+vO z!PxrA%IUQ-K@@VWe+4>!;O&5NlFascS}Q17Q3`d@VgVI|+Iz zjS3s!o*ZK2*x!iRW@8lilwa6SWG+mbdkolYs=j#pv|?$;OXrHFC*lOIzH$*&+EJ9$ zK39}*>0FM~ciGrG`axHz4V_GhpPtdoLjESxPpa47_o)K$=7Z|o5zenKONPINbu0%? zxBOW91k>9J<_nh zeQm_S^GeH$HA_%$j1`=n>zs&@rna&&g*jo_!s_Wc3!Tn<>+iIrQ3AOL>s`uL{hrZ@+F%$-%B9brEQ{M2H5v)00*Lx+W-klh;o;Y4ca}>`av7S>j`p#UK z{jB*^UR8y>9WRt%puXQ-DwJFh%h& zMd)GpKt8&M-HC|nrspO8Pro+sZKKrH_7S|@-?v9H=WAU0B3hZF#46z{3-l?a zpWW=TJ8KrBQoF$w-}JC8j|}6hL!KD=s=C-D58c-rb4Xr9mEdPc@y?WsQ?PH_wEyiS zlm$_CLmJn*iWRKv&)OG!i9pjMiWeSx*YQ=O8Pe|=9F{hx3ZK|F z%L;oe{TuEl8Vct8+!j_I6aJeRcJ2|@QtfVYpzgWH5G`!NfI5XStt-5RRZ;Z*)RjY6 zhf81@uY|mjJP3zndc}e7p|dR0K42g31{R4vdSWs|TvN+wF?jDEUy9x=agn)YFYs^* zAbjcUr=Bz)mLmEHKfXgZlY+ZcWZ|ETjJD5)YcQFJs?Q5!!RBOPD6wj|(@_E_cl{@N z8PsNg|MKxSRYo{cO^wPuZ>jc1vOsYtZ-XV{?#g0uc+~)KYi;4%E7)r>m$G#L81C_c zOV66N*Fp9hB&_zTa7Fk8DAcpfnr*5oAr`qK%_s12%1^U+F@6PZn}`olab;s=uxtAh zYwbbrkQbg!1Xs7RtSsX*l5!-`7S>~wjDT?KKS=xvRh|H)ErAAW;eyMEwu-99S)tl6 zR`^vI>#+KL8w+F^qT%$KU0jY!PL=zDaSuwl!C{P}obex}1*a zu)rsjBxs{7DQkwx^+LDi(Vdd3iI-xVLgXsb9H?ECfJ{6Z;(&6F4bV)_=$%6&nO+rz ztFdPeRq_pWiirV3R?Ur|3-J&-JQP_AZyMUa-z=UuWk8Wf?x|6KYh}EOUOTVa-MH0( zyEf3w%{W>)b`~k=&Sg{#$thFRI`Sh z?uzL@)Y<(H=QThNzG*I;N%WhmDPZLH@fIw!6mM%yAldxKjY&@e%#rr)a7US3h$h7- zfy!h`2z&??ropF;rLzw-Xr35vI7#q^*S5Din1;8`o>R}wRbd(Vsik7l1Q)D8E9VuRka)0&^yFpt6BC1>FEMr{fCEjoAc+lD{=(DiRAonxxemjabK^ zsb{WKe|QP#RBMV7OkH;!da+pjZCPAr@on{!VOSdE2E5C zD!E7Y>>KOz)Q-vu`lytCTbUvSVMjKj@C#3p*{7<^lw{$cYvM`$@=uI5Yp@9E7yahx`J#qC6q37|hRC&bOTRlNyj?ZlHPfE?fUUoFl^n z<-2rMUNox`D;6Cq>p9h@PT4FY{^Fmo^$(8TFU^jVf7E$y@UgB_R^nhvlIU9jXUnrM z9Kp0NA& z;^anKxo8`#czyX~gM``MffV`;bt#4UO^AuMgjl#wIueEKl4GBhZ!br5TOQh{T!ULC z?yD;cL&DVd=fET;eRkuq*{86=|5%mZ>LNjpv5#M61GYGj$%A zCB!GyX=wlUc-`Ba=v9K<$yBHEzAlK21`~J+X+8bTQz`v zd^Y}hlgs3RB(kznW-)U;q4W8K8B4d5>MIj%hMZrI#$9-8CMvF@aGbJ@1#{XKQ!SIU zw~MklY-a26_O(~tTu2ya!HE+$s5ncnSj1Ke(3+aiU9oT2Zh`APvM+>rkqA*_rAe;! zh@#F*_f$q{uxG9d(viom9UJ~B6Z@m${MN!{ipbAzsBZJuGZB%3ay;?23}c1r;TmcK z@*Vo_j1JRpUhJ8}(JW9vbVW8|j%Fr0-CS_=mS-0yM4s@Q;z5mDVpVZO1XL7mP~%o? z1KN1%Px#A)>FCzSS3pfG$IX8VSHw)W=)7tT98XLNN3unGP`GIg$-)EsvK^=Em`)Jc zsF$_^hkm61@p?ZIy|t<43k%SJhv%%l7y4B%UHsZ#w3xITob$uH>7#}jcGp2<#JWiJ z+KxwXBSj;-aJk|-pj0f237xx}nC;3Ks`8XBbX{8FH~CAq1nT}uxp$v8BbHeYt(hz4 z_2MSX&kG>8!q*Cl9#hLpN(dd32HbUOHb`ogfwG)5C{0I&D<-K(x%4+@whgC>eyXm| z>aIc$LBglbLIWP(h{ieXu&QYNi3Xx)bc$y-i|Z-Zu}rH(dv)q9<)h>TR8K%}ot0Hf zmT-qhD%a>$>4y6SYcczPd|^!1rfTkBl9QF`R!)0iHEAeltcu8XQ6bQ#_yN;w7O?ly zq)VI`rHw7CQ(TALJ^>bb@JtqBBz9vqVqYu9QUYC2F6&6L#*#M2S<*mUCoWl$9LphQ zvGnDI^y12~$)qU9D<2)Y2F6Rd26eSzwW(24FGWe}ZPQ+ewjc~_DRMt`zV1jy)cAIO;f6EzrfU|(Jr*YGXYj9fi z3V$0mtY(!6W)Ne^>~cxLdd|m%57)EwJ%3@-$v{#Yge*_WCZ?a)jVY#2bLZ#zZ71@9 z<^rC;sW6fv&)1e&Q{9tFl|Y@g#VsaUk0f&~597|6G)`aCrmdt!cB1q2;k8as+($~( z5^-Is>?-AQyHThb5~jR`w6ab=yR&K-Uosfpe(I7DHm>~#T}-5E*bOf0HntVu8K`j4 zerU_Nx}%kgNi`+^!;~aA$(%u=t?>DevzBHZj+3s(vX{CyLVYzbMU)iRj5kS27YMrD zW_mqOV&R~YZvG5HSDgW z0kSYfMy9Qu@DI5-N_dck@n9tOUYi#`(te`Ke2#w(c5e4a@lC{g;oV6aOA(};Q6`88 zC&9;G%;F2L_u43L5I#8;LC6}^0@}@i}aRvGV9#!WlNXsp@CMT-h3Zd*$jCo8eziJE!V!9615Lp>h$D+jv z9VYKZ7Z-t|inVb5)`h|osLe8aA}>_QaM^{wtpv!tMCGmTNwuoVLZ(xBC-eVw;8j!v zq#h#0SLTg)rSOkQErQ(T)`+*`6s%p?U0UmXczlOy=6D;R*=!?WrEvDN8X2Q*-gpd4 zNu^(&)X!Mt7!qs6^!XCN{QtWv7jF!cBj}w|h9gW=nN;TcIE3R?eA;g-k;R z8-L_rXUR`C#~hn-a3Y^{;p;Pj=$>w~`M1;3V3)jnJib`Nh2=BB<(=DzF=uy&6ZrJU zB)LYgsjUFXHFXghsJc8k$YjRh=gqEQLzTYT)HR_wr>!3T-152HDr~4(#3Qk+9%LxM z>|mXPN(~q+Cqy$!$_z!4(7k!EzLQ~Bl@9%|)V=B|N3OY6_l`OC0ma2tC+4bDO?%qh z-P2kLlpaO#LldmGKz-g(5sKiREf9@T2fq@dsLp14hI~0T20NBTi!|*n7yW%?!aMSz zi}7GIeV`JMri&VQFTvR+D(>F4aipg=Rc@*mI^bFA3n9?M^*MqNJjl&P$Qp_ ze&c~NOE?m70)tGx4#$nk0#}tQnZr)`4N0uC%4Y$HvWq7Ubn0ijHO@y$4pSWAKwhWkhC&KTl#M>%|&xIFg9-sLb)Xk{JEAsYagsGN@cU;t! z$Y`aJfb=(~|AN?}s@$B%%-;(QXFuPZiX15)D%)a0%;JO6ewI3$8-jH1lCFQEwy__J zX3dfw7;(j_Zf27gw>20%=AT;=$ItsA7H312rL)Ntk;=M`t&3#Yx8>&|HjJ+J!b7*W zVQ)y4Xb_X1rf(zzALC&wb*%v)yAN79yK5&;HnKomzZ1s(@W4xwy zgd?)7;auMwC?mwk2lB9Fcyo*8NL^D*BeqqQKymkRvC zBbh$yvXR8SI^+%X#4sKP?c}!dOj^ywc^521`zV>Ch%j<>zYV$esvQVDdQzE-IkmS0 z=9yh{LW5{;bykW`$It14(JqW-V(++b-TsmtWqy5R2=wnUIHhoKJ8Lccwr zk~=s3!O!|G30<42ZEClx!d=&0*X~rVp+mwiWLK!r-m+L}+=xh=`ni2TaO{KdI}Cs` zO{(L}1vJ4Mmsz(xetR7Iag+6Cxeb(@2yl6Qft;ACc3qq3hBN5Tt$P3tLc9^%csh^B zggS%hJ+Mb9&V$PB@mZtIBXI^ylW@a|sGt6vQrtjxI3y_&+4TU^_{m?kLCuM*@Yui` zVJ=Y{)}7TVSe`1Q=*f0^BXjCwTN%x&#;O|k26ixe07N9{j^^jC#q=ApdK=!p4Tgq` ztu6VXc^VpOvZ0-wt&;-Efhl6);nu3n3#2bC3*z65|1nW+3!NS8$d-g;j9I8E?NoR( zfG@)5mXbtK9EFQ;`H<|nzc8~}IF9hioB~3~1!t~-GpjM_j=SGR7<>TAJh^MI_+-#Y ziZVI~~fs+;nE9s&^HDsa%T4~Hf{>_Qe)NLJ?TZ>gC)<2xDevyaH7@h2wxrT;X^ z)#a}=mrc2*_V1?!6}+MbrC}87nZe$vfL6d-10*w2q8!%rxg>`i`LPWH6B*Bcsl81k z?on#|*1^%Gnb}g4ZDQ`5+;x>;Z2U;5&9s^l9g3MH_zfeF07<5G8oS`Tdkp3alQbnx z!y809nH8KXp@h%(V=@zYCk#6#GLFf89BZ?+tm6k6OgE6F9(xp}${BgbWZwJ?8$YBl z8P$$|T1+ykb}NYTd&JZyn_I^nP!Xq>t%OT{xH`$=hUm)R)#+T`f2s`}q>BcF50IoE zQO)i)iKX8IUQhU&LS6X@iyFXw)~fjJZk}BJNUgp8x=0Q;FKUa^r%tF^c%DQ?k$u44f%y-@T7hgl>y_Oq%&*NC&VKu?Yj1eLa)gWP% z)F`FdTUKEBhO;z4#Q5E$6z;)OPGxfFxde<3v!M1r6?4d zu*`k923^;Fm(b)wMqen)2%=h8ut-vHb-^bRQtj*@H9uGkka?`{_!?5$4R%D=U~)s{ zR6>t&$SfiqM~o~KpKg9(vqjz*d3XGWLlu6?rKh>|4X8n$bPc(Zy`9^KE;GnKt9trqzwb~yU041MY7tzPQ9D) zxTYm-n`UJ;;2P#PRIhmpz@(v;S~% z5t$boMj$1}cn8Y+EW|&}rTUXgmj*#RM`Vt4;NzxtI?Evt?pF+vXc5sI(lY z@0DqSWsa=RGM}AmDmQ%r?y2dVr>~OQHr;xr1xjR&5H)gxBV)iVO4clld(JETu7>JH z`b{unv2A{t+!7a#xuF8IL{@NhR1E2-)iig}>feE8PZaN&MfO0Hk{28zHMYr|Egt+O zxL%($l~J{36;iYW2AbNwAi4QZD()yAWzU=9w_5(&3D*|4ik{eKw_5uQVHX}F!b)nT zH4WzO6jZ+LY2>U9&oQOPo(rZ?O;-qJQ|aVAZC2ZrXCq=lzj&^K6Pd-$`X)Zxbv)Dz z!sl`g3mq&6y!T9&FXt{iUU|g5xXX49{|n^nCuSqgDxdYk7@he@(XaIwo<3qf3;m_~ z0$o3(65%FMgv`8487Y@idgl#6!I>av9-ip--R4FqsyGwzXHi(Dml(W1i z<2lM>ghnq;%Cl4{TYowgA?4v)R%BBk-KCHwyUKIu>Fw$5mD+MY2ig@c2Gi}UEIh@!qNl}A`=Y0CiH+}7E-@PBJK4}mvv<*Deh z$t<>NK2cloBFKy-h+?({6bX3+_NgAsX1vQRZ7i8^nKy{=5|(}891&rVS=8oPlGAr+ zWkI9W^wU2ScUjmsoiOotmh^(yvvpsUvq*w>4=R!`EBfb5XiJSgO%BnAe!PCQ=z;55 zw{858y`FbZvF2JJioK74BBfAIAghjonhyaUawdG6;jr}cQwup2*^>x@*LXY|K}NHZ zTfc*M#7(=sB%?#~$cPQi^_q{)AK$(2LYqv9yX?&~(MHoS?%S*wazX@kvp0_5*|(j;FuIE4cx&?- z4*cAy&*F>sxmmP}TD316*^~j%Lj31i87AvMm!)>_uIAZH1 z;LG|&LV)hO(0gmSQdNr2Ihb9%|E!?Z^gH0sVA_6!115a$b zO9Hvfd>)y#v`{;xTuaYOs_|ikM$gX1xQ+oiK;K*ji?5%2D7uj>G?@$6Ab%b7%~kvd zH5pN@k~k>KK*y=$)#5jDm*H)}HU>TYCt(DkM9*`iM@Rm{DY-t#)FKWfdZC{eml2=a zVaoIK6YsJ?9zVz;57CLY{#rF|`k8JJ5> zI^vNgSZeuHU0C|jjM%!u!h%WFR2 z-|S@$S|X+|M8flv&HN{vjC=92jFTVHwz6o9fMOI~&Ar?m*K76SL|+iJdGL8X;dA@h z!YuF~j&0Rm<2DZ7DBsab#>nuO&zhZZ`QknpQ>4elS|4aG(!U=mnn(TU-FQSH^K27g z(M0)S!G^%d90nq9p-%ezJTr&1wYTzOKGtqC)OHu@j?B(7Cma)@63QK_brX>l+>!Sv zEqD=ILkhcmg#N>02%p-28AN6)IM&Sf(ypya9ZB{n=kZJ>$g;j8*zD^ITdRoYIN~Wr z>#s9oNhr=&$(wL%RCAX$`$c@!Ndsxk>gpS}tIY5-vkw&$e+T(brzdlidC`j=x&0-x zZO@FEl=SR3^;wd87{TGEM(HHlq(DN_Ce@lP+-$+~T&26G(r!@9-1~D0Lw$EQjt4g( z$Je$O2*#_Ft+FcNP(pRn2|8@VDIcDh{L`WoLDJt;1Whe~MIDzdjJcoED|z z+k}!2K6bEqUQ+yg6|nM=_if|Ix8`dy@xfzLF{ZNCf&J-wdm;n0_aUBwI41{h4I&!k zD8`rb4?v$=kO!nN6fWW9&Hk zZBneV7BfojFmqUspTZA?)teBq1@cl&QR)Jq5{^{GfIL{`rk6zAGch8-Uh?rn-Y zUYCfgH$T$Y8gcv{+OGe?i)eV?am`pHYpf86fB^lS3(s>pHI*rBH}KM8GV#?|f|g{l zI`R$n{hHzZJnn{UsIEqv6-Jg7tMm02dPGF{ZY6|{U%fyc}|`GrWGKz>3^$EWc2GfZ>};_cGy4rb|I$x@ODVi>CX(7qXl zF4|XewU|u^Y@5dze)@pNt+%~5w)O6m(eX8*M~)L`0O-OF+WkmKf~2_h)F=C6nBif}d+bt$Bu|ngCf?`nr+{w6tH)-0O?t z!!iNy8uqU{c(Ep2>TaQ=`Fc_vnfe^>#Dy%MvHjF&{maqFLg?!+@_xsF^H{B}(=R{s zKb+0BtWR$TE+7#F6rTSNUqGP0DeqLUQ4?gN@uAAW_WP8RL(Iw4c5b_(6p_JU_QpQ3 z6c{{$DWG$7^kP-0==+?;D>(8s2y-k5bGX%74eW8t6_XZZ&6N`~P7HTj?Ax{8ERk`I3Ync3hpF_Z$*WWCJbM@e?Q2w3d` ziwX)p4ZT>nk2EV@u>p|41z$oW3xVW1wi*)R$nv}$2w26JmY}p>19d8Xk10`nYE-WW zgU>Sa;~86)yGr`!u(3Z4N?*=2rC^tl;w5zowr28&hSm(^r`$RNR=s*~Dvt4JD@=vp znvzq5`5-Go95@E70*5R>2qBtv>N!tJ6tMfa<*`KNOH2gi);-<}^17!?$k-;HYAG(R zGp%~=n}Dcb6dJ|r_KiIq;n?Q5dY`#p*M1fy_})2%V}^B8O@^A#k=0?FU|sg~A%rVS z%J4wLGVpC(8Es5(G2w1;EP{^};^Vk6hT*ui7ny_Mys9m?%p(#BNvWJjEPaqZu7ZcO zz?6<@H7*NzWAgFfB@*5y{lj-MhGgb7;V&?A8Zc(^rxgaJIdVs>XT{u1MKGvv3$GOU z>e?zbJ-{`!PTgjXGzw0BIF`9!CINx)5rlzexLfaV0OUmH3^LmN$rXl!t7Vhq&2kbw^9Jt4L6RgrvL8}WGlsN1{> z%&0c|GKMO~T@>qaTjI8t$BK|;WUknHdK~}tDni!R3DhT_fW3^KJ)S6bkJH|z>zkJ6q%tfKC#_nD`U#i`7IgMDW z;n0lFfjW#it*Ec&YBQxD{H4+RLabJ@{NCaQd+fRo=52&Aivrr_Dgxlq2Nx4D{+xIv zMqHxeFvu6!zo;XN^hAMnm>^S8XsD=IGLf`N5Y64@62M^+iW=pWZZf(dd{~+O9}yQ7 zj^;I(Mg?;9`GBAnvGT0C9M?#-#ao7t>E2YSseV=vV=mAI=WGgInAF#W4GP;6x`sya zl~=XY0;{dSBScxvW^=qS{B8kXE*K0WyhU>!8!FM@-g-;%#pUA(qVO2c5dIhT3Sl0j zl2J8aVq&`r%jp+duFB*MR<{;nm`$Ztbum~PLlLLU4Kf#xX1-(A7?nr?Y*xeO3beZc~v)wgkzYoIXpY0s7)AzfU@a(N0h=5#fWl2<*Vx$4xQzk ze84i|bW?hVsKTxp<&1H}XOZ4jQ)Z*{U&J+x3d;a=CE(4NN-Pj^UFf&lSyWMd zrP(clhm{8aI8>)4_6W4phP3elg$gH1V*6ApIK-u$%YcZle2XXwBRP-=SpzF{E~Xj@ z47!&Utiu+Ws2eqMFaxAVH2DV4cU0a^jZ58o20yrMtAcv#ebdRiM)V zEnS>m>R%A1=;AN~kIYoqw}Rl>(-B(+CprQU4uH$cE*qC2g_DS#CsF8MZe!$32LqsR zO0Vc61Hz*!R0zr$V$()Ij932T_E>55a z8}Ft603fLgPJs$U7`IcFWj3+*4->i2jTLHB3SllRAgJbCJNUmEfiWs50EktsCuw>O z$yflqvvZO#0d^I|b6ia$s;Pq)w8kz|kj}tqeT=-^LC*bLGR4)zXIkA5P&z$panRj( zYeJV11>jx})TQKAL)5LM)|#dhVosS2-$3gS_1;k9sP7*Rlu#>=?XJwmf$+|eF+>}-Aj7?8Uqn{17}2zFjNu}&bo-ak7l0$2b(%3P zxpX&qhZlCcK}*h~0>%d=D9kbm&skl=cXJSzHsCwKgab2^r+61x#1-pPEIb*kS_qXB zK5qP6BHxClAoh(hQz=sAUSm{dB1;ZhD*Wv*0>X+aWr2LksFI-u(Od+$KyEJ_!J1?a6G{NSPO7ZiiV>lnS{G(GuE#M>VNs z%Gmo@op|8uFQK+2#=atPK+!ZP*cYVA1UhtJtfgq}8yvb!j9cH3Gfp6a+z7Y0lyNQE z2_WHO}ya0F)rOdp{UBVOJxak#y~vF)fa5eQcU}rSoPzGM>3%1HPhLA z%Lc&HivIv(xm~b1I4~X702&S|+yfY6E>l^x+|APttmipz(rH3OFf9s$B=VRpR1`10(A zV!Rx9A0$e=M?_~nGiQt&t0ys*Aip+~K&RJ>VijRy|c1{)H^jVNC1~0lo3Wfq;rv7CZ1JS0P%^~h7azNzGtj~J)>sPWgF^1}xZ?s2Aqw7=pNN%DCuLaU1z!dEXX4dA_H}0cb z#kFIIsfyWN6!IpCg|wuPgTWs(9}kC7P_~y-3`MvwE>>gXa;CeZUM>AXCxaEmTigqc zHw1Y@WCWl+gwg5LZBPNkt04hP%H=?yZn<%f<^}_ zvq3@Kl;AII$D8y($QF8@tRUySKn=dSy-FZLvzqG^I*&xJLMuU`U`6PIK%(y{lD&7k z)W{5&BHRafC^ku2c(KoK62;uKJu!+Q8eKb+fkLm*42ZR=#qv;rsKG;1YvLh|e8<5o zrqs>G&q(+qnN@~aT9#Uvsmm!NA%-!dz;eeLnL(xR{RWuFl#-GBLFk|qhjbHy67`{~ zUG)iy&SL_%Fkh0TKvFBSj}{^Y9n$)~1?w4Vv$`YNJcp$1FKv#xJ4OIuV4p~%2xaoA zUI|b3wJITjM(?b1I$tXWGaR5W!nf5aXNrP@s67ZwFjrwQLqw*oRXxhQ!!qs-x4{*6 z%AGu0-eI@IX1;YQpk*s&c1}f!-5nxEFA?!gri?>$l$qQoF+>*B4^l2+%M99Pg{oIf z+_few!G>gS6yvOsUOA&VyE+H2<|1jnW!vTPaA@}`1;nUK373n<^tcxkNY!T5cdX10 zE_1N+8g?;7M3`jWoVm8;wP-5`k4)$0UQI)@f*mQZiAV(-NxN4W(Jp}sEe`{FaWKUa zXneG9p^p6ahRWAUYW=OSW*062oTa{T7zL|msT>g$6t>@MYO&BtI0!ox@oGMyNP^IJ zVHh=eU3^1yMdkkhs+Ak149~<^=`VGEQK6*o3GN=CGz}i3VJT^%=P+;v2xT*M6>jVx zU}z0B+8&$)4cnMURKpht_gDCrAU}|~7kJkY#9LJy24#4x&;04A^2F560I#v2w*3;pTa@l@TEMLwGUGCqDSqLlj`SCmVX%c!c}tr0h?Iqd9;2*?-UdzlL%7*P zmF;smjaqA~mwaXm>uP`>G5Azv(j*f~VD)0(h_ukD!x%4*QT$NOZ}3OxAb|$e{s_Rx zmky9{LXm{f1C?dmY}XU<0X26vhu={Oqi&aR9CaFWZXv)=vI7@D91KMq3ri%vbJAwR z3|OR&Sj=Pyn;+;cS5Q+4sY)xwg|&$746sk&j{74sE3E3+M{)j)MY}L)2FgQPqP)XpCwu*>P@2B87WI#9$X7+#reTU*Q`2vHqgww8S-V5qJ@P za21OkV5q64DQ{%VxR| zU^bCG1BbgY1y#eU^38~#P;o%twj)jOX%9K$5kXv~^hGoBh8ts;i_uyK+-1&K_JC4{ zdtqc1D!W;7x^cNh+xSZ!~56#miU0u05NKA?~EuPZOZs324%UCql>?KzITZefq; zYG0a##d9k%rTN@RMrQ#Ah?W_Ra|nyn1Ew$Bxbk2q6K%#KDmEn~>qmxphg$%es~dxv zI9B_=GRnYnVcm2tXIpiSsqfYffp-YsLR)EFsDCq&AWo-J`!yU3rQ*?>sxoM~ae#vE zWwCYsz=zWrpOjd_%G$r|$g^W^iFy?0kapmXEQ6)o9f+7Y6Awuh1}TjM6l}QZu-oFR#-iL)2Dd8eg5fghheCEUkeL^m zu!kCzaTe0AFxVthD-aX{t3YjLGaaAsi=h4`l^le0N5>@8S-%F5+{Y4_7Y-xU(p14= zs2s*XTFU^@6&Ev5&f|!26?Qj^O#MWtPCOnocrC@R1Q>w03y7*pd=nCh&-A!Pry!LU zgeux4+ZoE>jKeYK#p0nU6{YCMfSDBqQ(&~ib4?zBq5uVvbkW*W7@JOfR9ALislFOT zJw@SAX{a;?r($i|Eirc*qM^8z0U{(Y=3}U0UG8EJSTyQ3ik!>lFDTp4n8eZD)=(KR zEHDtambykFv2-J6F=fGvH8&IuFwDy=fy_KxCZ)~Fqs~xS0i2bWTWfqqIXD=)_cmex z8i18S+|m~|4_3Dia-u7o!DIH}e*@!Sq-z zd+S_IrFT{G0Ow25Jh{( zDR$1JQPBdW5o{$ZY;v5$h~u28iD6dYa&`3{_1WtvWh$FE+|BEt+3GKRx!qlBg8t)* zFGE)sMet$}D$$|v?G2+Y`JGs13JSxHSUIkfq=Y;T5CGdHOL&Nbm%M(XFsgEpVx?y( zRA%>XMk}mEFqlPOac$PNFX7r4$uyu}c#4vz&))SAP~-;tAPl{-+J-@)NtMAXK1oq_ zb(q<)oJFD~?gnLHrJ$ukrC)<>8;qbd&CJkXWoRfkfKsa93fQ;-p_e$+GvF0coBgK9 z?+J#MZe2!?RiN&`P4)}FdrtiH=@2qmT2{oxzb{yd2=r2ta9`ZX$62u{GDox5vzY0} zEatp{x@)YyOdfAXq_E7OhX!Dj5Hp@)uJ+FGAyVSJ6ORPqI)n(4p}A0rD#9g+9geM) zMftXFBo8K!R&|?Aj;cDWEVNY#(#ARW04Qe9oRrfPWpOQ*33YzOUzurA)irZi@5(n` z2P=YS5N8qtp)?8@mUKi?WyH(}Durb?6;y9~$rjt2jtI33lU@zYlA4X_#Jt044Gth= zBF>>LMqD)*G2G0o#;YX?Z<2B_Fw}65NMDmx;2tzLyY1B55O*0<|dUGE z_D4XiOwGqFZ>@W*xshJ5RmWCfwJK^Yt~SMDS4mliDuyz(fzXz-nUIwgs^iBp<=m?9 z%=lyBAXYhgL5)gn+5IoWE^bw9M#xxhF;?>mOSmlUHR6uonu)2RIBpvODq(Tb#%Fj$ z%@u$GVU*v8pf)?2oN}PbHr%6I0gAX;z$gbsGPbWImEeS+`zeN!cpenkWl?usD`e3lM7}$g$xf}ys z34n^n5JrePKl2e_?o?qF#)K~IR6*fTi$VTi3I(AWCT9wr(xh3uouQXP)|s2A#>zBJ zpeb8ma|FGYlhkcQ+YSkUT^(S6#y+9cRr3W+$5d`AbLu))IPm3w12xx}&p0ExFa!!~s=@3~;1 zX#3Va<2`!765RuqFbWML#HEB9m*(_vwI~kq-lhgc7jJ2seoV{rg0MQXxAc5zmp9_0 zNai`4B}`54j~V%Ej|haqb1e`8BowEo;$3n*Wy;Zrh)CwK6c^)Y=|KvsMlKtyUKreg+WQVPZ4m+4L=Km|puKHweA zHdMH%#hE|}kqpbI11Lg10@wre5p1&p;9(w5KFTr`y&LC+2st4N*)LW6nU9-A)4b^T)K@|<)}|qPx`%kRtA>pMQLb3DJGR5L5UM8QPg*%g z!n`gA^*r3~;EW<$=A}c;$37OREib$>O3b)w=P63mF66L=sP8dq8L7aIpcV{S1g2%o z-$bsZj6#5}B0DkUTf0*A7D1vQD1Q`sb~u;XF+$_h)I(}83OQW}BCG@@&EI3w-71aQRQSOn$}R}jJsqM|iu&N?t`1SksMb|rw*tcSUAnPvMUF^l3} zA~vYiLrA>$rc$Ce%iawoE8KVhvKO`|gf^v>2}}y6E4&L@0HThQsWS5CQN61jWfz#V zYEzaOA8Fan;!}Z^Ek(d^0l7;LSFkDcK6*qK1+)W4ZRG)5nBBKX4flSH7N|& zu&_7>8JuXiR)nXvcEO5(wM-P+`s|xMO7`oMBPP+9mLBtk-r1;?`f_lon&I zPzy&w_bM!eWDS->aK=$rLi7B}46496E*ZUrgE3HL04p%EMHZbQaW1I03p$-qUd8}& zz|8zi1%@nJmE!7L(G22X!vrGg@dVyRgg(VURxIj*KvB`BO7x8pW+Ny;I$4;1E&@2jFHC{5%Kfm8 zoq>bguOJ|6H+&=1YBP}1uL=C(Va3X-=-M6JW*B!A*CVfC(ouU}grMMe&gF_m2!2ca z5eH6d8}#SqAR1N%19tK87BmIvP)UQUTuQLBiD(@53xXYaO$Be3zM!-QRt6bkqaQNd zXgY%G_+k(hgIWVL-dH7{(4<|C0M;2@!!9Qwy4!B=R70Sk;D<`+jIMY)M5{qp(&D$` z^D>uHb6bw;INZ1Tv3T)v{9HBQiZqdYQPp?h@tRI10#e>un`SDzvzd)G#4m^;s=o@z z*v_sayN00{VR6$3q(CtTRuYs_r~8z=2-nP^lnxV@tgB&i+i=uCYCp^(jNn@xUXqC#)LPF@CHk)n9$Nll<5y{e<_`zRvFyuPOBI(FSh!Xt z(SgACf(-zn=i}q2*6K*?8*+Qn2OO-dgv!`kP@WW1gG2a|gRa(bO`RQD}o@nL3^_ zARHv@{{R}61YeDT+1dDAMB!_9#@lPFC*m@p34o7t$+y~54I24@hB?$@U7$|U8m!S4 zLS9G#ixlY-#fXUr6wSPAb69M7nt*fQit7IW_z-y& z?{$46;E>zlmH!#GPO4GokC4heqm0efYE zX#kec+V=Mm6mHl_%j<$`UW3INqr27=C@2ZLb$G5~rBya?Ijy;wP&dJEU}!ta%76ip zyFTy)S60Qf;Ji6kearxnkd|%8{vg|$?SWijzQdWWN=m0ITwgIun+peuGI3l-H_N~w zEiNecofHheB6PUsTyKe#asBR8s6l_wUjR*%_^EKzDZvJF2o)a=3*sS`Iz^@PIhgGN zV9bEL%L|xqQ5MH-OwE{s%P}%c7g>T`!$F&fo{B|Hb2rGuG&_Ps011qGhsy%uoI+G+ zR3mg>3{(+sMPMBW4zWV-q&J1PoI9AKAl9Jka;_tjPZs17{Hdbt3svgJcy!DdKl!-j zQ&v(o_hA|kte&feB|#~qo3)4nJ8pf-@x3hvX_7!HmHtXY0cnBWI5s(89pi{M#7HBK zW3EenL~T`-N||0JNPv!Z8Cd?cEBcYTEPI6Qm>t=AmyY$V zzjDrDp2EMHqDmuF+!VTpcn??+>oNHT`!NBT973FU=oB6f;N99<+e0122;4ZqbPYWZ z+-lFX+R6jGqb_3FO+5bq1gRA110b6swNp@BXn47Kl?a6m&SJQ9P0=pJ7|Ub$g-#a7x>CHv55)mRMN8UlsV2Zjdx0)ot$PQ~*W2 zez<|un+4Iz@~;ppZ%}ZzRsN$!;_O&AZitW)DB6{y8CbOOqL$5?;d@y~MryXK3+sbX zMFm0xH^}Fga_$+;rJ{xkE{-Crr(ju7viE>XM;l^JUzkP_C3)EdonTTMg0=qufGu01SQm8e4r7PFl|i0a&2s|CM#Py#%J6gUTF!{A>S=OD!42Os$1&a_ z#kDHhflS13j8!yQ1+ME*-c3z44_2l@p{Ak74hm1WEkZ8!3bjnP1a(4f27wPHRJL0V z@aSWL6{o2m$XyX%;DiJf7Gv;xj2UC*he6U;K*r3y2mFO#k(p!F*UUFZpMg_SLN zy%Lx5$&LN)AnVJLH>GWVHy!xP1*HYIgyK{0)K78x2hB$wg8t#U z=%D7Mfi8>L6{flvJNOt;W6S>lv2K%S;|mAfBu3m0VB^{Pl@$VU!Tu2gAiKrt2j=BZ zHc?mGv_Q694nzD!Yt>AP*oS|)3aT-0xO#yo^>5|`MRt-a;J>wiLXyi=4XzLTM>~Ba ztLKNqLR)1itUr7A2%uuBeH3lkj-d%qlr}D^aoLYhzJNT79I(;>Va6ZS0Y0h-9XAow z$6f&KR&qlyq3S*iN}NpiI*BRiE~2&dm+{UvJV!u)3N>}is;YLS!UgK0B3w-&8L|?* zIG5t(O7UKGSxH6R1fQ^K8v=#DV!Ig6sEG5eDFoQl4$n=XjYQ`e$Kx$O7Dw-{_ zb%?bni8ywRCyg4Kh9Xx)$AP%{urUR*5^uww0D+vYC16kzVOp+{HYx*^c`e)^cbhxJ zA&5X)%bXgGieIWM6{~^py1E-ie=fc$EPrl)Rh)fvl?tk$Evpc z6fSn~9f)c<@UaDMUU4pnWtOj5-5kNOUlNiK$rfr6-QFV@OhBPrU7~WnfX$wZA!SmSxybw3ct zEFHw_>J|ZAl&4=&q6^S;FG3!QEj+#+Abfz06R-Ia0hC!Mhg@Q7{A4+J(- zsSv+h%Z6CdFk&ps3YT!ivs-qSIYPqTO#4S%+qYHB$|#E|GkqXwemYJj10aOgE7WZg zssOcOVgp^f_&phWLoE}WbW=xTFEtg?7(e_@$A*x;%{d@kg2vg>?0WV06j6$9spHb{ z!kUe~4R)|d}|!Q zxRUsfjZMlGHyB-;F*5MtVX}_%v=_J?cqOn%aJEF{6u3+cIwMQ}D>QXpuS>GiVH;I5W#k|0+;#pWcC8@(W@pEjzu4Rbr;cf~h zek0+7Ou&Ou?eN1MYBOj(Mx(YT-Um&{*=@}0A{?#n)&*?0bicS@sB(4t%yA#Efbpp; zTb}V%V$9h=z*ZnuK@Jrxs~Bbqz@t=l?*$U@8JD|wJww$^m~hcXZQh}blDT%+lpfoa zXcE$mF=_fDI>|&G70a!#T39aU0=cw^ zWA3H4ud6caZHDCtQ^6ct{?S7Q!Li-ozL8*d@=0|$qn06NdrZud+`k6+<4__UqK|Cd z5i7o!-;h^EwHP4#f#~Zj(Q#tGQs4DfXeQ0PSwF~*1Zx2Fbo!Jpt7WV|xlz2+>>+=WuI7W1@hEobKC1`LM3~R1DQsLE?dKcJ#68k3U_4PfN*fJ71N7|qKoeA`S+K>~$%w98kBp};+r z%X%h2P^)(MOA!Q0M8ZQ`MmK-yX^!})wlxe}0qJ(nNUSi*6=BT2hQZLqY|CbaR`D9H zE}W4gxKC20LIAWp!%AR^j3AmuK$+bD@ppT7c;uYFa2!aAynCpnkZpwjbT4cFv z*o!PGt6PQlhy}s$#VDgI%)VrhY)@pV;pF0=2>`(OSo>mMxNnvUZJ<*Y~$JnWbb@~^g3x~FoxMHz08&DYelCeB-x#d)_D(y7|l zqi=ZbR43FaFGWkhdq{i^TR#NmE@kx3fZHj6!L`B|%sQ|MbSp);xQZnpCI0}`9Ods% z65LX%*p5J;7`q}G1s=#VP7ageE+kKJV{eOPrPnmwe8y(R+@lNb51a8rT|!VIv|5j} z{$b8s4$^@AulnTT%1}pj2JqO@@%fD7^)Ao9-}S+VLdJPconqaaQTsnH>-sQX2-_#k zur#@3$2j)e^Bq8%WyCwmfd-ba_dFdd8F)9+Y@-*sEZ2dkQ&P?&h1{v9!AC^N<1(38 zQecEi+t=*;MDpPD%cQ5Y$kifNDFK+ZGT2yYj>7E<8#3KXWd%zLf>E6q z=*^&w8_@THtBgx@d!P757TTqBoYTaiFHmo*(p!VaU&HdXUz>#t3MPm&uAVZ=Sxt19 zyvjZ^6BeSQJj}2&;IEw2SYp{0W;u(7b1%U|4^W)5sMMs6L5-=C(*zfv0c={D!!Wbf z9v#2}p@qD}rd0gLrzQsVY)X|jl~kIBh3Dci$rBYJp?SBaOZhr496jkRVe9zOA~BGljLYx-?gKWYJekD~ow$D466OXnq+~<{le? zBS%&!asDc=l;wMIEl@Elq1HJ0f_POeq!W4n03zEFu_@T^-Z_O`ko(|`6$@RU0k4~a z3p7#IT;8~f^nAsJlGSFPU1Ein*2r*e@fwpZo{*+uvIqd(9iAm`*r?0ta0USYN5O9k z8J@9XrBmFhh2Y_SH8+V>E5^bwaGnUlBZ4f(-jQ2)`0;}PN!t>ktCp(X4)N$9@Ta^S zsxR;l0H_75MJfQCM&esoJPcDnl~LnM2AwjaY*vaQsO&ww3`JuW$ef;`fVEbp0cdv4 zj2vTf%?6HQj_l7Q&A+5_O|gLLyi63+H8+s|0AU3xRe(b)s~kfZVZg-5LW%$*ELM~j zv>jjjaONiF6m6$4DzM50j#+m@_V-fwlxdxAhYN#(x)R{9hb_{h+_t#l9T3$JP_>)2 z);xWI9;|L};@WgrX{lCBE}E3NreOCB@4-^L>LPT|0*?K`BZ3+q%q(0oD7Q+8${|*m z<-}#Bz{$e)i*j0u3e!@M^(LQMiLkS+LR%%}qIX?RYZvA|C5vJBL;4?|CP=6jBppDZ zp#HfT2|m0Z%v>!{C>|zC!@pL3zp7Y{M+qtvYoK{XDd(_TC?yJZw}nwqad@M z{aa=Lv+RYuH(JZBFu~m5N63LqYtarxP zza^*&bOS-wUv1!{Jzv5Y6>U&XE0?^+9ZW>>aBEWd^1&YUb*Zuv3uSb^WelUhVR`E@ zaM)=u${n~sYvq&|8(M$n<+G}%{{TT1P=G6kP7fT)mK6v`1{PT=@DjwnW^;(qSt|N_ zok8GzE5WV-S-;{3UWybw#7V=69gS*Sowx*-ms zD!hA?1khWVZxZr?%3pNL7}-e~+wOBMqX8x0&q4@8NP=k9cH$KQZP(V{;EkFxLjM5! z>M=qoTI6=P3t&fN@6~~f2PCtMaqeB&(Mo(Ept`7jlVX%A4uE>*7*l-HfgUx5tV?*Ln{aC7x7B_l2!E<@Lt z1u3B8cO`4ALgpavDy&}&yC{frM&nuotQ7*Fv6jfQT4`y$ua)$L`mYz8Rz4T~8%COI z4P8dG1sl+uoy^qL&aNK2J-m@(m~f+Ig$0{re$C%w-0#-iY3NH1AKiZ!GGg760MiQfw7`a6=_CgdAb<7YW zce;uJyfjCkCT1eKNFxsRMUCI|ljmLdtag4Dl@ zxp-cz;!uY%qf)SF3{=W2w92k+FC0L!DbO2^CEUauu?7$v))|hI2ucPlexC=RRnfdFQP4}DA@ld`+7F@?84dWra*>BBh4 ztCuL(s}8F5F{7^r7Im*bqgsVQUKs(=`k@2QEL8)Y~})(Co2B{64KG8 z+NYr8>dZm5Y+K7;LJ$;$f}@T`a`lywux};Wb$isn2v~oB7aAn7lC2%i(yKL7Rvf+8 zR#L_E0*zpcc(j>CpO_mZqS`*;QRK5_nB=nf$K(x(7jalywr`<=th!sfuP@?U0=#$N z_vZpt7aC(Y@scP|xnst_9mFEK`5JIYb8IKE&9YX!fU?Y;`l)l;rvh4(E-g%s@-{>-6) zc}~O92r~MciE>9G&*oj79e_I4=3X9}iUntoC)JRwY;VBk>r>2IiZ#DP$;TrXA`{nx9%%vKL>KgEP=>5K1(A%U=D__ z>_SqVKc!gSukreH$DHrDrl@p&Nx%?97CPn(r9HpeQCZE3(QWnOk(A*|3(2UkdiWpA z{0TSnFkTMX{@U`#PelB`S@DD}m+sG*P@IB;_Xt2>b+*654TnG4{M}2J<5K(tRNPV+ zQmUlwD`lplDj(_sV|_CakkZnwWMf>EMZ;7`)U6pJG&9esoVsAeS6>M$z+za+!vhkr z{{ZIE;k0F32~gE_m3@ovm=vSL8rKr;{1i%T$L#+A<_IRQKII_V1LhahlIY6>{J_`o zKPqLURjMFi$&d-w;0OuE0-}`nWPA}=lOxw_NJSFUg5RycMj1tE>W7cK;-H8Qq;OG*aMU8}xuNNtS3l@oaJ8PuE)eXDG(C^DF za`ek>TcGGf7s8d4bv&O^m8M53*_yPAd zj3SLMDbHdB1<6%Ir}Qd_$K(XdtQ(bnYRt=q7fTUqlag5pK`3)o?g1>MiGbSz>@wUb zh4s$7J3JCq%`j42;Q|0q0bj(?5(Q9bQ%;$TR%+c5UOHk><(-kW9K~#4rC4u0_?cUW zSYU`iy3`hgY`c&dAd@FuS8`#R0=l`Om)wAV#jbxOzqrsYRRwN?f(+J|N~Tn< zv!wN?7I=6{bY{W$Q!Fcb7@IH9C|wq2NCOqRUV>7G zP%D$#b+1^iUOUw=Jk7N{eN(G%W%&D>g8e6-^ z%zqDAW$C8Q<;q2kg45`~d5snp)Qi+?JHuwWt4FKT_XMOgJ;Omk7<0^aM~Rg7ZlKv%JH!{n@5%dgv_fUQ+7AD zzwr2%t7ZGA>i&PBBTAB!)5IF0St#i(>rQo2ok&X%rdKP74R&RJh|$nSUR9;?Yo{=5 z6HHze!BWam%H%Ha2$41;Isi3CJ-xDk{yhn2_Qu7%d zBUN$#00PtH=80~+u^ zh(k)b_b?J`RCJtGLgW>970PEYGn2GEp0D;505mD*Yt@ywS6Ad;d6>RHAo-hN_?h}}|4xn2yZv|Cu-$h_-_8gYYl zGBFAOf!P+y(uv9Mu7aj4R8fMbaZZR_SqxSZHvzn%lb9sHl0>BC-57Eo0 z)uM$&6mr|ae{mVHnJBsrt58?sZm-=O5d^W&-3FJX@fzhIrP91StC%%U0eBrwQHV8c zxNvY>yaC)fQ_H{-nwV1cX>Z-l?I4U5qn_+cnw5!_(r`L@hPxK$dzZN|97G@`X7Vn# zmQc1`ddH4|DaMNG?oTzx5v>V@6eDW^G~-?xMa)4^QobOw7o0U1Is~%$dPGOm6obM# zNQnccn?tu~y0MIenP31a+nEood6z5QKFL;&~sxItxYX1N+xdJ-FD4f#7r`6yP8n_Cw zgfD~zEpeM!9j35s7PBAhVpd|xC7YIklrVLhd3Akz`7thX;#--itp*%IFf&|5F=gt( zY$Yg`fL#&i4UFC64V|SFNXG$32;bZm0J~RLZ*}Vkpu#9eYxs!f4sQW_ZoS3un}7^p z=@o_54Rl#%o&{n@1uuXPa6T2v7ezJk3{Q|fh9x#5c~rPwR&8)pQ6(DG9byX=jcU~! zg0qD+9)-eHb$A!%T;%x{&fOEam@yGg=NQkX({z7+l zM?E_|Fs|f)J%53(a1n&yy?S;`niqloO+PgaHva&~{z-b)?G`RdsII2T2t#f6Ay`b4?1`CDqP5U5I)D&El(#8?uOqMj0FK0bcl`#6 zmtfk=G@TIA?QAklYoJ&F&p0YDtG)!)NpaSTQoxm?2F z9(2;BLWrfHcObY{N~PTlFX!>zR7RLM8Qac!*Xw zT921sP>49JyNU~=W1U4NlY@P4TZGqwFqBQl-=LDf4di+lpjUxS5HSia5?Y?@?;Dg^ z#au_R*R(F${iEnFfl-faBb1b+MB#QuGN*8YYbZ>hiycWU@d2I04X% zDgydfA;&!k~|eUkAE zY{G;c4x{cpL3w2(X?gC%ND&?Z{y_~RNUF(L>~RgsZsTJHZtAF^ziv0PG@SDaHQ)Uoya;9F0@@Wy^HZ zIFwuqMTg=EhMH{O%oXg$R0F@ahXGZtS}^-!79;%3|GPm zUp4;#=Y9yrH5_$?9VvoPgS@g5V1>sXmd95M#wr(Vn3IIkaKsxgQ#hOt$u{$`5{l;l zN9ieM7~+5UuvnUA(2t6mn~sUg(&k#zTtTSqoRuHOAkvo^jvpm>g180_@Xp#?=W!N5 zWk*D0RsaV=US?xWOj#GG)OTgIH%DSSV$SL-Xa^)wySZzuaKMz9rt=;lSli9`)aSr) zJE(OaplK#WR46EDclQb6_9OX;RkdZ`xlLz(_FSy+I1ixyWh`Y-1Ld|L8IfppLl71K z1uDVZ3vntB7qS=tS0NTt9InyaaOO3i$gdP>$`!>!m;BfSYk%W9Xmu#pt0%6 zYV$9c8M-f_%^#Vv8WLuWrw-7nth5P70`Ncpr~zQTSD#ZK34Zi9axT<9z&!8W2_zKqm@3kWn6S4GjK!=K)}kZ#@qls!Spy~K=quE zBvm{(h_DTNnSdNfIvu5iTa+-{MZawCfW7X2;Q@`-X%#xA4rVjFaG02r4E^_<{Wv!R zif%35yVJHV!GPsvWgx#n+2$odR5@K`gfS~}2&?x7n>k)1sRL@p2j>1IHD{}B^gzi7 zK)$Xo7nD*}w3grsBmV$GI->H8S5S_zx0rQU<{9xf*`WcU)$O};1uMo z(~gx6NGK)~G0YPo3SV&4xLkQNsoEKUEb9&~%GnQ->Hu$XDxjN@$p;2F6D2Xwl+G~1 z%oEK)%hR-SYlx>nIFu@ZJhrd#F@Z`I!Va-eV4%f1_nmQ$3%!Q{8D#VjSTKSWrtbBL z29Pdasm)J-hfGB%R45*`3bvl#pl%W^6ntQcDxWu}FcV%^GyF3b(ryGuguie5Dn&B? z00aPC(0&PX0DB`w?Q1XjF%1jUZ_@brnL&9&KOKH0j4-&Fi%-O37Z-E*f%pOl zQj^x$EHI^Pk&?^qy*g&z7#HCzsM8eT8>}D9ejwY}zC3y0s~ggE5A`sjuk98zo&qO?YwQrFb${+)NN>0t|f6 z{$Z~cmap$oF3{kHGtw=U%JUpzaTfelL_?NT50tvgmYhShL&bR*O`>le6>)KW8Iy@} z<;!)Q=2gt@!DiS9<}Hwwn1DVPo!Bs;15+K{;dgY|x%kpkb0NUt42zXwI zJzBvMmIbeCSIYAUD*?$~@fl%4uZ9hL%#2JT9tM}ZcBIQ^wM%?zyA8FDlF0@awZb?k zA+_o~A#ue!j);WSQBF(GuJFY*2-9Vp^n=$suCdtR-8@%sAnc8nuQM-dhy~WYG}C4z9i;ygCAu9p%7e?LrdmLvv{yfB=dXAGqRO z;=!KKC{v#4=>nBGGZ#yiDBx<<>h+X0(@>#in4+1ElF%^hTR%FPMPw@Je>lv##@hfv z?b36a^k>(oj0L5Z?Q-DFZ2?2)UlOo^%Xhds$`$aAh_mxV1@63#g1z zS7x{ig);g8$Fy}9e1@hmLanrxc8Fjz_OkG3dZ&$Ct;I;JE|sp5^EaBx=5LK|xR@Dc zSlMCCknOMG8=@;_f$=LMvxhl%9$ii#En#?a5$(03mGg*0onz0$669`FUFi*la}JWA zTR{@QH`*|?9`RFf39#iW!5U>QSs4K-1bV{=&rB=;t-DE%nBoOXI1tVl;yVlrd$_-^VTAuD=$$sX>C`23zlDti!N~kG_oZm**>d&_YFcPE|?2Q z(WWYsb8a8~)?cyLhx}QtC(}1^>TJ|EuH%T9n}1+ZiDkEe^s>SLfvrE*b6?#{VCXe} z!}SVUDk!}F0CY7%o(@6!5sY@|*`Lgx9#0T!?hK#cCXR;uo(WQ-O7UI;!5L>B9Q&b( zs^SZpM{f9vHc(QkI6UA>Ni!pv7Gu=dRa60lvGo1%De+enEZTiH{6MxmS4jP-W6Kr4 z*@yMSS2`j}mHiZ#T7;pvx8!p-EptWGJsDOEqY5_6;xdk_06t|Aj%`H{!vOGy+_!*v z&Zj9RbEroW&Q2pDq-lvN1Qv1< z@BIu?!QCZwWTeR&TtzsQl}$qW#g36;=4RHSTY+{eujZn$hE^|easzV%4Xt<7QA&2g z3k9}T7`i#=!nRa%a@eX2yfDrSa|-|*y+Y?ro8nY3+qR&VLwI0@$-JCO0>oS%p=V|^ zY+xXjR|IS$&Uku;5z=J!W!HGBmt$g;!-&Ljz>iR&G5F@}STF+(-0z`)VP%1BZ-Fi= zk}IxhwV3!fea}}G{6(=<3({B$7%MS=+f*?HB%8Ki=?KQiz)rnYawpmW4 zR;3UW+_mI21;+i;Hcs8dY|_LM!I(Fr_yo(cKKMS)?stZY==zfGDCgq8`YL zZYzwaUrBc_R}?@Iw=hA`4v3LJ**rwxbx^|QsU{n(Fo8-XMZ#FORW|#UBb9p=(Ih}^b9RaPjEsMLa#9qmP4Eu<9-oT^F? z#8cb^;AZ9qhxi)SgBVdxWxX1-~RxC0#y;? zH@GNyBB)CY$RICTnCYF8;aPKcltCI@sY$-75G6zKv-Zl`TCS5guwL%}0Eq9(nBlL1 ziHtz1%uP(}4rBiS=cF|`oVvtElm7t7%z8ycJm4Vizw%v`d_Z7q+9ySvK#ID*Xj?^H zwPK*CNAA+s}P74^hRnS3rjW3ESA{{YC+m97OL z-GFu*jiRSj)4k2$`2jtVhpYgaj1?~#O z+92iS-$D&k?9yCVn_|QGL;{jll~Ur7o=)>-o{)=4wB04O!Lt=Am3(6X)6`&j44llT zuq>_*HVb;iE`r4t`t_Fb>W0S`(g1rrN%rlSN{21H%LRj}2U=diiOAZnzf!;sg6djE z4Z$keRn#2IT}^15+FT03Dv)4r8iA{hVykl+M{H>cikyjtYF0bIQyZ4ch`f#=mdYjv zbj*#%Vx8($int_h36tg=GMeCV5iHjM6WP?v-3zN7lwjRT3sKaXj95-`v3A2MD|;f9 zZskd#Y3~p^OZ3cXA>_t)A12_MD~MiDmunG#&rlO12PxNi#B~G^T<8f0Au{n8CwuBB zJOnREz{R7axB#e*X5Zfb0Jh#X$NvC@U#(|2r|CYT@`MYiNAiAS)%m_jc4yL8-Anfe z227J7Vb>SJYploO7_TL}7<@o>9K{!V+&}ce3Y42uN|^l%n#MYeP1iE2LcF#GN7AVR z=(6*QSioctv==JNxJeq0PQ+YF6l6pUOU}iBkWd;qFV;)eWt#=vUB79_BPs4;N}bzWmd7ZU|~azt{)QuC11B%m(Us(?UO87546 zfnS)VESV=32=)m`V%dPO7w|FiQwvw^{{XI3ZUAZ|+*-8=V4VK|`6L_ z)TvKKSZylU&VG<+TY@BXkM1Ys6;PjufVS~lgx3p>IoAd1GQmU{W{Djo;aRM~VAe&% zLYUWho50|STtN~BV|up7iAINkLS$!El`Nt#4g)e==M{?jClkg1cl9h99T!lp`}Ake zGm#GjY8YboPVK0jeBD*(L5E znrMlp@^LH0TL=KsTA5ICDeV)SX_sEm-lH&zn?Hgo+wo4ZcpKyuOtC$c zWAYpMO0&c*X3&)wscw?pJS+P0{{Zm`c%aw+00tSCkt*JfLaz(upZyGf^fCVc(8vD( zLm&MNfAlf`0MN((07D=B41e@7{{Ya({{TZD{R~?h?`vl2v{%f`mqfXKZG1t@e1Ph! z2&01XvcCuJUCNc_;r{^Rd4eTJffV4&x)|Z)Q=INM3-^>YP-NJ`4f==$y`DSFxXiey z!Jz=_S&gE}U^6u4#4@Gg08;CpQkd7oCtAd6Wd=7MfBg+S6C?rZX2QZzIqz^)2j&O2 z!pbWQ_>9Jg9AbopiL>J;FkH*6%|F8{8o5{;&LF=~6Xw)PNO5u0d1apCrv@fdW(Afm zW)SHcn`@-HUP+M!!2+V+okk9P^B*E4(zZqOJx3Gz?q~?=fy135g3V8DLVxElTzwqh~RaM`NgRi7$nWiRs09490?U z`oo{PjanUJUzQ5?ksrdvT-y)nQgR91{-Zr`0Z)Nh%CbyMcPsLNh~h9mIg+Ml86{jh z=A(csBuoYh<^fxlXk?Ypxss+eP>VH7dKE6yy4NK{X%fcQ{D^}z9S=6aL|Vv|`yz_S z?CTzrU|v$-P)!Pk&{t>xLSPY%qWI>;N$P~si z6vcFnDq{u;Huiu!Fhav0aYYLO;GzYeh_f~}R1Kj=iGhf(F@~WPfVGYdC3OgFKJNqw zkwswg5@`pq3Pi$2u?30u?Cl+fdO?^Ef}=19w7bFeF8GS+De@z@Z~AIql(L|pNN$3y zt-JuR@(3^z@d_h}IKu<(1tjH&`ZF_T1HII*C>h8v zrXW~mK!~L&XzxG%7XouCYJ+S#SrYG={0xDF)bVtb_myVi8J%5J00V0Ku!^Tv=$-T_z=PT3`4MIh5WP?-!3o zCCk4MR7aE>hbewRHp3b{ogVRyB{oJ0SN8%?gM=)U$_{=X1&9hBh&9fm6OlEaYnFF1 z&<;v>0|@L)@Op$^)q-Zv<&6jpUlPc&Q?4QdlXqMbFi`Cra~|c;4aXDz03^8zXT(5? zwFGKbj5P@1<^?-Tnaah-si_Sxs)yYseqf*PjSPL#F z)X6SIeh4Glw@_k4r|r8+iKwxB9B|T7Rs-}44wk407Fhe31vf*zlp4ma-M1*40Y-3VF+#kxG#&3mm{HiaKs_RH0oyt zdd9HkRH;$%Q*xzBl`0W9Wl_yc4*m;8cwjFf^Dby-+(TnIXUo!V6=0ZACGuV-l83e^ z8=j;i?PG`t65X7vdA^|lt>S&BB3#+KDi}tGa$SH9&~qwc&Q9@F80C0{cJi2vwFSe7 zzo0L%l!-x@B95dQvZq;z3uW$7s+K>1f3dp<2#$IpFj}?^#&7xqOvpHZ6fe6dqP$h( zQ;5niAir#=7@A=!7^}fo_Z&>zrZKGP6zR*ZvBJkFY=RDOUr5PN7BEx;ftl*S9b&wd zW3^j={{Zj$P850o{$BFs!HQ`zCk~@O6ycSfIUpEY6f@E8kc_#RFf#zLS4gb!-^BKY zaLTGc7z^0V-R=+!Iq+-P9?nUE?L3nJF(P`JpDcLbxcC|%R8kLC$ra5eq8B1I;GX@e0ey2|^9XalBFmK<(1 zJ&9zPD1rh68HBBuIe~n!hj7D)gzaLgrgV)=62lD2@la+65TqIoe}Wa%GVDu>KM2D% zMHUoc)FlG);rL>tuCg=00V?LAn=?*W>c5{)dQN=OQmjz){=?^T zqs0WZbe`5&aQLs%f96rwU8t#5zU_xC`|;@}=!Ozx8hv}u@G`y z!aPfe>S6|nQ!WT)Ov+TBYw$zpE$+YZwTDAEC-D%hb)UoqACa*=-|chHsHcHkG zs9OnOVEcaR3MDIHZ-etHf%_lK&7tf3;h+>n6wA~WY`nl~>2&chPnlmUYYr0&EU5F7 zj31^cp&rf5K>SPuJ4!}4wGrwU!hD;q^$Wok*?sc$Vg-e(a}I55ys6A^GQ+&09FVpZ zJX|-`$0Zw-glUg4&zkU{S+-k#<>XM(6YTv(3|CJMh+0&rn3cq4necH2VoLV#V+2~Y zE4x8WcuN&OMdk#1H3Lwn_8?;+@3{J}NIwcMsKv6DpTc)>_bK|K*LSM&#V#xuqx{CY ztjt$H`NSs%qPE#f;x;y5gvd2cy@N}uQfFBr+fJ?9VOpq@SS=5EIOi0Z|nU$U9 zLs6nBv@)wwhAx<@4r2vW?}#;{_?vJiNn(VqvfMZC&O9y=@E*i458N>y3~AuGM6v^& zvHeBTZ>+#_3~{SB3>_kn4M@A_L^Fmfq%C3v(9D}&wTv|q zTnt0{i$Zbq@Kr#kXw9HhsNnQHv5XXxK+)b8CZCqMpK=66kjwdxB=nYYTj{-px90r2I+P|k3r9c~-7sS2I!%=ve(p_KxdF5tF1 z89-n$E21W)cKd~36r@^~P+Ty@^#(dF4dFX3Ur{%d#DNk3Taa{3A?p7Cgets0V2S=g z5<7`2U{AR~ZKwgaB(m{0%Pa-bgVN{ZOn!-IC$IQn*C$E)#T=$Fh1MvbZ z^&{~Cze!wPz&Dhhnqw&%jb+?*DiQwx@&)`{G(pgF=LAT*`;-DBR|fHaJ>12YMei=* z_bw@#4cfcLZ=!e7^z@rc(6aRndrqf*7_k6Gdp2!hd%!UZqb23LkFWrZ;+Z`EqbP)j4q~DBlb+L`Ia{+_JC|bsHux{F@W+kPWh9r5vm+n3cH2H zLSZ5Si;Ce!l_l0qekBiDl&)c^rYrHeQlco-=_}|ml(XE72x1rJrN6`sL~<|lN)}yI z{9Lv+>r3q_8U*l9p>oc@RzH}?8Qn0=rUJ-2BzWSuCpByO!I#f{E3| zFgXS25Q}BtKM(c<9f$T8F$dIsxJAiEcM5ayAL~h_bY>wp#_pvGjmO-niDoiz7_B}k zQPQ0i#@vI58_5o1?S!HP;^E7xIEFtJ4#0ghrV2A;>`mx$8F`UdJs7aCzUS(Pr-XenrA^hN1>N|&n_F zN{p#q3(A0HT@stJh~YO^q0d>Sq&6L3Bi?n)uat8L+X9>9iT*B(3uIZ&&~xBsYxcMc zC27o!`xtjtFqVJf5HUNjL*8bQ-SD;a{HK2QgZw=bB3qn za_z5C6;NtX#3r5S*VaengdkGnKVQplsI&(Lj*(-i)U@OwBmV$*m%CVhM5w`xsLx}( z(nZKT%#>5aa`sEynDD2@{{S-)V-_efU5~6v%{Va*?F2J>(=5kwx)w7d_#p#`3uPAl zLc1l|e-fq~2CopS(!~~01zoKe`I;!B=s$Ncf0QoQP(*r)qr)g%GVl!F)Gb%g^dT=s zVen-@@Kvcx0e1C?YgjALW*#V}Q0}*aazPt^mGZ}EXjer)iRc~SySDwsCf{+4z{Shk zXJq*|^D}H9Q2b-znNpXn`-wgXu7gBIyb+xx#xlgNK=*-nn?lK58mQ}uS-692=QjMV zybu&-xwY!KV&}ko7A(UrW(MaZD(xV-nuZbgD73;Oq-_+PNsx5z&QJ5=S8Q)+xw{K; zMp*p8lE)Yi=l0R=4hI7r_S4`^7zTp`Z>#qauxv#9!m7alh3_PEL=}V|o3jBa8cHjo zOs{O2MJu3HLafWnSaSt>mO1fJWYtVSC?%6gmRG13Uoe0;SVm!9$wu+0C6##0-LW$F zMy5-dv)!6MxLA*rwTlKLD@eEQS&T8Y+pF||0ar8I2uyexRIC8gr`h_IDvW9ppxbpa z0O-CTnt~WAh)PH)$JBZf+qmBq6%HdRgR|3~qbh(pghf;723~|^#9kgKLI7nCY#Nv) zIqEH@;`0{KYGgArxnD_l5XHmLJM~}y1_MFFd^C#giIm)l zzx&<_w1bsNzJUD1s2G6(O$;`(zsx_+kzU6R+x0kpm;~v}JXMiaG`g2+Eaic+Y!dD2 zIP0lLODpfEEMbhY!Zam0l*A^u8{wX!XJgTfSY-n<0dF1S0McS{qJq>2uPW60B2-wu z3vu86jKqb4`%=P0%VV-7H2_R5Y?QN$mMnJ?;KT%kw!I*gJ)OcEry;NXA~Gd*=H_N; zh;TXx-6uw3{`@+Wh4$1r_O&8HqN{Kc+}>HS?;M$`N2uxtish8GNDXyA$XZ~zyX8=l z%ylEAM+RBTyV5oaHf-kZrOj5a($QbRk z?-yPSh~$Z=7w&HUqo9PeTAV~79T&e-DHBDyo!!J+d;~6f)94p3S00X~BoK51w|Po8 zFa5cGMktd7T=!}h>%jn&Fhd)ScIa*f5cC$+ zz$7lfott21A&2zm^8r^Ji~DYTt*-sikBRLN^)}=^+@d;zVfu>LTC?`o?lU(Ivk%D4 zq#~OgDyCor2?5gL0F?CoA{GiZB{PW~`Z3;0#I}lP^o7A7f+4AsIhqpvf+yQ*Z%+@syEzf!ut~C$OpaL?Cy11JH+%c zMhI0CZFQ+&WOY-~qAYw0qe$kwu5ooalsW;&c|zDYPu##O7ZEw|Zg8=^IU+;!ygTLsFzNTgG5L z6+*jUAu3GjW>kw+dy3TB2(cHcm1SRX)$sbNH8I67{QubP0#qQZCsj$_(eK;l=dyL*az zZU%5cJwB*!;L+MtI>mD3+_`aM4qQqa`H8`2Uq>W#AqmD!r=$Cs8xiDqWz>kR?TK}Y zwRPGV$K-}pKxHq)*BXVySn32JvU_1z_A!LAVujpnee)%|Mu6cSNakcC0r|Oj(ma_RfbL{Xi{Z z_6PzbNRT3IFcU`3^2oa@KavVheI7dz3fosCdWcCq@%o73iylYd_o(!Qqg?+0=5fLM zP}b{FW~M4RJ5?+U>NW~2nq~w^-H7Hbg~U(9I-1L=u@bJQBq9eVAoW-j0Ncvy%kV?s zu|aP?wS2)nq&nh5q%lz1G)H4fXWY%m84hKm&ZW00?3^N%0-mALNrt9NgoLcj2)|iU zovj*jcvv?g#|`aQeXwgRuWqo>VB999w=e{D!dvjOXy6`S(i=><5+FgDwL6A`t|b6C z5kHYhW&_?&h`!G5W|&V%F)6D*NHF8rm)!i^qU8?9;;-6fZGZR?mZNt_j8#45;M~!O zLKkp=wvF|Qqy;~S<+z?W`tg1SrImu;RnaaU^8)u0G8h_9*#7__s#@0p{$fB524WOe zZlGH)hI&^jj)6C@V&Ii(LaKq?%cR@9SBa7A1Ku^O$MbYM$_g1aeg6RPfEX1;0is`d zafq}IW&IV~L7@7V7%r9X53ZjP6Q3D>;(l?HFrPG`vvtr9%u35uum1p!@eq0B{wIG7 zd}&$Z;hCL;py)wMm5I0jFjkK7df0wuMEQd$?oL+_6L&^&HL>4I(e+aED5R-8$tNc@ z5K8d+=^JR?ONC#_hSn2xu$&aty&-`Pa~r+Sc6~>?ehhOHoI43|v2`fWmTM{^k%&D@ zmKITZrl&K26TXi16vC*4cMeNJ@#KP^| zjh);-h$4rFmB?_Ak(b_74ikOCpL1ohqN3vraRG*!loXuKVsQP#DKYil?+_T`FW)m9 z#?~S)Nb)`=MVY02;0v*&3*u;Cs1DFZQ5R}d&*3Nzs8Jv13Bm0$l+4}_7z2CuMi35$ z!PI7!kyDn3c3X8!`ySuyRjZ38_5BfCRVwM$Ty>M2a{mC5gfXLW66J?)7DJ0Kgb)E3 z9t(ujRTe%LQx)(tfg(Q6W@oC}a5;&T*1_nbFK7s|te(2NhDNyu`XZ_~5A(m+N*lwA z_bI8W%QGz+S^AZySxrvY8@K!jRHljmC3Rz*lOO}!RTN#&z}$%a183$Jlrs1S!Z2x! zN&pya9K;GP23N{yEK4G?noXiUggN(rne!jQC#fE=fCR|2a0B!lebrUnAsPvE7$MguVKjmL=;%cvk_LF@eQac9+Oj{bDtf^=TzzjEHwa_X>_h^c_phx zh4LS!{-+30n~hD8mO&OahqMW{=Gqr3#0%;TGU})n{OcW+v;?WeE${q}2(e|w@TtF%()vle*_|o@cQ^1Dp`-6s)gzwS9R(R28?WE2GlXyA`t@zz*q zVA!!OwxfDoRX$*2)wE$21hI3t{{Z(9mln?j5eZAC7Faa(lG56yz(} z@ZZiDl$rNZmCJ!T?|1eXmyqq#x2U=391m;IC`dVdE-J6AoifORwV zEvkePzUzaNVVE!Ff+1>eD}f~mdBPt_fqAHepcb_p!Cz}{*nCV_@!i5LOSrLO?qq{( zt4fiId?}!xPlw1Bz(Se4J+@Stl1TH`XHYh#$h&`oXONtA+ zm-hRYR+h3_Vr2YedXAZML}h%#KzAcU)neA`@57`h!pocRyb9+&Sp1?RB$t+1osl?xniHU8$iOG^?Z|jMiQBExV$7mBB5(gth#_68$gq&a?*wF;;LfvNHTGDzTXfy}17XBpvli z3xz}<3yWif#dc9g)}^VJQ66&;zLOUcIhVU%CsEkI$^%;I$PN6$V8M=o!2s)$*WVA! ze-FxK`n{Nf>8$KXbybEglHESS93b6OBMS9?1^a+$7riDP z(=hl~Ri~?&j5K-e7VmxL14q_jpp_c7{{RVbaTt7p)vS;;ftr=N4V7E_Ap_ZiJ0=^1 zbb1}82uuA8NE!#)Q3Ne?Tn9ZNO4v(#OL;RePCtYh?`j#tW3cf3&aUAGg>m29qrOa- zQFgexe&g;}-NNt;rz_vqz9yow{{W;0ngx$j!tQ0)1Xns2bKvyD2BBx*mbx!_nyQwG zSxM0HoTA`yGp1$c6iU(c z)A))DLBCScQB#J?VY9#oRs*K6vg+Rw;;XClV0V@}(k=^w>Y)T7G(E9{^A@ZOuc9_l zbio~lrb(2+DrFMlj8Pq^`kg;;pyw+5N)qaax~X2|GT{v1==6!HhBePfOKTsYq?LtT z?ozceV0i~#+{PRluLtYV3l}b17;@Fj!J%ZpRwo=rwP!$FG}(0$t!rJP4b0`V#KgmM z&n+0tF8uKFCXyrH619t3pD8;+@oYH{E`D#>F}bt6$4$7OLSRQwDl zcT%_DWdNF0Ff@s6$;boKa(a0^1f?mtIqFOxs8mJuZ)=ZKgSfc(7<@}&Uf zK-4uv2VGrWzw8oKU3R;?$_M}o0w~My#TSCc4yS#3?$lV0N2fxJGib^#QK}C)}ulfk&ty zM^KP^mG7ON^H%sKWiePcF|2KLI>HtmN6#}TG&~Hk7#@25BPC4znSZ5*_!GR9O?6y3|3-Qb*v zYCH6{OU5x3LSC+B9Hhrhl7Qp92%?9icV<9*0WntKyv}T<_?R5ZZ=|xDY?h2*{^bWM zO<4nKrMxa=Ana-N; zE@NXG8-`~3(rNb?4@nqwFIW;Pb`kKj$N4Mz=GU1EloVU7!F^(vB`gN9ZUnd{Ms(17pBF575B4Y}T)k*xB=+HNQh zK&5@Kfx8nQSHD7IS(P$>2Wa~V^j9%x;57SsMI9=tW#a-qg1HOCp9HvCs&~D9CV;Nkh{26~*Evaz`wD#%EQgJWxB% zKx@wtlXwS+1k&rT$)UycVqlSiuuArXK=CP~%HkMZV&)eKLz6?3zqqDSu=aB@DHvWIL+FZ12CEBu zhC@o0)%l51IXBF-U`wJREg+MBC;lI~WpxQ1pNVjCtTsJmO#s2-;it3;isER2ON)i7 zMSaTB*?9Pt1DDS0>Im-d6JUsIZUUVnTbMVN*WPECfNP>GGh?5rRU8?J=A+gN?v#Qa zsT?4>S&fxVI~PRb+{uBf?R^+kUFTh)3oj7bX1{AY>nh>TFtSmsc0c4gogf%gwfR<1 zfD{a`XN-?b!r9fE6o~yQx?v?>}M7xs=yBE4H)uus?Cn4 z5ww7`VJAH#atPPf?Dqfw0YGp^68sD=gExb9zy>oWGb$`tkNxu~9goadW@7RG0Evqm zM*GcyQkGLza(0_+W!a;<^#~y^z|%1C?hp@9*Z3g+0J6_2woz@}uD7Z0L-P;V#?S@w zBxyhnY%Rv{Z=FkYSNtm1Ue$I+Q=G{?{U zLQYKymvtQiukiRe(R12Rrzzlu=GE>eboi8|S>b_<7Rdfdg0=yQ%9&O5G9Iw)%xBy? zI>s?nk#fLgK=#bqL%?yWitO1cM@(qJiC28HN4V_`H$L$wS3zy@9^+Lhhi!w@0O5>M z`e6@-cS+l$*_7Z1p&MxSVl4jvTb66mA%k?eYZDyBQDOvXCMYermx5BdQPjZiEgtS( z{{V8AvN0XzBT}99j-KWsdXFhqaEr$b8#}XA0#&t+`Z~=Xd}!qEOqJdc9EIiOIc0cB zwrGSEH7U!#d1ba5JQB{@rA4^i4mvQwUr7)2?=Q;DqZLfOu-Cd8POVRXS6I-1Y1{Bh z1>*A&-YK|pjxJthBP?X=Dk??9c{+Dh9Z=lrUVnEkld4+o7~FOTrPQRfoFQMCkil3O zL7=;O$F;d|h0Jsa5qeLM(8i&jhdb5chlHydw z@dp+<%|354p+G9Lhr5?6va8&{T#wYaynu$rqDu%x_`!%~6r;~n5w$lkp}w)SEp~gv zSjhWjNwTxF(yCK}D;C->`Fz4O(5D?oxv5EzDI746sgy-Y=)Pu)c_tpSxrn2Qmq85n z%KS?93h%oJP(cxaC=hzt%L&(aOi!L%aEicxF$V18)MJ=jyBn3f8q~!Mx0rXkiCVol zmc)u1J;JmWYBPg`992q2J=e*@3bN5-7NmOel%TJJnY1z`Xdci9w+8lsK)x<10Br3E zFcO94Y#iNGSEmCiOwWx=d-@$n@q5T&jYR0VxYvlQZlGYOl<9kyMG?88I>l}TT9mk# zZVWWhcX*GD02CZYtG|ek5K{`XsR?sQrdY~AVGP>=^urOO{vg9y!S0CAXQ{p$KBhsd zW(Bn|{{XlnN)CIE+$!`k`qXK5>n~~oUQcn1x6Rzw;-R#%QJGyJQv4`_sOs`x#}b9@ zJ`Wz>{y^W_$E&a0`Jp=(a>FhZ%T2=PV4rfzicLn=*qBJNmr{)sdclQyoJw)|NV7Z5 zL**h|*?*KpJ;)OuxA6|P-oD%)%&AKxxvDL2rT`FLQ2a$HXIO3Z3d!vEGE9W*5S&Q! z>7UH3%S-hub}T1f{KRE$ri8dE@M_~m!d_1E?XrB7?zL&Y0(Lwg$9avm7P5LJFvj&qWk6mRKd%vWZJGGuZS-+z&QBu z_ay*`j*>9Kia0WNAhGW|fMaoD8%RjU&;5bZUWpe_qA5%5g8?nex2U1ESzyF+#+}lT za%g&v;}UE+P>2G?$5lBQxR>COxfP+*aa?v3FajvjoJC5^95fkv#YC~xEeNJ*-$4QK ztp=TQ0YL!QSiBk0VP|p2qD;;8&|2JFPUEu&^DB#5^4U5%tD0&l4b`#CF^Mn9N~6WC zK%i8(EoMil8203j)0*AcSxK^fSZS;y7P#ix*BuxPF%od`5M)s{pKt1 zmF!~5XM`P?xuk#t)Ie=N(gFqVKIKX556rvOQHWs+N*^z|cLqAK&}TWFgdnP%?mlH^ zlX9F@oXQpk34_prYCdldPno1WkPOU9+e-YaEDu6jxj=o)8`!Vh0eh-FMi7-TjqcUt z{!Gwye`D3}FT&#DC3YAw%$udgKwhsw%F76IX|(N&UMA3Dl`&$QcaSZ)NJct!!6~?U>n6*1X;Ko zEsqmRr|NG)l{m`r04Q4Lb;JR!LY64nm68E>Vho@mr$_~@z}p0+A>ql5m8{_D5oXx1 zsyxVZFNtsslPNz3q7~F5qud&zW_yV)lsX*~40>5rD=;d$z|0ifKq&`Q2uUh z!NhdCe^BAA0>fN(^<@EHQr07Qo??r2LhZf?zU*~@II)qu-x8%os&;=XhRSDHA50Jb z00;m$mfana%aB^l!A4e0SloVbR0RV7Q81_ds36dxQ8x zYz3;i82+d?U)B)CCBvRU>2x8W$^*rhl*q(FK_SX<`U^A(En}zh9+~s6@R( zDyE)Aq8Tl-g}_b{2#I)A(Z6D8Xb&z?hq4fFiDcj&=f4DC+Q@HiE}nRgeO4wxZ4E?j zZocIOHx&mLDk-etxsb7QsGm~BTt^2%{{ZCbD{#}y6Try7iAY5pFi`1^%(pRGbRj^l z7Z9C^ZVne6x9)q0yt}|T-#ofT+sp<2VF}bIU>d|MQ~`{koZ!K+QsctW~E#X&v>Pl+hY!|bw&-Vqw++T&xs*qlY!hDDo(>&He~W(#Tq+@JDf#A)*|G$(HI#X`%i zZGFLARcGJ-03}@^bzNerj5}!wbNL^+(Pf0 zyYcfXLKp*+5FZ&mR)%be*Veo#-6HO1 z<(H*OwD-Tnuxfon93P3Djl*Gr{g24X=+LqT8#b0F1tX2Rl+tr0BABPzNib2hhRTj)mvqDWd>};)Ve0xV3Ep-*D|H65=Tva|$e$snH>$+))haRyuPx<$eO@aw_B6t^LaY%08w{Q*#uI z3d}uB1f=ss{$*jMfd=5#bdRV8rg#3$7Co2w6QGQjFh)DbUuq#$bDV- zf|4J5VrCK=ADGNh7^g{$csfGWZG#Q*0lb3;Gbm0?AlF`Iip?Q`aAN{-$I8#!s3M90 zpy>p-3eE{0k`kJwm^^h97k98`QR}z}7U6uMwE2MO3hUg`(?b#sFKjbs^Bw-IehY=l ztWUW3NEnS9F0B7fQbwA{^J1Sk+87CxA;`x*fCSJ1R zjnt(H&_B6!<7&9#I>d7_WI9FZI?QE9@)=P1g5*?lZ~Fq{X30|j%LRY2u=adkmvqpsAy8Xn+`8O!wfNN~5GiwTvOnp;ed^fvkXOYX$pIdVzT9wLe_d(gtHhBjK0v*2`KECHYOH)5VRGL+G!>c zvXb>I0ZbQ}a*@|i$8H&fW%tF&Dn5+yZGE-N2qrG=Hq;} z#*xYyKxTlVO`e_LU1E-KIQf`?3(T&n3S|k0X-ylb!Yod(2ZOIsSK^^>LJkxB)HmHN z3hW;EKbBl-;&z7r0GP?b&iXX_X8RFV(Kx+kQRxc?+P`i-kH|p?^0-J-0ow@~vkj)a z*{H;>1apN|e8v{BDRk#dVv@$CS<3W-%I)_pU#W%oQSNo>LUj$W(O?UlnQgaTk8tlI%Dlo!DkEh#DL=w!Bm2~ zv#5ad%lh!F_!VC8xB`$?LReM9cLwxXKyxZ4j|fubAUdpIdhrC2S8RFw&Dmo4pvS~; zPAW6=15c!COL{xUh6~D$PO!oy(faIX3ZyB$;dENQh)(6Bwkd+FM#xH_;P=n`m#&&X zD=U&Zt-Q_tWuF38*9^#10Plhg(@cJ!;&P1#!yV+PrlkvR{{Y5cLD*sluKeOqrd7z< zE|5?7MNKWtaOx{gT`^7>flC}+b(A5|>*?kOQAiqLvGWkMOpx;(c0ic*OgVm%)3X78 za=_3t+F@X3z_BX+l*aL<_Y(3q6=2*EfC{>XfOwrHzTxkin&1kIhff0Upqaygxw$j~ zBo@zzN~dV%j1j@wyNTUxjy?#gj1tUbyh3iJ$#miSEta?QH(uax*I7xauIIB3hN5Ly zNoc&z6BiKMMD>)I+OjJal)kVC%u*#KOBHYaq|}QRWpR??B+%6A zwjXFiLBKNLS}T`{b&;?gH@DNY0Br>3EJrDEYr~s6*JtA~Q1w5#`z5BE6K+^OAfYtt z4duJU!g*TC0}8;1X3P0Wp&2YWt>%LPX5tpJczQDfrt&r{7Ffq)J@od8Z2R3_-3eKmgOjtLamtO;pHme`Dv}h9ZmtQ!P{ocVED##& z>LD_$8cs$8WfGbJKtpVBXjkB1{XcP(Q3~1xJ&$>9n41CTuPLp$%8t&@Y=6c0z-dM7R-3S5zGu`VNvxShcRg;v9l0+P=F_&ai9RyX? z%8_GtUa+aN#CxAHE)6Jjy^w9$AJ2nu)!JQ?CRr+IiMiY=E0v+$F*EZYBOMc%x;LuN z(-oC8g%>LLmyA6E6x3M`fAfe20Zft$Db2lD_L7ykf5UlGuy>vN4qhB5yDlDRkPSE;EW zI`&+@6AJFLt-jIC>*xeglGm62GB02)!U-cL)DL&=P8_C+Jj2Emv zp3nOdfthfMg*bN(v!kAp!!A5YSY}`SL;nECY3-l7U4um0&Deej8gp)9Q<=MpAfS{0 zGhzeoVDtsA>+TFd3(Hc=2y?+7(p}wUy)eshEo$pf>SEh>5Y2gXF-W7L*vteys^YuL zML>ig8IZOpF;;ZojP zQ0n?Ru~-7&0e2~AV=Al>3#RgmKK%M+4FqK?n;lm(B@A6KaSo6K$Xwb@g{L@rM-iaE zkb;8P_bq=gUuC(oSSKcIBHGzO8L^K(2BQOn`${8jC zoJK*EqO}YPnc6tar@#7UI7M1U;?yalNa~;z3DzXutTth=V(iJ6F5 zG97wKt(85;k46uPQA40tgTkOp*J(lagw|yJL^9A@In~!`j0;?Kjb%}73+ydErTeQr z!YKysIi^h2L5Nr(R*zxQeZ_LjU+hj3q|7km63(p5aTioIFa`N@(eVgo)8I4txpLM+ zu;1nvq*Fn6S66?CB`B7Sro)PErF>gZ?%U@uaV5yDzQ$xZtrQn2W8~{o6s~D&402%M z8$BgERgr=W?skW?Uob!`tE?=|D>1ljCEMNLgn%#spy)+{;`C9=0CIp=#Lm-|Oe49P zvO}>zaI}Zq$XPja2Pt?8ZT|oekJ=Lrm;!=gjB5p9whq$(2u{h`V8cJStdwn*%Z)qwmPj6S z`8k5sF_+Zv_G7oaaS-7yQ^wdD1hS~@E67-~#oPUt#3`1K5EbXU3yU*RmBW3o0uYD} zDx#_{l3$Y@W<`dG*bzBR%?=ro#+l0r4z2EUF@c~~S^6MCv0Wi1>I&Rkqm>LEW(c~v z4)x4w9L~&V0;0-$&ETnQ+iG1V=Tb&Xw+kolJmGXF0~dS{8B6KRN7N?w%6h@qMYz1;ItIwG4}{$ zm4s?8qY)NDDBy}bYu(yXj8e?MCE`_8ik<2pt2Hwlh*YJfLbXSNX`PcNsSm!2yHT!9 zzr^mP9?(oBici!lDXxCda91RJeuIBkQ?#OGF`<`O&15494Y$p8J4~!b&|3nC`D@3f z57P|@(ome#eIaT0F`%OH7pAc&9aPJ2RkQqffP zVq|QbKp+6<%XP+E#A@j@knz6>2GV3an|*A!uu2^QWhdBuOD4nlfRrz6%=t%k#75r9 zl?~mc7C|Gnt5^aIK`BNp!gQN@%ZHezx5e;7xVvq2V6jn#xKbypD>rTuTfx(0XcSRU z?@kF_x17HoW5kiaV?JJlu-@5~39C!o2xIK(DMsBBZ*W7KiUI!2`_chul?H%-W^bbG{53LW;t_?b6t z_#d>4j=`8ANYRdBa3v(f%zVwIKNysptNsKB0c!yb?DOt2xBmcPCtrKZolGh+%ZU1z zy5u*<+;)f56nRF2>Dd3cuo&qG@Rbd6?L}4)N;#DHVl>9-c3bS=bSO*MJ zqJ&ndEfrjJSD5J(Lf{=fB6Hqeov=o&>!yR7 z+yx$1riqK93IQf{CM0L4mwrW->(p zXQVPP0nBh_(oj9$@{P$1Ts;cmIouf+LS_{V z#Dwe_N4N*E+!2z1dSLz~vaXQaR6q8&D|lhGAdGfph=z~N8CJGX7lbGvxNyL7vZ`OA z5)xiPa6xP#moXH%(GW9i(_YJc4N_45DsOot|^u^4|T@Q?Z6Q2lUsdE>T?!cBm5T$%eetXca&*u87^%S2O5#fn0d&9O4kF8H^+Woj|de%%cp+ z4Jv(9SJ-HhwoX7$!T$h^N<|oDo!Wrtso1(=Yg)$%k~-2+dmJm`mN-PHT{fTlm{Zb7 zURsA;)W0I?)ol(mV}2QFhVQ)QLQbffOcg3NuX72<%(ooOIuOvD;Fl22Wqqf)j776p ziWF))pxe;|jSUi&8aLJ|A+Xo98)v#KAenbE6#)rCJeR0w>2+}|l+7o95jYM^G97%( zWCkx`{>L+q4vz!IK!IK~n)=P=iA@gOKxTq9(~M73yi9t8CD{sQR?Xk?L&ZXsvJC@~ zapGNKm-sQ@fe~e~Am*h~(y}ihs0a_MWiw`iSkSKU6PMAb5;sZ2hL5Oa$vDi$*h%or zN1~;NHp=Lz%aNm{wKSDPw~{07VLBH1?G!m24kdc+<%lDf;wl6ESa}LH!8Nod_iy1X zHhuE|)r$=;{D`4IFcH^%L!ScxlVVuT__QIXxnZ!*R*D70ih_Xz%_^$5{MxvgLkdUXF>s5gLyAVmvNo+j>jDdfRPS|!5LM=D>axx zsl`iuI!oEpdBNlo#A>|E2T4V_h`oDCHNw@hj?Lmx-cDk+_faaqM8Ve}FK0B8=7 zydqF7lp9%?3J$8t89`=)t1W7BI@<#*QkpWa#3itBW0_!-!&l7P3U;!{H0p9dd;vkF zL1ohB>MN4vMRwsM=(89dvz)Qp6A7KmuSoU|A;u;J%d#?Ks%WA3w3o87j>c#A{3_%dczx-Gno1kg-lqR zvY~=1YPzjNCT&+-Hp+yoJkPon&z)u)ah$^w_Ql9W19f@wFM1V6}^GK!b~0H@4kmQ;E^SXfG? z=rCoW%@BrcJxb$!#Tms+3zzMe5bcQI3=o-Zh%^p*^4M3!l9Y+IE{E9MPrb||4KO{I;w2kF`Xl`&JBNe$CZi5I^~#L% zF8CUWdDL{}FccJ5sc7(Ii@*g6OHDe_6Y5jmHqPi;F)LHQ+dn8RmI2ZqBj{*#Ur_oM zS{q%<2+?`!{IDn*;qNI&S@chiv3QrPU>T1*?jmO>scVFOQ13HM8V567Y`=&n1XIw( zvoXo1Nb*{S;1rrka}I+9TQvX@!-fPp(H1ouEX5mAtak*Idry(5Mxy2ga)&DgBZyJb zHAhG(vG_u&x<$Xr9T(g|6?7q_aU7W)TtWt6lx1)&ikBatA-NwBsE%VW#EQz(0eyFe z0^YDud=j@t67oz3vP4VfqSWSF00Zsbb9U|k6$8Y`7?vQj>)J6uO3+L90!S<<2&o?M zYU1hA7@z=X4NM?nQ4)@>2!$u0Hw|Y#p(s;<3}6I!>n%H_(kio5!Lk!6dz?TGN7;1W z1?^>wz+0H{iA9)NMh!p_mzkfc&B4|pdO}p-ErArwiNiK0n3Vla`L9CQ3eB~cT5-^>I_C4L`8PBxU-XOCl)F3(is9wiS-TQZ03Kz`*dEc}?*JDG!0>zF){cDa9u-2%Np>tjel15v!o zv2#R3@HWnT*XjtH$%qrsT);&er>&(ynnB}t#5 z(h(F)uLoI^U{*@{)KN=tzyQTdiG<0(< z>h-StMM^028Qc#^kRg^Lw%}Og@FgEU78$vUH!ELkOWV^C6oGRAdA|~W^D!zV61c^4 z9+5_vOMC7p3x1O)rd=~~wo11$_43o#Gn-mja>mVb9n{tf9Z-V{F?w|+EwbAH07`Qh zQMe}0nYDy$&72^ex}d5d89NbS+_-a7Gu5jhu`!p@nD55&)p&Wp8}5AL$4y z9}>Yxs#)4S01#=*EQmN>4yAIkv#0@i#GwgcIXW?iOA7dk*z_C_%0l8$`W^Cel}7=B zF|kZN80y5ti&RPiYy)jU0Kga_o@UG9F%VP)qBJ6UPz6RH&B`S~t*|?ySyje23t3d zB3n@8VFWL;yBG*sQz;wJ>#V@3y!DgwFPWED9;lyDszcr)RS>kkEsb3%PJ4Q&F-68a zuPZ5=Wz<5<+a4|A0V=IoM_-Y1-GIW}*Wot8x*8x^GRDp$geEYDR;i#cYosS3_Z-do zj)n~oSO%b?TCupDv!O>U3&%R?+r=Ig%T5EO%%!7M(s%jO*N*{FjthJfEd*9Vr68Eh z5xc=#kL|+6bd?P5UYHbBc=W&Ieeh*Ek>MmMx^V)l1)*8Lb5PEir$G0Hte|KJZal*= z#8Vh>JthZ069vnb7()U%!6+-PVsWZ4Vpc`+KztA*OYbt=p3Fc&-lJBxIP~oSiJnyq zXqvIS^9f?6x-&4SsJdk_(GJqB;t(90wyM8dnUJf#3;opP1I5Ltm9m|LGy@(WsJQVI z%9ldJa136ZWoq(RoW(8Z{{XOi4kN##`7sfRJrTi^jd2_XudT(F$;4Z@{at>XxFWlChxHdq!Hz8I5q6Fx2RvR=k8tX8V#g{66|-wj%DHirkpCA!my*D0U7^^A&*uF0I=rX`KOU5U&U`O;R{p z{J?BL6}gB_zy?vR+3Fg$jF^C28-Xi9b6mlL?kPD0$B^}kRN9L$g#ZDr(T<`ENR=#B zM23cIm+=KDYvZ*J&gG0|UKO!s;=(w~(Ek7jGWM3>LYy#0I9xBcFjVziRTUg@f$m#> z1a`ssVIJ`bbQVq0$$EV`cjQ7S#EzA-bGk(k`A{gBE7MXK!r zm_V`7%|Z%f0CKt}C#d27tF6LOMzX~6KGic86J_RH4!mTK6l#XScM&KrxeTy_P_hre#i5FX704OFjhVXDNJ)^?iw6ufk z1_)W&B9v<{qA!4!=3c~Di*{;UtzVW43Zi8yx1=o5pe=!R_%qfBlN@Yo< zGXMZ|2ON%oQqH6~$Z!32WfEXa`~$x=fbhWZyvrTRT78p<-(j zfVqK)vNMv;fi+kgm(!u$nGxRAtMe7h1#_||dHO+sH7>5FJZuj`Qrl{<=2`}oV%y=I z22P1CC&3<8Zs7)^%ST3Fx5PdtB(Z)_Og8)wGIP<=9RC1GLG_u@P9dhHw8lN~OmrIo zgV($^P0+l{5C;JR4d@<^5W}7uSs1iAj%#LUIz_R`nW9BN){MuAW=n1`(*`9~HsTl^ z2|zfg%c}+Yf4$K*`KeIUV>bC^AX4_4faN*n2Q3AncfwRmgY^?@^ckv6k7ER&Hb5{N z{$lexH*2#V?Xb%vK;sVO8jCUgE-BUp%Li61_^8T6O2&FTlIJ;a*Y02?HiS=7=D6S; zp0Oy&qQAlb6vgL{q5@&O1P_85bpTe?LQyzu0=Z4p7@W3;lC>=hJl042izIBbAvB_y?v&WhZ$UF9 zAaAEXm<%J)d_fFf0VpSR&W2Bud7-fe@ zQb0HDD8p+(4B&2G;x!067hN9{BQDQ)5I;}`3-XOPokUZT<|s@xh15>GP9`cMCpw!v zO!rv#kuUo7eP%z>ai|;Pir9iL5s6_)~Ypa-E5zFmsv<%^@qluc^ zOhLYq!7ve3D(Vk8i*O^ zGhR~4=_>CSZq}H-jdzN_U%PP(aU*DL^(zCJkYH1kDOWIaY#g1PNWF|O5WK-zLa}4` zjgX~0AhCX#g-T@@bM7!f&XP%CwD> zfH&+VLB6QzD9g+gR7-;dqFvN?Vo=Zy#Lug9s)jOkk2Kr1qTVPbX9iV22CIkYzO%^PqFgw0r z8HuR0#6-PvR}%1d`Z~%-SPI;Hrvz5lN0`VF-X>$Q?g|-$E*+FVbDC3^YMd_X{{Zlr z0v%5~Lsg<>@KIK$ah2iJ-}E5GhUn=?8SG1kp)Re}5!6+uY1qve>!vPZ>*@T!BO(6) zG9yM-OQ;GrHL^3nfB~4ERcUhvtP%^SJ>Ky!TN9rAz{VsTEsJ76)N-sKbUxxZ8L%hK zF=GS`TT?DL21{PEDXGE@2;U}>2yX5&yCB$1ZZn7g=~C85!UsWSPv!^GY7DMfP;{!4 z5rL|~O9%#TbkB^u(dn^Lf8yBKm)0W8W&35^gA>8d{p$W=bSjRi zTDd^#I{c?t9p25bny5L&8zDdwvoD)yUxcaYgoI=1|~6T z;R5AWW{y(Yn%d6v4nyi)tR-XI$jYI|%@Da(4_wY<(N9T5&t!CQ0~N$sCcG6&gytaA z2r;xgd0Gfy5$P!lF6GzJ2i9#rGVzCUt zI{+ee?*L3R-}lm8$g3_ytrcqH$i-V~3wvndVIBBjd0K-Rg6au#f2hFvmmR>UA043X zju{}eUI5Dz1A1OKA5!Uk!4hTMUoK@IrWh!gL2wUr9k+H za`}ddfT{AlL^CI-Xsdif^aChwNN539TbtKm1Ul8i9g@H9XT6wX75A|N*mu)G~& zf>JO}oPC;Qh&0Lpe5f;{mI}gNd&d;*p{>uZnu*l^024mIZdGXg%TlFIw5a7nO2e`V zxPYr*#3~BB2xZPDry*=wwB0CKFJSJQffdy7=x>>3TR1fc@%WkPyA4MtA>JdVNtFQF zsybM@RtQyAcU=HDBS<(g(sf0Pb#+UX#qko58F{XdVCvNuxbqSYP%04A z2<(}m0X~w~s_Hc80xaXD1ulcj4acOY_#@%)_z81#Mh{==9c4&4f`>t4r49QbuV?s| z9kVT+US`jlsCcEj!#N<^!8x!V;Rtr;#PH+8Jt{FUr54zds^A>JBrP>Wc2U@7Ys6d& zE2ekw0sjEkEVdkKA7>C-mk|&Wy6zPNSGjByhR(9Yrb3sr#cO@;2VY)UoYn&o!)0s= zKQCVd0%FG?{4r)=5sGg*W1Jwi4^p+Uct^o+GSGHkd>MV$&z7)1iwKp3^Zi#dj61k z2M`1DkVwYF|6sp%-a zPnQpU9 z%FF_Y)n{Bwr>u)>)C3yVVs!cLsetZKMOW%}l#Lr5XqCNep&AO9Ay;eCqlvqhbywl9 zZyjdv9E<@1g8=|QJQi~{$b8Ir+Ukf#C>HA3nzg*kiz+X>M7zhU23^!^w&7Wzfy?dM zJu0j|$YNB1c>2(RS$QMuCR*ptP?2Y_Mly?TDQQ?iGxOPK=rP5to4r1po za97DJ4$_X|F2h#3MzR1e*D}rV1h5DJYZsY^GRCQ^H+CK-GQZ+2APz0>Izb+LFgG_?7=wKQNl^DRzE?)&QYos)8(T=k0iyAHgJOgv5!lH_3 zj0=}=*`eG)batsyjuBY7u4YoMUn79^6T+dGu2#h?q^T+dL`xI1Fvj-vGBE}8FY{25 zXP1?N=YNr%L=U@1h16t97<5BQltoPDd{RXbpceyQ%k?Qx!4?v?FYyZwQ)_Ii*E0-x zhaV^LJDZD0#2V>)M-*f;?=SH)Qt?q$6jp_}AtO1LYZ1y1`Vyj7dM9E~>KImF+R$^l z0ulHG+%E#*0s~Wsk`1d+@=CdWN)Mcb(-%e?lXccAz^*TGP!$nqismu{ehtZCIzpo7 z>lVdnR2!5UE+Feu03!#FrM1_=Eernud;b6gSgKqB53g1e&fKfdd0z`CmBr5^5zdk8 za@p13fLl_*VloE=T)FEMiS4+b|!p5 zLgkpw7$rO1nCV&o`Xz;wuYeZ}w)F<}m=A~8Llkmm`G5p?DEm`UITt2xOe&1jdr2r~ zbl1xZgH_xnv!-Df0|4n;frkV>*de;?Jc3_T( zkHIb!qkf|<;bs78usjHs1$<&K0PajO_Zv*X17)FzK>}HApUhqnAt;3_MDNoQ(x=dl z*fVdTq3>X8n_8gE<7VLY@ z13CzZLdx)OrA>28JoJSe{|oYEV8Rv#=kSvWD;6HST|KT9p0Ks&e5g z3zB9aDCJ0+2AGj2N|_;oB;_z3k>a!EoKbiu%J7!g|lmj=z~jNGQ-BJ zyB9jyfN)K~QPwN!aE5N*pKyA%rlL+vk?kz!7i^{mCarg#^5T2R8cdSef)vR1?GUVn z+1@1xErLfkP9STfd@3e+MY-2XgPyTa^)8#UL@O7;iI31Mm>jUnepA(ggMiE^f`VDR z+4T?goOsq{L>2Qg%*|4uh6@+`r`y3O8AFdR^Za;QVu-pRa`Ns9B7kSC+-hm{E{sid z7&~A^yJ{|$QEV!>B8zZWv^ch0N-+RRAj`MYxa0;nm`cnt=(vSz1Tg_vo%vuGAWV?d z2L}8^m@}wBWv?(~=)ahML;Hio2}^`e)ErI@^*0$py^`6PD=Qpyf^Fcrj;xdmf3BhL z0L{c5*vq(z0}YM{t~ESsckL`oseCI9d3wE~c3D~6!N_!#LwegRUVFzC!pA)v&urYX z=3_>Ezz&k4=8Sfo&EZXA1nCS^u?h^suJR)4H3G$S4yHozH0};SvY|lT%2~s2h?alQ zVjfpBu3yZsmn^Xc)Ys-awljsO=ZTD2>eh%@Fi>jG-X%gT zz4@0e%44;Hpy=1)0qQDIwhSy=7e42$5MnqrG+)FlCH<*973QL ztjhlY63G5Y+x~n)x{DRW1+4XkOCuhL!#F19ub{RQb!9`dyA#}NbaNJv(x80B_r$$* zw-7{d{v66qV?6E0DZ{TnQJ!X* z;Wo~4h1&cXOyogzVx{HwU)138{Ci=nJZ>#criix*W^0n?dd{8VBdp1w;ZOWZonCXJ z@unADbpHV6{vePMp{C9IgIQ?Yr@F0B2M7}6;ELpG8yTMs%|RRK7Tz^5s9b7MwVREv zZpRYTy9Gz5EIr^a!K=d&D%jt#mJ>w~!agi&V@}frEJD{-Do;W%KZt^Yk)vMYI(D?S zzdisf)*4zx_>RpR`&*naS(rW!iKJG`QRNE4>&-7u{mTVFz-S1=EO%XbfXX_(0V-D9 zuXs&2Ot3O%h}xjVgc z_=}d$2~@jKSBX>hLCnYnyYtV3!p1&FihxxRUZ0ryVoDYdR~@0mHRwZr(r+}EMV1pB zjsw~Xsx~hH8h+y21E>B*Ml&xaOC4{Ns#B~R?=TeRX~)-Bf>SGU2SLC?XB6=WNp=)w zW|x*<#6WZv6^vvx5HJSw9=1-?X}M9cbx~8T&ERE#JuYFyzy^qFEzNcaS@I!PHMeWN zQhsG3p~~QKnU!B~o zY_#Yb{nV>?Qz|HZxnP01{}&O@dI8Q^{7Ft z=2JsatxMCD{6&4>IaZDKAr6iR>1RR~I@HHlslzV?5b8v#1GHGh(!ow?KbY1zXb^~M zfKJ8kJJjZD+-wY}z`-?QGYu7;+x&jx`d0LHf)^UZ7$sM6^1h%1YkFr);(9UrxkXd1 z_X{aXs_j`)jH}QS+`pms9%}pQZ~^F!A(CTj1aCB5sBTz`6cVhbqGW!^GPhX-!E2h1 zLU^LzH!FyoDn6s8<%5C-^~l`7gIXnmFshE+!DZf8%tQihN)+m5!_a?$Y;9L$^LyI^ zh&NrAZ_GTq2wWu!isOmO3sNjyF%SO$D>GFO>Bc8J|Umh{zyC_F>;=Yo1PNrI~ zW3u#k*TMArr^Iw{C%cq06cqJ){$+uBJ>y~+6{%m9q6Qm^3zxAaQ}%3|8`{mw#CsFDScW-Jc=E@xGFKdQxwI*#GQ=i^B0{{UuU zvp<9j^t^^)C^gVN#DXBQs$Sk$G(Qny0-YW1@KEKh);bAFR0El^FL$?CRnuC973#|F zm$x&^YV)>KjVAiT(z)`yvxU^LA!S`-q6+^2__zQ7wL{6UIqMv3oO=@fYAy?!+}{5H zYyj>96A|$!)rBCrn#lWEZ&;z(XusU3*%5{%6c1=Wz96sXyD_>9R&8tE!XtleE# z-w}cY3GfaNw&Ga%kLV;a7+LMN=2`-rBhOd-M{H&v%&kUC9sB&nuqyp-{{T}0&%-w> z@0g}w*B21?sB^i*&IGN1ex?a5M^^s;$f`Fp+Izhh?rQgE5W?;{gM*1hj9$DAYxFiAZ#l|5K$D4olby(_OJPi!T$i;+G@hU>cNE4S`#G6&7b8B zGVKpEfAV!eQ?r?S@yupc=>Rs-D+88LShy$~{y{$Bl?9|2fA%AA0?P5~W>m%K82dN% z8zf*Yy(#ZRLgi{{YAo9u*TtxFRD z(x&w&=d?^(1+FRQ@c>a8g9TfuFjcN6VCw?Q*T7&L5p$P^sT&YWvjb$}xQ4d}h+UHR zsN|Tl2i^?GHsyq234T;x8n_jytlkq?7MUG(%;+Kve}p#OAjDyYJ*)B8PwsM1ET|+} zWLkGewgX{~#G#5+z6+Sy_sjsPKvus`6$Hd;peape3%<}mD&&MJEsXt4H5gW{mk}wJ zA*!gkO&ANXe@GDmT5h7NWs2D?$V&Xb#5+AmhOO7&nK6J+>nfm*Cj>(c16O-y$f5!3 zHQy4gzm!m-%#1Ss08l;_ejtY3h{E}@!{!0dtxlDP>Q=LTqA&#mnTcgv`m`S)WrH-b z%yg8dip(nkzD&dlE5SvRz7P?pR*9dyJ+Sy0mo5sfE(Jj6*o3l)_6)xT$8271wt!a;CW$}Q!artYZRxY(+G zO&48ZUDIOI7+K3bbSw z?qi*2#-PjIR@YPUD(!I)=0eceB}O6II5;sKRU_#C0I@EKi~5f5TzCqOpuUobw)iDs z(x&O9VADCeKQKZ^QM#k_pVejC<^GG9p_FwCSU!+$s8_Y0hxVxw#NT}5E>Dtga1oJFOwM6K%^h(d`S zh^Dy3Vgh#Cdg=HH)UkKsWsfsNR6sbW3n(Y95oHG7K8$5ic8VeHT$i`zR`M#e>I6nd zjcS+SA1fD~#5T^Iq2G1|^dUH!+zbY}jb;JN+Y3f6sBd|w>xc(}?Ee68qga^}Sm_UxSX~$XNBlR2;d1WF$SQ zQh?g)>Rd}(TbOuaHn5rPnQAjRcLd!F_>`kY*_z6x6qIMQ>7o(KD&3AdO2cQ4s52Z9 zln`8?(G)x_zPug?OJgoR4*U-Za~97r6AMG?WE&#G)E9Y-J_cb6SbMB~VgjXRu2L>( z?cr_+a1x>{nO0kv{vjbmBZ?)AtdVtf+;Ly1M7Av%Z5>o=T_hbb60DanUhy=!shN7* zTWscvx-l#*NX&R!U;Yvk`(2?gPP&G0S_H4mQD6f>TZbeJmq4r@fG_3!%W>sf4F|mv z)-K@Hz*{25CpetD%isfmpqGHDY`9I@^9tHVeARz5;SpHtGZ4JPsIjoiwTxkTh@x)h z@ctrdr+&qJXZVLwjw7dU{{R#DhW5WBZ^8SGh|wP~C`Y;cRCNKpSG~abfm)Pimyh;a z+fUJH`Ka%}<`5UOiYVC?m}mBH@Icx_XE0Pq^)xSr7-^EwlIgX2#O;GY(3onvYGx=d zh%8%J^$}b7VX|0#*gq`0@C+l5DkvgXV*dbvnBhPQ$mtx2tyio>c6oq2!UT8vv02Q) zi>%2I3hn+8Rnq7%)4QMIS#)4dF$fN`9vQ#%i&plBDEk9(*zoEOlPAX#{{W-8kuHgQg1ErjE*7l6H2z@E+&EAC9j7_7HJU+(#OTPV zsEv2Q{{Wb4(gW^ZJh@~1PWW4Y5Y`03o^B@SoYUaMZdWs4`P2B9sG-L&23-v>6t%>x zYmU%UU@#t{PJkERZ1_+rH48Qv>lr_6!knzCz8Xv)sE+)=J@beMD?c#Vl0gQ!drf0T zX!wSTP(O&&xPIZU1MhG}Ot&zc4M)u>xpY5=NYy4$rv31O&G^P_c7wlZvD(yJ`2s02 zv~?L=hgKC1;Z{Mz&wXa&S>4VY{;$vJhz-?CuJ~-d$V) z;E#h*H+;?`9K6k7=lZTLVOt97(l}+_#B@(dxilV09S+KibQzFu<`KjniJfLroJNq= z8Rl8Jf{@=`&RWE^(gtD!GO20Qv2$lj0EP>kX*QBeAdqiwY6SD;nh(*kC6 zBk*@E5Dk?Z5M8P2rA0^_aRMNMX#RcKzG42Um${<*-tgg!eqUg91 z4O<&xZ4cD$K&hym@^C@GQpnQ{{S$5Xog>^l%6Ge z0cmcPohpe5~?r!Et01Q+F!* zIGLlE730=z>mC59y0oGCtR>yaWVGNAv27teqCY3@YwZF9I(HefG!bR2Ty$K!7{tX0 z-mjT#6pxXDiMV*2L8!nY)H}Ldz`b)hoItpBVGlv6W+KB#s8$}CDD_(Z0A-3d4TJvx zGhSGkY7Uh4<{gmH1+dD(VLQcM;(P&8;Of7*oK=uk>(|7iH!zod5K5uZs|1MOPGeS6 z&wBk^4CR)@HW!W(*1#&Ii8Ex7cnXge9ZXh6Uv?AN{0ffMHG0Y6cD9{Ot zH!Bkj_WRVw1G38>Nr>3zeHqJD3hw^^$Wz=4qF41u9qS*&uABhq)ND&K^-<}4?@)i&J`n$%v1DO@@~6$QN( z2!bmCsMX|pYGm&3q!PwXa2@3u4m!WVEX$BYMmQ(!a}&Xaqqx2tx-X1yQ8N~cn1@(O zwjE*DqpAc|M|dea%-LC#H~#?Y%C4s8GO(yPdPk0@n5xg*MQPL1U(9|F63M}!!H*DC z#1%0Ic=#cKf*uxbT3lAE2JVJd6+fJbTPk%rcRWy_hVAHiD-+r>J>3;1+E&3gYyFb*Hm76zDt1jONih+ zuB>O7Yidv)+)AgQnX`zoC?zyOg5q9==35zkd4Hd9NuZ)JON%+tmS!$1(RBma22zMJ z%bHNK0o}7vAte^q+!zEkoKeIFNB|ss%qsV+0EKYlaX0K=^AUBQQrP628Hw4hwN(Zn z+Yf8&5gLM4A{hrW1j1k57nUZk2mDe{!H8 z+Tg&{SK5obC$NW=Veli>(?F3J5r8AWDdc=R5ORU9u`aqGtXV2CZDWXzlX-@ax?GP; z3P|WHM0q&Oyh9}-2;jjG#TY(+`3Vn6K}Z;wDbF#`>%0Uy%dB*ocFs9X49M-6I=xtp zF)}#<)G^|zS+V(8Rkf+kGl{tG!lHll5)a~C(r6`8Jle(&bLk@}0myWk+W0l_UeAmbMz0Thu{9~_Wp#Ej+`iyw{7 z9^mLpJ=_{0n{XAmlI!n3!BU9vkTm<$TD7pR(-#j9l*}bTT#YhW9ksYe48m2S zBa{*=E{GO*SC{~Jx%kmlS%|4uNqI$#%QxI2rLf(+%biL@+XdIRiJq5`(A$DPOtVM< z%nUQ{`JyNU)qn9stT8x_yeV!h_=qvg?2agOTz3>)&hQGaabY@4FWw3rNHnjqZ!*S5 z>fxbxnS$(P)*i$`L*AzZ9Z23sdxf-x0SA=A!sCMD zH_4f_0{P|wXs+{wqfjWQ#k$%(n2*>Y=A&<}A}+Lz1E?!C2wSop6<@+%t(;AtBz*8C z0O~7W;wl!=`i`(@U1-hAQoiEc3n^7_J{-qk(ETRwyeGC*HyXBf0^$>5QRXOS5E5_ufFI0 zW_F>3cumABx;o%~nV43a9x)d(@v&$@{{ZJ>GM-P+e?&HeCvt5CJ}-g9sxA!*fo^ei zs3d8L*62+Bjj>KsR@6 zsPqK+g4ZEG6hu=vNkLu>{)h@!<~c#F%A3t`E&&sHB|;x@yo`{vO5W$Qw8}LxDc)KQ zkg*TU>xYDje(CsvrQ_w$e;ymnA>)XP>R#kny5Mt4$batejJb*q@^Zn5Y?DL2a~V8}O{}pvo5f7`u?bUepkcrdcTrnq(X_Opct4fH zKai$DSBMpII+3yXp*h$D3UdN3uBCCRAYblbP2(_kD4UNdnE+e7pxc)s+`TGNynbN1 zz-KAmZEPKFDNr+B>l%Al*bTXvvniTNi(+Ea61S{HYV(+BR}n)G{K0sC^@7Fg0!O}~RdF!m61|yVG^RIg%pg>M za6o`hYYadLkrJCpfoxm^GOam;%!q>cOC(NX{{S;DV3nJeSRY6XkjA2js(0n+9J4cV zqh`U#_v zicARF_W=^dD=ffd%xNqaGCPoE6Nq?WvNo{S^_@jGooD_Kl<3%g2uXtiwMcFimd4kI znbMMWcKpmKMFX^FTesV4{^0QrQGAF$X-1GNp1=7z&%$^KkCu|i?mN9B_Z`E+&SD)% z#H+xS5%V%ZxZx#osV#SioJPiMI>wA3)GD5FG*mYp()qobs) zy2k-<(6c=rgaa&ii>epWT!(@Ah)Hr?)!F%ug1Q*M5p+TXM*G3Idcji@ENj#WD_q73 z6<4?z8nf|npO`P*++%gKDc$>+rTa4cr6t{nZABA4sJP?4UM3EoFYYL+Y-izzgALMR zVCyJ_B4#ms!5o(_;u=K^9Ln{F)Kha7iJMeVO1R7y?obs56HFbDCPWmV1s<^x-mYx zS^Py`mk`pO# z$u|fnydZU7H!cL`G0Wl1b?0Vs$%jx2C_Cs96xV9ea0zyDLUIZkxfnr3e#On0Ii;@GfulOrDdsy8u7{;3}f=a?ARUX)4|&&1wMV;xZis#kIxs{{TmX zH5cMqt~DK6`|97p2>Kv)G2u&s8g3xh4Equ@7Bi9860l2GL=a_psBW=x;vh?u z0_sp2?LX>_@U3yoaN(u*f?IdO%)gmN6Xv*qkTg0$xVDK_cQIxzr#HlyMSa66ycL*# zLL%xIV5Tg=Iq@>wftL|9;Pulmhj5oi2)gSp)T?nbf?nC~l>Y!Dwd9MKe@%>G90WG_ zA5%z#s<@XKYvW%A?3dU}or!&%T*0|-b!DRnSzJ&FrPsIsvLFTrEV|bD=Y|a|nwc|o z`RzLBK(sb>fTEf%>QxAN5dB31a>INv!==SQ_D30>#Qn-AwFVlG=(35x*&0Nh2XdB( z4`w2|e9a!>+ep?TRl8LxFQm3rg}oB$KIUus>fg*4SOSmgVQQ$VbEWj0xK!ntfwmu^rvkoUwvNi5 zJAF#dopBZ7y1+2xfOIyr-ltedk(INorM%(}5r@O$d{mv{#a4&BFX0iTTXwsJxtVCC zE&7_xpvf-lEAue#FqW?1R7F&yk`(m*6R~jw8!3Lo;2fJ*mYBkFB z8Ch(b!JA*)v}med($O=tM)Mjz&*o(4J~1P-`G z0m3VD{)rJ#quDtt3MrRJ_FT;IG+kSZFgw6-)rO)RWSo_^DQ&R<6^`>Iiv(_2-1vH( z?p-v*z1*TK?uv5OS|xxkA##qmj{m;|G$1mzFW;XAT!ZDh`a;WY=V^$|6_fGcw=)&$#gk#P2FBwSYPbOT|jrk#7eB z>N;b@a}1;60@#}(xlNGJav6%K z^gR0`qi;KgFyVsOgbKTy$DZs+Nlfj5DtXHh`% zWqpkVx4lLw>yHnE4-C9`Wfd~YgP8FE-GX#rjt{Oe1ulWa8li0^&s-x}tjzr5`GnI3 z;FSq+pIrz)F%V-?1+ewR?ci}4)($);m8M+Ie!8E`!k{nnIS+}K=>Gsw4$;!VnIUfd zdq75728d$F6F_~-+c=rfRUf7*Z;G0Ql=0F49B4gyvm(tBqJ$Zsg7Z_2X?3=0Sh|-; z`b)&Kpi8c!{FGR_)EN7hGq&bV-eE527Il`H55(NASb~(Z0l%oYrK(+HAGqP}DGgWa zE?DBiX@knE1CcYg3FZ)_XsryOF7q1<>zE7ygAULKc|d5GNx@FOCPi0L(IwqO5{1~* zPE?ks67er=m*o%UTgoE6kPEq$IJ}spqu75J5JlD_MgopwMX5wWTf-@0?!>dEBZtbD z6*-r>48%YcbP?FGl*Ej(gFt@em=?#-H}Mc{(3v8FA9(&^J8#RckEloUI;bTD7>!@% z0Z^$+MqV|&4xI=pMrqlX$iIl$wUY0}VxwY(7`5Kz%sekxkHY-LOJK#e8i#@tkLt$f z1xN+jr+PjnD5aoRKcvgl523&IHJvjKZ%mN961mjG&YM_%&= zDRdc0oL>I`(ppZaoWtSs5Le2gM?5sfq@-7kJa>T$k}!b)<{<-UB@))i0VQ^r7O9;H zOg59|Vp-~y!@_#T2T^eFGe$P{=HVIck}6;LmKuGH4eo80M9b4aMlv!x7qGQ>{@!C>{+n7hS(nDK+5+QEzPknL}yQ_o|axE z)!+mrus-ihRMZ?z`bAzL(z9(vJ5gIVe^~j3Jq!`%ULad6WnkX^pv}!QnbeQbuhhw@ zM~WXDE$D01{iU9u?xRElikXAN=@|tk{V;=Cj4QOdKL|1E)c)E(6B2=y40a|XxrXCa z(q3bs5Q<{<$}ttbA0xsvA)M1 zr6}Cj?-tJa!M}KIg;;zhV~DjLVX1K?_;(2x2Cm{i?8H72>RiS{2Y#xsU z5DaleSGjmrza+8hSd?I~2CdL~79ov0NbZdfX<;j@&zVrs#K647ZlFP@fL~ariJ)W; z%QIbJsPy3wzL8i_lKVuq1+YgUTlj~#_)~){@ic-koc5_m)?B-tlmOCtin2_p`8ka0 zd=!=Co{nFbnM+IDGttoEYHB2gF&eh7tXjZ!m~kt}M$H4f!&q)$m|Sw=xRusnLfF7B z00>$ZLjrg@!nvZu9*|ZT12k^E#1~U|wp$@kQH1e)v7iGfVBq%>_Qks59XrELPw^eG zWyiyek8n!Bv#e^YdnF(RTU^d4GdorO3CNqX#YH`%oOpNgLB+-ywPEUA z`F~W|QBZx2BGwGkAFW5#i@+b18Kn;EJ{R{D;rkKoQO&k(AjgN?p>q^Ca@UryD>zqQ zxMc#R&B}uiVqH@1_F_(<{yb~oxQ>;POO+#aIw8@Pw9C9P8g=AAC0NVz1E6(cSx!cK zggmeE8YBc4d4%7`1ua`H;y9ONx{iWv*O~2W{Dgxlm>zrnN7QFGnUIbmrcmLU;b&;# zz=Yr){J`2<5mpTtf>H0hJxtW%52}m~jG{TxMc?lw8G(>@IAfvGUPhQ{!>bTv?>ocy zVzGCFIWp~)jZDi>ia>fLHa=zp;t)Iu(qNY=JizuphcF_+4KR3i*ss*>+@N)0MG>ie z@d7J`2yAr06DveEG{n+`=nf2Wo8{J6%ZaRyL+r$yN{I|q%ZM!alu1Fp zW_rx^iCTR_HCJGn8rE&>#jZXPf%&N51Ez~LQI1iE%rh==U@-bN3cHaEgUVyDRulrV#mxV*nyZ7qGFVL=?y|*Tsmt03z@q57#qISdtX|GnslkSjFXvL>>=S`vC@sF} zV{4)R0L@K=#IdS^R_oz$VwsWL89Te>EhdIxpom$zn|wB2A7qJJ?>CHCK7;vYQZM5Sv`q&S<+?gJd5d`pEHjGpF|4uC@1HyTa38^uH>jpL#f0DLf#>x1w*zYVU*=jzf&)IU9)X(;tZu?I0RZH z$nSfpH*S6jMU0QC?TU$%4-hrNDJ!+M8-^`fFJfMTqNvS-a5XwiIPxCxEHTQ%R3!jl zU8&4$mUj0l%~2?tl(b82P7vfyvtg-G(A*25a`c8FG;UTHEUSrjZnpq3=c;`~B1S7C z2rf35BZfIVR55sE#t5m5UeOIN^otDA{XNWlTorL_PIYSE{SsmhKFSQM|9@kw7P=qi{2Z% zoYgu(rCh0o2x6B5t1N8J-e#jEG()%uB}&xHbb~P?i(9FgG^>Ou{M-l+0_rQ3ax_OT z24*xbsY5N9{{T^p)AhL973VUPnmh}?X>I}xaWzp(O7&&SgLR&P{=`K`y~4B(Q1Pts z2sx-xV>J&UMPLC{;0u7e6&DYHBn8v%TGHyzY^mt5j`gD1RfKQh-!wJQ`} zF5kH1LV^{9^0@Mo0&fM9gl2W|dre9!=i7yz5h$bCsj9Gz|32E9_Dr^k1Caddmt?9yw zD;}PVYOBX-Ybi3U;%N_<39FaTm>pa(F0XRD3OaSfU=20Z6=(x$^DU(&g5#-vA|}h@ zD7rjgUoIktbkBi*iI>V7A56zr>j<{YQv0RCq$%`;VP}6RM{h77L`6daG>R!hu z5d0$fMASawO1W*4(a9k7D;q8@q1m0SQX0Y^)?$Gl<+#Uiar zY^iUWsMmdAg2GGrl*edH9wVSCA1yAAce@GN0YQIVdQ6w8sznbw1ugauG<(7{z=>{Kz07f|LQmN@df%X^R9 zQy3zFG?~62kpBRBpXOhHWsuy`{{SLVb^=;jxnc+hXh>++1_pfK!dvkdC#x^Qj;H7q z{L2f{Tp!@d{{TcZ5OzVA^AY0Nskxao0z4=us3uQUKT?#;U${2r?&EOCA5*=lmW)m< zlJ3$Y!Km~PI!!z+M{GATC8u%??_}g=(M9~qZtwVpQKjqF09+Ew4MFh7F@)h_R8lz4 z%uv$7ejnlMpCpmNG>PoyoEyHN3X_>6F7 zTw{Xy=rn!_uh9X1&nzTBD5EtBUThzUg4ix(wT3h#d@#9SR|M&=U8G2D(OEvW-r|Lrgs|%cJ&1E`u<4 z<4npoEfaF~$yG5^XOKsbV-bte0lFPy8?5E)EPqkEqSsi6DDrAtR~hw~U4v?0vIHjs z?hEu`m|O=);E7`f-C42x1Q0R`>hky;!3JVBpxl03#Bo5X#T*%$)U+Kln!ug-nM|cl zXE5F3u>3$vfZ9wb3kP!44i^uoWEURN#nUpg2+pxDWI>?o1uc=drxkO%Bl=4lZgD zw<=23P{HnPQq~%5>y>L}jwT1PWhh(v7yR%TMT^dfc02r_{$i&yxbJc2a`e-F+CQ|ov*A;9AD8||VM&1*NVwfU65f38bBGtiiHK`SY=xlgm|q9Dbs zcD~+YJjAd!I|-S74*8G#1g<{!--8UFjwpLKi@+^qU zv{ktyVwR3I1XHD{cvZGcSUR!v?WMnogceU^_XY8dD_GYN!4!clyD!910S)nW>W`Eq zi~j%=&CnHbZxZ#zkAQJIyXajV3;Fy-c&L$92#vW{!!ZrNLxFWu6^AA`rQ>oG= zR?M?Nuu7{~RL61GhXfK62;r4|9KoTnM73WSskCzD8ixBtM}u%vS^kY5gYy#BkjV`- zn^ed8hiPEVIr(Lk;4(et4ao?#XAq9iV>^`gOD;YQnwsa2ycZG}YHb$-wAyiTTFNjT zE1=mPy3sI=U2xehM%XTAMaC7!SftGMl-^pnb1zdbS^DzoaVhQnvk_p%YvM7%6;_q| zf8<_;C&E9-Fnl$gGdGHTjW_&DklTmIb5J_7-H4HlbZr%tSM)`rJVz+8EbZ^x6I#Y) z^QYhfEF+@4ZL=Y^tt+MN1S6NqR zH{J#y#fQa|ia@n^Noo*I87^Rs23v^?vj;?R-NG~?rK`(7*$XniFkvzEs`@g1rOUTJ zUMjXWjcb6|_Id3EU^GQnz)1tn=yhYFTDHts>dkXLB@mSsPqqqXUyFv9T0v>zZ6&nn ziLTU{$a2M4s`Y$gb%?j+-R%LsNT4c>IAuj{hi!m$A?*i*+zF!WzF zeITDbiLvB*Czcpy`~Ye!B0+1EB@8j*OUW;^mVCw}p-yAeM>7I8mNK(0mxIds%7eTC z^hKAvC1ylXq+Cv2{7p?6v{0F-o!kBh;Vour;uwMXA?H2i3XU|3F$EAc9()=@anwve zH;AWY0jO#BVFxHRF)R$ks@SPyrX;-a9PD#%grk%w_bXk{mKjt%XPCcli4U`IiU5e7033j&EM^gOtI%kwT&vKfxz%Z{bwaMWd= zK_0D~OasQDVqmy8?Z~v=&LYtkF7cV6Q_~Kbvg}$Px8@8aK2zZT0FD5#er5*7xsEs$cM*8{E&ReEK+DzE3nJIt2vX8hnW^sqx4Z~NG2pwzsg0+m9Q;cZ z%U$UFiKb#eeBr6>RG8&!3+_Qka$-ByU~*IlMGe8LiD5}xE)5f7-1rp4Tb~la4u}#w zM9L5}9Nl__(VcC^G`Z)rP7C>90I{+++I>hG9iW5%051ug9dza;-XQIEei^Mt`5Yz7 z*xN4_du-cb25^9Y6=*iVxnqcG49ukmbW?K#Ibz6ZtiwssWfG4el<#89psO;9ORUS_ zZDYJ*{{U+kT+nM0;R@GACaHsFGs!ZV@CYJ+an-mK`(iEW5VWsVxSaSA4b-!?lCFC? z56l8A(_hMPlyIH7N)t2iGEa-5C;v#hHQ%NI)b=Y7zxqW%*cC# z34@O)@dFHe-6t>tt3}sC{=|j}jX`UfUy#Ml$d%+}i={rH9SlrDCLx)Cc7_>|(GaJx z9g9666$>5Ugg<079w};Na2@41q4c2(T%93n=S6LrBbvQwGD#XHRJ%&u55 z4zqck1ls^#%>1(G#MNU?i!o5V$p^jfjLaB+4>WlihilLHX9%fB7 zaJh8LCAo-!s2gmGV?AXUVbmw?uCxpIArdZzOH=;8 zpo#T=ES=v11H#VlcJ0zza;l8Lh0Kx;sjC$3mMctdjb=ZamYeXTp%yXJt2? zUV6&}vuHoWr4aaS`GDgf3;F(h8eQi}775bohq;sal)QnNRa$+$Vj^u^vf#mj#zS!s z5!^5jZWHDkg`~njd6py^oylZaH{#{c9-`E$n_V)lnMW{n1FSLB;#Db>b&TT?am>J! zzR}a;cPfH5gBYpKe0Izw`8>c3tnK(G$~wNW95CuK^Br^x70z3Oa`EBZbv1Okk*)~L zf-3ZRaDC;apPbJUvEB+A_~EzpGA+!oaO*1@y+=Y6-HjiJt+?t7RANlrhMZLwF);|2 z5L@ypX(|Au-kJXDE-#jF=H^24JtSDd(!R#o*=jQR-oFrsjHh(b{#eH|f>YVQ#7(k? z?*{U+y_|nC>3f4KaOVRjNX#3>z{(%uXe-X846_PoN;rdBkHH$Px5QXA zb`Q7)t4%!#d42diVm#DlhHqV_Cq8aDnq}lR@r+BAUIeyVKTs7I&WxvR4LQ~z0zJxa zfR@jAuevpGA-h`t04{osKXGV@&MlR!>BAc!Q|nku9+tl_*Lc48oYpNZ%QsiHV6`x8 zs8!jBji9p;a}DmJvw4S*ykb$*5AvA32BvAAu06|x^wTX5O!9yFvav=3 zLFHw^TvvhKDK1J5htvQ8>qiNLqsW1Gw|9gv5_!q|4WE&&E?$`F{;Be(br z%UOZwVl?Eri6{>qENf^(*)GbPzblE^&`a=QTq2yL1vprEWM$VC zkaQv#Oqi&1GdHz{0M2I7TK70Zl3@!tSB~EjnoY2VUYS+>BdonYc2C|GewctHw&0BJ z$Fu}jL1>Z8A+HRqL5y<*n8T!t3DytY6;1u4wmX+Bvi|_PU&=faBU7;jsIK0fMsXcL zx70+eriip5bBGMwT-QZcrLTC%p5i;T zaAnI#u-8~$P;KojTQ|&F_WuC#V|z+J2rr<^nsb<1RTq(%ZMGSnkH6AbIK*~13zog5 zjKGfdX`)e!Usun_tY*ng*ZQBtvA4EVHm?5wLHxm+>li^v5COES%&L7`tN3mn4qRIP zljy8z8D& z9c9PD!*ZiIV!E!xdpU>aW4HqOsgcW__ltKrM}nNXdraS_?qkGqiFHr|u-W`ewQ_6b zqPHB TeM9gXhcvoTXCM9$)TOoL>wj3(ct+4tpz^^|)H#KMM3vRQ`EKMH?0^BN^Mi~WTH72?7ze)xp-IT=3~0} z3#eZ*q^od=KBkmf4z%`}k*nM4{{ZqffCtnvj<9BC91`WI$50S5*gO8DJIooOL4Qc% zSl-~L^$eqszH=#Fb`^02l)jdQ*gYreS^^b_J{g&iRNTi~PePuT+}wc;ggv7il7?ZB zSNoWj_Y;IZ^EOfqnIruxZ6>9V~;OV?oo|0 zC*~T0`~i{}f0QQ)%lb|ZUxZh1?j~haS@3^R#w+$m!0C86ZfX0OllDy4Xu8ad4~bpM zI)LGS+bk?={{S}zhMoTa!Z`&716LHew6H^7E!Ki)oTjGD%v?D~+*dMKK)S23E5+9v zip_$zdKn0Mr0FOnb-8@vTT}APuse3~$LBC?!bZ?rD2#VD`Mv!h7NfUG+jJjNpzjrc z#u-evoc17v9JlIJsN&mbe6VzndF=VSVAb!M9{j(@XD)H(o^h*9>x7-H9 zN}Pv3cQi#97jOg|*@zDklDi-Gz!T35VyRHfU~vZ9pN<;qSC3?WvzOc<9I}rm&oIxM ziF*76k1W#QGR#cCqrrqDaZq-ZFH)Ae=`1zYEx~Y*EXUb@^D=rv`-^dITM2v}V;YzM z`!CV)5Zep=WiOpTZyZ29vgW-F9_8*@bV@sxfPt%tVPK}>x})oiti8v?EU^Wu91{u% zZozY4!TVd49m|DU%bEayrH=hdQVZ+|5hU?sDxdM`jw-MX=eW zmA76yN*(4C1H&4nWU1EY|fgWQzm`5wWZt~V(Nzy8VPu$OWP;NM|BU71BhTssX zSRW_>nOp^Q;#8~_+V21hPb-y#HAFaZ1agb2##iivNa}TfjbyHum!Sb=6NNoa<12;) zkI4j7r$5S01Eja?irNP|ADF8aM*D=+gWe#^pBg|;jB4NqLTp{NzY76k#abGMqAw9r z^_k}<=uB2TSw?7cl%vNP%fW?A=J?7DKII-}7$y)%HqW=Iuj$9En@p9yI`z8dB;|ku?{iOc@ zA#zn2IuRFBh0x&rm+=)5Sv$p|h@h$q=sx3rhy!Jwgn1z8frnQxsluljsy{Ko*#=q6 zbVq+tCMH-@brLO&>k-*^;7kxApo`KenrQDF6$98S{EnrB`b&ciK$sp`QScI?Pjb>D z;3_^cBTgmeB2wKtoI`C&%&(bCiq>hF(gk=a^ke;*(8tWjh2d~-QZ{-IxtOMu>b%Rx z7>7=;nTj}yM#@2(=t~?qg-xaOhbnqC(=W57cJ@;!!o4e@c{-6FGV3Br8(>^#DH=24k!3E%o|ZIV)O7 zzWpGV;^Nd45|n&ikx$($o<=<(5CZQ^phvY4-DYiJl+bMhQBLVzn&G^2((K zSAdLfH~N~1b0#~?yc)-shggmC8}2I)96}Pj5o556!<2Xt)Ltj$O-R2vlwd>23kIdC z`O6}cIq-Qc&(4*i5n^5;Fo%>lW?llHIAR)G-VZb=K}TgQfGj$tOSbn6kOw-=QxZGB z7l^S3ahB@;00g02U^(j@mQ^<~6G+W~rcPS_0HiSlJ21NbBh9dX;88HdMUPm!irS8e z$fIM2L+;-&l8G{{96_XVKBd}Rr@Io;k-tHIvEhWcj;wV5XJVVn4Cw;TMm+&Gw)M9|ns^T=R>Z@8l58OdY9KMiM1qBB}7V9yc zwI0m9KB{48u(HvV#8yg`fo@*W2I+GJEsrj;zg}C15Fwxs5R-AA?EZrJ3d-(fUjUDQ z#(T_55DfKLpl#byr*72-Cgk2?M}*QeW8uvyhj~7u8Ih2U>2ZG-a-T05UalcQgqzzR zgqPsaC|&5h`|T-2jpcQE%4}Yfr)1LLWhy>pQAMoiY?TlaVk4YD-eE*)R&GNsTn^$~ zu`dWBj4kgU2AN(Ek>84?);S5n%p&XLR@?ML$xVe1hUVRh=Q(D(vwwY6#<1Ta4G#rY406Vj_w(_7(dG={U@zc0`*qsfPam zBzlQi=qtQJ*(m)mKM+UAZc%rN%_|i<(ui3|yBZIv{NW{8f&`qzAj|~r@zQSag73gw z_^d)OL%{gmou3W+MP)QcSf7;~EvBDQSu`RWMc={Tnq%O8CS_3EV&V)aGge$5af)}5 zsn~)NyUJMwEQcqw(oH6C--j^f3`)Vh?jMwe`e0zC##8o03n()w$1$_iCiYWFpVaw{ zGgYq!Y1nec*}0EpPHvMVq$q*9$GJ-Y*L7#}b1wd2Rx*dSiQQn7EviLnobHAH0EBmE zXxd4ybkZx%gvvImAmRT2rdW`16S-xr%OcG9q_N!y5m74CZM~wknY_*a0F$C;qjI2|e<~*< zQnfOIRlmtEl8kmXuy#v}4aDX)n0QByvmS;oXpk&X8nSyz30XSAhq%a8yTIf>1k1!_ zH6p}mFS~ExW8`1X{4>#0M|L-bE9o3R@CBF?uH#o&J|;Z*FEeE4!P5}TSY8MDrW6xd zm-#gs@bS@bHd;!q(}4N(Q~4s4GF^YjF1-l<04@Tns~GYYJ3viULeI+*sHrC2jllxa z+9~gK3+Su4m-#Wt=t*I9@EEPPs3!?mfH!co>a{VM>%byPhc}?M02ph$6j@6{f)`l5 zdc?zNOR=H({YB8?E5t(9=^kaxp}CYXHt@bHs1qS6zW_&mvab#1A9zElE2VWApLYwC z`2G^BAUOa;X|wYmQadj(m3U^&Oq%ITz(2w&==+#*2*onhx=&e@NZwt%LDmmqDUx+c zAgE9j%j>e%rPN*ST19)_SKhC*tPsM6;KW(nS0*Opr0?+3KMH{pJ_(3N!73gu-*aD$ zqQ(uU4E)bCnDMapgOt04vZX?843Hr4PZ~v-Y2l+Uz|w$g%PJMCgj8lw8H)82LOey_ zW&|}24=l5rmG&iQ-rf@hRB19)aO~AwuQOT#Szi!#!6*z6ZNBiI(ESGA!7X}>+Sz8Y zaLm2c0yVjpY!UT`@fH&nLrOU%vX(Yq65EZpa93o&j1a@i@H{qK0fT!?*3ka|CDJI* zv-N%k6C!57_+OIc%a?NE36n5p3t0=p4u(@qD_{ z2kH}aSvVn+wjy{wE>L8OZY^Wz5p$z>kB4I&a|B@#^(q_KkJoT;s6EuX$d-*{lrbH{ zOulJR%|?{w3N5m8#pjS4h?8tO5Aa}rJ}xkgoquHMtkduQrIFNp7?gFd;3ci<0a$u= z%niO+u9f4l;lBfPHw8_JUG#7^{7Yy|scSNTB|X``jks^0M{Y{N@>g65&I5HxNVG8VtHEI$BCEEb4J<)ox_Ve8%^ zhUH!*j3+UeS-uVaVrEeU8}V&8n?rG&&HU})WzZ41`%NY0WpTMixt7zs!>r2gUkgK= zVjGJ&SRTZ$fIu~>fepH-%ibAu#|fAJ00U4YSi?gEz}B?f*w6y&v@U;+fn7d?!@&B5 z1N1{Q*eZiB$wvQ-H{Chk!pHGo-B#eB7JQJCt zyrpCLl_I&*7_xiKCG(a~fQNxd5hpWfF!csAS$<)up%feu+|~CmCtP|hBZe7i?*ung zMQUY&vWxIS2(u0N(i)4Us)-T3g|XL=!QwL%m#0=N$ym9Zas+H0DrxH;ng&L)6a9h% zImDkPe-TPwqJM%l)0BTnUC3@kA(`wn;|<3(;o1%}pCTo$T`T^>MBX(!P|482 z6j`1nc(Wf_+@uO_of?mPSiWM0M$*4Nq8Igpq1s=TBTlodK>q+I8*nj!edXvbQpEQ~ zfFlka-{BkYui{{%a#=HqkPG23z2m zsbQ<3f?3HsM(tb}QAGUFEpkG7u7l!#?nOtIaDXf6akE)l>N?qW`M8FEblN<{c=!Z* z@a*w;nSA32W9Qq%%p<=A%))pN9OCgbn=hET{zj^^G3{S#6O%EZ^h6nJXK zh{2;8{T`oF$ zpSfM{>_$_x2)bV6y*u93KZ&L_!qf8|s*;PZXM*l9S?_)(Bhh4Oxhib7>D;wp*c3W;z&+tViBhy1_~dNq{gLu@At*Nr(JX7}dJSAm77KIoBd`Kt+l{*cth_g@ZL) zzxgs%0>j>O>m6(2<}txOf>6C~2)mby0QtxB9@`*&5Y=45zEmF_sHUX+iwbCk` zFWD6E?8ae@0ah|kSU1})I*b>OP576Mr_(C@#I1MCLEm5AVzWjg-dS-@FmoLqHZhZN zN|URX)ay0GVCMwBR;FkH4uMk4EZhcIC|HuRkSID3FLAIDx;#gQ1T*mx(qNnhAVJR{ z8I>gk98?oZlChAuSy6|)CTPHBbTJ()3t_!OC2&K81FsR~1osGDOj1CJbMV(8I zaa~|4Tuc)ydJM2F){7ljqz%+29mUqjW-^PeL%fnZ$IWublP=$D_JP!ie!O zgBD?HU{rR;Bo9-Wk!gs9rmx5@T=~2w5Qm}qizw+Y8@Zk!=DI|wM>3yM>1fvFhus*a z?60x{e#5$50pOGgJKa@p+L4)sOP|>-7CZv|!{sexAxy7s@HC2LMqinbWp1zSjf`vp zACelq!LOyW0W9ETiJ9&&Uvd74+L1ik*Yh!Bv7_+~D^8Nc_41Q~ZI3=1 zgjC(&L93E5gk9>8=(Of#)kjwV0G)0s9A;}{R1>sSYdH;ggR`LP3Cdfj#*`L>zripI zowfe}Q$7CxxaMoD>$YdpfzpCf@j?8?laP%2vm>D}JAz`|+yY)ewH^)+f)()(wvXa| z-UGp`Sn%#Jd@*?DZ{xFn^EWk}O$V%2ntIMsbnN1V= z8X=NlUV#@Wcku~vYcWybdEuur%1q_@o`?^)MK{~v{UwPt7cX+@k^Ddbu;7ffeQr}j zrPH^v3~*)xn?4%t+dp7Exyexxh@ipP6fAFU1GyR0db% zgK0n?iJQG=>oFVzVvL`RLe$Jz&JUt|i-E3@YpfrK{2$Bn~mEw`hNL&@XOG{A1nU=COwt+3GFoi?FxiIi5>Xq;MCpqI?f)Y zczg?h(J^rWtG^5V)Y!Y>BvH(_XwF(;WN%n%0Vq4fU~UtcvXU#6S-~zZUWhd@R9)MY z1A7%5i!QTl>kLdXdPT{`^lkqD-5`|ROpPMrE{DXLxWdzLp4eft{+NYJ&ZWMxJ_zv5 zenzoPM{$I|3T}Jz*iFySOGWDn*JO8RsuvQhB2kHJiDk?x9gKGQ)KCVhSPk(JM+sRw z%YTG;ULz1=u5U8BvrqzyV94OC#tz}UO1qw_0B|Qu-92$M#KiDXPE%8F=v|4de2&vu zx#6@tgct0a;PVdt;i&6TeV#Ab*N)EvnRxQ)G@8Cno+2pX8(suwFAB)U zaCk^)cJe*q$H4yp8ICtZIA2)6)@^YLsZRy^AN4MZXA5d~TPt+Dvm@~i1N=h&05kSN@`T`JC!)WZ zXGYYIu*W2`p9<2qxs1z@hV778Nj_#=+s6jPhqnCd&3ENi>N7(_WId4DP6pW+ZX z+8HL8rq2w#JB&97zu9cLZ|;ef@MhnM*+#6F1+a&82c}}ay-Io#;_Ym*I=C1Uoi0*e z5`Zv7ZrizEw=%yHvlC0hf+fTNg4&1aHn&l#wl4Dj0LbjAr_9_T3Gu~lT|<$J3BUA1 z;B7gY&HOf-L%^9wH|`1L@eKT?xZrxsU%8~!?mS9OCoh5h7hXpz$A9SJYZe)i;n&2& zF#KbbEz8geO)VebXe8LVQfjcuY{{YjL2cbkpyfVT)1fG$VAWlH3q^`=jmf1j9-uU>P zfTJj;Az6%LjZe+Wcn{D-{j!Hjh&n)x6$=HDyfG#Tab+o*1;xwGQC{ElnGNH_tqOY+R}0lBU0S+vms7e5K5BZKgOM!3Z-KGE}&+ z$m#DFOQ)pnKx1i0{r=fSjh;fxt^V(>mjuIuc7#1@+v(R)vDVK|hn#j|!risoqCs?7fAXX<^&p=7ugawfV>%tPoyZXVSkalH(_NiNDgEz zd0;;D>cW6C)FNtn%Egl9XDNlVqV#_eY0P%a9NmHgdr4ivzu}pNExzTp>+%9xxnPg% zey71L`zIYS5Pd$m4r7v~%khQUElRk^*e|QM^EHjQOIj}tr0f^&m;uB6N`LiXIyi*c z%o82ToXXEiAJK@#FT!f^q|^GgvsgDBLKuo0Jz?M+!!?t>>1cie;4`C~F1k_D4ghPU zWw0&XKqxG8aEXx$V#^we5U-caw zj{KMW#CSnpY{=-N^*6Vd>R7!W=>cf!)U6yKJ}LZ9dR^tN|tTZ zn9U~X&MylS`W`iy;Vs6hzYr{~#^b4M+3s~C@j<4pUfa%NaH+I$8QdKu73QKRcm|Ts z(Zna=5+%5-wcKm7+F+rqPK*-tcH7`h8O<4#Fmt~flGK~CDW{uxyT-mFQS`HuZ7`k5ZY{7O4ukpx!* zY<8SqYe$zd$T+l_Qtds(DhrE2wLe$>M+-&@xx3Ys4=TyTX&+($!L8$(2jzyb<89Ow z5ik{R<>#14qKI{NvqQk}S2mhU@iM*5qp7%f1U6nbm;6j%t<%|~^)ejjj`donAj}0A zz+we+H8CGH5OZu7;bK_&iPDJnFX9NDH46ZWUkCk!90RyRB@8|pOX({s{xT6qV^OKf(L>Y1TnZwMy%?4;N*O*zDV;A}#)_%Xv5yhNL zc7l+Hf>&-L!`dKC5&MMZ^DInmD=QOEt-*AQL~CoQ$oj2>qRw6ribK~KX^4m5aK zPsc^pRzIn!Q;GL9nKG1ZzcmOY^C-AQ3W}sm3v$#=)C;0E$j;_yC&zd`d6^gtSy z(BD|rd3)hYxaggDvB1I{Rkx<5Mav^FEhWG%L=NjvNH7EA5i#*8wU@foekbv?e&Wa# zW_ic^7pzit==}nBHBI`8BitjfSzXhL?R^Xx+28QS{{Ym*6-vs&?vwL9A_U^4@0%Xn z#hmI@4QdrlOkkjfBDcTzj=aJLuFvrtI#HEVIUrDRmQ`ZwUs2zVWBeu+>TL-4Z4(g8 z#D?DH(btmU5wl^}2kL5j{n>+fwkmd+*z5MoW31)sFg;Z45Aw?&BL0b|PzaiI`#V{xf4c^%vC7;w!1N)5D3o`Wq2pn`h&ppEcs<&Xb60ZeM7TW5LXdFO`fQ z*(P|X9wNTduf!X?EV+D33}YqLto|XCc}BUobs+qXVEsU*;Ozq0$5~3U!}lQ(p>o4+ zC1Am*&bL9|%lL-u%nOey4LxJFJrj?)U*aafH1uQmBDLzKUA!N;QfXu8mFl=NcA>)7 z{{Ry1$$nF%%_=DR7_YqjWY39=LEnaJR&xBJPVjFACJ6XuL)JXYH-Ubo6(z@|OZp== zgn|XV_Kx{YN+Ui(D^9LN#HGXy+oKq4n+Ivbz>kRs9%K1k^s%y;b!-E9Jx^BvF_q)rlu~El?OS5Pgj5aJ=s#-UGOaA`KeW4 zSLSyt{wEK3p3M*1A9?wbR5bq9C8)F0HZf25VjNb#sFXdYZ$Bm_k6`?zQVumLao@63 zoluR?k?;QiRPOE1l`^rD9p|inUlCrVXq^~<_m5sk<}}bgLMI#+vURhFL|p(EnwJfe z@y)yqcsbl0`Eb{n)FN`Ge6|Z@_bXN)Pc<{9Mz4}<7^rUefG#Yq@FGPcN#eiCYkNU= z9BC_gqOD5rn9d^kd>_zFxfUf+R~<3eacZHk%(pni1Vh`XYBq}PDNf!N9pyLSpE6sL z@i)j{mY|`E!>bi9nvN!xogk(-%oH6KT;2B`Sj|xKpPk_23kN7cW(x2zfO%$+kB=T2 zM;+|LI(nP=MUd?VW}X?iqfB{^gHJ1!aU-@|CXWr-#9M}A;J)#O=AI-b={AEYIfQwe zc+?++$~^dS;>DSnd50Q`EKQFMVK|#0^1^=c(K&+slZ0hX@gP9N=68-}QjjfWJ>oR| z6h0&NCE%1@;kd;aj*2N+d?mc!@=04A>S;24G@prZJwcpH33*`T#A*eq^nfvvB)53$ zxL46{?23x!ZiH=9E6kuSmZ4Lp_g(x(dSmGv?J|E8H18iFf%S>;Qz}lZUqs84{%ZdK ziDFg{)6Za=o+O8I?ia{mO&4g?Q@sp||xhO;Cl4iopm_ za=nDi;IE_BTvSUFh^%>f;VC>#L|pk zQ9MO|WBiU(t*eBv1kA1Qf%7nDFku$s!|rJ^M`=+R0rex{{-%5$7cVoae+f2Tg+u4A zBCUprQp2?CA(}FbK0Z^4q!wZph9$x=g%OQbKVu(BT4NAZoHs8-G)&s|HZ8(fBa(qgoQx(qg@f~;{g4%K6tUse^wCBLZif-KE zGnmF+F^1-knO*_;PJA7~o5Ox~dYtC*)VOV%OcW61;k?jxm{h=n;Nz(I zTupdsl{l2B4`i$Ln25|y1ya);qY&g?A`YC!Sx|T5E8q1wkhi-?V>{GC9O`3DC(|j} zkjKPUM1UN)U#yCq;d z!3QWM<4#8Yh~kbSs6GzM^1$$+tm6#8ls0~0h)n)b(KwtP9}E+q{L9A0QI4bK@w6c{ z@lDPr!~XzdzRHvUwX@VUXGu#;v`0&~SmjXau>{$E4rOl>U1lPzBbkDs(qVi++mc$Z zzuPKq3n}@TI9wnVHG>`FkCNJs-&FV+OrB*qbg#y_n4A5;%ra-0tK7j3-dp+FU?vlJ zuMYEBk(+(^@gM06cx%T;`UlU?j67YLit=1WIx%56`tu<$n`0jh=H55sIZga@P3H4t z!I=1-X2jpkc-M=0tTi=*sjS)$f?Jv1T}$#y&L(<8z%Ks)jDOgI9V1Tj`%DeWrVuvo z6dM_B>SPMZ_=1SiUlCexw>a(@mYhYXDO_RtnQB}Z?F|WW1@Qpgbo-1d-C|IRKCB?E z_!V9-#c1yi)%$K`0B~0$R5YySJ}Frrip+u$FPYkj!w|t++h`I&+{U` zMmXH5Guy&`p}E=T(+2yag1m-52nD;`aa|x^k8MdE1}61%A6!-|QyVrd`AQt0YNq$r6N zZSG=j3+_Q^!Lej-L~Hq&#e$1LNxZ$p)IzUO#*5loTHLH4Wfqa+!^%5QgD->fp$-sH zxcyR& zv|+it-@yroo4*a_-ZeiCbMeo{PntRL_RN{FHuEh_UZ(R&iOL=uPJYqiJMn%vgG3OE zbB_kC!XGIA03%wIAA9z(E5~`EXCA0;o@LZIoZPN}wTiuCW6%4eN4$01#iko8X&Iwd z2}3Gxz-s4JQkGnixoZCN2}=3Ie^c5wM-W(DFhncyg3R4@L)gS8oCy`C@E=BD7N1A@ zC7mmkZm;(%FfrfC!IPRl5w|hb`~FlJy4Cj{Qtqu^mN8FB_c|G1i)>4l>zS3i2T=wU^ zj;9l8xew(peicMS;WmP4E^3<)LtY1zW!Ugxo%p{3bK<9@2LpqApXkdwUWtC>%&$yV z8Hx;dGf;w^&7DIV)Lk2_eN4y7{{YCW^_3)c7)Bi24Tc3%XmDy^LD>gXGBSyP$_2&?`GG7MU!(rRbJffEn)XkBKeW&N)!X@p zAn^SqW>_EirUYFcCyD95Y#2LdRNT%*%$Jr64by&;Gc$Ghmde`is3kSD=hHEYj@}wC z9BUN!iMjJPe3P)@*B~Pf%jhEg&Wtv}5kOdqwGc_y) ztdgrZLj#iGGn!a(bs@P@^%v8Lx;ZJ~@MgS?!@;i)0nhy*1b}I|RpK*(IHycwJavko zEyZVCeF=)&2(9X=g7Y@;ESxVDt%FqYoo*nZ3HjzEdn?nJZ9?u}{>M^1%5jEKUvX8n zSWNvBbSCj6WS;QxDckOIHchzkr_6stZxvh$ZFnwm0Mh>eBON(eSa?mJQ)JV}6LjCq zjYl2FZ}txSeiw!-!^~r%EcgyHY0Tfj2r=qXqZmy|qvu~jWV1gLB-oq5gx+S6;=Di( zo@#t;8y-A(nw&jN;mw-G;fA3Sj7-NHmGvIe`OE?T0Fedi%^?-qx8?*0tSSx07_kE^ zd7@Te!Cpy(8?E+%SAmFVd5)Wea&&Pyt1%>}CT3l)9x+#0jYJ6^hF{7=qI5DB*)@=sJl34^hNZfsT^j2TZ|xgA#Er z3}O38Ol+sb<}r)m@NdE8kq-~@$|>Td;U%QsiCUORNnqkwH9JEfH4XYWM+XQhb%}Eu znlgp86PrRgrs`KJ)9Czh4gy*YlD~as#KJ7lmzply=jv{oCo_3;=I?*d`+d%41dA^p zl|NMG6MySKu7Q58D3MSKMPhY=G@HJr>7-+VZ<|GrgO4`eN6Fuhz?;q3#Hj8wpADWY z$}sSJEMd8+G<^PHEo|Gs)ZT9l36xxYP3J~t`Lua9@EO|-;%YN#&S{wU@t=re!;bDg z8Fz)EQ>~UhV?BlOnW|~tHsm;dd;}JiPABBV#YF!AsI_#&H*a}?12#aEZ9!$6#Honf zxS^WIjhJJLQ@&s10}&9JOap(!%jm>Tl^@K=RPKiQDlbF-00+d{Q`86ZID)!U{{XB) z!X4M}IzFyHBlk=aDtkxfSE+^|(TSo%L#m&HHg3P^Gqu<5B9-MdKF|3vGiD~w4c;v2 zDfxnzvmX{Q@JDlR8%A?Ddl4*~OhLNkuSuNod-Bez5%ho9D>JZ5-s7^4=jAHC$)9`m zOKJ7^W3T--PA~o#^1NI$?G+VQ2(d98r{+h;E_iYbH%V#Q==X$xcrjL+j_B7Af^7vU zm$GnzrUO0ZSS_!U;P{pOASNsow^4`Bzn8O$y2TTIM?#hcE27Umn6l(a3( zxV*~4s<$fOP|-08?NH3C89PRX=4rFb7t(JNGibR-m$)SBo0v!Dc*5pz=fZZnSAuQf zAkUUr6fviZbRHT_zADdv*NZlrMdTynU#Yt{e726G8KXCh(2OAs&dk@rxvbaE<;|x4 z20S+*4T*@3Ey1X99CHJ%CSdoQc#}D@8y+~HG2;9AF!NzhxR_qkuph2>C9m!St10?n$O8Ca{= z5T@M3Da>JGi0<58I5_MSe-O-YMUS?BnP)gZDjO$o9sDFU^ACb!;9%WNcOgDj47g(X zN8%CPALTAh1^i9E^983tej}D+2JzeTk%woSRCf2p_gCcb3csP9L@UhYNk|v z;C^?FV;IfLj^^GsjOGi**APii6)Uu%fON#{6n#lxq*}h=_?*Q~ExmJRr}H9IaG#0W zMvm1rHtqI7X7n>0Z#+YIEen{XE12@4(<;0P@g2H@RDv5QEtKmAOPh$gj3r=G&B{@v zhw+*G;V5R3zd`432ZzDG2ZDNsdl88PzMdhCCT3}4P*+rW5E;wb5%gUb#m5X3!l1f~ z2oqS1U4mz&+3xg&z%dDP#K=|&SmRSe!0g|HQ=h0e<+g112x`#cYj=*~rf#V28Eo|! zO}y>p36kNBb66>j-bSiCqs(|il5rn~(26?pcR3-XQ-2KEmmS7#&Ae)y)EG{gkC>Up zzJEGx;!E(}7>2~cdrGa%$*dCQ;GMjOGnC)k%)pBV@f;8+mEzA(_cH5LzPPW^G3QYR zk%9ciRwL!IAYreWYj`DTV^r?peg`K=7BJKGD33J?Q83=)U65j>aCd|8I2K_BB&)<4 zaTW4w+qP;e8;(vT_5Fpb408e{X}p>R+f4lkx}I zU(7a6+c(~3+lv?esD`VpziG#oui|mN%*Ul)h_jiP$3-_Tx9Kii((&pgeqrdt3od^ zcl;!)hG3@GE7gXk#KYi;2LxXXzZV@w8-yIfJC8-HpUA?FeZ%r*99(0r8KR*(i)^A; zs@@65!bj)8c(|O^d&P*La>FkzuR<9B4MYPPQs~@e!#+`u2aWC8JBFge>TJu*);#ks zFwDjAAF?|mjMsv%WLBzk3ADMXo8w4q0&F_n_3=6}P-Zv#n8AqV>AcQcPCubMIPj*> z+3p%nb0s`(Vx!@k&Ep>f!DTe2AK9MMYu;}yeg}(aa&(5o$;|DSY!gT#z#d@mX%7Q< z?cjeIpv^oI3^h9?&r-X^Er=g1$@l^FDrT&&p@-lS=8)GOE*GSA?p-*nPLXLO`6W*aGhd0P05 zlgDq&bOLcb##^*`eUSVD{$osA+6j5KE7Z~Mij%wa%Hk_WSpJfwUj0j%={9EX1OvkS zN{VP=rgJLJYjeL$vIfPcoVtPM~(hK^08eGfA`RV6&2G9)71j4>^v^ zOg+)ubS7%LPG{!Bmx65w{{TggBa<#8ii6bnydS=4IE#tD$MU=le?WL1TSI4)d44i{ zF`G^Na-6~*IDEgRzo7k$-^>#;!TRQp1rA`U@CuKC$`e^{F9`(0(H04$4MrQ7j$-^4 zOc{2cLvQK@LccsQo5@5YL;~>(j@bzw47(sC);A!ladN=l5{6Rp$3(o%BBla#RcH;Y zVBM>(=fCP!H{iiDF@^PFFpEmpGS)1)>e-&GrRc%>nIUEVq&hoUaO9`p@Kyf+rkS40 zowR?pP=_r+LFrLr6Y~$$1hzNbvZc`eZXC~7t^CafRORjWH|&nZV7u&tY^C1tnG3z< zVSAm2}eDxoC>T~Tfq6my48VG2x>Zl z)GD1Vnl~YS=2`Tn+-)!h)uLQZE%=(pCZNtdvg*vuj+1Fyc=k0u#t0_xPNNxD--XYX zros=SH;MfWWq4x45Y*?-a<}A)l)pui&f-}Fz0^(6#h4~*9@3Gz5SCfNQI{RNm_RF} z7#$+Z2}AwN+soEB!YY~Hym#Tx)XkjuV&^QvI$7}`zjSs-Ov!qg!ei_ut>w%Ibg)B!?KKGE40QqVv*x;7&P;rZhwY81cd1Z2x;E+z9LnfH ztVU`EadFlv7XJWK`I#pWf;?gvVYJcKEJ`yTF*JZrsdWU5tzh^#wgk?7W zww)&42PwCPlW(2k++zo4iIwVd%v-sc?HEnJuxw1A%z2Ii;D1nGblw`AyfufBf(iN2 zVrTs)G11|M4NTl*ot1zx5gs~@%n{3KY5m=8#)%<6+Q?XmVh6%Bu zpWGqIaocYH0DHmLe!qrc?pd8@*#7{D-Os_9v3Z{;`+?(JC|ANN&VPu4*;P%G@eNZJ z8kvt-fb@zBbf07ZOT!-wco};@85ob#SLN{xkUS1ahqYg9Tin;%9r!WNnv6H*>Km7@ zQR)RQFs!?8FY%PxrmgnJRhpfLhn}?_9(0t8pW_p%eyHz@A`w?5PKl}Ca)6EoDke*D z9%nGUU-L*M^X?`@E<~;;O{Qk zkV_P4j5Yosr)UMhQglBPJ$6|ga~Be-#TMcfBBG`SY89cjreV zB-GNzC^?*1nDeAOy6RNh$QLn_WZ?5m6*$*{;7WO<(k^4U{HN-e#v8|idyg$mw+&5Y z`G{hj?|1sBVJS0w$|=?#mRaH}KQie6d$7CItV=jSmN=-&UJ>xu^Eo}oFJ=sTMU>hI z;txrH=3U*?KPEOAD;O-MBB3k* z=;o>fz@gKn3>zT~XHud60E>z?ArA9G3h(~_He+sQ(fO8$>6>g!8Ul_N^ znet+Tb}`S)!Zllzjd$=GYr&-EF??zRWtuE=-R%4r?K6Kt54SW#hEO=Pr z!yTapy++~WX1*9NbaqvvSGj?NBP*im-(~**F``{VP3AFT*NDM$7T6R+xdsOAgY^yEt1tq5LynRij;Z{@DqsCv z*RpzOJ^?@Vh*$G4?2j{)&7S32Rb|w!oPLoy=VFK4z(sRrQ%)`70M@<$l>k-?4}p|7 zqEn_ND!2K8n&yNdG(lha8D(VUUGz?Wy9vb7Fx+m@KK}sXavVU=$#us`M1fO+ZOoyo z15nMT2d&?k@DU{(z%tG=A42N*mXBDj80ZeOIPDPSSY>CUxwZqM{x6mxbVS_-U7qaPaF9-@<4TtmEiHS z+rv+ek%lv$0x{Q*%<*R^W5&e1B1g#>GZVmqXA6Jlv8P=#c4V%1V-gA$p=!(f4U1WhhW`Is4hIKW*VphSiT`eCEO*!RQkJNQ98v18im63-vO zF+Bn>a&#}oWzacbj9~-gAH-1k1fT~I?L;6=)I_09(&cCt&NDDpI!Y^`bte zB54RdHnem^oefWa@j0A-W)Wt-Ud#N<>-r^=w968K7tF#J6Q=HnElFM#MEpk;wy!bZ zl-?J0LZ&R~49{API2$0$LZPP}PG-?qYM;%)%*kFRaRwcrHJGY{2zXKON{n9wC%*x1 zs=N7?7V}KOavu%)AKh5HyS?{yCa?A|ohK_-)|$ZQ-Z;2R;gM9Y;`o-YnUJ z#~H)M(}-j|@r)rdP}9zEff@M3-@t|FhVylb6U~0wTq-N;&uLJ5jC+5uM)V>MK zVTGD_=4gYRGpE8|Em^a2r;Ero>L-CAVJLwga9O*9eG?+!mbQLjhxr3}OpO_az+_0_ zYN*>Lvo+T* zqUJ?+EadeVDp9%7MHa*}p1=%!Fhz^Mn728#`R@v2Ws4Sm%;hZeC%qWl-zjrZ_n8 z-f0}nOSyTh;U59G_%c3s^0DE%k9&AD@%`{ZMX1fZG)+9VjOJ|!VmOuLSkx)W;?FtwYsR7EZV_Egr6yP94A0r-Clg24hvB4Vh;Ok6g|7jh1l+haE-=+PcM~Tu zTb>vAg0bbl;v6E?cY}`ccu@L=jZgGTXOPM8{{RyM#0SO_r3uCuxP}k8c*JY*2BvOp zQ)js8SWU!oXdZz$oNDzDRgSE)_RyFCRo?1ggBL+8aiG5P{-weI4?2A^@OtpY z`2+cbXPchMNA6Wo(-N+y>L2!Ex<^pobDq^n{{Vs|1p(Sy)of3kLz>)mLveQZ-f9-i z?(QlsX563oz95BlPOkZt>0LiCnMvSmCMNEPHMsl`^8Wxv8z!KOhFMBn-@r^!rAo!9 z^K*M@E4jnHMy;DlpJVkuG{weT_){*5vj_-gJ4{x(%NiXjYLHc9h~a#0e?WewdL9pG zx`O)=73nm1oA9OCFTphagMLnaukkUXdD-qNS4Y-@kkBgTN9Qkf`mKWFs-}?r&uBhZeCPG#q@R*m= zP=e1>BfO$tSYH{$>Oqn9GxVzT!s*gDWr(}XOFGJ?sw&iE=!|DrD>c?9D)QVlE4sZx zTavn$32L!Q*DRrixR!%gMC+sP@P47%3pd}*p`+AMN(SrhhJT6A%)74t05f025*Tva z@8JGng?68?Ceyyceqe<$VRtLQy_i98xA>jB53Rp}neT9T$_5s$$P4muFTmInD~5DCZ0*RoZn0NNkBrb zH=Cy8+1eDC=`Jl7a^Vay%F?~&8XW0Y(x4DcnVA!mI@X`5cVxncgE5R0FsQ+e$857^ zwJk~7JjY&I#?WG-0=ExoP|Q%|hM|NfFq|=r+EfRm3hF+n_M=|r?~YKDw79W?Z8*Yf z9~M8*5JQCD!<-))kd4R2u<&%1E5rjKlFe^om%x#B$!O zPM(VU=kqs9vKzCA85k}iwGOBP`GUZ4UkHIT0GmK$zsnUySU%t)W#5Qeh9-5Y$w^Lc z^C-Y8G1r-(Wpgt2O1h1^_6fUI8?9UXLzz~UkHR#b zb2L3CIHplUh%2g)?eRYK{KPp!ej^=hpD|lGoIVf4jJ;-I2+X#&eMfo2aq-9XHcUfa z3^BSJedqat#3*{h_YP$PF{0evvQafVyYn$VCLV@nSqhmdpJd!Pm@0LP@+jk^vXYQ$ z9H!AY`D^hnJiCJtzi2HU8-Q?T4fVNz$8n3F=tcd*T^T;u7guxWFkrifNhlzXa_viN znVJ|SdvhFCOT=vbGf2dzxuV+NGXkaVRtR{O#tU16tOQG_810XSHIIPA7=f4|D=9$$5~Lvit2$0xy1dE zsqv-sAXEw^M>F>m$73D^(A|^TV9dZ?W(+|MlBTSN5J%K!5!e(PxZJ}MwK-iF@8KLo zSz-htsYsYtCD~q#uw3371^)o-hL2F(R9?}x?!NX+xCbpt%iO$ zC2TI+O#Mo(27JD5aSfgg9y)7C7J zg5UnkU2g6*#->NF0O!mW6@T)?kKD2x&Lzjv(=rMU^G_%G6Ip-MAg1b{+{Jc?ruIrN zc%Q;6;T@qu`IOPpRi2#9Q2?8j2);>W4AiOvQRk#{pO_mZ%T8``odIAKi1c8!=teM% z+K96-cogOX076C;_=s{~90?QQY4An4WxZK%Uo=XY@u=|48HOXQ&)qv_(e-egX7geM z(mI>Rzf384wU=sXND&x47loxBvoe*XXiEY==PUMq34#s=b3)Ww4m zqZzty9iDfXapBo2;9{ltbu$B+gBKBTG?Z7O{(p}Eo+Z>>XGpMFE?itW`SUL76@AmvO+ZxqGBFGsx7xri;YDvY>8zcY?o8ILi@ra?i$7Vg6mY* z%6=3fM|LMk$vRS0qcdCcGFY@CLd^^GPm}%CJ&1l^`7)f$v3}W=;$l_e1-in-q;xkA z4}U~o=1@kKXW)a0Km;Qv!+)4S}4j$20t{Um}n|;BFb(mei!kcDW)ToDoZs{`cx0Db3!!5DV znnO_CZX7~eaIno7%_aW;LTTWecw8W^kUoejE_D|UN`MjX0opahD7>)%9%TWCyuj$C zeM?Sd$#HiX`I!T_wHmWrMSFJ3F6M>~#XCmAEYzd9Ib*0y#Ve#@ief~I;Cx|~5>&72 zQkW_W@hyZC#8WJ+K{bX-JSmqmPYoVgLs209gQ)lxapPtW4M;PO^w*J+C-#dz1|y5W z+!%)Zn!I#;6bqC)>HP{+<>KGQ<`ThP$-jjmm=`KN49)Io0mQO(iGeqm%_FumHk`+Bia=hbW}(kW zEI7DMjs2go|=tJU%=xg|heh40y<1i|Cm*)?982FL>gvRgjrpRuY(M2)Ab^ zsMkg#xn^3DhD0~piB0YqhNjY65fL*1%mZOwqytcK8XR#o4r7QgCBbtrt^1VUq8;1j z1C%FN^bGAYw9d;rs4kSZloOQUA`MQ|I#1NBx?$6YGCn3Nse^1Qr|~Xavx%mBMndC> zWk+#ZLvUd#5!Bu@No30b1*AaT!+?FWKpv$>6ASPr(J4k(^;FdIVr7iwj3)O6G}lNM zVw=q&<7mky(QYauZ;jFpo@?Oq=4L{0cnR}^;M^hF8jN;BaO*d`PABf2k^RwAZNb+_ z5t`OKQy7jVA*FJcE$U~EGD6ai>`cUYB?Q`jVzM5I_ro*bH-cSoMO?b^C~;Bk6*z!B z;S1G=QlMcMdbjNl)It+lvGh0mMtQgI8KCVR+CP|FTyl4oPC@JCE5*G01hw6OeE@$E zDejl%QEyI?&=wmv1~U*98GAK41mDd?MnCU0I}966D*eqrf8iO<48m?2tbxQ1-?E_F zJ*PN&%-4guge(r_L5nPx7JM1;mTT!0q+8d7X-To#U#_nN1nz3tOr_;};u;7c^js7> zw+*`M4(7yFW-%0}b_hL)!#MgPmGZE^!pp>+8qtxLb3#g=?g0H{(4WJ0AJYp#6E~SHR5elNA z0f3?5%IzNr=KI8I+KE$Nab5+SNajL-5L}{YIZHT2T+`N8x;`TIf&io@#66%py`uSe zgBsMa%~?(_QRKLHPOQKHDD@`yxWY46<*2M;S@M~$2}Q>!^ASsh1*fuA)-Y3p#cSZg zLyl$MVc!_uIgA3aG>i&o?xi=;(jTu3<$+0muCL}4W2{gw0|bzpt67-rx|JbWpHNUhd`u-#c9&PVrOgiV-37`$ z#2*h8odOCb#M)f_KM++;mFU+NQb&BmgZ~~7^;|f*oMSe zimp|#2-4!U2Zh2gAg0ac@F3TR;zApqVTh2LMb2W(E6$O~ok%F^m(*5H^LKDQrcVhZBCrqV+RHYNf(8^Qa75T(p6 z4dMGwz=WgF{{V;boXT*t{U7!UQOtHa*X;>dL-4~gcV=gLiJ{gSGYYRVKPgre~eA4MNfx*zsOa~R*igoWA!LqBK|g9Xa;p7lxoAw>c`5;YcIidb|d zrBt{obiTya=0$e_(&K3KVBDEo1k|`)uqY}!HBk4NCM}{AM?xc*aXoCyjl962%yer~ z&syVfwKnk=kA$Iz8gsHZTuhHCGm;8q8t`lThrxmj96&O%SF+)!NWM{XHbI$O#?=vl z38eP|Z9|!cvJ`#Awx=`lCs;mM>kTHx+Ra%5d9_m2dHRAs1xuK&XMjWL@_uZ z0dYErROIa}X3vHir4G=(X$0vGl2qt{c1Dqzr>N~eXr@1DcRy)*p>!GiaE_0|EdKx) zGXeGpo>35UAqwuGGlU-t7RT`7;2aN_4wvDX08XJ@W3|h-6`6n~jCBa-J-je(SDler zh4?470kZwfGyyLuiw562nx@_%chkhn7A}sSEqoRg51KPsqDuu_cwZ}n9eEBW=PcBy zT}yvM^jMlOW5ZqIram<~6Dha_n?~4rEd57vv9Xu=N=FbI+zfbdMMrFIGW25g80@LZ z$4Q?{Ke+1eP&Lx!m;V68r{NHU(5OCb{6h?2B`p3~kp&Zh7hl35%J@30{$OF+T$4fh z%)7dDA+=C&6DIcuZlqG$tU0DDX9&y!${4qDRP_dB&A(@c{{YZvj1FSkb9_V!UZpfE z#Mq~D=2Hi=J9o@a{-;TC0YDMDV9f>3&r%~OhE@Lnv44m)D-0=$l|#hqi^+eCnO(So z%~yaQ6SCQYa2tk;S%Zjgu}l}~Z~{b=Y0=z&S&*D$*pIIPL#%%?sP#9?o3y}{DpB5U zZ25nyqzriB^*K(5;FS+ZYF{;|K~`qqCW(YqR$>yIH9wf|0oG8kc-&hp%Evl6y+sq7 zfxY}nHxL>lfKY~JqbFmA?|&0qP~8F7OKPDyUHr#R+|qr$LIwAE*@X+Q^HbmcAw_#78@q zf^1p1=AJkRG?y0KLM5uDH3?iww8p9l0%6oAZ4iJV>4m#Zw*kb@nQ*(81{WDak0vIM zP+E9zn0OMfKB>4O5x4ANh1)v)WsYOj2hC+PhpfIDtNM2M99$uKxh1 z9tUy<=2Qx*#KRCV1gO06@J}cndS7{VAE)9Sz8HxSbm@xS0)H)Vi%pvmnj0}dPJS!mQ2F5C5(i?>Qi7dsG^Lo;)C!NANw z^mwlk$tn>35b(KyQ&f6J@tE&XgkV%^ybLwrc!2%Q-Y)2Y@>lT}9Kq=ZqrBn^cL~R- zkGS`FmRp%%b_3%u2T&)>=cep@W~89ZTQTNrR33p0aaAa&zzxmA0Ks)w$r*x>*$uGA za%WmY_J`mh1uOpmeEt)q4c{65Cd<|sq!!fGm|uodr+W9OJDS#n4Agcr24K&tW*s{KVUVS(0A zn==dX%qY}f5xVHTSkr<2OET%iQrigAvQtnxN;$>F6olx?e7#|8N?jw;BUOe`BffCdJfPf{s~gm^)1*s%y+kGPyQuCv$Qj1U14Bh)*0^q z01(hS^&HAqsF7+^G1(5_JHoDw8zY!tOSnNYmL%U3pBC6B;Z35(8G$lBp@wS=$4ocw zjK3O`SDYi>6@D0%GI5r7>G1ym*_wLHu$e`56%`!2WW2-~z9oro>`bXwo zD3vKc^5=ffB0{bJ&L=RTID+reF()6HyJ17)Q?_VviDq3Ns&H`(%N0R2>uCP~k@|xD zSMvuDA_KhbMZaJ57hPB3{{UrOluG%4!=Y+jzLTtv(mTZkwwy*#;wxU_qTsgqW3$vW zaq@9crf^)90LzxUF`G>QuwGE7|?_bj~c)E_}nU$ z;A3%2YxIidW8FbnOtZ+1Ofd`nN~*Z#qGhrNgL5Hh;tGsnbqsL<#{!WRrNH3D5T3w3 z%Z&^U)1V!um}}Gy=)SVDg+hHy%>6>(m>^tRJ0lt@kOcq{_(ZDL>S1C%5cDDSslEK7 z7`ggI(M&rt7&G{d0R^~;c8SP96CKpx5z9oYyiAKqmB}Jj)>_0-nC?p>(*$fYaH{(D zmh>XNqsc186#gO+2GxM*#4g+KEm^cfhIRp$6u~j-@iLnwLQ+h<(Bf5dbjt_}pN}_} za=SntF!=b)f;C!z@~q>%9x6ESSZ)~bTuj`#K;sSS{{V>m4J12M*|^|B1H25}b%>Vu z06z>$(*FRMB6wQVAmb2Q{7knvF*gJPu>iV?g7Gr1%da{{RC-vzuG7sSA;`DJp zWJ7kp0Ls)Q5Tfhcrzb79nUCEX>y*%VObQb25N2J?YcO7A--@_BrNE_81vyd=j7wfg zM{I1@%f`x?IJm?O$|a~ya~j~897kHr6>F&B z9nE7?HL<~(hjPn9D9aDoE20Cb^#tr;yKx7^rG%8WW1h0<(jbF_a|2Z@X0bUD?792G zs%a8k<~Hl`GkGc=$TKf8p_$jYLTQOdGR`Hj7pSDIyh7LpIh4Fkw;68G+SITv>)f#| z`kLZo4gAcsHwSN|x8`tF%+{_i7JJ9j6Oj-a#IelUpbm%>L^F-VP>;kqh9ip~GZoq0 zf^cipTh-EAsGONfkjdH(RB|GVLl@bKa7Ag#nwbc(O)ZyeyD+FNdzWL@1elZ`anggp zB0{EL4;YgoFkPd$)57NwmlorR-3-c|w+3FK%=uU!c>ZNYt{7ApE?_b3+-%A!-O5%s zAE#-4nBr_8GWj4&pwwa#`pRI#ihwn!xRj6^JQ|(zh^R_imVfLTg1DC#qx_>en5yV~ zq^xwG%5_`t1QZ0?1)vHlrbgWRU*w??2#BobAkAL@CSzBa;h1FWu4;e7|#ju9^zG2Vsw?prtm(cK8F_W z9c~SovI?0gst5uv4W@?Xxr0$)ubFaT07g`#F^C4b!|rckyrJ zP?>vXuT!!$Nu#9wJ_hzFZ^I3~$fz$-b2k~6QVP}(R3Drpl3hi7)Vx%&$AKUaFqpQ- z__QVlA8~GC?UyC?ireoJ*+=^ysBF|m7o@ z2u3$@i_EvUPQ$XGWtLW=&w%C$PJPNYFGa+5528109jZ_{`AefMc8hmwQR+WX6^Q&? z$$25eH!SKzy0WV+AjYa>b!Ip1ibg_hkNp>Go}L|d4`-OiOe#dN97ii^gmh&ujdA+hrfg1B-SmpZB4 zl)-;WmkrEW8J-wZ(U!hODIhg;)NhK3Mq@@_%q!7~8&V5bm>Q6yL@pfrz=bB_3^YY% zi#tQuKxv|Nfj3Jk*dQvaKI63R%r0Z#J4}60MkT-@t_CSC5$J%L7_Q z%^)tKMH80gQx;!?eg>u*@DSblgDmfm{KTs2u5kRp3Ep=hmf7};Z{jMH{AE!800PUr zH01e|QQemrA#UKDlMG96;ul5Bp@E@6ZbGbm-65XJStjnKg)Ug#deG>Qt5us;T zBq(AcZlI2(Ek?o%FcYMuy%igcL!zcq^_pDo;!-#)hId$HlV4DZp!`ZOqrBw4BUqGN zQM41RIlq|H=k777kQh4j zH2xC4F5>dt7wrbsebld&_9bloY0Y1_9Jh27W&kn-Di+K|xOmira{=KyZvh@wSbpYV zePA-#lIj;Ay+o%wi_$Gcm29e(sZ~(cp{PW}OOlXlh^i0s1T&e@i0%WIj+ZpSj=Ku>rz+cD%+y8vnV3x&lm%3K7cQr4tvF%a71L1n z2M<#2Z}ehP^@8uaQmfZU{LW@vl_)xo`2aGWp$OGetwE2dSX?Ln zUx{OL{0OZvWkXqWF~mK}16WjC+!oH@v2_~tS(K`uv&9B(QN`3?S(6QTiL0|DN2;#R#t-4U^A z0{A9S3yu6rIebr9XH_#2<1DJXK4r0sxPa(Ox0BPwLE7bn4rT5OsfZcz+_?1qB9Bom1n6XSjz%VGr8-O%@VJPDCt8A7DpKNR z+K29Kwh91C)E5HvQtS!!4nkAG^#;-SjUS+iRz1=I{Sizp=!n?-P8|1Yr7Y*Bp~0tk zj0uE}0*=VyS+aH|avGC3?60XeUz!WFdtlXeHJEpPmkw$@&f)4*V9n|$s0S3-t)khF4rWa6L+9X8Cij=soqKN!s_=}PZca}+^P}Dlj z31h^`3@e#>mtu6QOs|E}f0$^k1|}(3BF}(@)w1=>zGWOZhUIH40faB^Vlf+=m+-#J z{yYs156C~pSae{yr?3Gq78~mhGEoEz7XJXlsbkfb+`Bj*iBG9@-dx2_-m@qWlITISxE25vw6zbwzq)}ETE8yHJoUj$d zOUdeCvc>@d+eE4wuVnh2B4%O1Dq>+jiJ{g~f_6;1APcI-?;OI9sg7oF*;g!>#UEY> z7-!)#cv^_{QDdy1#Mb8H?TLuKDM-wgHkg|K0Oczvq8`X@T`}I1nOn>h_D5n9gT+Eu zLgh-BIYCyZVy1NB&%$Nb69j^Q;oQHm<704_?JI=lX4}kan61YejKm9dV=iU5xR_U= zFc+BJ6Ot0zp5aipDqKy&F;%u3R0xv;;3n>;6>c~&0_cmm@A!>18&>769q7sp+-)7o zVM_c(y0w97@f9Ugyb%2V$A6dh`&mYI$})* zB30eNM|y*_wat7$5R{e%plqIq--(5)H*Plv8i8i91lH1kT8)`u!5iJ?WK~q6X_aiU z0AN2*djDV}oW*f=F`-G`QLy-xu;Ue|-*_3S2~AlJ(62Wf&~?lYT0JLFLpnQ5f}rZa zyqTB7^Bk7P0Nl6+Iyjb$(b`$dIWYR^p0BJ_p@(UhwuZPi$sA+Dxy&$2g5|k&DW(EZ zmL{b^>p7qJ(m(chqmppq0;9gN@k;>3tVM9aaXN&b)xqIZLX}o#f?8HeikqdYGMG(x z*_hM>oFm+EDA^;lb1qj0?E+!{0I;@DW*LD%7^s@gVS&bBF7+s9{4D-wcGxAAf{G?B z%+Pk~Fled1WzL!-4W{UIx`ilL7us@=N9I(ja}6-t4i1O;O3W4BA=Z*mpmuH-x1

iNji!vJ|!|OhTd7 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 KvU>h|`u_kfE(~A* literal 0 HcmV?d00001 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..1d69f3a --- /dev/null +++ b/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = $kernel->handle( + $request = Request::capture() +)->send(); + +$kernel->terminate($request, $response); diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..a8093be --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1,7 @@ +import './bootstrap'; + +import Alpine from 'alpinejs'; + +window.Alpine = Alpine; + +Alpine.start(); diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..846d350 --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,32 @@ +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// import Pusher from 'pusher-js'; +// window.Pusher = Pusher; + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: import.meta.env.VITE_PUSHER_APP_KEY, +// cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1', +// wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, +// wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, +// wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, +// forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', +// enabledTransports: ['ws', 'wss'], +// }); diff --git a/resources/views/auth/confirm-password.blade.php b/resources/views/auth/confirm-password.blade.php new file mode 100644 index 0000000..3d38186 --- /dev/null +++ b/resources/views/auth/confirm-password.blade.php @@ -0,0 +1,27 @@ + +
+ {{ __('This is a secure area of the application. Please confirm your password before continuing.') }} +
+ +
+ @csrf + + +
+ + + + + +
+ +
+ + {{ __('Confirm') }} + +
+
+
diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php new file mode 100644 index 0000000..cb32e08 --- /dev/null +++ b/resources/views/auth/forgot-password.blade.php @@ -0,0 +1,25 @@ + +
+ {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }} +
+ + + + +
+ @csrf + + +
+ + + +
+ +
+ + {{ __('Email Password Reset Link') }} + +
+
+
diff --git a/resources/views/auth/login-new.blade.php b/resources/views/auth/login-new.blade.php new file mode 100644 index 0000000..95a631f --- /dev/null +++ b/resources/views/auth/login-new.blade.php @@ -0,0 +1,262 @@ + + + + + + Login - Sistem Pemilihan Jurusan + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ + diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..07cc4a0 --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,331 @@ + + + + + + Login - Sistem Pemilihan Jurusan + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ +
+
+
+ 🖼️ + Sistem Pemilihan Jurusan +
+
+

POLIJE

+

Sistem Pemilihan Jurusan

+
+
+
+ + +
+
+

Selamat Datang

+

Masuk untuk melanjutkan

+ + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

• {{ $error }}

+ @endforeach +
+ @endif + +
+ @csrf + +
+ + +
+ +
+ + +
+ + + + +
+
+
+
+ + diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..0e66c01 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,387 @@ + + + + + + Daftar - Sistem Pemilihan Jurusan + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ +
+
+
+ 🖼️ + Sistem Pemilihan Jurusan +
+
+

POLIJE

+

Sistem Pemilihan Jurusan

+
+
+
+ + +
+
+

Daftar

+

Buat akun baru Anda

+ + @if ($errors->any()) +
+ @foreach ($errors->all() as $error) +

• {{ $error }}

+ @endforeach +
+ @endif + +
+ @csrf + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + + + +
+
+
+
+ + \ No newline at end of file diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php new file mode 100644 index 0000000..a6494cc --- /dev/null +++ b/resources/views/auth/reset-password.blade.php @@ -0,0 +1,39 @@ + +
+ @csrf + + + + + +
+ + + +
+ + +
+ + + +
+ + +
+ + + + + +
+ +
+ + {{ __('Reset Password') }} + +
+
+
diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php new file mode 100644 index 0000000..eaf811d --- /dev/null +++ b/resources/views/auth/verify-email.blade.php @@ -0,0 +1,31 @@ + +
+ {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }} +
+ + @if (session('status') == 'verification-link-sent') +
+ {{ __('A new verification link has been sent to the email address you provided during registration.') }} +
+ @endif + +
+
+ @csrf + +
+ + {{ __('Resend Verification Email') }} + +
+
+ +
+ @csrf + + +
+
+
diff --git a/resources/views/chatbot/index.blade.php b/resources/views/chatbot/index.blade.php new file mode 100644 index 0000000..258523d --- /dev/null +++ b/resources/views/chatbot/index.blade.php @@ -0,0 +1,258 @@ + + + + + + Konsultasi BK Virtual - Sistem Pemilihan Jurusan + + + + + +
+
+
+

Konsultasi BK Virtual

+

Konseling Pemilihan Jurusan Kuliah

+
+ +
+
+ + +
+
+ +
+
+

👨‍🏫 Konselor BK Virtual

+ + @if($recommendation && !empty($recommendation['jurusan'])) +
+
+

Rekomendasi Terakhir

+

{{ $recommendation['jurusan'] }}

+

Skor: {{ isset($recommendation['skor']) ? number_format($recommendation['skor'] * 100, 1) : '-' }}%

+
+
+ @else +
+

💡 Belum ada rekomendasi. Tapi tenang, kamu tetap bisa konsultasi!

+
+ @endif + +
+ +
+

Contoh Pertanyaan:

+
    +
  • • Jurusan apa yang cocok buat aku?
  • +
  • • Prospek kerja jurusan TI?
  • +
  • • Aku bingung pilih jurusan
  • +
  • • Skill apa yang dibutuhkan?
  • +
  • • Bedanya IPA dan IPS?
  • +
  • • Tips sukses di kampus?
  • +
+
+
+
+ + +
+
+ +
+
+
+

Halo! 👋 Saya konselor BK virtual SMA Bima Ambulu. Saya siap membantu kamu tentang pemilihan jurusan kuliah, prospek karir, atau apa pun yang kamu mau tanyakan. Yuk, mulai curhat! 😊

+
+
+
+ + +
+
+ @csrf + + +
+
+
+
+
+
+ + + + diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php new file mode 100644 index 0000000..46579cf --- /dev/null +++ b/resources/views/components/application-logo.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/components/auth-session-status.blade.php b/resources/views/components/auth-session-status.blade.php new file mode 100644 index 0000000..c4bd6e2 --- /dev/null +++ b/resources/views/components/auth-session-status.blade.php @@ -0,0 +1,7 @@ +@props(['status']) + +@if ($status) +
merge(['class' => 'font-medium text-sm text-green-600']) }}> + {{ $status }} +
+@endif diff --git a/resources/views/components/danger-button.blade.php b/resources/views/components/danger-button.blade.php new file mode 100644 index 0000000..d17d288 --- /dev/null +++ b/resources/views/components/danger-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/dropdown-link.blade.php b/resources/views/components/dropdown-link.blade.php new file mode 100644 index 0000000..e0f8ce1 --- /dev/null +++ b/resources/views/components/dropdown-link.blade.php @@ -0,0 +1 @@ +merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition duration-150 ease-in-out']) }}>{{ $slot }} diff --git a/resources/views/components/dropdown.blade.php b/resources/views/components/dropdown.blade.php new file mode 100644 index 0000000..db38742 --- /dev/null +++ b/resources/views/components/dropdown.blade.php @@ -0,0 +1,43 @@ +@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white']) + +@php +switch ($align) { + case 'left': + $alignmentClasses = 'ltr:origin-top-left rtl:origin-top-right start-0'; + break; + case 'top': + $alignmentClasses = 'origin-top'; + break; + case 'right': + default: + $alignmentClasses = 'ltr:origin-top-right rtl:origin-top-left end-0'; + break; +} + +switch ($width) { + case '48': + $width = 'w-48'; + break; +} +@endphp + +
+
+ {{ $trigger }} +
+ + +
diff --git a/resources/views/components/input-error.blade.php b/resources/views/components/input-error.blade.php new file mode 100644 index 0000000..9e6da21 --- /dev/null +++ b/resources/views/components/input-error.blade.php @@ -0,0 +1,9 @@ +@props(['messages']) + +@if ($messages) +
    merge(['class' => 'text-sm text-red-600 space-y-1']) }}> + @foreach ((array) $messages as $message) +
  • {{ $message }}
  • + @endforeach +
+@endif diff --git a/resources/views/components/input-label.blade.php b/resources/views/components/input-label.blade.php new file mode 100644 index 0000000..1cc65e2 --- /dev/null +++ b/resources/views/components/input-label.blade.php @@ -0,0 +1,5 @@ +@props(['value']) + + diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php new file mode 100644 index 0000000..70704c1 --- /dev/null +++ b/resources/views/components/modal.blade.php @@ -0,0 +1,78 @@ +@props([ + 'name', + 'show' => false, + 'maxWidth' => '2xl' +]) + +@php +$maxWidth = [ + 'sm' => 'sm:max-w-sm', + 'md' => 'sm:max-w-md', + 'lg' => 'sm:max-w-lg', + 'xl' => 'sm:max-w-xl', + '2xl' => 'sm:max-w-2xl', +][$maxWidth]; +@endphp + +
+
+
+
+ +
+ {{ $slot }} +
+
diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php new file mode 100644 index 0000000..5c101a2 --- /dev/null +++ b/resources/views/components/nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 text-sm font-medium leading-5 text-gray-900 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out' + : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 hover:text-gray-700 hover:border-gray-300 focus:outline-none focus:text-gray-700 focus:border-gray-300 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/primary-button.blade.php b/resources/views/components/primary-button.blade.php new file mode 100644 index 0000000..d71f0b6 --- /dev/null +++ b/resources/views/components/primary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/responsive-nav-link.blade.php b/resources/views/components/responsive-nav-link.blade.php new file mode 100644 index 0000000..43b91e7 --- /dev/null +++ b/resources/views/components/responsive-nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 text-start text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out' + : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/secondary-button.blade.php b/resources/views/components/secondary-button.blade.php new file mode 100644 index 0000000..b32b69f --- /dev/null +++ b/resources/views/components/secondary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php new file mode 100644 index 0000000..1df7f0d --- /dev/null +++ b/resources/views/components/text-input.blade.php @@ -0,0 +1,3 @@ +@props(['disabled' => false]) + +merge(['class' => 'border-gray-300 focus:border-indigo-500 focus:ring-indigo-500 rounded-md shadow-sm']) !!}> diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php new file mode 100644 index 0000000..9513781 --- /dev/null +++ b/resources/views/dashboard.blade.php @@ -0,0 +1,264 @@ + + + + + + Dashboard Siswa - Sistem Pemilihan Jurusan + + + + + +
+
+
+
+

Dashboard Siswa

+

Sistem Pemilihan Jurusan

+
+
+ Selamat datang, {{ Auth::user()->name }}! +
+ + 👤 Profil + +
+ @csrf + +
+
+
+
+
+
+ + +
+ +
+

Selamat Datang

+

+ Sistem ini membantu Anda menemukan jurusan yang sesuai dengan profil akademik, minat, dan preferensi pembelajaran Anda. +

+

+ Sistem menganalisis 5 faktor: nilai akademik, minat, preferensi pembelajaran, prestasi, dan cita-cita. + Berdasarkan analisis tersebut, sistem memberikan rekomendasi dari 9 pilihan jurusan yang tersedia. +

+
+ + +
+ +
+
+
📊
+
+

Analisis Rekomendasi

+

+ Isi formulir singkat tentang profil Anda. Sistem akan menganalisis dan memberikan rekomendasi dari 9 jurusan yang tersedia. +

+
+
+ +
+

+ Durasi: 3-5 menit | Metode: AI Analysis +

+
+
+ + +
+
+
💬
+
+

Chat dengan AI

+

+ Tanya jawab tentang jurusan, kurikulum, prospek karir, dan pertanyaan seputar pemilihan jurusan. +

+
+
+ +
+

+ Fitur: Tanya jawab dengan AI +

+
+
+
+ + +
+ +
+
+
📋
+
+

History Rekomendasi

+

+ Lihat semua hasil analisis rekomendasi yang telah Anda lakukan sebelumnya. +

+
+
+ +
+

+ Total: {{ $recommendationCount ?? 0 }} analisis +

+
+
+ + +
+
+
💾
+
+

History Chat

+

+ Lihat riwayat semua percakapan Anda dengan AI chatbot. +

+
+
+ +
+

+ Total: {{ $chatCount ?? 0 }} chat +

+
+
+
+ + +
+

9 Jurusan Tersedia

+
+
+
🌾
+

Produksi Pertanian

+

Teknik budidaya tanaman modern

+
+
+
🔬
+

Teknologi Pertanian

+

Inovasi teknologi pertanian

+
+
+
🐄
+

Peternakan

+

Manajemen peternakan

+
+
+
💼
+

Manajemen Agribisnis

+

Bisnis pertanian

+
+
+
💻
+

Teknologi Informasi

+

Sistem digital

+
+
+
⚙️
+

Teknik

+

Mesin & sistem teknik

+
+
+
⚕️
+

Kesehatan

+

Profesi kesehatan

+
+
+
🗣️
+

Bahasa & Komunikasi

+

Komunasikan & wisata

+
+
+
📊
+

Bisnis

+

Manajemen bisnis

+
+
+
+ + +
+

Cara Kerja Sistem

+
+
+
1
+
+

Isi Data Diri

+

Masukkan nilai akademik, minat, preferensi, prestasi, dan cita-cita

+
+
+
+
2
+
+

Analisis Sistem

+

Sistem menganalisis data menggunakan algoritma canggih

+
+
+
+
3
+
+

Hasil Rekomendasi

+

Dapatkan rekomendasi 9 jurusan dengan analisis detail

+
+
+
+
4
+
+

Konsultasi Lanjut

+

Gunakan chatbot untuk tanya jawab lebih lanjut

+
+
+
+
+
+ + +
+
+

Sistem Pemilihan Jurusan © 2026 | SMA Bima Ambulu

+
+
+ + \ No newline at end of file diff --git a/resources/views/history/chat.blade.php b/resources/views/history/chat.blade.php new file mode 100644 index 0000000..a04127c --- /dev/null +++ b/resources/views/history/chat.blade.php @@ -0,0 +1,109 @@ + + + + + + History Chat - Sistem Pemilihan Jurusan + + + + + +
+
+
+

History Chat

+

Riwayat Konsultasi AI

+
+ +
+
+ + +
+ @if($chatHistories && $chatHistories->count() > 0) +
+ + @php + $groupedByDate = $chatHistories->groupBy(function($chat) { + return $chat->created_at->format('Y-m-d'); + }); + @endphp + + @foreach($groupedByDate as $date => $chats) +
+

+ {{ \Carbon\Carbon::parse($date)->format('d F Y') }} +

+
+ @foreach($chats as $chat) +
+
+ +
+
+

{{ $chat->prompt }}

+

{{ $chat->created_at->format('H:i') }}

+
+
+ + +
+
+

{{ $chat->response }}

+
+
+
+
+ @endforeach +
+
+ @endforeach +
+ @else +
+
💬
+

Belum Ada Chat

+

Anda belum melakukan chat dengan AI. Mulai konsultasi sekarang!

+ + Mulai Chat + +
+ @endif +
+ + +
+
+

Sistem Pemilihan Jurusan © 2026 | SMA Bima Ambulu

+
+
+ + diff --git a/resources/views/history/rekomendasi.blade.php b/resources/views/history/rekomendasi.blade.php new file mode 100644 index 0000000..db9102a --- /dev/null +++ b/resources/views/history/rekomendasi.blade.php @@ -0,0 +1,118 @@ + + + + + + History Rekomendasi - Sistem Pemilihan Jurusan + + + + + +
+
+
+

History Rekomendasi

+

Semua Analisis Anda

+
+ +
+
+ + +
+ @if($recommendations && $recommendations->count() > 0) +
+ @foreach($recommendations as $rec) +
+
+
+

+ Analisis - {{ \Carbon\Carbon::parse($rec->created_at)->format('d M Y H:i') }} +

+

{{ $rec->created_at->diffForHumans() }}

+
+ +
+ + +
+ @endforeach +
+ @else +
+
📊
+

Belum Ada History

+

Anda belum melakukan analisis rekomendasi. Mulai sekarang!

+ + Mulai Analisis + +
+ @endif +
+ + + + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 0000000..b59af15 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,36 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ @include('layouts.navigation') + + + @if (isset($header)) +
+
+ {{ $header }} +
+
+ @endif + + +
+ {{ $slot }} +
+
+ + diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php new file mode 100644 index 0000000..11feb47 --- /dev/null +++ b/resources/views/layouts/guest.blade.php @@ -0,0 +1,30 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+
+ + + +
+ +
+ {{ $slot }} +
+
+ + diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php new file mode 100644 index 0000000..c2d3a65 --- /dev/null +++ b/resources/views/layouts/navigation.blade.php @@ -0,0 +1,100 @@ + diff --git a/resources/views/profile/edit.blade.php b/resources/views/profile/edit.blade.php new file mode 100644 index 0000000..b9b9ff8 --- /dev/null +++ b/resources/views/profile/edit.blade.php @@ -0,0 +1,258 @@ + + + + + + Profil Saya - Sistem Pemilihan Jurusan + + + + + +
+
+
+
+

Profil Saya

+

Sistem Pemilihan Jurusan

+
+
+ {{ Auth::user()->name }} + + ← Kembali ke Dashboard + +
+
+
+
+ + +
+ + {{-- Success Message --}} + @if (session('status') === 'profile-updated') +
+ ✅ Profil berhasil diperbarui! +
+ @endif + + {{-- ========== INFORMASI PROFIL ========== --}} +
+

Informasi Profil

+

Perbarui data diri dan foto profil Anda.

+ +
+ @csrf + @method('patch') + + {{-- Foto Profil --}} +
+ +
+ @if($user->foto) + Foto Profil + @else +
+ 👤 +
+ + @endif +
+ +

Format: JPG, PNG, GIF. Maks 2MB.

+
+
+ @error('foto') +

{{ $message }}

+ @enderror +
+ + {{-- Nama --}} +
+ + + @error('name') +

{{ $message }}

+ @enderror +
+ + {{-- Email --}} +
+ + + @error('email') +

{{ $message }}

+ @enderror +
+ + {{-- NIS --}} +
+ + + @error('nis') +

{{ $message }}

+ @enderror +
+ + {{-- Kelompok Asal --}} +
+ + + @error('kelompok_asal') +

{{ $message }}

+ @enderror +
+ + +
+
+ + {{-- ========== UBAH PASSWORD ========== --}} +
+

Ubah Password

+

Pastikan akun Anda menggunakan password yang kuat dan aman.

+ + @if (session('status') === 'password-updated') +
+ ✅ Password berhasil diubah! +
+ @endif + +
+ @csrf + @method('put') + +
+ + + @error('current_password', 'updatePassword') +

{{ $message }}

+ @enderror +
+ +
+ + + @error('password', 'updatePassword') +

{{ $message }}

+ @enderror +
+ +
+ + + @error('password_confirmation', 'updatePassword') +

{{ $message }}

+ @enderror +
+ + +
+
+ + {{-- ========== HAPUS AKUN ========== --}} +
+

Hapus Akun

+

+ Setelah akun dihapus, semua data dan riwayat Anda akan dihapus secara permanen. Pastikan Anda sudah menyimpan data yang diperlukan. +

+ + + + {{-- Konfirmasi Hapus --}} + +
+
+ + +
+
+

Sistem Pemilihan Jurusan © 2026 | SMA Bima Ambulu

+
+
+ + + + diff --git a/resources/views/profile/partials/delete-user-form.blade.php b/resources/views/profile/partials/delete-user-form.blade.php new file mode 100644 index 0000000..edeeb4a --- /dev/null +++ b/resources/views/profile/partials/delete-user-form.blade.php @@ -0,0 +1,55 @@ +
+
+

+ {{ __('Delete Account') }} +

+ +

+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }} +

+
+ + {{ __('Delete Account') }} + + +
+ @csrf + @method('delete') + +

+ {{ __('Are you sure you want to delete your account?') }} +

+ +

+ {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }} +

+ +
+ + + + + +
+ +
+ + {{ __('Cancel') }} + + + + {{ __('Delete Account') }} + +
+
+
+
diff --git a/resources/views/profile/partials/update-password-form.blade.php b/resources/views/profile/partials/update-password-form.blade.php new file mode 100644 index 0000000..eaca1ac --- /dev/null +++ b/resources/views/profile/partials/update-password-form.blade.php @@ -0,0 +1,48 @@ +
+
+

+ {{ __('Update Password') }} +

+ +

+ {{ __('Ensure your account is using a long, random password to stay secure.') }} +

+
+ +
+ @csrf + @method('put') + +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ {{ __('Save') }} + + @if (session('status') === 'password-updated') +

{{ __('Saved.') }}

+ @endif +
+
+
diff --git a/resources/views/profile/partials/update-profile-information-form.blade.php b/resources/views/profile/partials/update-profile-information-form.blade.php new file mode 100644 index 0000000..165575b --- /dev/null +++ b/resources/views/profile/partials/update-profile-information-form.blade.php @@ -0,0 +1,93 @@ +
+
+

+ {{ __('Profile Information') }} +

+ +

+ {{ __("Update your account's profile information and email address.") }} +

+
+ +
+ @csrf +
+ +
+ @csrf + @method('patch') + +
+ + + +
+ +
+ + + + + @if ($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail()) +
+

+ {{ __('Your email address is unverified.') }} + + +

+ + @if (session('status') === 'verification-link-sent') +

+ {{ __('A new verification link has been sent to your email address.') }} +

+ @endif +
+ @endif +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ @if($user->foto) +
+ Foto Profil +
+ @endif + +
+ +
+ +
+ {{ __('Save') }} + + @if (session('status') === 'profile-updated') +

{{ __('Saved.') }}

+ @endif +
+
+
diff --git a/resources/views/rekomendasi/hasil.blade.php b/resources/views/rekomendasi/hasil.blade.php new file mode 100644 index 0000000..cc92346 --- /dev/null +++ b/resources/views/rekomendasi/hasil.blade.php @@ -0,0 +1,273 @@ + + + + + + Hasil Rekomendasi - Sistem Pemilihan Jurusan + + + + + +
+
+
+

Hasil Rekomendasi

+

Sistem Pemilihan Jurusan

+
+ +
+
+ + +
+ +
+

Hasil Analisis

+

+ Berikut adalah hasil analisis sistem terhadap profil Anda. Jurusan diurutkan berdasarkan skor kesesuaian dari yang tertinggi. +

+
+ + +
+

Data Profil Anda

+
+
+

Nilai Akademik

+

{{ $katNilai }}

+
+
+

Minat

+

{{ $minatMapped }}

+
+
+

Preferensi Belajar

+

{{ $prefStudi }}

+
+
+

Prestasi

+

+ @if($prestasiScore >= 0.8) + Tinggi + @elseif($prestasiScore >= 0.6) + Sedang + @else + Minimal + @endif +

+
+
+
+ + +
+

Peringkat Jurusan

+ +
+ + + + + + + + + + @foreach($hasilAkhir as $index => $res) + + + + + + @endforeach + +
#JurusanSkor
+ + {{ $index + 1 }} + + + {{ $res['jurusan'] }} + @if($index == 0) + + ⭐ Utama + + @endif + + {{ number_format($res['skor'] * 100, 1) }}% +
+
+ + +
+ @foreach($hasilAkhir as $index => $res) +
+
+ {{ $res['jurusan'] }} + {{ number_format($res['skor'] * 100, 1) }}% +
+
+
+
+
+ @endforeach +
+
+ + + @if(count($hasilAkhir) > 0) +
+ @php + $topRecommendation = $hasilAkhir[0]; + $criteria = config('polije.criteria.' . $topRecommendation['jurusan'], []); + @endphp + +
+
1
+
+

{{ $topRecommendation['jurusan'] }}

+

+ Skor Kesesuaian: {{ number_format($topRecommendation['skor'] * 100, 1) }}% +

+
+
+ + +
+

Analisis per Kriteria:

+ +
+
+
+

Nilai Akademik (40%)

+ {{ $katNilai }} +
+
+
+
+
+ +
+
+

Minat (35%)

+ {{ $minatMapped }} +
+
+
+
+
+ +
+
+

Preferensi Belajar (15%)

+ {{ $prefStudi }} +
+
+
+
+
+ +
+
+

Cita-cita (5%)

+
+
+
+
+
+ +
+
+

Prestasi (5%)

+
+
+
+
+
+
+
+ + +
+

Penjelasan:

+

+ Berdasarkan profil Anda dengan nilai akademik {{ $katNilai }}, + minat di bidang {{ $minatMapped }}, dan + preferensi belajar {{ $prefStudi }}, + sistem menganalisis bahwa {{ $topRecommendation['jurusan'] }} + adalah pilihan yang paling sesuai dengan skor {{ number_format($topRecommendation['skor'] * 100, 1) }}%. +

+
+ + + @if(isset($criteria['skills_required'])) +
+

Skills yang Diperlukan:

+
+ @foreach($criteria['skills_required'] as $skill) + + {{ $skill }} + + @endforeach +
+
+ @endif +
+ @endif + + +
+
+
💬
+
+

Konsultasi Lebih Lanjut

+

+ Masih ragu dengan hasil rekomendasi? Konsultasikan dengan AI untuk mendapatkan penjelasan lebih detail + tentang jurusan yang direkomendasikan atau tanyakan pertanyaan lainnya. +

+ + Konsultasi dengan AI + +
+
+
+ + + + + +
+

+ Metode: Sistem menggunakan Weighted Naive Bayes dengan 5 kriteria: Nilai (40%), Minat (35%), Preferensi (15%), Cita-cita (5%), Prestasi (5%). +

+
+
+ + \ No newline at end of file diff --git a/resources/views/rekomendasi/input.blade.php b/resources/views/rekomendasi/input.blade.php new file mode 100644 index 0000000..57c6cb9 --- /dev/null +++ b/resources/views/rekomendasi/input.blade.php @@ -0,0 +1,184 @@ + + + + + + Input Data - Sistem Pemilihan Jurusan + + + + + +
+
+
+

Input Data Profil

+

Sistem Pemilihan Jurusan

+
+ +
+
+ + +
+ +
+

Petunjuk Pengisian

+

+ Silakan isi data berikut dengan jujur agar sistem dapat memberikan rekomendasi yang akurat. +

+

+ Sistem akan menganalisis data Anda dan menampilkan ranking 9 jurusan yang tersedia di Politeknik Negeri Jember. +

+
+ + +
+
+
📝
+
+

Formulir Data Profil

+

Jawab pertanyaan berikut untuk mendapatkan rekomendasi jurusan.

+
+
+ +
+ @csrf + +
+ +
+

1. Nilai Rapor (0-100)

+

Masukkan nilai rata-rata mata pelajaran Anda.

+ +
+
+ + +
+ + @if(isset($student) && $student->kelompok_asal == 'IPA') +
+
+ + +
+
+ + +
+
+ + +
+
+ @else +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ @endif +
+
+ + +
+

2. Minat & Preferensi

+

Deskripsikan minat dan preferensi belajar Anda.

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ + +
+

+ Setelah menekan tombol, sistem akan menganalisis data Anda dan menampilkan ranking 9 jurusan. +

+ +
+
+
+ + +
+

+ Metode: Sistem menggunakan Weighted Naive Bayes dengan 5 kriteria: Nilai (40%), Minat (35%), Preferensi (15%), Cita-cita (5%), Prestasi (5%). +

+
+
+ + \ No newline at end of file diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..b557b8b --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,302 @@ + + + + + + SPK Jurusan Polije - Sistem Pendukung Keputusan Pemilihan Jurusan + + + + +
+
+
+

Sistem Pemilihan Jurusan

+

Pilih Jurusan yang Tepat.

+
+ + +
+
+ +
+
+
+
+

Tentukan Pilihan Jurusan dengan Bijak

+

+ Hai, teman-teman siswa SMA Bima Ambulu! Memilih jurusan kuliah itu keputusan penting yang akan menentukan masa depan kalian. Sistem ini akan membantu menemukan jurusan yang sesuai dengan kemampuan dan minat kalian. +

+

+ Sistem ini menganalisis 5 aspek penting dalam diri kalian untuk memberikan rekomendasi yang akurat dan personal. +

+ +
+
+
+
+

9 Kategori Jurusan

+

Pilihan jurusan dari berbagai bidang: pertanian, teknologi, kesehatan, hingga bisnis

+
+

Temukan Ranking Jurusan yang Paling Cocok buat Kamu

+
+
+
+
+
+
+ + +
+
+

Kenapa Perlu Pakai Sistem Ini?

+
+
+
🤖
+

Analisis Berbasis Data

+

Menggunakan AI untuk menganalisis profil akademik dan non-akademik kalian secara detail

+
+
+
🎯
+

Pendekatan Menyeluruh

+

Nggak cuma dari nilai aja, tapi juga dari minat, gaya belajar, impian karir, dan prestasi

+
+
+
💡
+

Rekomendasi Akurat

+

Membantu kalian memilih jurusan dengan lebih yakin berdasarkan data yang objektif

+
+
+
+
+ + + +
+
+

5 Aspek yang Dianalisis Sistem

+

Sistem ini menganalisis 5 aspek penting dalam diri kalian untuk memberikan rekomendasi jurusan yang tepat dan personal.

+
+
+
+
1
+
+

📚 Nilai Akademik (Bobot 40%)

+

Prestasi kalian dalam mata pelajaran utama (IPA atau IPS) menunjukkan kemampuan dasar untuk sukses di jurusan tertentu

+
+
+
+
+
+
2
+
+

❤️ Minat & Gaya Belajar (Bobot 35%)

+

Minat kalian terhadap bidang tertentu sangat menentukan kesuksesan dalam perkuliahan nanti

+
+
+
+
+
+
3
+
+

🎓 Preferensi Metode Belajar (Bobot 15%)

+

Cara belajar yang kalian sukai - praktik langsung, project based, kerjasama industri, atau blended learning

+
+
+
+
+
+
4
+
+

🚀 Impian dan Tujuan Karir (Bobot 5%)

+

Cita-cita dan target karir kalian membantu mencocokkan pilihan jurusan dengan jalur profesional yang diinginkan

+
+
+
+
+
+
5
+
+

🏆 Prestasi dan Kegiatan (Bobot 5%)

+

Pencapaian kalian dalam kompetisi akademik maupun kegiatan ekstra menunjukkan potensi dan dedikasi khusus

+
+
+
+
+
+
+ + +
+
+

9 Kategori Jurusan yang Bisa Dipilih

+

Ada banyak pilihan jurusan dari berbagai bidang. Sistem ini akan menganalisis profil kalian dan merekomendasikan jurusan mana yang paling cocok berdasarkan nilai, minat, dan potensi kalian.

+
+
+
🌾
+

Produksi Pertanian

+

Cocok buat yang suka bercocok tanam dan ingin meningkatkan hasil pertanian dengan metode modern.

+
+
+
🔬
+

Teknologi Pertanian

+

Belajar teknologi terkini untuk inovasi pertanian yang lebih berkelanjutan.

+
+
+
🐄
+

Peternakan

+

Mengelola dan mengembangkan usaha peternakan secara profesional.

+
+
+
💼
+

Manajemen Agribisnis

+

Ideal buat yang ingin jadi entrepreneur atau manajer bisnis di bidang pertanian.

+
+
+
💻
+

Teknologi Informasi

+

Buat yang suka coding, bikin aplikasi, dan terjun ke dunia digital.

+
+
+
⚙️
+

Teknik

+

Cocok untuk yang suka mesin, desain teknik, dan sistem manufaktur.

+
+
+
⚕️
+

Kesehatan

+

Untuk yang ingin berkarir di bidang kesehatan dengan keterampilan praktis tinggi.

+
+
+
🗣️
+

Bahasa, Komunikasi, dan Pariwisata

+

Buat yang suka berkomunikasi, hospitality, dan dunia pariwisata.

+
+
+
📊
+

Bisnis

+

Jalan menuju karir sebagai pemimpin bisnis atau profesional manajemen.

+
+
+
+
+ + +
+
+

Cara Pakai Sistemnya

+

Cuma 4 langkah mudah untuk menemukan rekomendasi jurusan yang paling cocok dengan profil dan impian kalian.

+
+
+
1
+

Daftar Akun

+

Buat akun pakai email, NIS, dan data diri kalian

+
+
+
2
+

Isi Data

+

Lengkapi 5 aspek penting tentang diri kalian

+
+
+
3
+

Proses AI

+

Sistem memproses data kalian dengan algoritma cerdas

+
+
+
4
+

Lihat Hasil

+

Dapatkan ranking jurusan dengan skor kecocokan detail

+
+
+
+
+ + +
+
+

Yuk, Temukan Jurusan yang Cocok!

+

Jangan buat keputusan penting sendirian. Pakai sistem ini untuk mendapatkan rekomendasi jurusan yang akurat berdasarkan nilai, minat, dan cita-cita kalian!

+ +
+
+ + +
+
+
+

Untuk Siswa SMA Bima Ambulu

+

Sistem ini dikembangkan khusus untuk membantu teman-teman siswa SMA Bima Ambulu dalam menemukan jurusan kuliah yang paling cocok dengan minat dan kemampuan kalian.

+
+
+

Kontak SMA Bima Ambulu

+
    +
  • Email: smabima@gmail.com
  • +
  • Telepon: (0331) 123456
  • +
  • Lokasi: Jl. Pendidikan No. 1
    Ambulu, Jember, Jawa Timur
  • +
+
+
+

Menu

+ +
+
+
+

© 2026 Sistem Pemilihan Jurusan

+

Membantu Siswa SMA Bima Ambulu Memilih Jurusan Kuliah yang Tepat

+
+
+ + + + diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..889937e --- /dev/null +++ b/routes/api.php @@ -0,0 +1,19 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000..1040b51 --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,59 @@ +group(function () { + Route::get('register', [RegisteredUserController::class, 'create']) + ->name('register'); + + Route::post('register', [RegisteredUserController::class, 'store']); + + Route::get('login', [AuthenticatedSessionController::class, 'create']) + ->name('login'); + + Route::post('login', [AuthenticatedSessionController::class, 'store']); + + Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) + ->name('password.request'); + + Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) + ->name('password.email'); + + Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) + ->name('password.reset'); + + Route::post('reset-password', [NewPasswordController::class, 'store']) + ->name('password.store'); +}); + +Route::middleware('auth')->group(function () { + Route::get('verify-email', EmailVerificationPromptController::class) + ->name('verification.notice'); + + Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); + + Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware('throttle:6,1') + ->name('verification.send'); + + Route::get('confirm-password', [ConfirmablePasswordController::class, 'show']) + ->name('password.confirm'); + + Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); + + Route::put('password', [PasswordController::class, 'update'])->name('password.update'); + + Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) + ->name('logout'); +}); diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..1c06c4e --- /dev/null +++ b/routes/web.php @@ -0,0 +1,42 @@ +id)->count(); + $chatCount = \App\Models\ChatHistory::where('user_id', $user->id)->count(); + + return view('dashboard', [ + 'recommendationCount' => $recommendationCount, + 'chatCount' => $chatCount + ]); +})->middleware(['auth', 'verified'])->name('dashboard'); + +Route::middleware('auth')->group(function () { + // Profile Routes + Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); + Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); + Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + + // Rekomendasi Routes + Route::get('/rekomendasi', [RekomendasiController::class, 'index'])->name('rekomendasi.index'); + Route::post('/rekomendasi/proses', [RekomendasiController::class, 'proses'])->name('rekomendasi.proses'); + + // Chatbot Routes + Route::get('/chatbot', [ChatbotController::class, 'index'])->name('chatbot.index'); + Route::post('/chatbot/send', [ChatbotController::class, 'send'])->name('chatbot.send'); + + // History Routes + Route::get('/history/rekomendasi', [RekomendasiController::class, 'historyRekomendasi'])->name('history.rekomendasi'); + Route::get('/history/chat', [ChatbotController::class, 'historyChat'])->name('history.chat'); +}); + +require __DIR__.'/auth.php'; \ No newline at end of file diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..c29eb1a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,21 @@ +import defaultTheme from 'tailwindcss/defaultTheme'; +import forms from '@tailwindcss/forms'; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + ], + + theme: { + extend: { + fontFamily: { + sans: ['Figtree', ...defaultTheme.fontFamily.sans], + }, + }, + }, + + plugins: [forms], +}; diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..cc68301 --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,21 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 0000000..0303b29 --- /dev/null +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,55 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen(): void + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } + + public function test_users_can_not_authenticate_with_invalid_password(): void + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } + + public function test_users_can_logout(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/logout'); + + $this->assertGuest(); + $response->assertRedirect('/'); + } +} diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 0000000..ba19d9c --- /dev/null +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,65 @@ +create([ + 'email_verified_at' => null, + ]); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified(): void + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash(): void + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 0000000..ff85721 --- /dev/null +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password(): void + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 0000000..aa50350 --- /dev/null +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,73 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token(): void + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect(route('login')); + + return true; + }); + } +} diff --git a/tests/Feature/Auth/PasswordUpdateTest.php b/tests/Feature/Auth/PasswordUpdateTest.php new file mode 100644 index 0000000..ca28c6c --- /dev/null +++ b/tests/Feature/Auth/PasswordUpdateTest.php @@ -0,0 +1,51 @@ +create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertTrue(Hash::check('new-password', $user->refresh()->password)); + } + + public function test_correct_password_must_be_provided_to_update_password(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->put('/password', [ + 'current_password' => 'wrong-password', + 'password' => 'new-password', + 'password_confirmation' => 'new-password', + ]); + + $response + ->assertSessionHasErrorsIn('updatePassword', 'current_password') + ->assertRedirect('/profile'); + } +} diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 0000000..30829b1 --- /dev/null +++ b/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,32 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register(): void + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..8364a84 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,19 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/Feature/ProfileTest.php b/tests/Feature/ProfileTest.php new file mode 100644 index 0000000..252fdcc --- /dev/null +++ b/tests/Feature/ProfileTest.php @@ -0,0 +1,99 @@ +create(); + + $response = $this + ->actingAs($user) + ->get('/profile'); + + $response->assertOk(); + } + + public function test_profile_information_can_be_updated(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $user->refresh(); + + $this->assertSame('Test User', $user->name); + $this->assertSame('test@example.com', $user->email); + $this->assertNull($user->email_verified_at); + } + + public function test_email_verification_status_is_unchanged_when_the_email_address_is_unchanged(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->patch('/profile', [ + 'name' => 'Test User', + 'email' => $user->email, + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/profile'); + + $this->assertNotNull($user->refresh()->email_verified_at); + } + + public function test_user_can_delete_their_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->delete('/profile', [ + 'password' => 'password', + ]); + + $response + ->assertSessionHasNoErrors() + ->assertRedirect('/'); + + $this->assertGuest(); + $this->assertNull($user->fresh()); + } + + public function test_correct_password_must_be_provided_to_delete_account(): void + { + $user = User::factory()->create(); + + $response = $this + ->actingAs($user) + ->from('/profile') + ->delete('/profile', [ + 'password' => 'wrong-password', + ]); + + $response + ->assertSessionHasErrorsIn('userDeletion', 'password') + ->assertRedirect('/profile'); + + $this->assertNotNull($user->fresh()); + } +} diff --git a/tests/Feature/RekomendasiTest.php b/tests/Feature/RekomendasiTest.php new file mode 100644 index 0000000..d8ee571 --- /dev/null +++ b/tests/Feature/RekomendasiTest.php @@ -0,0 +1,50 @@ +create(); + $this->seed(\Database\Seeders\PolijeMajorSeeder::class); + + $payload = [ + 'mtk' => 95, + 'fisika' => 90, + 'kimia' => 85, + 'minat' => 'Saya suka coding dan membuat aplikasi web', + 'cita_cita' => 'Programmer', + 'pref_studi' => 'Praktikum', + ]; + + $response = $this->actingAs($user)->post(route('rekomendasi.proses'), $payload); + $response->assertStatus(200); + $response->assertSee('Teknologi Informasi'); + } + + public function test_high_language_prefers_bahasa_komunikasi() + { + $user = User::factory()->create(); + $this->seed(\Database\Seeders\PolijeMajorSeeder::class); + + $payload = [ + 'mtk' => 70, + 'bahasa' => 88, + 'minat' => 'Saya suka menulis dan komunikasi', + 'cita_cita' => 'Jurnalis', + 'pref_studi' => 'Teori', + ]; + + $response = $this->actingAs($user)->post(route('rekomendasi.proses'), $payload); + $response->assertStatus(200); + $response->assertSee('Bahasa, Komunikasi dan Pariwisata'); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/tests/Unit/RekomendasiAlgorithmTest.php b/tests/Unit/RekomendasiAlgorithmTest.php new file mode 100644 index 0000000..4e35788 --- /dev/null +++ b/tests/Unit/RekomendasiAlgorithmTest.php @@ -0,0 +1,130 @@ +mapMinat($minatRaw); + + $this->assertEquals('Logika & Komputer', $minatMapped); + } + + public function test_minat_mapping_alam_tanaman() + { + $minatRaw = strtolower('pertanian dan bercocok tanam'); + $minatMapped = $this->mapMinat($minatRaw); + + $this->assertEquals('Alam & Tanaman', $minatMapped); + } + + public function test_minat_mapping_bisnis() + { + $minatRaw = strtolower('bisnis dan entrepreneur'); + $minatMapped = $this->mapMinat($minatRaw); + + $this->assertEquals('Manajemen & Bisnis', $minatMapped); + } + + /** + * Test Nilai Kategorisasi + */ + public function test_nilai_kategori_tinggi() + { + $nilai = [85, 90, 88]; + $average = array_sum($nilai) / count($nilai); + + $katNilai = $average >= 85 ? 'Tinggi' : ($average >= 70 ? 'Sedang' : 'Rendah'); + $this->assertEquals('Tinggi', $katNilai); + } + + public function test_nilai_kategori_sedang() + { + $nilai = [70, 75, 80]; + $average = array_sum($nilai) / count($nilai); + + $katNilai = $average >= 85 ? 'Tinggi' : ($average >= 70 ? 'Sedang' : 'Rendah'); + $this->assertEquals('Sedang', $katNilai); + } + + public function test_nilai_kategori_rendah() + { + $nilai = [50, 55, 60]; + $average = array_sum($nilai) / count($nilai); + + $katNilai = $average >= 85 ? 'Tinggi' : ($average >= 70 ? 'Sedang' : 'Rendah'); + $this->assertEquals('Rendah', $katNilai); + } + + /** + * Test Prestasi Scoring + */ + public function test_prestasi_scoring_tinggi() + { + $prestasiRaw = 'Juara Lomba Coding Nasional'; + $score = $this->scorePrestasiScore($prestasiRaw); + + $this->assertGreaterThanOrEqual(0.85, $score); + } + + public function test_prestasi_scoring_sedang() + { + $prestasiRaw = 'Finalis Olimpiade Sains'; + $score = $this->scorePrestasiScore($prestasiRaw); + + $this->assertGreaterThanOrEqual(0.70, $score); + } + + public function test_prestasi_scoring_minimal() + { + $prestasiRaw = 'Mengikuti workshop'; + $score = $this->scorePrestasiScore($prestasiRaw); + + $this->assertLessThanOrEqual(0.65, $score); + } + + /** + * Helper Functions + */ + private function mapMinat(string $minatRaw): string + { + if (preg_match('/(coding|komputer|laptop|web|aplikasi|logika|programming|software|development)/', $minatRaw)) { + return 'Logika & Komputer'; + } elseif (preg_match('/(tanam|kebun|sawah|hewan|ternak|alam|pertanian|agri)/', $minatRaw)) { + return 'Alam & Tanaman'; + } elseif (preg_match('/(obat|sakit|rawat|medis|gizi|sehat|kesehatan|perawat|dokter)/', $minatRaw)) { + return 'Pelayanan & Kesehatan'; + } elseif (preg_match('/(bisnis|uang|jual|kantor|hitung|ekonomi|dagang|usaha|entrepreneur)/', $minatRaw)) { + return 'Manajemen & Bisnis'; + } elseif (preg_match('/(mesin|bengkel|listrik|las|robot|motor|teknik|otomasi|elektronik)/', $minatRaw)) { + return 'Mesin & Listrik'; + } + return 'Umum'; + } + + private function scorePrestasiScore(string $prestasiRaw): float + { + if (empty($prestasiRaw)) { + return 0.0; + } + + if (preg_match('/(juara|menang|champion|first|gold|emas|terbaik)/', $prestasiRaw)) { + return 0.90; + } elseif (preg_match('/(finalis|semifinal|peringkat|ranking|podium|medali|silver|perak)/', $prestasiRaw)) { + return 0.75; + } elseif (preg_match('/(sertifikat|training|kursus|workshop|peserta|mengikuti)/', $prestasiRaw)) { + return 0.60; + } + + return 0.30; + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..89f26f5 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,14 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: [ + 'resources/css/app.css', + 'resources/js/app.js', + ], + refresh: true, + }), + ], +});