From 5545a3e1c59f9ad0cac1a59c8dff1177c6faceaa Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 5 Mar 2023 19:50:17 +0600 Subject: [PATCH 01/90] Added the .idea folder to ignore. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9d5dff3..3344e32 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,4 @@ Homestead.yaml Homestead.json /.vagrant .phpunit.result.cache - +/.idea -- 2.45.2 From 15225e860c952714fdf003578c3a1dade10cc60a Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 5 Mar 2023 20:14:04 +0600 Subject: [PATCH 02/90] Install Laravel. --- .editorconfig | 18 + .env.example | 58 + .gitattributes | 11 + .gitignore | 38 +- README.md | 66 +- app/Console/Kernel.php | 27 + app/Exceptions/Handler.php | 48 + app/Http/Controllers/Controller.php | 12 + 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/Models/User.php | 44 + app/Providers/AppServiceProvider.php | 24 + app/Providers/AuthServiceProvider.php | 26 + app/Providers/BroadcastServiceProvider.php | 19 + app/Providers/EventServiceProvider.php | 38 + app/Providers/RouteServiceProvider.php | 48 + artisan | 53 + bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + composer.json | 66 + composer.lock | 7823 +++++++++++++++++ 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 | 123 + config/mail.php | 124 + config/queue.php | 93 + config/sanctum.php | 67 + config/services.php | 34 + config/session.php | 201 + config/view.php | 36 + database/.gitignore | 1 + database/factories/UserFactory.php | 38 + .../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 + database/seeders/DatabaseSeeder.php | 22 + docker-compose.yml | 27 + docker/dev/angie/config/default.conf | 36 + docker/dev/php/Dockerfile | 85 + docker/dev/php/config/php.ini | 8 + docker/dev/php/config/xdebug.ini | 4 + docker/dev/php/start.sh | 22 + package.json | 12 + phpunit.xml | 31 + public/.htaccess | 21 + public/favicon.ico | 0 public/index.php | 55 + public/robots.txt | 2 + resources/css/app.css | 0 resources/js/app.js | 1 + resources/js/bootstrap.js | 32 + resources/views/welcome.blade.php | 140 + routes/api.php | 19 + routes/channels.php | 18 + routes/console.php | 19 + routes/web.php | 18 + 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 + tests/CreatesApplication.php | 21 + tests/Feature/ExampleTest.php | 19 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 16 + vite.config.js | 11 + 85 files changed, 11048 insertions(+), 23 deletions(-) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 app/Console/Kernel.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/Controller.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/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 100755 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/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/seeders/DatabaseSeeder.php create mode 100644 docker-compose.yml create mode 100644 docker/dev/angie/config/default.conf create mode 100644 docker/dev/php/Dockerfile create mode 100644 docker/dev/php/config/php.ini create mode 100644 docker/dev/php/config/xdebug.ini create mode 100755 docker/dev/php/start.sh create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/favicon.ico 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/welcome.blade.php create mode 100644 routes/api.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 tests/CreatesApplication.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.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 index 3344e32..7fe978f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,19 @@ -# ---> Laravel -/vendor/ -node_modules/ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json npm-debug.log yarn-error.log - -# Laravel 4 specific -bootstrap/compiled.php -app/storage/ - -# Laravel 5 & Lumen specific -public/storage -public/hot - -# Laravel 5 & Lumen specific with changed public path -public_html/storage -public_html/hot - -storage/*.key -.env -Homestead.yaml -Homestead.json -/.vagrant -.phpunit.result.cache +/.fleet /.idea +/.vscode diff --git a/README.md b/README.md index 2351c69..3ed385a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,66 @@ -# Service_captcha +

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/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 @@ + + */ + 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/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..23b4063 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,44 @@ + + */ + protected $fillable = [ + 'name', + 'email', + 'password', + ]; + + /** + * 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', + ]; +} 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 + { + // + } +} 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..bc49109 --- /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/artisan b/artisan new file mode 100755 index 0000000..67a3329 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +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..4958668 --- /dev/null +++ b/composer.json @@ -0,0 +1,66 @@ +{ + "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/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": { + "laravel": { + "dont-discover": [] + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true, + "php-http/discovery": true + } + }, + "minimum-stability": "stable", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..6528661 --- /dev/null +++ b/composer.lock @@ -0,0 +1,7823 @@ +{ + "_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": "121ea3a2fffe49b3ef9aa4d064b28c19", + "packages": [ + { + "name": "brick/math", + "version": "0.10.2", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" + }, + "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", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.10.2" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2022-08-10T22:54:19+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "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.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "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.0.6" + }, + "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": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" + }, + "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.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%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-15T16:57:16+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "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.3.2" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-09-10T18:51:20+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" + }, + "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.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-14T14:17:03+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-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.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "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.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-02-25T20:23:15+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", + "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.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "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 + }, + "branch-alias": { + "dev-master": "7.5-dev" + } + }, + "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.5.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": "2022-08-28T15:39:27+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "b94b2807d85443f9719887892882d0329d1e2598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "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/1.5.2" + }, + "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": "2022-08-28T14:55:35+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "67c26b443f348a51926030c83481b85718457d3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.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.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "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.4.3" + }, + "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": "2022-10-26T14:07:24+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "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.1" + }, + "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": "2021-10-07T12:57:01+00:00" + }, + { + "name": "laravel/framework", + "version": "v10.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "3799f7f3118d57dc5d3dfaabde69a912fff65a7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/3799f7f3118d57dc5d3dfaabde69a912fff65a7e", + "reference": "3799f7f3118d57dc5d3dfaabde69a912fff65a7e", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "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/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.62.1", + "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.2", + "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": { + "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", + "orchestra/testbench-core": "^8.0", + "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4" + }, + "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/helpers.php", + "src/Illuminate/Events/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": "2023-03-02T14:55:50+00:00" + }, + { + "name": "laravel/sanctum", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sanctum.git", + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/d09d69bac55708fcd4a3b305d760e673d888baf9", + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9", + "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.0|^8.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Sanctum\\SanctumServiceProvider" + ] + } + }, + "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-01-13T15:41:49+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "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": "2023-01-30T18:31:20+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "reference": "04a2d3bd0d650c0764f70bf49d1ee39393e4eb10", + "shasum": "" + }, + "require": { + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.2.5|^8.0", + "psy/psysh": "^0.10.4|^0.11.1", + "symfony/var-dumper": "^4.3.4|^5.0|^6.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpunit/phpunit": "^8.5.8|^9.3.3" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "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.8.1" + }, + "time": "2023-02-15T16:40:09+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "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.30.0", + "commonmark/commonmark.js": "0.30.0", + "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", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-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": "2023-02-15T14:07: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.12.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "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", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "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.12.3" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-02-18T15:32:41+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "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.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "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@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "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.3.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:46:10+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.66.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "496712849902241f04902033b0441b269effe001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "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": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "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": "2023-01-29T18:53:47+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "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.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.3" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "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()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "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.0.0" + }, + "time": "2023-02-02T10:41:53+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-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/v4.15.3" + }, + "time": "2023-01-16T22:05:37+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "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.15.1" + }, + "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": "2023-02-08T01:06:31+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "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.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+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.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.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": "http://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/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.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": "http://www.php-fig.org/" + } + ], + "description": "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/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.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": "http://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/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "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.0" + }, + "time": "2021-07-14T16:46:02+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.11.12", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/52cb7c47d403c31c0adc9bf7710fc355f93c20f7", + "reference": "52cb7c47d403c31c0adc9bf7710fc355f93c20f7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^4.0 || ^3.1", + "php": "^8.0 || ^7.0.8", + "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^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" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.11.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", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.11.12" + }, + "time": "2023-01-29T21:24:40+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.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" + }, + "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.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.7.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", + "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "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.7.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-01-12T18:13:24+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.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", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "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.2.7" + }, + "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": "2023-02-25T17:00:03+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "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/v6.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.2.1" + }, + "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": "2023-03-01T10:25:55+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "61e90f94eb014054000bc902257d2763fac09166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/61e90f94eb014054000bc902257d2763fac09166", + "reference": "61e90f94eb014054000bc902257d2763fac09166", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.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.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "404b307de426c1c488e5afad64403e5f145e82a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5", + "reference": "404b307de426c1c488e5afad64403e5f145e82a5", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "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/v6.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.2.1" + }, + "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": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.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.2.7" + }, + "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": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "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.2.7" + }, + "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": "2023-02-21T10:54:55+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", + "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.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "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", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "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.2.7" + }, + "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": "2023-02-28T13:26:41+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4f84c633b72ec70efc50b8016871c3bc43e691e", + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e", + "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", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "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", + "symfony/http-client": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "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.2.7" + }, + "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": "2023-02-21T10:35:38+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e", + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "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.2" + }, + "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", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "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.2.7" + }, + "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": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "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 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/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.27.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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "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.2.7" + }, + "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": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "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", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "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.2.7" + }, + "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": "2023-02-14T08:53:37+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.2.1" + }, + "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": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.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/v6.2.7" + }, + "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": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/90db1c6138c90527917671cd9ffa9e8b359e3a73", + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "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.2.7" + }, + "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": "2023-02-24T10:42:00+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", + "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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.2.1" + }, + "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": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.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.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "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.2.7" + }, + "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": "2023-02-24T10:42:00+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-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.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "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": "http://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.1" + }, + "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": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.21.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", + "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", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "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.21.0" + }, + "time": "2022-12-13T13:54:32+00:00" + }, + { + "name": "filp/whoops", + "version": "2.15.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "3e8aebbca9f0ae6f618962c4ad514077fd365ab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/3e8aebbca9f0ae6f618962c4ad514077fd365ab3", + "reference": "3e8aebbca9f0ae6f618962c4ad514077fd365ab3", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^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.15.0" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2023-03-03T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.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.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "e48e3fadd7863d6b7d03464f5c4f211a828b890f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/e48e3fadd7863d6b7d03464f5c4f211a828b890f", + "reference": "e48e3fadd7863d6b7d03464f5c4f211a828b890f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.14.4", + "illuminate/view": "^10.0.0", + "laravel-zero/framework": "^10.0.0", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.4.0", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^1.22.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": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2023-02-21T15:44:57+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.21.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "fd8d04bc546457b504aa2b3c2d541840551f836f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/fd8d04bc546457b504aa2b3c2d541840551f836f", + "reference": "fd8d04bc546457b504aa2b3c2d541840551f836f", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^7.3|^8.0", + "symfony/yaml": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "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": "2023-03-01T23:07:57+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "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": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "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", + "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.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v7.1.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/2b97fed4950cf0ff148c18b853975ec8ea135e90", + "reference": "2b97fed4950cf0ff148c18b853975ec8ea135e90", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.14.6", + "nunomaduro/termwind": "^1.15.1", + "php": "^8.1.0", + "symfony/console": "^6.2.7" + }, + "require-dev": { + "brianium/paratest": "^7.1.0", + "laravel/framework": "^10.2.0", + "laravel/pint": "^1.6.0", + "laravel/sail": "^1.21.1", + "laravel/sanctum": "^3.2.1", + "laravel/tinker": "^2.8.1", + "nunomaduro/larastan": "^2.4.1", + "orchestra/testbench-core": "^8.0.3", + "pestphp/pest": "^2.0.0", + "phpunit/phpunit": "^10.0.14", + "sebastian/environment": "^6.0.0", + "spatie/laravel-ignition": "^2.0.0" + }, + "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": "2023-03-03T10:00:22+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "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.3" + }, + "time": "2021-07-20T11:28:43+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.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "b9c21a93dd8c8eed79879374884ee733259475cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b9c21a93dd8c8eed79879374884ee733259475cc", + "reference": "b9c21a93dd8c8eed79879374884ee733259475cc", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.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 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", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-25T05:35:03+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "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", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-10T16:53:14+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.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "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", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:46+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.0.14", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "7065dbebcb0f66cf16a45fc9cfc28c2351e06169" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7065dbebcb0f66cf16a45fc9cfc28c2351e06169", + "reference": "7065dbebcb0f66cf16a45fc9cfc28c2351e06169", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.0", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.0-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", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.14" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-03-01T05:37:49+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "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", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+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.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^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" + }, + { + "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", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "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": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:47+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^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": "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", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:00:31+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "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": "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", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:03:04+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "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" + }, + { + "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", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:49+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "aab257c712de87b90194febd52e4d184551c2d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "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": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:38+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "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", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:02+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.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "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" + }, + { + "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", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+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.4.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/ec4dd16476b802dbdc6b4467f84032837e316b8c", + "reference": "ec4dd16476b802dbdc6b4467f84032837e316b8c", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" + }, + "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": { + "source": "https://github.com/spatie/backtrace/tree/1.4.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2023-03-04T08:57:24+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", + "reference": "3e5dd5ac4928f3d2d036bd02de5eb83fd0ef1f42", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0", + "php": "^8.0", + "spatie/backtrace": "^1.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1.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.3.5" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-01-23T15:58:46+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "cc09114b7057bd217b676f047544b33f5b6247e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/cc09114b7057bd217b676f047544b33f5b6247e6", + "reference": "cc09114b7057bd217b676f047544b33f5b6247e6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/flare-client-php": "^1.1", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "symfony/process": "^5.4|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.4.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": "2023-02-28T16:49:47+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "70c0e2a22c5c4b691a34db8c98bd6d695660a97a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/70c0e2a22c5c4b691a34db8c98bd6d695660a97a", + "reference": "70c0e2a22c5c4b691a34db8c98bd6d695660a97a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0", + "php": "^8.1", + "spatie/flare-client-php": "^1.3.5", + "spatie/ignition": "^1.4.3", + "symfony/console": "^6.2.3", + "symfony/var-dumper": "^6.2.3" + }, + "require-dev": { + "livewire/livewire": "^2.11", + "mockery/mockery": "^1.5.1", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^1.22.3", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + }, + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "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": "2023-01-24T07:20:39+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "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/v6.2.7" + }, + "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": "2023-02-16T09:57:23+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "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.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34: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.3.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..ef76a7e --- /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..9548c15 --- /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 expiry 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..4c3df4c --- /dev/null +++ b/config/logging.php @@ -0,0 +1,123 @@ + 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'), + 'facility' => LOG_USER, + ], + + '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..542d98c --- /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", "ses-v2", + | "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/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..0ace530 --- /dev/null +++ b/config/services.php @@ -0,0 +1,34 @@ + [ + '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'), + ], + +]; 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..a6ecc0a --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,38 @@ + + */ +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. + */ + 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/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/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..16ef840 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3' +services: + web: + image: docker.angie.software/angie + volumes: + - ./docker/dev/angie/config/default.conf:/etc/angie/http.d/default.conf + - ./:/var/www/html + ports: + - ${DOCKER_ANGIE_PORT}:80 + #restart: always + depends_on: + - app + - redis + app: + image: service-captcha-laravel + container_name: service-captcha-laravel-www + build: ./docker/dev/php + #restart: always + user: 1000:1000 + volumes: + - ./docker/dev/php/config/php.ini:/usr/local/etc/php/conf.d/php.ini + - ./docker/dev/php/config/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini + - ./:/var/www/html + expose: + - "9000" + redis: + image: redis:3.0-alpine diff --git a/docker/dev/angie/config/default.conf b/docker/dev/angie/config/default.conf new file mode 100644 index 0000000..c2de888 --- /dev/null +++ b/docker/dev/angie/config/default.conf @@ -0,0 +1,36 @@ +server { + listen 80 default_server; + listen [::]:80 default_server; + server_name localhost; + + client_max_body_size 1024M; + + root /var/www/html/public; + + location / { + # try to serve file directly, fallback to index.php + try_files $uri /index.php$is_args$args; + } + + location ~ ^/index\.php(/|$) { + fastcgi_pass app:9000; + fastcgi_split_path_info ^(.+\.php)(/.*)$; + include fastcgi_params; + + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT $realpath_root; + # Prevents URIs that include the front controller. This will 404: + # http://domain.tld/index.php/some-path + # Remove the internal directive to allow URIs like this + internal; + } + + # return 404 for all other php files not matching the front controller + # this prevents access to other php files you don't want to be accessible. + location ~ \.php$ { + return 404; + } + + error_log /var/log/angie/project_error.log; + access_log /var/log/angie/project_access.log; +} diff --git a/docker/dev/php/Dockerfile b/docker/dev/php/Dockerfile new file mode 100644 index 0000000..6b3dcb1 --- /dev/null +++ b/docker/dev/php/Dockerfile @@ -0,0 +1,85 @@ +FROM php:8.2-fpm + +# Set working directory +WORKDIR /var/www/html + +# Install dependencies +RUN apt-get update \ + && apt-get install -y \ + apt-utils \ + man \ + curl \ + git \ + bash \ + vim \ + zip unzip \ + acl \ + iproute2 \ + dnsutils \ + fonts-freefont-ttf \ + fontconfig \ + dbus \ + openssh-client \ + sendmail \ + libfreetype6-dev \ + libjpeg62-turbo-dev \ + icu-devtools \ + libicu-dev \ + libmcrypt4 \ + libmcrypt-dev \ + libpng-dev \ + zlib1g-dev \ + libxml2-dev \ + libzip-dev \ + libonig-dev \ + graphviz \ + libcurl4-openssl-dev \ + pkg-config \ + libldap2-dev \ + libpq-dev \ + libbz2-dev \ + libwebp-dev + +RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - +RUN apt-get -y install nodejs + +# Clear cache +RUN apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install extensions +RUN docker-php-ext-configure intl --enable-intl && \ + docker-php-ext-configure bcmath --enable-bcmath && \ + docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp && \ + docker-php-ext-install -j$(nproc) gd && \ + docker-php-ext-install bcmath &&\ + docker-php-ext-install pdo \ + pgsql pdo_pgsql \ + mysqli pdo_mysql \ + intl iconv mbstring \ + zip pcntl \ + exif opcache bz2 \ + calendar \ + && pecl install -o -f redis \ + && rm -rf /tmp/pear \ + && docker-php-ext-enable redis \ + && docker-php-source delete + +# Install composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Add user for laravel application +RUN groupadd -g 1000 www +RUN useradd -u 1000 -ms /bin/bash -g www www + +# Copy existing application directory contents +COPY . /var/www + +# Copy existing application directory permissions +COPY --chown=www:www . /var/www + +# Change current user to www +USER www + +COPY start.sh /usr/local/bin/start + +CMD ["/usr/local/bin/start"] diff --git a/docker/dev/php/config/php.ini b/docker/dev/php/config/php.ini new file mode 100644 index 0000000..d528b29 --- /dev/null +++ b/docker/dev/php/config/php.ini @@ -0,0 +1,8 @@ +date.timezone = Asia/Almaty + +display_errors = 1 +error_reporting = E_ALL +post_max_size = 1024m +upload_max_filesize = 1024m +memory_limit = 512M + diff --git a/docker/dev/php/config/xdebug.ini b/docker/dev/php/config/xdebug.ini new file mode 100644 index 0000000..9013d57 --- /dev/null +++ b/docker/dev/php/config/xdebug.ini @@ -0,0 +1,4 @@ +xdebug.remote_enable = 1 +xdebug.remote_autostart = 1 +xdebug.remote_connect_back = 1 +xdebug.remote_idekey = PHPSTORM \ No newline at end of file diff --git a/docker/dev/php/start.sh b/docker/dev/php/start.sh new file mode 100755 index 0000000..91c0f3e --- /dev/null +++ b/docker/dev/php/start.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +set -e +role=${CONTAINER_ROLE:-app} +if [ "$role" = "app" ]; then + exec php-fpm +elif [ "$role" = "queue" ]; then + echo "Running the queue..." +# php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10 --max-time=3600 + php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10 +elif [ "$role" = "websockets" ]; then + echo "Running the websockets..." + php /var/www/html/artisan websockets:serve +elif [ "$role" = "scheduler" ]; then + while [ true ] + do + php /var/www/html/artisan schedule:run --verbose --no-interaction & + sleep 60 + done +else + echo "Could not match the container role \"$role\"" + exit 1 +fi diff --git a/package.json b/package.json new file mode 100644 index 0000000..3a76ed0 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.2", + "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/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/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..e69de29 diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..e59d6a0 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; 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/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..0406510 --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,140 @@ + + + + + + + Laravel + + + + + + + + + + + + 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/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..d259f33 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,18 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} 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/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/vite.config.js b/vite.config.js new file mode 100644 index 0000000..421b569 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,11 @@ +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, + }), + ], +}); -- 2.45.2 From 795945326e110ade8815b7048f524da9c6822585 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 5 Mar 2023 20:24:03 +0600 Subject: [PATCH 03/90] Removed the welcome template. --- resources/views/welcome.blade.php | 140 ------------------------------ 1 file changed, 140 deletions(-) delete mode 100644 resources/views/welcome.blade.php diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php deleted file mode 100644 index 0406510..0000000 --- a/resources/views/welcome.blade.php +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - Laravel - - - - - - - - - - - - -- 2.45.2 From 587679a33c5cdee3929cf855d8d8ff7e9390ff66 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 5 Mar 2023 20:26:41 +0600 Subject: [PATCH 04/90] Removed route examples. --- routes/channels.php | 4 ---- routes/console.php | 4 ---- routes/web.php | 4 ---- 3 files changed, 12 deletions(-) diff --git a/routes/channels.php b/routes/channels.php index 5d451e1..409c335 100644 --- a/routes/channels.php +++ b/routes/channels.php @@ -12,7 +12,3 @@ use Illuminate\Support\Facades\Broadcast; | used to check if an authenticated user can listen to the channel. | */ - -Broadcast::channel('App.Models.User.{id}', function ($user, $id) { - return (int) $user->id === (int) $id; -}); diff --git a/routes/console.php b/routes/console.php index e05f4c9..1e141ea 100644 --- a/routes/console.php +++ b/routes/console.php @@ -13,7 +13,3 @@ use Illuminate\Support\Facades\Artisan; | simple approach to interacting with each command's IO methods. | */ - -Artisan::command('inspire', function () { - $this->comment(Inspiring::quote()); -})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php index d259f33..83469ef 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,7 +12,3 @@ use Illuminate\Support\Facades\Route; | be assigned to the "web" middleware group. Make something great! | */ - -Route::get('/', function () { - return view('welcome'); -}); -- 2.45.2 From f49cc60f9a156c70fc78484c67512e40467806ca Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 5 Mar 2023 20:42:09 +0600 Subject: [PATCH 05/90] Renamed route api to route api v1. --- app/Providers/RouteServiceProvider.php | 4 ++-- routes/{api.php => api-v1.php} | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) rename routes/{api.php => api-v1.php} (80%) diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index bc49109..63b9098 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -28,8 +28,8 @@ class RouteServiceProvider extends ServiceProvider $this->routes(function () { Route::middleware('api') - ->prefix('api') - ->group(base_path('routes/api.php')); + ->prefix('api/v1') + ->group(base_path('routes/api-v1.php')); Route::middleware('web') ->group(base_path('routes/web.php')); diff --git a/routes/api.php b/routes/api-v1.php similarity index 80% rename from routes/api.php rename to routes/api-v1.php index 889937e..fa84410 100644 --- a/routes/api.php +++ b/routes/api-v1.php @@ -13,7 +13,3 @@ use Illuminate\Support\Facades\Route; | be assigned to the "api" middleware group. Make something great! | */ - -Route::middleware('auth:sanctum')->get('/user', function (Request $request) { - return $request->user(); -}); -- 2.45.2 From 3ddfb77508be35b2ae2627925dc4a351a748cf57 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 9 Mar 2023 23:20:34 +0600 Subject: [PATCH 06/90] Changed php 8.1 to 8.2. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 4958668..b40b2d0 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "keywords": ["framework", "laravel"], "license": "MIT", "require": { - "php": "^8.1", + "php": "^8.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.0", "laravel/sanctum": "^3.2", -- 2.45.2 From e189137f6a1bbd9c578c44e28b1f4d819310d514 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Fri, 10 Mar 2023 21:04:26 +0600 Subject: [PATCH 07/90] Added channel deprecations. --- .env.example | 4 ++-- config/logging.php | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 478972c..f0a2039 100644 --- a/.env.example +++ b/.env.example @@ -4,8 +4,8 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost -LOG_CHANNEL=stack -LOG_DEPRECATIONS_CHANNEL=null +LOG_CHANNEL=daily +LOG_DEPRECATIONS_CHANNEL=deprecations LOG_LEVEL=debug DB_CONNECTION=mysql diff --git a/config/logging.php b/config/logging.php index 4c3df4c..b3ec152 100644 --- a/config/logging.php +++ b/config/logging.php @@ -70,6 +70,12 @@ return [ 'days' => 14, ], + 'deprecations' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/deprecations.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), -- 2.45.2 From 20fbdd7a34dc095dab346949be2a53e64594659a Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 14:05:31 +0600 Subject: [PATCH 08/90] The PHP version in the composer.lock file has been updated from version 8.1 to 8.2. --- composer.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.lock b/composer.lock index 6528661..5197328 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "121ea3a2fffe49b3ef9aa4d064b28c19", + "content-hash": "d3514981a93fe871564aa46c2746bca8", "packages": [ { "name": "brick/math", @@ -7816,7 +7816,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.1" + "php": "^8.2" }, "platform-dev": [], "plugin-api-version": "2.3.0" -- 2.45.2 From 00177a134e6236b83f61d90d0a978c369e14ac4b Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 14:36:51 +0600 Subject: [PATCH 09/90] Introduced ServiceResult and ServiceResultError interfaces, and respective classes with related methods. These changes were necessary to add and handle service results throughout the app. We now have a standard way to return and handle both successes and errors from our services. This leads to cleaner, clearer, and more maintainable code. --- app/Contracts/ServiceResult.php | 9 +++++ app/Contracts/ServiceResultError.php | 12 +++++++ app/ServiceResults/ServiceResult.php | 15 +++++++++ app/ServiceResults/ServiceResultArray.php | 16 +++++++++ app/ServiceResults/ServiceResultError.php | 40 +++++++++++++++++++++++ 5 files changed, 92 insertions(+) create mode 100644 app/Contracts/ServiceResult.php create mode 100644 app/Contracts/ServiceResultError.php create mode 100644 app/ServiceResults/ServiceResult.php create mode 100644 app/ServiceResults/ServiceResultArray.php create mode 100644 app/ServiceResults/ServiceResultError.php diff --git a/app/Contracts/ServiceResult.php b/app/Contracts/ServiceResult.php new file mode 100644 index 0000000..87f87f6 --- /dev/null +++ b/app/Contracts/ServiceResult.php @@ -0,0 +1,9 @@ +data; + } +} diff --git a/app/ServiceResults/ServiceResultError.php b/app/ServiceResults/ServiceResultError.php new file mode 100644 index 0000000..26f310f --- /dev/null +++ b/app/ServiceResults/ServiceResultError.php @@ -0,0 +1,40 @@ +message; + } + + public function getCode(): ?int + { + return $this->code; + } + + public function getErrors(): array + { + return $this->errors; + } + + public function getData(): array + { + return [ + 'message' => $this->getMessage(), + 'errors' => $this->errors + ]; + } +} -- 2.45.2 From f6669e93dc306604aa538fb0f13c9387a2942631 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 17:17:44 +0600 Subject: [PATCH 10/90] Added config for captcha. --- config/captcha.php | 135 ++++++++++++ resources/captcha/backgrounds-body/1.jpg | Bin 0 -> 20662 bytes resources/captcha/backgrounds-body/2.jpg | Bin 0 -> 28304 bytes resources/captcha/backgrounds-body/3.jpg | Bin 0 -> 43447 bytes resources/captcha/backgrounds-body/4.jpg | Bin 0 -> 45342 bytes resources/captcha/backgrounds-body/5.jpg | Bin 0 -> 38924 bytes resources/captcha/backgrounds-head/01.png | Bin 0 -> 5037 bytes resources/captcha/backgrounds-head/02.png | Bin 0 -> 7780 bytes resources/captcha/backgrounds-head/03.png | Bin 0 -> 2161 bytes resources/captcha/backgrounds-head/04.png | Bin 0 -> 11105 bytes resources/captcha/backgrounds-head/05.png | Bin 0 -> 6435 bytes resources/captcha/backgrounds-head/06.png | Bin 0 -> 5779 bytes resources/captcha/backgrounds-head/07.png | Bin 0 -> 5798 bytes resources/captcha/backgrounds-head/08.png | Bin 0 -> 4751 bytes resources/captcha/backgrounds-head/09.png | Bin 0 -> 3378 bytes resources/captcha/backgrounds-head/10.png | Bin 0 -> 6535 bytes resources/captcha/backgrounds-head/11.png | Bin 0 -> 7464 bytes resources/captcha/backgrounds-head/12.png | Bin 0 -> 6993 bytes resources/captcha/backgrounds-head/r1.jpg | Bin 0 -> 2621 bytes resources/captcha/backgrounds-head/r2.jpg | Bin 0 -> 3162 bytes resources/captcha/backgrounds-head/r3.jpg | Bin 0 -> 3678 bytes resources/captcha/backgrounds-head/r4.jpg | Bin 0 -> 3190 bytes resources/captcha/backgrounds-head/r5.jpg | Bin 0 -> 4040 bytes resources/captcha/fonts/ABeeZee_regular.ttf | Bin 0 -> 46124 bytes resources/captcha/fonts/Asap_700.ttf | Bin 0 -> 30352 bytes resources/captcha/fonts/Khand_500.ttf | Bin 0 -> 319636 bytes resources/captcha/fonts/Open_Sans_regular.ttf | Bin 0 -> 217360 bytes resources/captcha/fonts/Roboto_regular.ttf | Bin 0 -> 162876 bytes resources/captcha/fonts/Ubuntu_regular.ttf | Bin 0 -> 353824 bytes .../captcha/fonts/license/LICENSE-2.0.txt | 202 ++++++++++++++++++ resources/captcha/fonts/license/OFL.txt | 1 + .../fonts/license/ubuntu-font-licence-1.0.txt | 96 +++++++++ 32 files changed, 434 insertions(+) create mode 100644 config/captcha.php create mode 100644 resources/captcha/backgrounds-body/1.jpg create mode 100644 resources/captcha/backgrounds-body/2.jpg create mode 100644 resources/captcha/backgrounds-body/3.jpg create mode 100644 resources/captcha/backgrounds-body/4.jpg create mode 100644 resources/captcha/backgrounds-body/5.jpg create mode 100644 resources/captcha/backgrounds-head/01.png create mode 100644 resources/captcha/backgrounds-head/02.png create mode 100644 resources/captcha/backgrounds-head/03.png create mode 100644 resources/captcha/backgrounds-head/04.png create mode 100644 resources/captcha/backgrounds-head/05.png create mode 100644 resources/captcha/backgrounds-head/06.png create mode 100644 resources/captcha/backgrounds-head/07.png create mode 100644 resources/captcha/backgrounds-head/08.png create mode 100644 resources/captcha/backgrounds-head/09.png create mode 100644 resources/captcha/backgrounds-head/10.png create mode 100644 resources/captcha/backgrounds-head/11.png create mode 100644 resources/captcha/backgrounds-head/12.png create mode 100644 resources/captcha/backgrounds-head/r1.jpg create mode 100644 resources/captcha/backgrounds-head/r2.jpg create mode 100644 resources/captcha/backgrounds-head/r3.jpg create mode 100644 resources/captcha/backgrounds-head/r4.jpg create mode 100644 resources/captcha/backgrounds-head/r5.jpg create mode 100644 resources/captcha/fonts/ABeeZee_regular.ttf create mode 100644 resources/captcha/fonts/Asap_700.ttf create mode 100644 resources/captcha/fonts/Khand_500.ttf create mode 100644 resources/captcha/fonts/Open_Sans_regular.ttf create mode 100644 resources/captcha/fonts/Roboto_regular.ttf create mode 100644 resources/captcha/fonts/Ubuntu_regular.ttf create mode 100644 resources/captcha/fonts/license/LICENSE-2.0.txt create mode 100644 resources/captcha/fonts/license/OFL.txt create mode 100644 resources/captcha/fonts/license/ubuntu-font-licence-1.0.txt diff --git a/config/captcha.php b/config/captcha.php new file mode 100644 index 0000000..8c45fa3 --- /dev/null +++ b/config/captcha.php @@ -0,0 +1,135 @@ + \App\Captcha\Images\Image::class, + 'types' => [ + 'string' => [ + 'class' => \App\Captcha\Types\StringType::class, + 'params' => [ + 'symbols' => [ + 'A', 'B', 'C', 'D', 'E', + 'K', 'L', 'M', 'N', 'O', + '1', '2', '3', '4', '5', + 'F', 'G', 'H', 'I', 'J', + 'P', 'Q', 'R', 'S', 'T', + 'U', 'V', 'W', 'X', 'Y', + '6', '7', '8', '9', 'Z' + ], + /** + * Set array for min and max or integer. + */ + 'length_symbols' => [3, 5], + /** + * Set array for min and max or integer. To disable it, set 0 or false or null. + */ + 'length_fake_symbols' => [0, 5], + ] + ], + ], + 'image_head' => [ + 'width' => 150, + 'height' => 40, + 'text_padding_top' => 5, + 'text_padding_left' => 10, + 'backgrounds' => [ + resource_path('captcha/backgrounds-head/01.png'), + resource_path('captcha/backgrounds-head/02.png'), + resource_path('captcha/backgrounds-head/03.png'), + resource_path('captcha/backgrounds-head/04.png'), + resource_path('captcha/backgrounds-head/05.png'), + resource_path('captcha/backgrounds-head/06.png'), + resource_path('captcha/backgrounds-head/07.png'), + resource_path('captcha/backgrounds-head/08.png'), + resource_path('captcha/backgrounds-head/09.png'), + resource_path('captcha/backgrounds-head/10.png'), + resource_path('captcha/backgrounds-head/11.png'), + resource_path('captcha/backgrounds-head/12.png'), + resource_path('captcha/backgrounds-head/r1.jpg'), + resource_path('captcha/backgrounds-head/r2.jpg'), + resource_path('captcha/backgrounds-head/r3.jpg'), + resource_path('captcha/backgrounds-head/r4.jpg'), + resource_path('captcha/backgrounds-head/r5.jpg'), + ], + 'angle' => 20, + 'fonts' => [ + resource_path('captcha/fonts/ABeeZee_regular.ttf'), + resource_path('captcha/fonts/Asap_700.ttf'), + resource_path('captcha/fonts/Khand_500.ttf'), + resource_path('captcha/fonts/Open_Sans_regular.ttf'), + resource_path('captcha/fonts/Roboto_regular.ttf'), + resource_path('captcha/fonts/Ubuntu_regular.ttf'), + ], + 'font_colors' => [ + '#2c3e50', + '#c0392b', + '#16a085', + '#c0392b', + '#8e44ad', + '#303f9f', + '#f57c00', + '#795548', + "#006600", + "#005db9", + "#aa002a", + "#875400", + "#6e3700", + "#660033", + "#fde98e", + "#60c1ff", + "#fcb08e", + "#fb88ff", + "#b4fed4", + "#cbfaa9", + ], + 'number_lines' => 3, + 'line_colors' => [], + ], + 'image_body' => [ + 'width' => 300, + 'height' => 240, + 'backgrounds' => [ + resource_path('captcha/backgrounds-body/1.jpg'), + resource_path('captcha/backgrounds-body/2.jpg'), + resource_path('captcha/backgrounds-body/3.jpg'), + resource_path('captcha/backgrounds-body/4.jpg'), + resource_path('captcha/backgrounds-body/5.jpg'), + ], + 'angle' => 50, + 'fonts' => [ + resource_path('captcha/fonts/ABeeZee_regular.ttf'), + resource_path('captcha/fonts/Asap_700.ttf'), + resource_path('captcha/fonts/Khand_500.ttf'), + resource_path('captcha/fonts/Open_Sans_regular.ttf'), + resource_path('captcha/fonts/Roboto_regular.ttf'), + resource_path('captcha/fonts/Ubuntu_regular.ttf'), + ], + 'font_colors' => [ + '#2c3e50', + '#c0392b', + '#16a085', + '#c0392b', + '#8e44ad', + '#303f9f', + '#f57c00', + '#795548', + "#006600", + "#005db9", + "#aa002a", + "#875400", + "#6e3700", + "#660033", + "#fde98e", + "#60c1ff", + "#fcb08e", + "#fb88ff", + "#b4fed4", + "#cbfaa9", + ], + /** + * Set array for min and max or integer. + */ + 'font_size' => [20, 50], + 'number_lines' => 3, + 'line_colors' => [], + ] +]; diff --git a/resources/captcha/backgrounds-body/1.jpg b/resources/captcha/backgrounds-body/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3be012976e9c4d19cb04fe07d5cf2198fb13f03 GIT binary patch literal 20662 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 K{g15jYVRLxarig@ literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-body/2.jpg b/resources/captcha/backgrounds-body/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca35458f69c1444cedc3fd13bb4df4f06ca98137 GIT binary patch literal 28304 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 z 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

RZ|P9Ya$%vkzulYSy+82mYjztigTus* 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 C<1|G8 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-body/4.jpg b/resources/captcha/backgrounds-body/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc12c2bf4e0779e078c844aa841d755caadc3af8 GIT binary patch literal 45342 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 X(-7kNmVbw5bpSKv+5Z6T(*yt6E-kz! literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-body/5.jpg b/resources/captcha/backgrounds-body/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a11044a97a5f4617f1a85ed2841eb4286e4476a GIT binary patch literal 38924 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 Nr~$R4A+?}q|JilNu$BM- literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/01.png b/resources/captcha/backgrounds-head/01.png new file mode 100644 index 0000000000000000000000000000000000000000..70c2ebb6e5128ff3097e5f9facf7fcec713af546 GIT binary patch literal 5037 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/04.png b/resources/captcha/backgrounds-head/04.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c07d146cd8f7a8cb905d3cb441755b95209054 GIT binary patch literal 11105 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 ZiUI9#waXp71MZlauow%YdIOi({{uJ<;O+nb literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/08.png b/resources/captcha/backgrounds-head/08.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab0d92620e6d7649c657e491520761fab623572 GIT binary patch literal 4751 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/09.png b/resources/captcha/backgrounds-head/09.png new file mode 100644 index 0000000000000000000000000000000000000000..63e0df959abe50454ac439bf6eec81f5fb8f6f95 GIT binary patch literal 3378 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 IM6N<$f`5C4Q~&?~ literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/10.png b/resources/captcha/backgrounds-head/10.png new file mode 100644 index 0000000000000000000000000000000000000000..8c283c569f0ff048550cfc206c97e8566a1b9982 GIT binary patch literal 6535 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/12.png b/resources/captcha/backgrounds-head/12.png new file mode 100644 index 0000000000000000000000000000000000000000..407b134454e438404b92d7975328544fb7cb77ec GIT binary patch literal 6993 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/r1.jpg b/resources/captcha/backgrounds-head/r1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff7cbcb3099dacd95db1689d9c274f7156df2101 GIT binary patch literal 2621 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/r2.jpg b/resources/captcha/backgrounds-head/r2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b53e9e0e6c86cf2c20e748eb29c7045d72503a2f GIT binary patch literal 3162 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/r3.jpg b/resources/captcha/backgrounds-head/r3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72ae2cdbb8e16b6df8132b1f3ed762d47b6d26e0 GIT binary patch literal 3678 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/backgrounds-head/r4.jpg b/resources/captcha/backgrounds-head/r4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ae567cb74855d392c63eb40d79f53be218547b5 GIT binary patch literal 3190 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 AA^-pY literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/ABeeZee_regular.ttf b/resources/captcha/fonts/ABeeZee_regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9eae6f25e4cc49edc868d45c8dc9d4f85b4a37db GIT binary patch literal 46124 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�%{B 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 Zlv{d@NF(dzyKY&^pHc!3*43K{{|g=w6#xJL literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/Asap_700.ttf b/resources/captcha/fonts/Asap_700.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6386c6bd2adc00ba4f1aeb6bc5e01e1059071885 GIT binary patch literal 30352 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/Khand_500.ttf b/resources/captcha/fonts/Khand_500.ttf new file mode 100644 index 0000000000000000000000000000000000000000..678a49178687e2fed4a35839fec9d8018ca0252f GIT binary patch literal 319636 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%0AttF5TT6yUMOTdf?LOUFPGL-hGD#QoZQ0y6UYB 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%0A0;m*W$DBZ}!O_Nz$L(@k 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/Open_Sans_regular.ttf b/resources/captcha/fonts/Open_Sans_regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..db433349b7047f72f40072630c1bc110620bf09e GIT binary patch literal 217360 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/Roboto_regular.ttf b/resources/captcha/fonts/Roboto_regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8c082c8de090865264d37594e396c4d6c0099fe4 GIT binary patch literal 162876 zcma%k2S60Z_y5f7?j21yx)lyku!B@J_FiIdpixn=VDE~(i=txhJ;rW0PAp&nY$z&% zy^FoX#PnFWz5i!+xdZ&>`~UvVynDN|d$Vs|pEt9FP(p|czC@yL*{pesn>}tu5$5!s z5Z0_^#|~ZEjLknxm`e~Loh!EN(yhta1sj|Ri|I;;=bH{)0)w~jN#0Ee-HTqL2aM=9 zy3xkg6A39h4V_*bFmb%TVq?uqLINM+`nQ8d4<0f2&+iTpQllAub8>LMaifV1amDlU zaou6?@VG(cA8nEdsq-tLH^PU+jF=oz+u4&4_vIk){g8qEVm`Jw;E3N=$Nk|$&|sHl zHwWi2IIlQl#Q4c?=EcW@b{j%me8yYw zok%=LS0WW&$4D7rZbXA~L7Y#Q;|h^BN+B45w~B>4GKfFM@+d;`iJiG4@tKK6AKrJ% z4jo#OMueD68X^-iNV|~{J)zt9HL;da)*1AY_rY+CVZ?s*S$CkbP1ZnIttN`@|)H;W!^h zrbsDdAFDx*i9<=4B%-}N*{3PMHMC2!$VACO!6QKXUNN0?6fclkQV>}pd6M$lGNe9! zQ%B4pPGUCc&b-M=p%tkNY%4^PM#5$yvN&AtNk)j%$r3S$d?(H&eZ~5uH_IaR&=xHY zAxr3QWGQ`XP8S`4e4ovcig$@O{fVp+-;kc5Z;+-n=_RZptAtE4 zNE}IKYTBTEKbg!-WRBQ^^kW}L6F>tthfEdY$wuKVY05mvD#&y^+NTKL12V`U$g`U! zjC9o0A)`P`Gwl@f?_x6&#rY?uk=^1MlAy^X?L`BbA+8`T(N`~VGg%{TBo*jqvPm2V zd3GSatP1g!639+mU!mPWhG?6SezbsWmllFwspc2b3^Gt$iLopPFa99$OfaX25v0Fx zj_ebbk|n|cGFcc(W^;bBLnMw>CBec4GL;pOKCCC1K}f+KLQJE86M*{w2hb0u+N>1h zZ%@WBPw-|ONtSjIZ}4xh)PMwo-pSGtVgzn3ognR`MWm!6=@@xNmVI^Oto1-YT4`}$(lK&0pw?p?8#1zNP@LZNja{IXiJv%kw8gH+G(nj zF48@cBuyb}wF`+sn?Vd37oyYrM2wO|zDIwnv;pLpRGLIV_xpj5TZCTV`%O|)qbKg7 zjzo%E$!4)LU^}TUeIQ%JEjUJ-aF#01FRj(CUysi~YpkF*qhRwOeleM`Y)g4hzY zn#g#_cQ9ZKWIYJ5i;&Od0M+^PrE;+6MbM)GWT&tkV|hT5MTxACY{~cVCmS_ONHb|J zX`sDE_JYqVY-)j@f8zQtko^rZLR+1LO5Z_GMv=9!)w$AWvRD&H8j7dPkCi@pl8urP zeM0VBf5p9I2q0EGM(PT!$v5KPq=#lTi2{FOG~G$KRE^XUTa(VBmc(f@Ni)p^(ohSZ zrP)E2HZ=ut!X*WIKP-9VxNL3ACd2;70)BtzH(QjcYlitsZn#6;4A8OdVU*lMXK zSxx>X{@VSd85=}~1ESyqzJV_Y7owrV@H3ij#9OnR?6H|h_G$-^I*|7g@UyRUpLmPD zq^dZc=%rSqx6}c=dkz1QLx$MYB|9Ywd-EjgHU6Zl<_>srjSSEXg{~&Te=mbyP9n{r zvwOw!q#^F_&m7DKaSrT>`+8^6Knx`FMH^C$eM^oY){JBVeC;3bu_N)^1X53PQw8xC z;7z12=ZH-R>17j!`}B~2VIH3SdEl|?zaSQI|8NvR9_5U)nsft|=o( z8nTEMeNr31LKVBK< zLrHy2Cyf0d?yW#9!Tg^lqFGM_bCia?^=p&9Kz-|(x28B}hV&y~75rj8@N+UlxCK8x2Que8i9{^FhM1@F{a<-44ujs+ByBXiKtn2-BN4<* zjX8yh<`l%nP4tWTvx>r6F&sB;8&rynjlB4iE*Ai4DuvCW=_xlz&wvrWc%MRc*OH8@aq`H zu?6@j@Mhrmz}Lag()2g;7vTMf#m9vEWGTiP#`6p0cl&r=2HoC4e?xwN{1CVY$7~^D z8^>44W-bTLpRchv)O=FOgTSw^v51@!HoK${cPYdJlspr;-v7jk4j~^bj?WWYE_W`A z|10KsEYBsmj&Qjtx`KR`=af9JEsl9^$8$MlEIf~!Wj?I{_hH;8{x^URQG6u#lZ8Ov zm`}q`E(6X2q*(nUx9#G@itK24$D{~#?&s6&4b11|d{(PR3 zTIu8W;eODUT!Jp-)yn*e`vK6$X;b_Yw|Sn6aykm;3%eFOg zGCm(f-fZz>3QsW~;QY`cN9TF9A`d?QEanF-He~T@N`8oW44=zberN3)Jmb9Jyi+ir zQ*mEn$%ic%`906UIo}oE`!&YAK*`-PAK*DV=QWotpO5l6gvfLLujnj!Zq6=w{x5$0 z|NDEyp8w&;#Uqt6&Q+dScxRbM{xAHs zA6*W=ig~AH{`udqMc4iV?|@GSD0vz5Rf!dRjs@LU=2(R?kqTvH!Q9Tc&RcZDGSA>K zO_IzvIp7{a=w&W|jO@h#^9`%M@VJC$D0YWAoki9bUA5`~_XER;3!fJtUoTl}SqVR} zn=G`(Sxc-_4H32i6Oq` zZIZY7B&%r75YL;Rh=a{N!~*k2CizF@@*G*1mC%(m!(N67vJ(;Y!~;rt$vye1PZJJnrx|JVWBSFwePp zuFdoHLff<04yHF0S>_8{I}sB>#srO|)i6O2C7g(o^}`qrMH>x1lBCfvNh2vI%9#zm znaD&@Q0~V!Zf7?9M8H2$E8-HmMjsl9Y52LM#m$0%i+H9eYPDL?1{WpeNBl;nk!)?4 z2K4Z!p#zZ#OcVqV%n6l10Z8Fj@hkO%&eQ{qMk`5Lt;Wtyi$nB_Z>`40Rtu6jt#~@W z5nrNuBmYK&4W4eJ<^KU}w05?Vs60YB!;$iA!pX#gIHPPew)}ohh?djBFX1=%Ee>q8 zwm^8cDA`K30;ic#kgm~U%osHWFA1WC+Jf8Qw^nP1zVK)eE823pamxF%<*di80$2hP zHCke8%Q?(>!WpAn#-RrC68VGG4<8VoQTXAaQTT;c&L!Lm${<9}4~2MTMCe^%1)j|L z%BkVKiFhDK{0kQ#EPh6N2H99|4iUr^AEqDx2tEC7T&6Sl%H5mFcg)8)^FwK z>Sb%2(jEUD0}Y%ZToa&4>J5qna47J9){a3?(JktYU@Zo~M3GQ;0e9Ijgjs6#yJFsGfSjFDcZi2E*?K>o|A#eT8OK_R=e0q3gN6k$lVcEG$38!f2jB2~_DuZ0~d7B&1IbQub%a^c^;IdR25e5C(&pS4Y) zTcKTHr}|K6mm*D0Hm5^VWJ#P`9NgqM4f3R8bE_+7uuH&rZebFnn+jD9n?U7rDj%+MX)G#l4Y?= z>=FAzps*5K!AbBF77I&+mBJ3eAfyVHgdE|za9gY-28zwa4q|_Clo%&25Oc&k;#2W2 ziAp-j)r)#H^qTMWo7W#+pS;`Y?e)%jcfFV1S0A7c(ue5l>g(y7>BsA5>UZh)>ksOa z^=bN3K9Y~CkB5)1kH1e%pFY0KSL5sC>*8D1*UPt>Z!6zu-+`5~e_?;0{UXX{v&n46 zNY%0GG1eUz>yIRZWRYC*n*2)4R7YK?Kdnq_(XKR_4k;Y#cAA8-erBZ$$9e%{y^FCT zwJ03xJdAajuuAw|NEXtBY#|S0C8EC=B(@MciUY*a;uJAnye8fipNW4%cFtbJtAW=n zukBvHd;N*A61`6Es`u3E^_4KzV0|6ySijfr)*rxFQ}riHjI~$cSe=WFH3nm)7%RnC z3ouql-2Aus1^vN%hHfxtBJ?c*ECkF2%m$zuN+$v0%BPC zW4dj+XgX}#W7=)nVcKk3gdQ)Ov-uq+TO1!KFco}8Eg2Qof@HvMz;^ulFTn3OZcWI` zq?e;!>R)zvk@B+L%id3WJ?%lr)2>guJni(f_4A2O8$TcUwDwcmd`Kq$KHyeX7@z%Jv%^?6wT%& z6@AbXd4X~9wM?u%T7heNu@4&_yHuf!R$J(qk(lWBu6x7Q+Uj z20f3=XM@=g7R!dRVQe^AKo+t|Y%+^uQ`l5Cjl`2hY&x64X0lmqHd)MCiY-Y3YmIu4 zfh98|JIqp$K`v!S*)evUrLr`30(O3iEJH>0G)re0ER&sKXW2P|bpm#tU4Rd`2+PPO zE6FN$kKKnqc+8%#eAb4wWu4gw_K|&JpV=372iEg|J>=FWbRkJXSD~BGofweK_ZIpH zeTh+s7W$FHLVsZZNfBbm5n&)XDhv_^qXspE94DzltT0p zVsGJyaFlvbPgvAvKkWQaq>Veq;gX(TnOf!K>Sq>aQVv8RwJoDt5_#Ofiz9`fgzE`1a2{QM z3w)sv;P0Rr1d)xfF2K1ea62Y^CFnNVu|h=d0PX_j0PX=Ep`H7J$ABk*d4PPtOSBIL zepLtyfL{YXpnW9puZ6G>_&31cXos&Q{{XmOhzEQEn9x2Q7=A^8#lY}})CujNf$CIX zErFd?fTa@Z0;q(0Rss8~K(KyG15|(|t9}owU2G4IYpFnZ3y+d25<*Z7Jzk7tnv}Yc>^GufTL6(n}JWNAVB}v z1wa<=*#dk?1+oqJE&$^r+kyX3f$UaQTA*l$EcmoencD3GwpD@b2Zqc!5YR99slatz zfX=}`Df$i{MHB$9g@q~*@IZh*3D6w@ycZy21$qEOe(+HQI~xc*6cNBz_*w!#MTB*L z-hlNg5F;@7C~O2o12BFL+I9~wd7%=Ax2k3&Z7XaSC*As#Bh0_}gNCu>$Jq_3bqj7vf1#%V`G7?S! z#sZ+P9LPD~^gZtsye~SED@#wLkFvt(Ln`aHZXi42LW=y zYKsDhSOlw<3UHq#>Qq1!BUm+5fcr4f1>lO`&I5K+f%`SlT?MW~q6eTfo_i0tj0#+* z#Ih;~vw+K~Kpp~@2l%4Tcwj$3Mf?`JE>==ONCfr=1fu;3aF7a!nnbJx2u1r_;4l>s zLx~s;sEziYf$ONi^%X0&1l2RekBSX&4B+~UijM;1PvAy?#%Ny++(ZTP7jRP*5QmA_ zOa<mI-vi5fIF%nK+nZaDsY<+JF7ssY`dty?E{r31t^zuH$Wt4*a#d2 z=mr16W&WKC+*ZWiDhMgSeN^B!BlZRK!~GiI{)NEr9RL`GcCHtr0b|hr5#X_a325hX zn+TYM_G7@4Rp2%u#;L&VM4SRxfcwh=bD1r|aR4y<1XlmmXTn#YI;PUQ6c{q0Re-q+ zIKMf)oWE<(UK5z}l=H6#fb$6a;Pxl-@oxgO25bgw!TntReEfW@(SYrM9cT{*-U;{~ z&=#-@un+B_z_53$S}Qh;6)7Sf0<;7C2uMPEIXS90=V2DOOf*ze4=%Mj{-Pv zxIB*o($HQHnA6Ik7vLn|6xtgCp9b*0xePM^XYi~{;In{pxTi5N`~|Ag1Ql5#W&tju zy(#b|0Q?1ZT@djy;0l22%T)k;hBydt4R8m2qA%{5(BZd`i{z{Vc8d_n1>lN)ekQ~VzxBdz1jxgy0Ra3H4gt>s%*XL|U=F|G z_yh3ofIo1&8~9HE=;U_m-A)BAb3Fmr@)qEA+VE&xsiq@jHw@JRsI z!$kz8c@<~^FviY-E&=vXfi4BcSUJ#T!2T)_^ygDk1)ewgfR8?XaL;mrErcr2)xa7R z2x#$jQh}}k2ETnFW4ac&tO^wN?F$}rz=|O8t)>Fq2#m3DpqqfBRiK-JVFSJc(Y}R{ zO4%yVZG`+n0ic6!M=E?)1-=XG3);VkXa_H4vkDY^G#3D%xAcI4RBvmr?HHL%>9VNf z)I8rXuR^k|(6>(w1Ff#tH;-**pwTr9th#|#^{HVHs_R=Agi0+sNBTwS7wZ?dj#;d4 zp&!yO#voQwFfI&S92KZHkS>w2`0g6%V`vmr&U!d7DynV`gUGwVFL3wbD0DEiumfPF zDbQ5IAXRUxHwgY6BRfSJW;H8kXw)pKoR5#bxgn!tq#>hOIiIMg8U~G(M$kGvwzNvE zwz@%6wT8h)?V(Ggp;0*liCVmv_tz!T&&M!p@#1oeF#^kZM#=NzlziRLsCWZ7(EK=^ z)e&6*`T3ON4Sqg;KAFB_N0D$pJK8zqm_e zY9pjK1CHB}_^y$uq@wU6zg>8J4rK%em#UIy`o{`CwNV9UO*y8!7 z8QLAH8Avr^q>ii_H9ApzA9Jc3RH>Yf*kG$8ZS_q}A2%ExW09?DS5}UM&P_urdGI!| zPrG{6%J3s8yt;20Cw`1%JL)IuFb>!J^7K{#OSu+ z*j!cZnEl+C_Ue5O_l%1N)Z=ZX+?-3>@Msv`Hto(eJ<)r1(*p7bOONi^wBLRmd>lINVnO^zmR zY!lH7K3IROi+yEFiB2+LKU-bsB zw^5ho9PGT@`MFDDm%T2ZUB|noy8h-?-)*&9l6zVAf$oPrJUu3R9P#w_9OHT1^G)gS z($h@S%C(1{cPplAD;rj|n6|Q*A^V;Zj+q;Z+ ztoIAOsBfo_)34XxKt;2IPcNSdK8Zg2eC>Qk_#W`{_nYGPuHxQGo|T4Fy60cpf2}{1 zF`#Wge89cRp_PwS=~QJ-mDg3>bhTmC&Q<%pdbjFxtM93Pqh02@wm2k?fBX+>a?wMrmlP4gu1W3>HE#CdM)d1 zs&}V;&H4-K|Jfk6!H*3-Hf+=|x#8e&GB&nrJfd-Glkg^4O?{iLY-Zamu-W`( zADfS9zP|-+(W=Gr7Vle@ZP}t_UMp>@maXQsy4c#g_3YM{+thD!wyjs&HQ%~_yZGCG z+VyF-v0Xv?@7ka1(4xcBjx{-f4;_fD5P*X?}1ONTB`x=!g@&~1FT7fO>N%w6jGn7|4eWLIyGGw_>h0LOLGK~GPxW!>6WixB_7Vy+Dg8F+Az-=Ks+KMig+xXa+dgHwih z4%r&(7&|rg@z4fC4-Ru5wsp9E__X0UBlIK2jCeKD{lEUJFtXCfz>#%Eb{si=vk>F(1TPVYZ`007oQaW`y!7;gBNXI^vB}*i#IL)BOx+j zPC|OZhb1kSEMJnbXED0ug+N$x@OQCB{x^3&7*3Vu4aYLI8i#FtMjM#W! zQ^ifun+%&iZf>wSZgbk^Pg|O9*|cTPmOr-+*qXmBVq4rcd3)dO89OTMFzm?OS$^k` zokw?m{C>#ymv;s3+V(@OACBy9yZh9h3VTNFxwg0U-cEau?(^Iix9`{eZTFuzpgl0? zK+b`W2iqQ;bTI3X{UPr|A%~hDiaIpx(40eS5551<<;PV&{*}};scll1q+Usbl13&? zNqU5TFAZ%C$;rCp&dEoUuO`1p{$g}7Rx>s;b~Jux9A{i?++j>J<{94@&4)`L4m{lA zaPPz84<{Vnb@;^L>xbW_u#_?>K`AX$dZ&y_S(5TYN^;7nl$$9(9id0c9tk?q;z;i! z6OSx8^8JytBe_Rj9WfvEI9lUq)1%)V9d|V0=+2|Zk6t_a>R9VzPmcY4ywvfE$Lk*N zbbQG1na9^0KY0An@jp}TQhicur*=pkl$w*)IW0DAX4=}cgK1~e?x+2B!sdkAiE1aB zoalOD*oiqOHk>e=$U5=(#M={pp0q#ddD8D>-IJY8_C6VVa@NUpC%-?Lbn@KEPp70) z&ZjD$YIv&csUD|Bo|<=R^{E4=GEdz-_2IP5X`j=zPj@)o>-6B$GfuBQec<$&)Avq) zIQ=DEo9>$KogSY4ZF*#SO#0~bY3Zxdx1}FVzmonu{Zoc6BOs$uMpVYwjD(Cgne8(N zW=_jomANnTOy<4JU(aaIc%2D5)AmgNGjV5@pV@OJ`^@iWrL*PFhMaAEw(r@=XIGrv za(3U@jI(#n{(Me4SMFS`bFI$xJ2&}U;R;R2XS>v-3vUX;rX60r*$olP~%|*A1RWF8L zY1w^J zd#)y3y?8bE>fNg!ax^)PIUYG)IsQ5IbDHP0%juTWJ7-|dh@1&I({twMEX~=Kb1*06 zn)aI0HP357*IHidaIMF+(bpzlOT6~OwUgIwTzi*GbIaz2fFt_ zhjX)YZ|6SC{gkK63&?Ab*CMZd-r&4hc}w!v=k3Zf>*KFayFTywrt8M*m#^Qr{{Dt^!|O)GjSe>k-I#V`&5a*#WZlTW@#e;_H*IhF z-u&ifmzzUx&bqnbX7bJKo6m0++;Y2B>sI?)J#P)VHS*S!TMKTjytVb#ky}@8y}V_* z?Qy&2?UuLu-kyAW`RxO@&);_&ZDQ?7egL&b2!a?)-k&_OAYJ z_}vb72j87_cm3VuyO-`hyZiZ``@O(>E$;Qc7kh8Qz1jDc-rIHW#J!vM-rtw*SGXU3 zzy1Be_h;VUct7R-<@?X>e|n&M5b&VEgKiIoJ(%=h?t{b!n;sY+TzZiI;Gc(%4=X*a z_pr;up$}(0T=H=J!(9&z53?RVe)!iT`$w}Mt$nof(T|VP9$k2J{n6t`?;idAm_2rU zT=ud5T)$X}j+ApcnY+5Bty5At8<|M9f` z)1^;eKKtfb(`Ox?MLp~HEcV%$XK~MFKU?%{`?F)ua-O|>CO`Ll9`wBR^Zw7LK41O( z(DMt=pFIEg!udso7gb(_y=eTR-HWIf17D1JG5y8r7rS2=Uz~oC{o?kEXD@zv@%g3Z zWrdfaFB`r5_GRSDn3tnpPJ6lP<-V6kUS__$`tsh(moI;NX?kV*%Keqks~WHBylVcc z)2pag{a(es8uKdd)$CV`Uafew;nj{;`(7o#N_}%`aVUjO*|=2|^mgvs z#J89UVOkx7xnyPJcmmN7TdaLJkugRGowKt`9fO0;KyvxFM)|f?zDwm218E*<(KU!NqLheV8Zj&9NUI_n1tr@#{AqMhTS_U&z;wxu4u1yK^6_!@5u7R3 z?gbw#3Hb<>P4(EhaQPQGjXJzwf-F;JGD(KdyCkh?I-B&xnN2qJVSVCRAHv9X^IvqT zG6Dw@_%FoSgE)ImoJO*%7U^@h+@DcKs$n27s224TLWI!pU=KHquRrazr_`BC5yNZO z9v(qAiSC~d)u>;;=QrQr8S$bE^TSkB1dqxPgAizBb^_-S3p8kR4T8>KlZ)O2Ki3e6 ze^Ga@QFIA)B!Xp31~J!AL6H@{?Q;$GfkvC6i}pH$BieKZmt2F5&fuop>yc|9 zIzwrt#f#JL1KRzy2hoj-X#WJdU5@6EAa7kH4`P1Gataw~4icR;n=#88q>kPe!?Lvu z*cT_he2mQ3mb2GZXK={n-#Y$nbfwnOGM%wZ(V4H#;GJv0w?F?jRp-W=$5yA^NL{&L?piwOyBQ&k^LFgI?)KoJ=liQmcTXKTC~m-{twZ~alufktQ1Iy^yVEM0Ww zr!!Q5!~zX|I%CzM<_bDvE$f*v%umtCus~yk;K!L45g1gdlg`~v5V6hJ*=_spID!=Bl5_AicX)3QhR)!o@Qd#Gmb9=U+GwCdiY zb;~GO8_Tj{#r1RdABb-`Z_l0tZTo@!yR~jVXi(>Zyt(`KCbXQpZ%=}z!@vRE+H{B+ z(Djcd;@BqeGy~1=#XqETD9isaLl)zqv^s}!-R>;TkbxYG(U1p=MM7pIor&8KaFeB{8`)4bYJPIb0#hm zUPdqP64awX)2LAdZ_=jc?ABNcia5X*gx$$d6mBdw5^(C$c!{O8BLXC0o=?X+u)DWm03 z`FS^ahWuiG^q4k3DodioAALrA)hBhs=DvV%7uT>*#sVTdTwGYhgx}@`Y&^jtxAYH~ z_hAxi{zM)u?`}P2BK?g9>aSyY-K*o6*7ANi26UEZ{e*7te~v`2%3XwXMa3p^%NR&t zX@f1WZD46wZlwqb?zxhu0qA(5iGu~H00P2Ce%xwq!k!fa zQB0(GQ`4K3!uqrTxgb^;sg(lmZNq$6DY-O#!@Sqw-sOm66R`$oi`bxe3oSUKRh*&q znL)K8c(j6o`uZ=gGxnQr#@6W<)TmKV%?1t7gNu2t!0R;vaYYXpb+I@dRLj$kh9qxe z(Oai$YG9$4jDr>0!3s;^d3Dq$+Tn?I7XPF;D{g~!I-|3dZg?wWY3mtAp<{l&ObFAt zgao^|1}Ju+byoaLglPBp{o8!;@y|a!7EZ}(j|c|$wF6AvVn>}tXm8;3RZ%Q*no*f5qydjke_b$IjS~G<`n9qV{ZtFI7 z<(4IvKHf^cBj1suKwTg6d*KtP^S4BdQW$wD%gD>%qzqRGQcCe_B+z(`(B8&vgpM%= z@}s_ljy04jq3NY`uqecNqra7OqpLs9&kSXBhVr@iF6JE}&=3qm$HRc18av<&d88Ee z6$_&zoL_(+U63$$t$A`{s_AUbyQxDb&ovWykZev{J7dAJ&8rfGV76c^C5y%!dU^j$ zUt@KD!_0H99v>aIc*)$E@%S?qBn)!s2wk;5fADJD%rsE@N&Sdg8aW{PD?&YNb_^B(l=I{8Q1d4%v=K^>M| z8T{S|8>j&)DxjLFm6!~KW?nPvR=84GC6hFJb43C^+{eU2y{^g$7QkANQbQCDRXQSX9A#;jYx`^Kq#(7J&pZ8hmk7 ztlS5gW}$4|AzOC~XB1`Q`W0a7&IK0$TMB>$6%(mYHUL+QP63K!5kHEO2!p%M=v$mw zg+`)eSx7Z4nS{VIErnlH$vK0=!M69~`j4G&&b@A$J+|NI_n8?#uiNx_-Kx2BR?F{3 zES&#%{$eq7#QvaKCnufCe|mD_=~_YihabOtw_wMVjq5)yOBBm496xH&qQ_WdVL*;Im}YLW8$Iow zE8k6%Pswk?gd%rp!^Rfmz-`SlougA%(kWOFVPri`6z*e9TOe9e34f0x5Q&4rM62v!-Nk$Z zy5s2tK)7FUT4=&SsJX+Gv7N`B1=#cX5IYF0v?%jCPK%UlkT@+0C1FB2(=efX!G5-w z3a8}-E9Lnaprx((FJU5NT^hFDNgYdx*rkW8^<38Ftm%T0l;hFKh+Q{a`u`fgh#J2T zydom3@hcpXhR?@)IqpT%&(L0^2SMvyDscIB6ia7 zUOTfcCnxP6-f6vjws86k+K0;DXl_gE;Pso3A;b`@<|a0v*oIrUkZW`bw&5f?1sWwA zCw^q3GuC0&`H*|AAy{WDSJZ$>Y}H&t)j*?PQJa&_*vNXu^%ibcN#Fe=!d>`?JOvFr zZiEY#qeZ6GxQP7BQ%UfdtBVVQw&+4N9=tWem1p>xY=^r?PK1Rgv{|;&)hRALw$rSR zp{}dOEYY~isj~5sd@;q|VL1)R>v^PJr3P1HKg;V6J2*V1(>{EnF+YC!-LX?-y-^iu z&DxD7Y@mPtF2C8^t;?IMKTu(HwT7nKuk%yre7ZhMj{p0kyehN0-?)I_r*sc3M_uW$ z5BYLWdHJ&SgZkRie=7XKwXr-3HWlD6wTPN6R1GM~o-Mf^=O?!p4VbIp>R>DKaskg> ziB)Tjc1j~xR{?1uccp@G)wFfd1y+48t8w1cj(+$^r^)kBbm_>-vVE`s?06C5@pMO6 zk~it5KEFh~EXtmU5+OYUv4(09q0z=kNum&mbk;^5S&O`CP^}PWA9ebr%+38MPLYiG zRN@Gp#%CXW`16PHF%uWbZ{#dmf59gCnVdm=XRKS2D8G;l=Q0LuspgY9>s&tDXZkZ? z3e|3$F?{j}ZhMmu5$?iz%9G|Q=R_N+agcfq**KzW+;`U@RP z!qAodKpAriEK@0v?)d$GBadCDhT z2KM{!FcoZ(3|r;uh0hPf^KD6^|BtR4ZJClEmQZj0{G!Po*K(c|@@EQHOj|O91*W=q z@nEiLI)9cUo;3y9@etbKP5S?zwBx_chm2loboB~Maq{x^V!cxudUXIYRwy?9N>Cl& ziYx#Ll~1tf>BoF9fhyD-9y-K_ZRCFpM*00Z2GjI-K|Q=P!sW-ASu{U=_|7mniRsdZ z#_pk^muJ$}bm-gL)JOhJHc$FXeiBrNw%n}p4liqREh@Cr60$2X&9fM-;xsH$#e9L! z8o<KfXA9$y#h+Qgj=yoN@k)SD#WM^He6@7DX>ngSFO@3Eqlw zsnf_Ae{78mB~!4iVk4%lX~d?tu@0Yz;Z0h8-8Ed(LepI{NHbBhK(kh}TXR%n+Z(iM z73M*@)Q^=jf_V$yn9j1HuhJUNH*GUrveKq#t1bD~NbPuf z`Y%FJ2(bvIgwk4^w~yO}iqneYfSzz58gLoY?EM$$@=x`YnbRZ`|dd{vP&4eoCFNsZ5Ou z+(7J5*=c9Ab5o`)cDw+ga!O%=g*ldqlhIyK!f;8~jA&LA+n|bI5xfxQ_kM*@Ho%9* zX0S3JsFVE9Kk_~rwQ<+3M0qo-YeHQ5^U}?iTUIQZvsnODBg}Sq{qr0ml`p8W@v8{Q z@zsSgg;Y5s1#z}eWl8V`C9iYaeum4`MY1vyhZWx3{Hvv8@ zUEZHbpZ!g3SIwo}b4(*?K;pg~>*f2bo$0V-$iE$*9c)_bz}~H%ws1K%B2v;3ace9j z;18-vKxM1tlyLW!g(HK8mrU?&bhHv<^e?M~Z~qe0!LrJ7O4+aGxO@u8>snv0p>XZD zte}MYv+n;qrLGUx{xmyt?}laD*3n^C2gvVVua)79&VIjs=UTR?<+b$(pN_v0H*eka zQBhL|P2Dvr`PR6LGv{rXb{qTDD5(W$tb;VPmKacCI97*@ffP?Ul!`9bW<=0+a`kk% zhB!!a`TUFIvK4(U0jKt(PZv_pD7m^>IaMOOl&C;iVofn_adXiSt=5+WAoi(s5NB~e z-e7$g@lEwxLn_lLb#pKVtkcR&26QcQ98DpW3FX0wSIM5QN zspJDZs&XIi1fz9Qe7sfx7<%`T-GYhum zOHexJRm|c>RJ_!N0U&(xteM%Tr^^dzob=|?L)!zCvAE zsVt>9VeNL{6|WylsGC_`3!KOeGW!=-Apb5MlqP&|#{i&8}^Hefj~um@=Q1SMSW;;gJnX`Ojp zN7TQ_xH{T)f9hzu_-X3OMaMdJOPRl#Ie(OIteCDLrn3q1ZP_H9%Gobh-=70ne+OB; zhpZ}))<&I|Hz-ieR4Kh#2)5=n#Y_o#5Nd^3B*I<`6yA!H$5|WV2oibyK;^hnKhU6l z;K3RUSZ$LeO*}vHk^E)+z12s5vq`c^j9t2E)-MBe~evtIm7P+ z))^V;3o3sFhn=wA8DlJ6jxUfKN~;{!s2o<9Y9ZK?$SWMSQZES(3WpVhjX%ZrTa>5} z!@xt4+j@e(SRY5>L)}>r;p~r^S>N~Rr$?pkw;griHL4N=dV9U`l$~ zYh^LRE}9Es@>;CKWOP;UM21;B2a|lUqMT47B?gs1ROz)o*bl17~S)&4pg^Iu9!G7zSja z<-B)y=L=x34;)C_->9KoU|7%ouU`uX5=Z@b+Ig*QZ2z%|1>L~$Xt}%aJ2+m3R3vka zzLosBwqWy&eWCv;L7rlN7V?z&uS?-56gQ<`PYAs=`m{6`o+Cx(cnLh>uun=e1v7L*nA{U)% z8A_0~jL?$xDVE^~N9@Q)s808J%(5%yL1}o1p3ii7?N6gj>1p$+=V=f8Nrc!@J>&gT zQ-x#e zxLCoC?*K&k-96B#vo0*a#X9SJd;`K1Q8|MK%nOt~bZzCA^+WZc4H~;fgoR@#UAS2H zOKbU}%W9jZUBnaAyLv-~ELaNoAUc2}4rGE#h!W{6CQ`!cEoqQKZ&3}#Myav5*Ck(9 zVX}!G^1;H(|5<{$ps_0|!tit!Av$e*YU%*m>8ad{-o8iwij(JQNI~C8G)AsxS`2D8 zLu%bXZOLkug<6Z4RFP0f0=MEjbS&1H#jAF6qQNqGX3{~mLqKuZID&uy8GP*$- zm6LKfDaSRF+Hj*oa8zs$exg`$y)@5$JRurS1Q|tB3%6(ZIfwfBa)qUJrAgV(JBJ^d zNMkgqL#Gdpw@-V0v}vkXck+@S+ega_P1RWT_;FK*n1b2)_nQjd;jJLdrMN9&RL-P} z(Z0}@c&bujR3!#t3E~Rv#by}F+!NlwzPMF^;*w@XztK#)Sj?=%y78Nfn-z$HUG+ki z5ellDkjphSI+U-#^&GnETBzrWdRaJY34p~z9I~aNIzJC_JTw!&cMh(IST@foEbKM? zN#Y~w9QSnPL-|A6o+V3n?_08HFALZvFP3xUQd_?)p}_^VDfb^`86VvTZA;{6(MzGN zEE#EZRpYa3QT?Wb4Jxxx3!w_3FqgWdBtgY;p<+8DzlzjqE(BSJa7`$g40%1v zJU=FNpY51SXP>8Tj^Eq0%Ype@nDamK_35U6r2CVX$oJ*X;<1}+OkY;t;5_atM++Yc z$1&`yJmWt!phV?2UoqL%KXi=%Ip!J{h2tK)+(?`ySb9NB;HbWm#xDHN|6>u(UGq-s?J9-H4D>ASfn)~ zAg~qHz>T){>P909=dbvF#n9NgsJBK8GP5)ZyVgp1I@TcM(1m3RsDwCpZW98`&Lqa^y==13`J-u+b$ zz-yHLN;QZlD#*u#%ER*x9igcgZ?;G^44ZlBJj*aO|9h+8`sD(T2tM$gX`tp`Yd{tz zDJo|{)H%|>SGyniCJ$^)yGbm^=ee~b#({iU_U=*`-tfO z{CZd3N=MxO{P_+YA#c6Sl4yeIt?3b6BM)PK%oEgj$ZZ7!sBuD8giR1uy(qycB?Gh& zrHF+mN5qlae(}wKST8HZwG=ckzkq-+Prii!bo^3qL2ftjp?EmWbS=YoHxX>Ffh`u>80M|zt60_-2#l^saFv=C+)7xeUs!Nh7u`Va+VnqyN~c%F9l)*_t)-@0!#6ZdcGdwvb+_kY1ELN@K^oy^_s32O7PdL9a^@ zy^;%;D0aPuW2bTiXx3p~;ei$L5O-f5(zULawMUNR`6nCc&6`J(zBHzG4_|lf{Pr>} z+jLy;)70x9R{W8D@>wu{{#?3J{2=&ZZJ>$KSy>xU)mKSmJa|TyYj9E~`fkPdqN439 zUuMr$gs)Q8#N=P&u2s@z4^JpdnE2tuqE@r^wW->^>yG0I-!3sUs_<=J!FKDtu+^fzMG-$qEM?KZDLRb(Og)bdiY{?a_ZU)jamfR zG&e44#-*}v-}%z=5B+Y^3O>)Cc-~xVDTPpi?cXAwUHOn{#`0g&ZCQ)5gmj~~8#iQw zcc8JaH`cimy|Ixt-5Z)ztdLV;`=J4E``93CDPh@L*(~y}Bcz^gS|5}WuuU!^EC8WO zog!IcF}8xzOq&Mm5&iP9UFBeA^TT%Azb>ABoIZ0@>>OL#kd1t}vDcO@wsWIx9&Mpw z)-N}chfUi!T`t(dv#?n6OR1Om8}i($q@j^jtIo%O31UEDrfcyS{H+z4uBgJF*l6)e!PsM(I2ADl93P?1_>5cME$@G zKi-vx4YxjnhtAm0DmNqZXviB;CUfMkZxye&1o4J2|h@$%|L-)$98lX1_fF8YZU&4o&cUaS&o$NX&=4-r#K+$+YVHE$&sycm6{ zMM7H2=J?&q@{VToKH8)uwSWAEim7`OmhGs$kb3VMQ`hvgXWNc#!{^iT)!TPXph>5? z)rybVn^n8cn5%5gx(U%yu?>PoZ5ovpiRRrGpIx24XlNh0Ev*h&V+^SK4QFG3qI38TFSNLt5LQi#>W1SaoM((e zcujt{fXzUHw}2X@UCnUbU>BG|>~wZ$a8%wRG&&dQD4+OP&y3}iRX0O8R>!R`dKqfM zf~{wT0fh%;UW2iSsc@5aB{vuB+jqg{uZn(r%Oh6O_1K_LxMM-=duZ#HQ|X(wA6(hD zSD)d-`+V2igx7&wX(Q^geXIQQj_vaMZR1YRwsaP4b0S4Pa^bvuv@1Xo(_ikG0;C|}6=Lh-W{%qPaD@)#;eO}(1ca0*!fyJ=Hf|J6_ zN@Tdv5lJ&x;mG&KtI^c5J=-YyE882eI7M=eOynmEK z{OB%GEYsJ&`?SHMCWkHz4{;bgCvky%u3x9AmCG%o4MX~1Kk^{_f5Kw$_t^aDl+QBJ z(kZl=S%#0BNhb-X1wD4};5{S^h~m8kyqi^gA_@8wKO~$^Gffp5(n-{22j2PW3C(*6 zZaHF=C=@HZ`;6fY6q65E7V+_o5-`5~3c05w?iLNS)Qya;Rz2Z0*K*b~qh8734f;T% zuexK+7dq*y^My`^>3z9m@E&1$810=x!gOJ1^)6D%%HCo82EEP@m}>|Ocofyw_uiS=-Gq?dAb}J@5~Kx4LKNvJRf>XuBGNn3dl3Yr_W%hs^o}e; zO=t;4RD^(yDxjjMprE26WN*ITxwEq~gZ%&R`+m;@o83*>d(S=h)ZaO0`L@a9Sn#3% zIcT_RRnv~Gdd`-vJjHWoh$pwPayxghc;d-F`3Lf=QzwpZP-8`%_DMnIbA!7olck0= zn;~t^Fds5rZYbnADz&KC#LG@NAj{r3pA2KjuTd(>U??VRoT~Na!C=f1)jnYd&76>ycQ4I@} z;-ww#ZLIP;^=r3ivU&^iSuvoUi!G2=4rEciU#?!~l^2FBnKY>HfYyt!zPi!^X@xxx zah6$XoGH#?S)VASqV?HIi}<@O<-lOuBvfR}oz;3Mr#cV_`y_>4iIOTT*y&xcS|UIz zzd}uwaihXSO_f?!`+F#=iu3*gHbof?@18UUAR~){2i~eG6jk}QYu>b8;}=@2-Y{X- zs>ThMZl5`A^P1L;8aG?jQR!8uT9sO<&vhR^wr@tK($6jEKk?lGRchBx9V*eOj8`s8 zW%QghDh&fAk&}jDvX8a`LkR|=j2yKrN-N28uYHR@Tx#e1D*gTnMD~7#4;o@?qxwIM zkJ0UY;fU)mL|{aZ=;=&os)bPfoc`L021i7Af+LhHOojkJd;UHn&eYA@;@f$9=Bo%d zyJu`zl`Y3T`EdA*X1o&SOfp*|aC?2+$P%_ns^mwRNsZ4$@WR4pA`WgNs|WG-V4#r* zrxYJ7O>g%D|C^Qgf%!{5{HrgEAGe{MW=aFtSh*Rz?Fd!&pbe#zJwCXxm!q%0;V~3& zHsz8swGvC|3e{Mq)B|JKM(~!@?+tRffocz=+6iq{dIrDo&N%#y^PKHz~30+lR zm9-c(0&qc3X&ALcw8+4tU_HnyBuUIgdS7|P9H{tob-8ogkrgYC9Oj=M+t96D+b-SO zzS>n%daOBFu(^58i4&U~J%5o4SIDv>yJKr#XvRN z?2GKXY{~4);%ibizD{7JY(D5wep&horxTc697z{KyMYoh%Z$U6G_S>kst%M=oDvP+o!xKjU}cvyV#IEHG~LC2T)BzX+{ z^HMK)w3sf8u3ogiMi4@2Ty&q_ML{FY8`27|4E|?dL+Ixd}yb2 zpMJb|*Y2UM7PC6AdaG0x8N=T}>JGShfsh8HHA?D^jbLvJuj`RI705X3#f4am5hZs4 zqi2M30f!U`9{^IV*?Ns76#~6c*qvfEp$y&W(d-`Q&E7!$`JvGO+&3G|53%N>`F_41uiCKI zyYFf zQ@hPyc#JT~UoGh~FK3oiRJps9)_XIc$#VGf?rWXKdhyAxt-O=Z`nDy6^2ANWhxyeW z59i4<2LnXwe_(3Sg8Brbl>o#84i9|e58D8ouVtD+N?n2ozR{(X*G6SFk-CJ<6{I}_ zgw|AMjr4%Q9@r!qkI4kG|u-=H;>Q`D@prR*7HhcjDa> zcla4RZREa@HD-Jk182-Zrm(*w1U_9qHC{wdOyWXM>FTAE7LHd-go?;-fSnKo6m>Aw zi^gf+OVGZDuu%n*lO2zot8maT95^gS(o{c%B!y)_uC`_%1hbcN3-k7!p4{R{`?CjL z-Jevc`i%4eLz^G%FsE}R1x)db!;E1lIA(U0H}(Z#~{}W9`3W?%*sNBmDP2-<%WBsWl~wX z;c7{{0GE{n^rmECNmv#DcNpm@HMFEagG6aRTuXd$)xr^ zoww!4cVFKe)VJTJMHYFn-Xhp$qo6ZQHs7FaBw`>-a0NGsiA#Uh@}eP}`QB<+L4hVy9)2 z7JV1IRmD*mv4~2rkDZmP5T76jQNcrVVR-61=1pt_mZs=BRX+xcXC`pNLwq_sUhXDKX@K^48|@kZ7#rWdrErDo;?o3{@D|xzZv0q zf~!rDIB$CkTo>Udl}l2p6h+BDxYugNn8zgRc!<>!R$1M;MO?JNfO&>>bt)bQ6u=>Y zCQAYaOA#IbNnQw1JSKR~!GZ?xA`%RIq#B<1(;*u%*BfBm-XZG}f;q zcJ?eZrBL0vov!Ei{{IjJ!F16qaLQzXAjlnh;u!z}=UVqC)1F2Ul!Zk_RivTdA5Yv@ zP+wOI!n!AeK1?eEMn)wlOpu#wC!q%oD5VRLUxYyIBEjG^LC+3`2?cnRzAh;0E`1He-~9PSHY#RQFxI#nO3ll;=bwPyK*uyx zo!0`FnJe0!mYF&RD38*-_^lPtiuLfcBvn3>!){?cODfhIxThb}6(mV)1hgHf#d9DY zbKFr#E=3BStHtzSzytwK({enp@d^8yszIBM56H{w#OB@Pwb_q9v2#3Csl{uuPuzdF zf$3ndQZY3_Xzfng`b4x{KM!vXn3WW^8^TvO1t?{ck%v=&oo95&AX^Ga64dA+Pl6b% zh`T3-+eHbcGaYGi^aOJ9f2cqWbeCJSo7m1>xLR6NabiVjy=P5Q3Glcdpk0DyBGaUc zO|PNEG;8fYtqCGYECCAq*7Fw1 zZ-PJHR2`zuN?U-%cKNs2rr$3SWB~h;#4wB))jvSg;fDl}0wp7cJbwXnOi!m00n`a7 zzwKC6r)EH6otf@b6a=0Fa^Af)FJwi)g(gb>C(BT@mQ9WPnQamB)(@cFqktpv7hamS zLUFY%%&5N*#M4*k?WV;_X>ObuIF6GuVN0-3N(cehVJtV8q8I`?mf=6*?A}AtmX%m_ zLc>{uC+>a~9KYg&3ulWSZafsS+W&;~_ngV^7kvTVmu!8D?>ed0E)tmeMJg+wNWv9< zaFjnpDLFWe z`UFH$P)z(s+b@A>rjABV-y)YfY(1aL=J53sw#$vFVwtL!pUfTF`<;QiFkLKs84KLO z(s#1ptS}TYuXYzj2PpFczc1uxKEF%asax?q)J(R5S5O&I-DRpHT_gk?qH!G_t369Q zS%48b=vLecVY892be0e{S9S5lRXxRIGLv;?6#S`S+D}GlKdCtp6%EN*#jDUFgjt2u zz5qwVs-pDJzmaf>0x_MI)NSmw`LjN*)8N#Q!k^tWoExVf8Pj~$pEJ(Yt9xepb^a)K z?VMR_*Ug@>Ua8V!S%efYOG;kLXN~OHdpN&4V*BZV?@k-iv&T?Yjr$(FeChmwD_?!J zVRqC+H1}t=wJ@uu08vfZZrOxr5mG=G30@|#+&cnD3lqr+rVS5X%UtVUY!_J}^`P>> zwqxP*{l0$Em25U3(Cs0DH)Cy`R9hVRiCFU^CaCpX#ed$i z?M7fx;pbuSL0=x}WD+Y=D{6s%M?Qn^X?L0*Kd^?`ua&!s&RNB`c?;fE%!9lIh4f1_BXm_I@BM0M7!G2&q;xT>#U) zw0DN5N?p%xT~Vh-Kun_sO?K>%cCUM}T|`pt9m-jG#}mHgU`VEa-?tQH!I&*a!ZS;p z97pGZK7sbtjtt0*L}0fREn@^5uAJv+M9@)JR9>YJ=r0U6=zXA;5&SkzfP}Iccdj|i z-U?GnWu^w%(J9YdzZHSfXTr z&i3g!nSY%+ds_sIP?q`xIM!>qLHnyPg^?JPFK7#Jy6gmf>T)ePgtg&)h zw5WnH!2rYSO6m5%%(X7X00X}CQdwo;zD%X)uo)FNRZ3_&5I1)pQ2M=~DgE_2e<5o0 z)d{Y^#WaZ;e6r=fv0mG=UreLx)fABXcebnAjmiYibq50SCrlg)Lj`It)u(I>$v4=| z;huYB`6!(bs=tV+3t*T<*M?~CgA67VDvr~TdsvzWH=T_1MtVHCr05yRfQch9$BM7B zfC-n!UHC~l=Ug{4Z+tU!%I%&N?*3zz(wcwqPx+;f<}v=$h^-$DoH)HGed8=r1nAkI z+{UbC8=|mjTIC|lJ0v%pu}+x7m^+M3l|~n(Qb@9vMh34GZiY)j%1L~OI4l8! zI+ib6y8N#p%C9B1Z!gJ$NXN`ozLWm47vpcEE2W;N-51DW8U8i~r3r$;iliP*8L8oD zhnt?t@|UgUL!Yd+zrMW$|CNQ5KwR3BMMS)R2qMZQD3iEHlF{NApYfh@R=RAz1U;6d z`g-&j!jge9YfRMZ0$kW6|wQ*iNxGbIvNUVNf;uCd}Oe9YYlBxEzQ62n{V`)KE6t)_D!S4R_@#WjTO(+=Zsgb$aU>MLU+^^ zTY<>&0k`0G<5yOmEP#}@oDd>1T5pIf+C}Jnq9skyIwYya+ z^IWY7V>>52-!(P1(hK(M1E+`8^{-dmIbd#Bt&o?h;O@PxT#ze+v#5jEiyA-=KFKqZ za->)7=xRcEEe{i5nNIMsQ_t9;8ES&mxsd;{?VZzCm)VQ?MV7)Zl2&<_4?s3!zsN}A zcE~C9{cLiO94A+k>&y1e^hZ&zQGM%&QRh4eT+g9^za_249|JRpEX zP!(~ccY8K((!Fc5SGspdYh0~bLSl{I8+Ys4q;coBUrxZw@-@;hpmK|HnKu=g#~9*w zxQC^&L0rRU6~gkSD1^Nw3SpUhuyVOLNdHZ$3MO=f=hhJwEa^&KO;1;1T=X2}N^vWk zuG6-$2p8DK+;1ya_!7qmz>Rn zB-4LZjQleI%wxYX6`|3q8hw$JEEyV zGYdtiTNd7M32Y$4T*Ybxv`?w#Zdf2s5-lKHxFf(D+K1zBQKx$kYC|Z#r~jHMkfFlR z0k6>h7@CkVY5I1l(c_)WA-}@=P;0c+N(KDAKCtN?!+(%L!35iA)km}Hpkcw$c+~5< zEln4^dREfJ^v(!g z3=BoD1b&kOA@ss)PuWCA8qkxf2GIKm&En5XAv>keLS@zyG>f7Py-Yly#EX-1LZY?S zPF~RKUuR_;I|&SN1Jx8eC}?yOAR%wKFX*7`$tlYCI!4}B)S-j)yE~w*yrgL0>eX_+ z)p7v!3sJEzkz#_)J;j!|0cX@VLI**vz0*o_nvT%(X zh+CQZt=dQ6bHi-W;M0L>35`zy*M_HrN6JvsR)v+UlUn4%DaH^IDq8Y~kZe(Xd^KA* zg%l~4W&~5{Z-tnRd#znw4Taz?N&+C?=oS+M&k&esU^N^;5h(2u`bKWJmdOhi7u(jJ zSkL)_Ma3IVoUrdad4i2lcAh+`{5`j5OZXuq4q92E_%zsdB`s4+w&Yziqd>QK>$twOL zm2%(TaH+Jsk=8sE+;A4sqdeAJTGV1|ryw##`pUdi8h+MS>ln&VYK9qkWB0Q!f81wF(W4tkyg;X~4z&+uxo#J0RHo>Eao?UVDA( z^rfg<`fjd$R=G`^SoFg{=ELf&o9E8keKL<7JMtY_U2FMdr6o=dwlgxxHVubQaic)+ z4bI7;UiAH_6>NlMa#ct%CqEsD6=+)lB}w1FTrhc4v`NdhG)qP6kSWkqNI+rA1@01h zTwu#0A&w+Rjha&Dg1g;2j-UF^x&34E#uc(YGY1S@#wss-d-{sG?<{+L%)9ne*FNZ! zUA4-|Dd+BY;pz501CI>g<9pATKcMJjTD`UJjoKt&It7hj~3#o0GyZB(3yjI3-xAqx}6mKJ6$Alarnl^JI2Qehhkcg&s|IltJ{WqU~)p zOrs~tEA)7ekc@g1%Ucc&tK9@Ki4GG{?dTM>f*&%AV%!S_O;CYi4*iI^7@nR9VWLx} z7TTm*6r@l?wfrf71?3!HpWQuYx|B7ceJ^&n&_3$gq8t35BMVuN0d?2Snz?q{#F-nF zKWFA-tbMU*-GR&bAE%O+|M5Oc{@s5Q^GUEL&vo~3o&Ds)nb%66108$76Tb&+P@-+H zDvNlQcGpFGPN$>rgGk~UY){e|h9w@$;WnqJDdnKzj?;rFV;Pu0z+JU;xWMlsI%n-t zCpZHk7J?jVxPH3&I$%636$vs2i^&`{bY*Vwho3$=*RlJZPxAiBT`*wCjEARg{miPh z>^|t#mAQK|^BR^P*KEn=z4IIQ>ePJg5~{I$hrcJEgxrm_wNQOT{PbU!z^o$J1vMP8 zPb^jn7YvWZ8tFT=jEz9uV3}~Vo<_hRG7`)VSqn=Y$UZU6B_spMJNYDEKf8CM*ZzLB zi8QcL_mourY0W;J7EfYj-BazZG5qy)-@pH6x6(~Zb!_$W&YJDgU$62~t5Q{#zc+=| zU&b0`W8I5*H<3#TK`gGM3H2yAO+ODyctkL{o=XvtR5~dZB)AT&XaJkAeoyuU&=2i) z0{Hm6-=8unqLwt?!`yT+rSG|Z0%LKY6?!)=8Du-TnT1CB^yTEn8Z(VaVzRiDA|I)!$O5UH#g1 zldGmS?6-XIqO(;iW_QiWO~&4yD}JbK#5sq-^6?X~CzJiD-#%R$igVF{8l>t?raxHM zZsf4wY{L{nY(p;{_tcGR%t0nOW?U&lSJiBwF$o`>yG>~-uX7Kp-$1a6G^41Cyly!( z(js6jVqwcrPl*m{h}KgAovZZTDHhS7$FIanz0e+C5oa)^;H=u67$+n$QZ%f>%Am?+ zj|!(_k=hhK^h4XdSqDre50{$BTL-mF?Q5 z-j=$r*R0*RQl-!|#y+o@{bZI$_m2lJP!-oJrY=x=jM|d4@*0XrzM0qnmZB*njcrAf zmlPl20ZeHPpEBZw0Z2;+g_ZIA_DAEso_m%5HR{S-seVz;+Szk**3FrfBd=S+?+4Gl zJCmgp`)B_?lesS)ymaO4&hwvw#;-z;U%_gFsGE?fr-0y3oxr-FqAEnwDp8A2 zU{+daus6P$OqGf96+W+DrRo)5=|6EKbZ~Q0z4==cNNy@^hb>QXfuV4kG!EJA;fg08sfzv2xs8Slw3BOtYe9I{ssq71s zq&6Ayu-9<1ao#J9)MW~e=zAc&n_md$FR+iJSWVRF{lEiG z+%7He!Mb5HI7(yP3AQ)YXyMmuved#0mUZgWgv8!rpi5%Nk}>3{>T45;qJRr(bSM?P zfKwz7=v=JVU>fSSNA|N69F)OM&2|p!KXB+_HgrJ$Vb0knXA~ZJ@cMHbM;|Gi0pQX1 z_s@Q}Ycs3D&u`rR?WgzQS)q;EFTC*Akz*O!C$L!HBqZBdSU_X#AHtrjfPOh)T8Bh< z0!bdr$Ko4%AxdRS3y4x#GXh=p)80gE#+XGwu_BmK7?hYG9A*oO8fEFU7jziO@U(bM zPXhA^V>uXU2Vy|tH)U+?w$k?>o&7s+?t~FjuJAt&Ez42sHFYmpKii(UL>eCHyZQ59 z|GvbUNZhqx<>Ktku`KG!+QX++zRn)XUVHy&4D0(Lri`#+BvzF{_9L)LAhC6;1Po`1 zT37-V-khpUp&A=X0vl)}Ek%QS0dJRp4^9Rq6K!geX%mrB`EM!>=+HE+ynk}z^8C_q zemS{OvVZxsCLISZ9Q* z5#5aOoQb86oqi^Qxx6YI@k>Jxsy@NuxNtF0p^K)m0 z9hZWW+7yH7s_gN? zNN@?$_Gv!>rmYskH<>1CgjNh10kn2RVFX--!U%W?IT7#|is@MjJ#>knRtfZA*uUf< z815!HDY0~F&l-~9M7UC)lW|?2ld*vLxoA#Ce(5b)x#uNnHf|Y~G3R5Jz6HZFcCO*S z{k&Szr)5+}I`~C#PVu%8s;?Gn@-;e;3+bot+-o%uO$^sfOJ`H!%5q##Kn83IqTAFP z4Dn59IL*2Uj*p<`=}rK~WJz)$!<;El7XY8Bq&)qc&3gr2$%lx(3v*i~6np-1( zd-V8EinPkz6T4^bKj)7dF;@l$*G2sH3+yr6hT3?@SslM5f<5|no_UTG;4xpqF!FA& zC3EN&cP``t=%wE|e1O)xQNM7T-4E98e*C*!z-DdSwmF~oMJtgI-loFUuXz=AK6`pa zcU`TUxQj1Wim^^VTT^cxu7%euqWhV`(B!qbXc}dxfFxs}2JXJA0QBSa3wRBrM1HY{ zK5oO8Gn!ZcaI8XdiE?$FJpDxp;VgS(u;r$EV4hwTkg!r*|CLuFG+5F}_JJs3v<_e=HBO8`L~HB=wU z1y?mV0f7X>P6@NF0lJl~tMWJTo)6g1y!Ll&>ZbfPZ0ffFcmI4}%69jq{}|5Ta?iw& zZ2JFdQ8D&LlLGo9j!?liOqGQ_rESr|F(Ml83454=kI)p33uu{? z;xWu-Un9SZokC8EyXlKrpN8G8pQ7-~^%s_d^Cl^^2J7{GXDcg|?EvcmE#WJAuGjZ{ z-*>6+Cg1%4P+(JN_7)7*OAS`)<>$Lo3koQI=@~F0^l=JS@)!6i7}GHnQ=d$Wq_8AP zy;l~3*mMB6ot6%nBqPk)M)@n>{g+v{&`SQTO~^)QiR{c-v8LvhHHl^DbP>u?f8mW} zpzIYg)wB{d(CHZ-2mYjf)@UG9qaKD9Nvm1wn{Id7n`1k*j&OA9ms&cB2VIhS$St2V z8qqD)H(TkI_J&fEVx4V^Puagir6f(Ys|YDkQj7Y-VTz+dFcJF)Bmtwu!nO9o;Sd}b z(0x(VprHi<u;{mD$4YXJxVAEoJh)I&$sm@u<8q$1hzvX^&yq{Lf9B`R`fMsZ-gk zBx}V=W}oLP@0>gTz1*j0`Q1-G`k5%c8}>d;v+yJQkEdsYg##?QLbsL8>cL^C2jDD% z<9CyKSRS(L$t90^_zk^Ay3l6fIq~Sx`|VSymy=B3NHZX2_<0Fx*3^Yg)`5UV>p77J0KkDA^C;DQWGu zRi^1dSZ;)}``7Bc1dwbVJxx}bas5dx{%6HagA>FwA2LWmFwF=Jk~* z)HDKA-{7&8w3$i%+RP+>!sKXFx2#@Y@c;iBd;EKS|6Uv2j7(_ahtR~awgqZQlb2>e zUFdyaDWi|xu7)m9ead){7yIt}6#I~i<^ye<;=_>M@hPM?a`0R&_Ph&s&4=7IdN3|F z#m^0@;}u*%Trj%eC`Cw*PlGUrFH_S7b&bke4ONuP+LhU{cGt%eMwQhm%v-jlbU`F5 z^&^HZEtt>UTYu%>M6>hz7O{W_Ykpy2t3LRi$y@l@j~9K+Ki%}?4o>7CA_!NpbHekl zQ!#&n1Wr5|<=Tl@C}1(Sgoq@=gszKMLGMK3H^1p|}>_DCdwjV0`cA=h$of2NwJXD=hkDQznbz_g8I_ zGTa|a0|&F13wIv3k^h;tmPvJ&;9ODFq*QPO!+x${>#mm3qIKv??BiLr@J#i*z3#oK zwh-Z>K^jEb2nVbNhG>Q3!XYNm`g$Q^`|iKzcF!I#x`Fqr6K4sUjs-xN@QUqMndL9?v4a+7Ds|310!*7QzGlp`-3AVMM}d=VaoqFGSy&O zZPceo*lBKT^poTAp22sEnB{dIFTy6cYd#|?1IfBk{3R4guW~Yc*!IQ$Ln>|1@Kf!o)+*08Q zh6)c*np%HgV6c=sC)e$t%UBBgjqmjf&T2iEm13@<&b$(<%TKT`rAL_4dKCK(ht^ZD z)^OWGlY-D!Cd85c!V>EAQiNpF|KR-{C&#at9&|r&=>NYTDBqouJB45TnN8*EZ?VWp zx$m;lxA;0X^=I}KuSox;YElVapCOdM^4)*BFJhM+i+_=K0)dibLyXYW9ZOJN-=Bb^ zkYs_tFsYuz5~A5&V#>ah#CnO~*yD+X^d%>8cOqo&;KWIZ;9o}~$r=;dMhz-Q)t&&R z2qE+|FvaT|5*h{fm>wwn?(q!qZE_8znky5#kW@FUFd-7LIF6myr}?uumft{BGm5Xlvtg zAH8w8=Ll(qsnQcR^Eo#>YVP>k>3`Ycv%{M&LqYGF%Z+(5UCT%Z5Lmf%U4lSyXY->BOF)R){}R& z_d|tO6zs!lwn?h9dJSAW68eY*;IR_4#0gpT0!6ygWT6j$p3zh%#hyRDD zf$y_|1ue7%WQS~i4EdrFUq1kRx&*wRO*xKd|20;i)4;p!|L<6VW;Bu`pgY?!>@h2S z=&S2_ye2=6=b?Rv4eklCGDkYHZv814{SSD*0iE9*F42u8X*~(6Edkq@A_WdDQs5AE z%6QasQ(~d|sx79J?s$vS))gRTZRn8#Q_>!h0waM6{es2>WGdizDGKY|0Bf(WKUaA! zFYn1EZ41(Au>n#$fU`W*HzCm;WZ1(Z+R;*VYHS-Za6|81N=U!f7pFjn`} zx{Nh3TTdW+ZUMs;i%g%^k3hQ)mV2nDFiG(mf>tf-LqSy;%dt!yEE$tk%>M!!Yg19?3m*s6?QJc2TMP2>i%K#UA`+Y5{s1Lr%;Z3?P?Yny8!#y`3 z<0aIi+2k|eK|=g?Q^T~*dBD5qJZOB<9{ZP|5W@D3+g-gM&6BqZ?Gi(SD$foVb~^&MJq_k>Az$@V!xjSRA*M79*L20CpkT#p(n_U8I|t}& zlPJIenUH=6rD{k&sOq>-y(%6d00Vao7b2bNTYB(s#e}}?*>!3LCQNDCZwSrl+qf~8 z#VEO)V_IL)bx-NM95-ed4ee8Mvv=<%-H1E+x44t5EO*j^Y12((^M#bfg;b-ps}_w4 z*XY=2Y1qEw(S^~(rqR2jaW4y_Z{mwu98Cm?CT@+cN8cVCJqbUo9*>5l9~LA=r&@0- zpqd8q0(Cxs!#s1iDB&(5BBZ7mFY2<7IW_18caOZh1mi_rJ`4IzSy6&5;R8!7$B@yt zxAtHam@Ovf@98vTbkFMSwY$Kh$?%V-gGVE9U&pGx+I)&c-Y!<#3pg-IAexEVK-cvlnq8sNg~TzI9we3Qi-`26#O{5ifmGHlhR1~p%A z=^rT_VWGW74(kCu)>GcUB=d+Yuj6m>ySF8{9$P+_&{mW$=-2+$uA)Z=Y-h(7?39oe za)F66bJ0kQDt5KZdnY8o;J7Js>Y z7q1+JqJ{$?ZP&Iatz*l14`t7?tiw_XH{hYh)>yF{a)xefX`En554w?x+#p9S5>{7p z;yb#YQIC5eK!NnEbdYElP})2}8vXi(=ElBE@nxF;ULX%grRFSNyQZeOnfmP<%RjZu z&s?w|m!&Dk_&=5@n#!@P9XmA3c$M(%{m8R_mSt?Q*>p)M_T;sk41-bdmM|45hy?on zp38UTaxem!X-_`ns~GGc@ww1kBN3&IqwXT{RBdB2R`slwrH7RTH)gno=3qAZLXko? zaYGqlK#E|9KvxPYT8nLBnVu((k>8wrXGirkb?DJctYBF8VN=db=+_?;#h={x@Op}XH>+!Q^O;8e^d_8gItcglFNVE4aUtkxu6N5cCOr3%(w^-;_ozX2dN|rt7 zmtA#)i#?d`a+G%ugxu5o01=(lcaRZm-}T7{AHLD${FZ!{%R05~J~*$}TW|D2#KxWM z`f$mTlP>AHJE8Z;F@2;f?&LmWM)sDzwn@d;!O2CA2;|nIsMnD|O#%btl0DK$kpEvX z=imS#fDjxv8BCJ)CKb(7q#ae(E&z~`W;0^tWMUa7BX}5MCi3I(ajeB0lO)>= zHO3T|6I`qFR1#3SN%{-D`Iq451W!pQX0(dAms+z#yNErY3zg|ELV1|Z2d19UhKB&L zrN#c^>DaW4hfSNxB$;4)sUBFLNQ|&CXY85GvGWI3x)h=J_MtstjQiUU)eYOqRh zGXQ|qFJMV)ifumv!uRCctSCVEGSxdzkk_jj=I(&o#B9sa?`a)0YFuctutoS7O}MwkqNuml4O1EE9f1-7Q7P+{Or`Vtrz8wmBA6S$jFM3gmB z1Cbcoml9Zyet2-;Bz&7d20nq}??9HB@|Dn4h8IG)IYVNrk=h3%VI$CwARyswwb|a9 z`X#Wc(9Tk_M!mMjgNiSDl<>6d5^O(j0VS;K=!-lkAELd_P39w1@tUl)yEFyuxWTKD zG?FM9qud7l{NRJNH@OKqpLpXj|B6q0V+H(bBef3q(1Mu1I- zbs1us))n~dbtOBcUq=2r-xQe!GG(Q4={5EJF z3Ovmu)2?)yi(Tn2{;#{T1yPy~4weh`n+95tIshO+10y^PP@D^DWXLl&MjND!B|F(D z1i)lEp>g80#$H7D@?-6+3Z$`cH#{fCD)7rt12gn9LxW{UJ)ButV1-7hF&f$z(YgSS z%ohScKR}DR*F!YonDp$1%KXdFhR}K31k*-x30ncY7mqO_`5tFRveAXcPLh(669_e$ zOnGvA1+Wd9!%4;~4Wb|31A=tIiuc0{{AaG2qU6i>{;0^uD5^Urh();%%N4)4%%`w1 z3#Uj4?ks6k#Q1r90(jg+!55q~VU(4~kM~Mjuiz-pz(%+-LkU<&)3& zH}Y|Q>-=dcPZ~Zq-7nWsckW1ut@k;|=NvfqnS`oOwK=-^2hN~s~L{tC+Jd7xZ3yq3UUJk0j2#65RQECpt z7+5+)bJNX)d73$pe;3RlO_v&Tq@1LS|6-9A?+^B{$nITzd2P63<=Bm<_(YnVxmz#_ zXwrr^mbW{nV}?Qv*hLjn)9Aidq`bS$RXW90RdZb|Hj)r=L=2ccMsiB6fPtX+U2E5c zlA`MZAWfzQ3u<6hbdIV@*#=i7`0ABnD|A>2OI93WlDhUZFoQ*`S z4RvJCph;E&&Kf7{t>UDst7q`@tP%T&Bx8#v_5Tm4nMYhI;(di zYb_u4c(qb-(B$mPYM+f&p4&C$)c5i`{Tc>NOyAmL+*HPvjAcIdYhT|!&t#!jHKNJBjoM1fx6f%dx_rakOLl8S%h=itM3bsjZMt60mdoly zL)2RD*Axsb8H*`ViY8wn4p1I|$I_r48B0QI=%UA~Ez#=Ga17K4t=nh>klo}H7kXS| z*p>7Qr80mdMRcK3njBQo5N^Q)RRv7i9J+a`A1T^WuyU}wlO&l?SrH-1zj`-G{`{BUA2I(YLzwO1J^l!;ljuX523tE2c!x5$TZ)Eh z!R}EQhesXLBDSsbj&AL!Q6+_e69o%9sxXS!Bx-jQ8Pic@Oh=J19aWFsFO0fL@0%=U zOBo5#!|*?lr4k5nZ=^Nd4lgUNrWoRoltgVy^$;tXmda(^IsO}&w2oh&xIR#NJ7k0C zUaCh~Q=h!F@=%^Mc7JBp9{3g!utvYOpTvF}tCA_pEi|cq#v)LqzwmCBIYh%2s7M1k z1~Gt6GSK>wP8a~Nic_UV@d?Z)b$XwwtbYAiK4Cj|USOl9yeHSo8pC$fZuev?G#)ys zU>$zIUj)-SOqg&X!*n`ZVoKhcU1k?eu5oV-b49Ep6d6jbmx)*jyB1k`b<3Si62kq< z#?}tvm*(-QM_KKjJ*C*+OD*xKR;6ek)C{CYpW@-lV@DdS#bn!Ss=dNKe{vd|;%YrZJqy-AqN%M!Y>@@!P>s4=VN2f?O1dnu6wum3!4_7 zE!UfF>Z;S=O+&-A4x8a19M##zNDNbxQ%O-M z*A8E~a(IZEmgX9gds(@Bw8v12aTQD%-ebt%o_#B|nQ|zt)X>S3232T!yg#qsP+r~X zMf>gtU%5a0;=$`3JHGzoIjQ*brKTzRj8w#bGzr1`<5T)zm|AVP@)g zRu>lprUk`Ox&Vs%mK0!J;7pAu0p*$u0G}EgDx^z!L2K9?`1Onnu8b5{l?$#aDQabd zz*T}=sTW+SDe8;Hdl^BlMi*R-Qm`ghQ#0N5h@qA2AgZX7O{dJreQo|-s8vI=IgYWPL4dgYQUQ}MXc7oq5 zxVp4O^9zSrje=|0GbivH<7bWObNAOiBWF%z@e^jUGn3+8^BYVw4{1||Pj6MPub{aE zE=Noi>8d!yGp49c4MU17Y_f;e7SU`8r^dkzh|~FA4{1=8z*#~RI3jaogzg{%s9rAl zf-5-%GkM4!EJtH$v_4T4$l7)#5*@9~>*ZGOlf?9Rj0wO+e|G$}sG(e$@%>x>dmQ%1 z0RtvZB#9-WvCt1O@QB`59hygkI6;DE_m-5oB@inL_jMlB1F_`gq4d$=BQ7&ym!^mx zL^Z^>*e1&9T}dfwoIwCMVQ`HSyaf1;D$Ud}p!NHpLg?O!DS>XWTqf^5V0&VLdOrdj9 z<*?(I`J?&Fw)SrpClyHh*R4Hwdi4Z8jSVcr+800E!{T!Iqg!is@}e&ue!`z9SYb~- zMdaiE(+c$i_@7p2$z)-LTI&=7J|^HoYS`t-RB3(go-amUnzQ%8?ghQ3ty(ta9fS*p z#IU3*3CsVP{ms^1bFc1?-Fi(X+KqrcvCv)@x-Qg)o=?JV)lF4U!R}0y6G9U+?Bai_ zjMq{}7XK3e`oPw2_|2DC;yHe!F-thI=?+V5%5Sk_JI8NF#CraY@jKW%J0|X6EqLD@ zG zdtxR*D0Sw=3VqNp5`jiTh6Q*UchXFcK=0f5qaX`u1VF8vl<2EbSK^}vPntZeVwJ(O zM%5nJzo3aDeBhw+0YgGkYDw=#w+%-B+}`#G-pU4{4AHAwAaybWdlJVwBK-@rP>ge(u^;Dw2eM0-2IRNyJ=x1RnjgZGS| z!!H?sf!NaRGyK?yA*t1>rm`C&I(Hd4G`(u&)TSdlcNsAx{jF4f7VqI%)hem(*7^^+ zTaNJj3csQMU^<@A?^a1w{%F^?Z@a1)>DBn%c76N2UOf%Zd|&U=w_WwLjH>Q`=)3fc z-`0LEqpCg1`x~a8d%chLyEviByayYAo*@d5z5(F2Qiu}*tbw`huJ{xe+Loe>FggVS zPaKknrs#r2)GkHAw)Gw#019Y26N$ScC!=LD%dm$h;_jr|Sw>={ojL8viE^@xI{(N} zr_59Q#&vC6t0W$zvi__k-~42xKi|vVlvhct{!9E?(H|1ef0-p!3SQFSL%D14l7^>h z2cQXBH)VYQ>MYjs;F1%%H+hjB*atz&U;3zMe(>^_Kay@stnthI%cAcjez*y%1Wn<| zdkqzNuMyA4dkHf{-U-p@n`m&eG zE+{BkuP44F+g8XgsuK)Ath1e}Xk889f9j|LVXNy~(2+0bQz42K;dPsK;%n2J@EOJy zZV95ZB3R>$bV8kp+0sDp#Mj8c#NB=cQt5jvw9mWm%o(+nl}_BWh_7WGyT3eW5Otui zyM8~LH)M97Y9ubdc`zIH7Fkn?=|6bT zpf`q}9-6z&cj(9732m>{?mg(u8dC7DSrdDYe}1C-Z~N6Tb4_#Fl85){)17q7dYnyy z(}w$$?wyqENwZtrW?kP<6xo2CVvPxyqeRK{R3$-nH_Vql%C(nrJpR@0Vr}T}FM@m1 z&^`(p1)9MF?6t%jyy_HT0^^|ZhdqB*ZpeM}*rQwxnapbAZ|>nYl?mV{>NrqB)K7Vf zZY>UyH%w^l8zF~@qDv?Plo13_~m+6%8!Wk;c=rg|Zv*)Nvee5mx)p+tQ+i z?9=o6MgMW0!VCEW3|YLBdGhSpFWlX*JlZ|~UOom#JOV5A^UP5%p$R98g{KFz;gOk$ zfME@yngT0@9c0Q+Vx@*vq^%UgIH*;zXrGBtJ}p(Q%l!x5XQjGtA6aek7&Uu{sM_JT zdC{frA59Nm9KU?*qOH6v#R-_Gq@->aVYcpCU`zy@^-F1yINlQ@N$NGm17UO{K;|jI z>uidns7xF42Q>||oMub-N@#chwJ-8TKnYOS1LZS5gdP2juWz%YZ$UxdB`sMa#M4{3 zC29V{hi;@2+>@BC*e1P4t6c%EB}{6VZM-Rrr(0-(3G^4<1=4E00S?W&ME}ejYLQ9( zGwGS9dnQ2n^v2)-z_E;$ODgl#Vlx+D#5`*okdxTPoBRVd`Yyj)V@a>Pyk1KxGC%>` z-2D+dcjAOLmha0i*(cb;OUQK15mM1JBhhl-o^2G<9(1=~^>I+m3K?3c3`JOy9!xn@ zTvQ_=0(1bW0J^Wl8tDY6O+|-xd7-O-CrYc9v7-C#FQoSOr1_wAsciSV(iC?+H>@qu zuVo@=9blWR(b|%j66@4yZQ%@koi0hQju7<@qWl5RKx?f|f(jt0aAKH=^GV8>7ca`B z|GoI=nR&dI^!hk9;2YkST@-aMXzIvm@*x$zVD->F&S{{szwK>p^}6LIgtLXO#l9%| zW#MavEFmb&kT8JzVJr%{LlcjSO9=3t5QUTk?I+!k>$s=pyUQVYR9707{rE?kHi?x8 znP~3^iuxlTWSAp55yhJH7tdZ3yhd$V=$?TnJ}aaVHuV^2TF7oP#9{*()tj*0^t>29 zLvJ8DP0wg2`v$W~4ETrt%Z6I8-=r#ht|&y2da*B;7j@B!QHaVee$$C*hQNpSRf7dS zoF>$Wy;*9;EtyL_OMz;6fhPlG5DL(UzY>K_DQE=JjhH;>{S4tO1a$Ezvv?k>_2riv zJT0F?NJr7yA)_5s=~4=75ApN?^JqX3gV2vcPbrIC>8eF#k;1gX+Tns5!h+Ur!m^@! zm=T|#wL@G}Evs2v3z7ZT+DELM9CmSewF%>otlg*;?cCO#qJ!a_dACBnuI7R#5~k2EhxzFg(mj1dK#n zH7yAl3uTo$chrKp-%L8avRUVCv#M4u*tKA;I=OW>9+=ZxZZ@VdEBQjhr7UDit#d43 z&924I7d-G=&w}61zx&Vm?%%BrXWPCSF+6YNlr{6l(LG7y>l~T5GNHCkHdpX7JS>Ya z^;$I6D-CW#zz>#y3>Sm~p=JXtfD#JOP2_OUbWXAhs22*`0Yv@i0`?xCB%LqF4%zwS zD|@Ld#dk^>h)#&;*h2XT(Z{s|o3(c7*f9kK!zL|#bRYe> zc#Rd)SWW(!f4p>n8n=}5|MkZ!SJ@>x#i_8zub}!X0_$^lEK*vZ1#DokO}*?LsP%D& zm1k-qjHP;vx_Hl;0Gq)oVU}x4m9OMAZoABN7}a3Am$iEtYaOuktV%Q7uwQB|VcJowJs+$*;eI7IqmGjLm z$o<6A*5)vp=(snfU%sjJeampSAem6F_-Ff3NO28<*P%3KFv!wTQUY@G*eCp;G8b5{`IDy%QrK9U~nMTn7poO7c(q zTfTSs=Ik~d=DU~Cc+jFLH$L6FIi>z*?pxBay*t*Nh+wa>=Q@R+UjOFAuzf6cJ>S5O z4eWgV@3sr7q|0x{U-_Q95nH%{J`O$L)s_YZ1;qv$z6u#2z2CgWk@fB`#$TXGVvq}t zDU5-!VYnZ3lYwCI727m)g&L{-3e<_Y&d6TQrfoK|E@rG@%srC7Vy7bii*HFsuk(9j zMrZa4oA%L=&ws|C?!B`=7(8?)zcM5{M2hj58OGutm;GRRX0<6F4?7k9iU zf3hJnU>*(cwr${FDW8IiBG6wj+{59XpsB_7vzXi7oobE2sC6A=00k?(qWbAPHu#yS$?>dbLBabH`_}yk+4z5ckQOeK&Ya=*z-tSnq3)Rx{Ikb!6K`i1eEi90 zjMlpX4NR%4Zv^oA{+{)EY$r>O*m5bovJ9DgOhnEJg=JSv4|oR4IwJ1b=;9ZC zn7vri=Zw=n_F$?u2i?PMTfAQRza*a})FYx*dKs@*VL&aQZ($c2ktK#@#Y))GU}+NO zWO>GA?F*D*B_LJq<2z~&J+!8WV)~Wc^pHXi^&~coj53oVhUzsKmn15QbpqcfXMhV) zOGNfN8zz04zhhNxn$z8&sXGlV-`s$ zHt#et(z{g{^|?E;Yo`SU*A8pg6eT8FZMimD)M;mZ-;$E4;G86*d4lrWo(UkJuXl*D z*tIUD^+2R`!l*%fIvA5ogp@GSr8pQ8g4B?RWMh0fZWq!67*>F;Fxn91$@o8>& zuT4?5pYqO4erlfb;}7*Y$~3K9sf>e+w)Ii{L`>4;jOqLE7W;spMsy0IUA0T1;0LoD z{Y2a!FgnA;cLBg*WUBDWQ@nLm06OA_!2>2g{3D0u+m1FrnU|F|{%+Nk_h z<7aKyyatUo*G%Lw0e3z;`D4FhQ--ZrJZAO$EaJX?e56tVM-zo^;C`Nt(g=Ukl@oFf z4ETRtaw%gnCYCJfI$(}HW66YllS{g1%DosL_Qj9<;f-mR#^tSBxNqL(e;40k@9=eV*X7KXhf8%HxB30- z8O%PZC_TSy@{}Bgl>v0_z{o&&!Lc|Kr-nF#xvP&E7nefkEU(6KVhki~3=;X4J5d7o zU9FZ5qT665AT()x<$+#J4Mtz2jGD=*kr8kv6B22`Sg+LNd;T|L-?9D$9S0ASmHK%R zDYEkYNp!?sJAX~~`wu_<@D~{yxXYx)h{@m6ZsVSy;KVKD1G z7~{>3wHg&qzlXh2gVgl2c-%VD$j*pRvILDomJ$@1G&EnClgZB_k1^nW(J$BRZ5xc3 zjt%EUR+E*#&hVpwGe$~d*GS{1K3T&qe*9zimw8c})}5sDxrZ-zJUrRWFZr;R^~Wq^ z*kASH@01^L>yl9;7HHa^2o~r%%nMI5BLAv0fFcHJWCam8K<`eIiwp1HKvJoRVbt>r zRjUrqPH=u;S4R>iSSBPSiyZ@Qo9x+gq;yB>GGvsjG~8FE6jSaTnla0H`J9wLZqUS$ z{E35=I(7ZX0p-h%(#l!OH&37Z!np_Xkf}{pFJm2=zutM7yd`^e^E8m(_8Pw=|A}mF zJnXR1j>3^FJGiz9`WB;enw0oiKAV3>JUA%frL2GkI2|XyeA-KWA(7Fqp1CE0jk7ffo zQ50a=MZyVo?WaHaPb~TCf$fhSWh=V3?AOk}PpWj49md%f@D`eGqB!-wdpOmg7^C)u{UAfB}t*2xuQoTG#3;Cy$RrenJcT?Rb zJG+iJcO?Ha5)=3M)etFfADvA-p!RCv?!;qnI){<^wZx6|sT)Eud&9X15SjLdXtyCD z;7ysVR5c=ouw&3n*qgT$+SnS&ern5`lq^^0hfUScyWea*a6C!Dh-$Jl@Yt9S_Ohqz zq2s%bJ-9ckK7U z+~5M~7@%7_dkvP(yxRfhAnZ%Wo#SNXn~*BC}PQB zT5h6Vf?-%<#Mw@GU@7Wgj9K4z+*wHD>@jj3Hoo(wlWcq^+4#=g^t>29LvMfz^elyb zWw3LS6Wcbi3`T$&jt%10p6rgkWr1Nc>kUX-xe<4uVa4Ozw^|OI0M1ZJUHou(%U&N( zzcBQZbI11_Ded2}^J3dQV}ItqDF+XO2BTmpQ{8GgTN5?h(*uI|+#*JGdxny#CPxG| zjRF2vqdkcnJ32E1E=s^H0cs|wFaiPI1qVn{?neG-skDTZ*mQlyi__Qdywu$_blx&q zPR~mUWzzT?;VW6GT`Xufi&@=q_Dh_9#;1NcQd&NJMd98~oo0Ug4%XeP_%1qbv;yMp zB{kGk|7^i@>K49X>X=zVvF>H>EHn@Rd`$ zuJZ?@zM7NUwQ`TyQ&(=DBDHyA+^}Wsmv3V={*KA|XKurVwXW}t-Ej?TOenr%Z-N_F z3Z2>PrYR(rP=z=3@U#~~kyNCNjl6>zAbI90LXsnfDsDxH*JMgcW}GJ~lX;o9UYWkc zr(s@nC7Dd5?FW6}XRIk|+I5(8fejLuf$X7!C^lsOkGr=HkLp_chWFZg&rF24p>dKT zZ73mxB1MY?Ns7C>26riLA$UR|5L^qBjZUBx_ZANImKG|Ux7D}C&WT7uS^L- ziAaGl!~GzU^S*nm>rLmz8)tLW0`&<3&BCWFWR;nH&BNtq&#vBm?v3piE)*SQtEa5a zpD^$Akoy-)JJ;AX=)$LiiYE@qT|8;xOmVX~3)1-*Ia|DH`v9?T0pO_=@5CvKlluc{ zIj}mycxAg)4l!|MvBzPl5tP&$5s8bI##T+ZaJQTK`5q~&l_IZYO(N9utbLE^o$B>D zNjg|%7*+yM+}jQt?6Y2P6PL+3QoPWd<$Wx)dAkvfSt%~FUDe*3FAN^c-wRMjN?W0~ zB@0aj-%^R$g{Hm&y!DNIB{57)5K~1I+;_s@!8^eBm0x62>|xOI;?Q)OLLMw!2bzXr z^W`cM5As8MFbWu~%>sw_l1}uqhqau&X7Plp)AsiOOD8ik{j|IoU&jDf~+UE2c-nNfu7uKwt-LlcSev4=? zhsrOCC$SSrY@`ny*K8zf%Fm&`94RiuY)NcX8G3&dYlz(y0qMKqK;ch78Y0wC{J71W zvIcC>)lenqX^6>6i|X`TSvI#I+#aRvg|Up!u$bb0>botMY;f%u`EDcrJmO!R5KsBATet>Q5{)~NRXAqY%RGtVN76?)TP+b zE{Mmfh3^hCa=E?yOn zet{IYE+8VM$j_rnXaSy7@eIXLmyYS#W8CQ8y~ap#m+Vo!Dt8$@rYmq{ZRtZPMfex& zB%#pP9YQE`aU8+>@;m1H$=dt$cd09Ig$YSwv~W{Aj@*YJ0T!YnGHmM_3^MX=?%gX! zZ-4=VOYB`hOCvyEC3LNx*!j{e zXU$+|BYZqqY2o<`Hm@zl>@}1SAVD)`w$t(&5vd92T+8T^LHm_Ik zNn8FVrSG1X-!?OE-k#laH)OWSo4d~)uzTM8-8<*c-N%Lv6)z7x+%=UbYs`M zwxZu!c6rjIYetJMoikc?WrODJojP^TvKI69PMNZMnKXUgzI}^ZzP4}ovXY8TffnVyTOAx&`FLIHi)s(QJht<04k5jLK{CD zifcxiS{i&3(M-%yKW51}ViIt2ei&PT&vg^>#X#e86y1$5Z|u56)t#>rRP1LKlxKcc6+bKCH zC|q2Lo62c~DJBNs`Vjon#AV`NwqoF62gT2lr{|?*aLbZmVBub=a6L4KlNr1~Zod%> z>Sr1*u@oG4YzRbu93^G6KaS2oQ{sJ6&gkma#f@VwFtpR zpRp%@wSBIpDDB%NZ!54rymI>Uw`PwSHrLL2s(WSDfql^I^&SNUzVrI}yfSm~%;T4T zey?c6jMrx#pSc)vMGS~QZO~b&OOOC6Qw802JldUcBHZ3!yf9qYp5rEaN^lw8zXfG# z!jbrdH0$t~aIqIHEHMQ(QQkb1_$U(4tfuoAB&YEBfM8u;)M$h**dSom;*x`NwF(rg zTS`(CX~{~mFZJ=mmO!ZPN>CNHJ>pnH~gE+S6yuCwV%Rsi?2QDe`eXTMf0yq``!H-H!ib2eEm{! z%keiwH`))KIfj;akJZ&VdHE|uP=`IGKl%h?cajjRM0~4@+=)NGgcnu#t`WbfhN{46 zLS5mwwq<-{3^e2QAB-1X3X&OXNNnB6_B2ZAp)ssieO(@EW;dz`1IK zN|X)>6a`-bbHi2kMowgCAkg)BR86?0)C%UkQ)>lN;^a%wdYhy;q!Ix09Ef3&5+wek zU04Y1~7}eTS)OlS|@f?voQ|iHF?n&Rr0RiuZvASP@h_ z0eS8b7CWQYo#UK{NK=9@zb6S^R2+s2kI{&Ryuz>zAzfdAiP@HL{nX4Q$b$j3wo%MXIaoOo zKzB}PC&425ycu&fO>zqlATU0Wl0c*3gC)s?a+`kxxBbi{m-GSkq_|i%oF@OeN~bM-c~Q~3KhGLQO0b*59_9uj#tKSz>oWL zkp(l~u2^v|NNZ@q03T~lMXQ5|e^O6Gb4xz-q)losWs0@|SYhN)NQfh$P?$Wcc6>n}%X9!+Eba0)a7s6I+tZfG`k;o<#vW zG*s^=qc$xYIFCh3MliNRym9V!|IuUnu!03s^4{4$BKy;BLuw=qks`kTp`tTEOjItt zv8M7_HFre+*K@=HogPk4Zr=trBbhSH9G7fopgRVGPCW-dN{l8MgKGl2@d$AYkA{?- z4D?9$!WH9%S3YMvhMASYVhsnPgW^CavKS#`!4w6?OwEuY+rvGt;7 zDkUkFP=js`dXF3DPqr8h0VuGV>;q7hakEg4KGm@UCBBBZCl<3hCtaI17jN&=xnnQZ zr&Gs1>Zu#EJ0WA&yQO)@TbVc;(cC@mnS6cxdj*g5K9@i!2mF+l3SSk`h^4P%Dib}#qqtz6)?6Y7ljFz{ju_8^~C6DQq^hd4=j2t^plS02Y=YM zQAlR*mwqBH#PbZ{-=v|iJ5o5eunjDIXzySwSYuZ{G!FK8+;1I?f12CeMZ3q7H zvEU=-@)3x*=5y@hBf8;R+Gz7vCbx!BJ!lJSH*x1&XXgU>%P-4i~Yl~$6da+0aJfOTU^IItcXfN_2CP1G z{P@`d5?BR9L%`Qh&49uwR@i`Wmzu!^}@XALsJ!W;|mI0os}fb?7+AQ^EK zLAR-7Cl*&}#+9W?Zdh(;WE?KH>rS$CJL`Z?>>A6G8hYSu5S-(iuD zvUV*V=c?sjcHHW$g}ZG3*|lK&sWjini7T@f?-Ya9lnSd(6dgX6%Y?kLYnZV5_~9a# zdiIZiqC2OyCs!SCrr#Zx&%wKI?un_|?_%H2PoSfLQ*AA-K&^@hp@Aam*~5f^T$?p` zDi_MAgMq~v0M~#g!V`h}X5erd6+Y7Rx(GIC$L5#nhQ1KDv1n`kj%6#?J~m?8p72!x zMYeMLPDiZp{}eZT5GyPDOAi1+H6cf-s72U8S|YCvq@f@QG7Y#GmFf)u3$uVA>7pRX zM4tFwa5j=T)eriS=NHVjNZ-9XpeWL z1*vt#gmy7=PLGP|5F<9Le?PUJn9w$E&YPoR+9lvMQH6YAqx6aVKCH&+0>!jjlt~B( z5PqOQ;t`q$GEgkJG0fN>MD9e3N&sA8umD%fE-&#tv`(;6tUXx#jHW(}PYb3n%I_O+p>3a8MM8oi#?p3~x z(-<%@ShVq3P$KD${3<>hFN`-o`!8*H$x*HL^lJBbfb zLG5e*ZWSlqX%|RjR($vqmQKmMzA`(t94#KQbJUS&4fq}MAj=|S1d_e!Ikrnc;Y0U_#2X_Ks>4Q0VF6Gn@xIvPNigq zj>Fbm+rR(jo7wwgW{#aa?6c3rR>j5A{@k8NuQk|IbHs?=xh0*j?~K+deTVf#qVf#? ze(pgt7GUl_5iG-+W)`039a-kj)kU6Wmy{5%fu?DQM5Ape|6OB7n=9XZg8 zcu^G+d{yH`6}+fIdrr$tz>5Uq1y>H}1-yQ79v)Qr76}dBXF}~_{(c(Br!r`@el{dp z(D{6`e}D15Mh*Q^(z^F&E48Bxko~FP<5sh+i_;F;bMhsfXl;=2H}d;8URxVqj&b6=Pl2&E zuP|`a`T|QIETxsLeSb*Lx0*V*?aV7M8t!-}PeXXhRRLd4QgU*91XoqG>qZHO@_LV> z;^M^ygUcQVCLb>B^=bEOULJ~E7E{r|K6}y^%g%n|^h?zdV1PBkhHUSM9>;A2mlD~w z9q6mJ)D}3b7RFL}=9RJ3*7!?n<3%I9Xk@(bx}4SVm+Exdt-WZ7x4{`S1Wdn$R~f-Z zR=G>5TfGrUb9I9)HF}-ZgOyt5MF1nfPU%)>^63yQ0u~^TAzC!*kA+9dJlzXA6mn3= zNKI~@L<(G@tD!x?1dwXayfztbpSDdV%|CT&aR077V=6}%zt(@yxZy0~K!4?KEy;*XH$xWzT5SW^~sUO`E;k zd1{wchkEYp+iO&(7Ogwf?>HfA!HMY6?Pu(~e7>y!y4OP;=lI!n5dMhruok2X4G@9Q z3YEAz3*Aw}p+9)+aACAC301jf33G*o$QoV2PAkE=D`{_nIbXtK1w?KHlWdB|`uy=_ z{@9#9X7I->{@8^-_TZ2G_~QWnID|ir;*Z(nu1Bd;+(Z|Gk}FW((Dy5ZArvPe0wo)P^eiH^W?HS} zFjDIDAFkl(zlYIZk#xlj+bEu?DmC{J<5_y?wSj}@h_i+cnjO>-Q@8Z7l!ih#$lMvG@8jI0qfQ!f!lDPtHea}-(sLf_)0b;Q1L>!I6MbD z9omVaVr~@t^5h?-AGxgbR!QTMW^zz;Vn)y1>sA(u*TuTkUaHfpN6NKp*ILW6D9iTt zB`=n|DBb+6Zr!rUi!$cqEt{QMt5K~!^&3Mp+~;m1`)#J`jrAZm-G&rxM-_R_d%3i3 z*v?E37(5o9=ubtE$S(r?gFz37BHebME*2ZPD@%E{mXA-M3=T;<-NE^qL8lJJj@8!Y z_L5u-PmwhN24yomjuA-5TFGk)L9!FoO-|SB$sD)4&-rTQXRQ3J`>S)mdQEg4%2{!+ zC}-IrF?mzza`ncOz=D$Hiyyu2=luNMg+uo~2cIfErnY87pf8mn`-yH6;vkX2YVi(0 zLMQ`EFAk(K0v+`%*R(V?gzd|#S1T~O>5}}1dz_&K0q4HM4h~T_usC4@Fe8*(Ww;TQ z#41LHa+2@kii_0^@V1J=Jo#hsw*3}pbR1P+G9tSg1q3-_94U^5j!Z`%hrJh(C_mG5 zPX-9C*3vI9J%;FkA&vYgG9)FuVR&Y^t(P-|yE2gD0_R!<&xff9z2{YhV6FVLX1~|l zh==i4L@ts!B_R?a-rl-!(bn}DEn8&dpnl)v>hU!?^nInqYt<8K*berYG^tPRMvZDS zzl>q6QWo&ew7JSMniM)#u6?x`vpIW@8{aGK z!r@S~d&bxz6*>Jv03 z2=IfchTJNL6Ql@ZZ^+@{6z}a>w0KW`W~&yNeK+hFY;*P*H?B{5gNA9JTmo#v5%R(}uPK;n$@yb3p@%VbAF<<#_NppVpi-^Gi2+4J+x z_ibEz^mCPJx9!`g>WrkATJqPMH$S-la_<%|R0?a@zxneO^_Bf-zloJa2>tlVY|xGo zHDHUerP$y)mpQ#L7KGcOEnN|9Jdn)+8y)yJ$pctVU`$|2V8g)7z&?RkPXO%s4l4Dl zga=Z!B)XD-nx#T#wxWs-aPXJ**h^#Q%1{Q$X)I0o`#2Sp~iKN z1wq|U5#S)iw~F{aF{Lc_RC9XarCkHpmj^lX%{->jBYeV_z$yp02xDQY;CqL__|^F= z{^H(!m!$YBS95INs*kp8VMnM^#{UO*NTYH8?GAy?1p}hszu%$CsZrKDr0#k>8wt;r zO9X1YMP9+y+v~xqg7|XH4kHttHpAnqji@KNI@;@X7%*n>+_rBJRS1I(C0ovc^~6tT zZsBBJRZ$I1o0}T&Lh+S3Uq=AE$07%+PH*D-5a2}HiD#*~`>)Y&vb($3N2lDE*s9Ac zO8rjGc`}|IWNvU3s94f3`1U}^_|d{p?fW@nHoo7myC_itzv+lncngsVM`EHR;cFoN@mrIcNLES7*hQT{md+K_-T(3;K7ukkhHd9vf+jeM^6pYsdxQ z4s8_4k`>0oZj9v^j(w*;m+cXJV=>u+GkS8m37>fj zPyKEBH~BaI6XpudnYCdz+mg2^C!9?^`3{1ZrQSOpEq?dp+zHp;9RB9bG4pWZ*mF4s zd+rCHB6?9o@R$dY0$BcG`(e%chYWeXpYXYb3vm(zbuDIkDI2!!$#O}(sy^DhqxjOB z$K{*_e{N}8qJAJfDA|7NOrtYzW7h}+4gwl~p`-To9LJ39GJO)TQu(JScl}|zj-dw+ z+CeUT%DCmRjT0_v(fAaRFLiPMD2^z(BSpJ6is53Qij44_4Jzj1P;3MgzCz=Fx&xew zC^1x=&>H|RhYa^h@h@!cMvc-C_a4!Q{h0U(Re0=G^&9rD^&L8}swLeKSeAV1=*RC|?s)pcjGtE$^n^cM z`H6LS#))~Y!MMC!_%_Z`@fBzpGhnMMt8Aye^w=hmNcke$6rwuSeR!+!oWPj@XV&68RCN9PK2rB z7OUgKPGFnIO1a=3tHg+s?$S2*FX|Y;<-ti`>Ih5*Vt$SWG+z5{pa&mjUNX@}5`*I4 zPlP#)b{fGPa@P~??ZClaC!~=jYXQI-X%z8IqW0Z!hbcm~xgu%xt3k4jh!wAUV0;ZE zP)iy&D7+=$4yPL|a7s^?RfuwU897iw_Q!AU<6=hL|Bi);#}8~=f5@4)X|I@w#KC{D zn#}Ps3V_v8ZZaAC#zRE(c-#{BlH4hK@JBP$N41-Ot=^yg?fUOo#PI{0)*g@#=5N|3Chq#9 zdEuDL0qjNQ^YUIMEmhxEAK5S6zUk_8?jv(QD`P*AttIr+D~UM~he2Lif}P{N0lRU* z_+L!C57I;@_$xh|i)?uAQunH?iS=+!!tGuZ9m=H>n5e|=>US=-@BMFnV6m6nU;jCA z$--H`l5b7UDc<*WH#OQ%gehv^XxxjYpn0ERuPeh&%E90!XahjA9E(_yM+HG1hAs{Z zw1vGO^v08`?S%CwmTW-YK_f5}CmR-Gy)A*qo}5Tk>;SryFjf7e^Z7sCy70)AGj;63 z>8y^k^B?7q5%RW7>>EGB^^V)^x)Zr3QdNri$gum1m7Esp)U1>6ckz@1D|# zC*v_G=0{4E?Kk`y3W^;VM%|yD@iks66`MM%uNf0RDv4N2Q0Q zhS39HLX%e#{SWyE{k8K!K$%M?)DI4-C5)*L-cUb0&XTekNs~(!*2|IxJsB^pv)M{U zXz;?oBEN`V{RLg7@X`UiXsK}o9G&@2kwPLc&Q0vvlO&LlK=DP&GFM16ehJX9Y0t5k zJL*KX;g0&g`q3TaWRCw7^-2!APrHw@lj{3@&Tp;#crVqHmu*`Bktds{t$^!hD5gYG|)p=#!~mO9c6u#De^sWt-T>WjXm`!O{itviUN5 zW!u36g)6onJW${`bL8;3qu2owQGSskpxYx#ix7=tx&ea8jAR?v`_R@%GQS&&K9}ws zX_ZsiF9jd50ij~Im*z~wtT;SzKh_y3bX0sS_4jxrk1@F+16Y=WDV6XDZhn&jdAl^q z`t^JxJSY@S5{F%ej>rY+1Re|;9wf$z``vq4^-+!Lw{B6eoB6yxqN9`Lj%4Krzw%;( zHZP4^JA3rd5t*w1-OD(I*8yFUFjiZ$7g$D>5Jf0QfXpCU%dt7aN}-VK8-T}Q!UK*$ z2Tx(VNuD>ulepc3@&-L`R!WN1Zh_7}U|MaOt(|eSwk~@6ntP#)Gub(IX@&m9{?4Z;Wj>FACFg?h&9WnsAaWiP0u2KK}gn2Jk^ZGk66MY9E)3Ta_B( z5VJ;%C{UN!+0?D-{JSBn+T6W+2a9$!lEqcT4)?$g?*(^-)oIqw##T$kIiGN=kKeuWa^Anvjz=l-R$MI2=)<$&VYNr6b-2; zMrfx&&au>h+>jsW#F+_+CA=GMC8M1g;gPDHGL75}ylEA4Ihr zH)+w9`O9{H{`RcYwjmuFHfYyEik>Ha+IH3C39s+UOTG2AO&wi5Hojx0%o%Nnf>8m; zo&5ei{V-iy+XQ>n!Oh@Pys^mm@KoAqj zK%|t3N~8+}fuWN5H~1Np81ofTINq@q!T#7XUBZ#H%O4&Ik%oNec*Yhko4l-0{k1To z(d4|Dv+|a-d%0ojHnZ9+PjA>TyI~`->7?{}^M+5II=o503h9%EOq!(DtyQ;ft+cvz z*{^9eUZ_*2XFB0PtI|i}I;=Ys>(=Ep&ZCW0o19n-;`O{l7*tW5BSi#tfQQvWsVQLE zTnB}Wc<>slf`F_qCMqJ>=18kqJGrJ2#vUHY{(NQ7q@3-qE!iZgKC-T*yTPtiMDNupv}Oz!DUNuOly-zk9wo zgW_H#VYA#w9Bm(m--2*U$7!d_FDAuFa1(7KU(H)I#v!A_0tN0LYba)leQ2TF*VrgT zGy66~3_u@Y40_)CP%8$f1mmd$i!WVQkG~l#vz++~0KpyMFeo6l!s>WqMQ`32H+Nvm zW&`>)Z#l42YGOi-8VQwa+Q*&vuzA1Uty=W#{Ypa37Za0e)&l&|&}~BC1+0RIgl0mn zwvr_H`IC%@4;}(VbtaN@Pdwa<#x+%ZB9jOM(W@iSha2GnQ;w_*EDVG_Gu@2dP%5T# zrWEVL2P2=bhWR%-*m|BK#$FQI^Qo<#ycKcjL4UORJ`2%xFLSqJP1)@F#zj@0Fg> zZCsm-#-g~h!}MugL%U3w(w%O=K*YIs)%~hE{pK9R*iTLcjTa_~A@bl!;u1-hQT%vT_Cz3APR6<3c~xb8RgF=|2vQN>8L^e6Y1?yuQ{L+9C|#M9Tm!YYa&JAP$5#BJLB zl(M|a6r~8tx|YbrtG~ISX%*%TkJ40d%F8p4RPl}C>>Xm5r;;Mh+0ewPG9->%FEGfp z^5D2QHtwt#`0JCOKDUXDFV&Nl&sI0Hm$nt4^@U5E;9hP!bo<8r0k5c!H{~=aTl>JW zDY*qR<};%2Xop~{1n+qn!!FO+w*fXMOvVeZlQ3;qn(=A|xnPbAu#dOHT%T%hiYH|a z>b6>F1mf?B;}gn~)dhAJid+>Fiq4!_&)n35rqd6+2aS`rpn2IHO7N}5E{CK3O&LRH z;P4qCSscD+Vu}f$!-t~?xV~kNHM#03P}q$*#l^E&y-(GJ?BJ*Dq3UlJN>-pERhav* zwo~$B?3BM@?ejWdt}7TjWr($$r5S1#hyuwUicNd+6?8?v^y&87@P%^jEbSEB%@b z+V-*~6WJSTfE&eT$kq@heP$bv_)k4|*2~rq53)$9S&FDt)P$`8aR_*XM;6!86GRU( zZuNr1^E^I0A`CL#nqz--@C5(u9x{? z?t$QsKaDuI*kgj2yDRvMFT&2PB{Kw8Spx#fFR-Y@3Vk(t&xh9Y=(#qsB*iIxp{$#AQv*#1e(l9+glO z$yNsi@k-|VW%@F8bUKN54hwM%%4DUm7ri`C0Gi1j73<08Me_Ud`vjP z0uazf8PT3yfSiv|0W6)$c6i?A!TKcPL!^#?Tumas_8)q5CDNleK2guwSTpsMOFczT zOi(x7B7NPxe5!AgDW82drS(*C0@g-$?*&+!O{l3bJLyT<5;=h|mT1x}7~MSgA6UhW zZqfqxX_xqfY(HK z;l|<7S3e^!JCb=u9`6%6M{@=Xj_?+h*|gkL81AiZMVJBNB>aTYbL)~nq=2UG$>Nfx z^jkigp3hp5eUUt6%>b7}Xo!AyB$jBn;$^xt;P6^IsU;q`xUGYurQEF8ji~ct121_N znREr;QATL0*aHX|wD0gT?iuzR3(tkgn#9L{%6t>YsK>LK_}b6JL1SM9T5 zB|FZJt=ypYAxwpgV8^$IfR02P*$K}!;0FbBoh1m-u;`EOLtZ4RI|ph2@^6vRpvYK| z6(PHzklYU*DMy6MoT&3s=V_@d*oN{THq;D3g0d9+Zx*cn^py*BQdsaeF4c!Me0`@> zdslw`E;%yb@%6V$0!EJxcyixwECyI!*$j7jj2&y7r z$pPb=XIwlkpcyZ`NI&Ox#NfgtZcInk98?vg#aRl=`w&%641tJ)@&VxPR7xN<1j|Sj zzhx0F>GzL|KmOHL%)*P=$y7E1{+u`eP`@mz-eoc2tkUo3$$VX1@x1sRpq&V4XMqpJ z0a}M%$(kfc9%yd>Xo!;>w_?G8c|m3Du%|eS6QMGCkeXwBDft=au%ZCoL3g3LoDk?|S1_d#9-%dJw=Irsf z8+T(1@(Nhp=$~1Fdgoz9_4+2te@rU<(N-P%T}~LGL>k?{u>vp3z^R_$J2aCBAR>53 zHpFTmGi-H){1kNra%U+A1tj<2lSb~~;xvpl(0#cz52wMFs+*)G>e{?b?|pgyUe4^9 za|+hG;3(Lje)!_83#U)#jhZrVYE7+!pb_g4EzDFTOBLB?#(F40{ydb+E7(JcS6MzLD9Hkd13Z!fL^PA8U1WLFo5L2uid>m27uU1og z2l=v6iU?bg|YHzW2FYJacxzdhjoPt*)Uq1RJ=>xK&HljWPrw@bFAU;yj#; zNgS=bSmrbNxEKGlFl%ss61o5m-&J_@o2sw5)Y&evg-hMY2Ejk)FFn+7LH5D7mjMUp ztw?;2$U|cE5b?U(2DK-|_K+e)^5?W4@vC5Jmg5F)dybnQupWR0oMs%KQTIw(=RU|n z-ud^}7u9N#zj~fdRlO_yN4UTgL9)77K0`4pCcO$@_MqUijBDlJ+#0wqVT ztAupI7sMv&z%n8EFLri+#5R=ptKqC8+MNF&^;EB@BneTyn;$s#twLu{(jqh|#Y;ux zdWJz%ye=C@QiBT^wqL$R14)%&Zts~vp_57>)RH58gR_G{PCbVMKB0sKa{&+g#PtvE z(&0u2w|Q0K=DBJ;`eN!y7?Zf-mSPBtA0=2#1?<(Nq$Z;KXEXqf#-FYa*}pSOENnG7y^O5Q=bSvoG zw{O?8wtO2_OfqgioUAXR9tEDKtgV=fwZ>t3xl6qc)AVj@-c7`YksSgzgzya~lNuuJ zak<J)2Ba zp0wU)Tc_B;;V#!ew&1Rs#(wyP@BtbeVZufCLBa%ZP`Nh0pKTTSzeSsQS%WyR9LcR{ z;VqM}NccvMIykg;^a9JG4LO_=^bPl6{gon?w@b}f;m9zFGWrf>&zSt^O z9sGekDdC)k#Tt^Un=cUnR*A<$p$l<3dVNGrDe9 zPm#2!c08};H%SEKsNi!>h8@i!J81pKe6%<_tixYlhZie0)}i=lDIQQ+0J&97 zv?^%0@*HxUZ%rL+$O^I#NeM0z7t}0GP~aeg2xVMQ7Z`E^6Ivt2sRB4sv@p#}Q{ly; z4EoHAsFLm~RG=moR<7h5Rsrv5!McSA);-eKH`^EVu?BT(=f97&l%pYi*Fz_iApT*j zKvPFxEa9#dM*=1P3A%R*{U_w`oJBd?9BN~B+O|D^R!*oZ>_0cYW+ApIU#`1}TRe5% zn3JyjL+2;VJ^8MB_rb*Nj~2ailJ9%zukcZ6v4l$%S&JpK=qX;;*-L;k4uMM%2I<8` zCvklS66jz~3&;*Y>y<*3ThV^+WnHLuAR^AsD-e;}(~O>(wVx5sX^((C?KAa;%STftr=@n-h*mL^yr`Hui!a0{?$cjtl35-slxiVyof!3iJsvQW6ZYvfK{OiU zg(F@j9WPsoVFl-VXn1b;3sZ)P@}sVHGf+(vGAJdf^o`1_d0$JN5 zXHZlLqF;id_yI&wy$7t03qpDUHZK`f9>9_|?4G7xc!r#c2+{foi0Sw&Q58F}4E(np zb|P4qqd*=8%serT4#ew@cp1A4wDDeYfbTzE7>~_V5q!8&)@#Y$>*J0;u`wI7dCxF) ztS(-O?bT++QZxyR&XS}*!l!UyisH|4Upq@L=IKS^yujzm1*dl*MDKW@l~O3si3u#sGr zkp212J0vI43KGCcBJgVl7x_Ow3jBcWh89JQMF;mgn>e`_4s(#lI>_4 zed)n%Hf!ar%e8BM#cm!w@%FLaliaJnIM#poC0lsC`s@`}wLFv9bDPg!iTn1xkHTI_ z{(;GA>2Gz^Pe3f)>W!(dvFJJnwyWnMDH!piN$fU`+rd5;nyH^d-hq;&ceqKyEgTCB z2!{O=mk8?-c*9TJLNE8*f4_x>xdvpCSGxBv!`;Y|KUZ>Lfv}u+pg+ zF=4DFp|;sU66@8CFeI%Ln`^QpS&>S1z<7iEWJvc>upP;k8o*xI$Tjb$u~7-u_6z<@ ziwPW8A6`n{+{LShJ&fSE_f(o3!v26^>rP#jTtkMg8!`yuew_cM^L|&0(Gj*_`V{|P zfAWuq*bmr9M;4l&p1oMf9u3nuNeZPYZk9#{zDbgjSo*7N1SF-3sP8aLiKxsk4l);vtP8L6GA^nT7sycw1-;**THYR! zzzMf*9M9?nfwUwD!1iv9O)*=$NAlk8)W)8>~TeBZVfR#oRywkJ9BKz9i%5J@THmy;Lv3Dsz*JVM(e(G?_JQh?$}* z??lZ{014M&(1YXPBoSNuhgA{h|G4Ha^;fC=+2dV`()lSP5zfa0!~sl247sZ`}FfKbl==<;LzcHhVQg^umixMD+uE)`B8x=?(EU;ycnDz zl3P6m<#_Vr3{;;4dn-rmtz33FVsG>`)?$1nb zmaC5ROVk2P8isG#DQ(*j^^`!0&;HnmiUW%=qrwh8<7Tg7$JpWK)_YU+(U zG3zR-zfK(m!cWxSfs2n@q1C$H^M6z8+Ss4UaN1TjUU*qU;`M+kE)K>TzFlC0R!&8v zsM#Ze7%Y-8(+oO=4)qTOuajd*s!EC_%QCDvAPUbYcy0KDAw58f;03QoyWbU`cdtIh zYQ1?nZ^K*Ldw1#ByI+U){nVpI^5mNYY^y zFO@tP^pEP|&r<}gTe{(Nd5;|J7;r zGis9s@8i7r+3NR4jvUGFmM>=A*t7Gx-0in1{RblD1-(^ZiLHgW#b8jzfl9dMbA>!=-y8c+n7)`9Yh3KlT6$q*wg;6F*f`0w&4XQ%3;!%_|I{xCIQA!0S*gC(=Rn zv1`k<#$28Auk4^gSN6rLzqz(AKc3a;$kOd%=$4XY>t3@9?(@skchyqIkq`E%)%T-? z7uD|k5fO0hgi1myMX+SAbD6~e+Pv2m4IbPWQUjzaM2vZvPk?Hm&#Bb1*l3|@6gr?H zUt*&HYki!yDHlfHRi8}ybj`8fe4IYHLvuG4%$w4^_nraBQ;#ipwD6OI!xp{sR@^D- zuh0W~jKm^HTotj$8Ygv@*CKHB8q0iJ4R8&0itn+ZDk^rF7gzD;PqfD#219%7p(jQ) zCzKluNr3WUmUBv{a*OsJW8ax`dW>sp;FxPOu1{pHJxdR@?{FYzx0tl0BxkNz>#;Cp z`SK_E_M(rru-`U(K=7-bWdVC!0hvNGl$hk_aMn~0->@fgR%rmwRYv0l7Y-=moV0l( zU;>e)WSIbtTSPb|QhO7jA0F2cSt70cB8+sVsB{WgA@Ybu$`mG^h9!zx{d;|de_gsU zCa6GsaIf=~mgx<*WUgB}=Ipu0u3gIxb?ETMik)K8pRDHEIVFL=sP6QdORLs&?s@Jt zR_B4k`SDivL&1ks&9w_I$3ok299zU2{GOnn$j{4u;7$R>`bYrw+Z2iX69DU`ri(_3|f+k!$`?KGPy}5fjcG$mspBS>a zWZ6vje{7%3T%~^ZeX{e@b?zr?@6t+osC}hUtRx84jYcSCD^#SjKs>mF8&Ajd-%pcY zBV#3|JYnNaK@>mj$>Uh2!}D}-A*9p~4;swV2lk&E7sdqQ))!xX?Ao_{SLd$VR_qfi zKV-EQj(eOW%2Qa{pN@lf*N7pxcd>$AxbuHt1>v|){S_armOt*ZVW;PC8ryGb59Kts zNx76GZ3X=CNoV+4N^$slMNyzm^?b z@bHWFhZ?6(%U!o*%$d_a6t7!+sC}n>OV*2(AG4G-vrBB>mp)%*X{+6v>&{^{ANw4A zw~+n3@fN7`ELdqOp&Lsy{IX>%5lS41jA(R2;s)Cz??0HIH!^u5j!0Jt`%d>ax zswGEQi|ftaWf_On$6syVgNQaY9mTd+7VOobjz-6>c<4W6EM3K)3AGZeHOE0svVVYF zi7&(bL-8p`8pdbFLw5*@kHM3L=z;&((V56xmaH$!;n0^w1~OZ8Q}rw7N%ez0(nePC z=x;18{!Dc7rlUXlu_^B^7NI|Fjjl=S8KmRFfckKQr>z1o`es6w2{d0NU8m#$7 z;2`BxgxDxkAcC@R%@`Bo9&y8uaXQ95qR=6WT?{wJY6~F0kQ@qMiYUVoMkNmro|m9N zw`6sSHN3^K^;D{bRLQ)5Hd-Cil5mAx2Ar)gFYza-X_1UI=d1$}- z#V&CNi`)MOi`~xN8hv@@luP5-*sD{|{vw`xM|Gk-ea4maw^=6QzK`6nZ9}$MuDU6$ zP*qp6dZk2PXO+qvda4ADiV_;P1a(T#q37ma1A0?3k$iaSAX5H3jGPFO^{QeKdPND# zLQqNYZwuMG_VGOR#!L10tM_(D+gSX8gDh?vU(4mO##-J}4|G32^^Y>etofz7H(1u` zldAI_wwJxPR$k~N&? zMW?5eErh2RgLEU}greMIOBONrOh0Mn;A!hzQ*O^X`Nc(bp*Uq8yE?vOTE~$qCT71i z@bgiX8IP?-b+<0UB{34(Zd27mMAM z#1AgJ>x+IB*XOCnS*uZUT#2t(l14IEmY5?J*iN8Z?|Z<(d}QGAZ{*SyU7%nbHI1t+ z=A*0c8+un?a~y}6#__Jc7}o>y?dIb?=JN$>^BH8W#)}x!8DsX_j$y7(tl!CTk>;Wb z`t+T3@tr&QT%TI!;@&rm<8x(Vt}Pt?JA6zz?fXmu01XcaOM%TaV=Hl$xQ>th%=*oo zLeMvtqjA8>L299Flb1sp2lnW-RSgrp)yD2gBlk#QNF(Q>H)y5BdI~k&Odyv~6*u%L z{DG*maIh5ao>hCyx+}k__kO!~sP5c%H@vlT(eR1!Y=TsFzdE6jD5?*?_(lD4+_FJ8 zcjO+c%lklQsK+4X5bdZez_`SZ&xk&-&q-RI^_;L7`{{Jm3q`#Q?Oyn5P!+mRUVMzqSICfx34*ESEcEYB^4s@6qJ~niSvx5hrQq__B>@g;h%c|8gdLcR-pCE*t)Lr~>0Y91EKv^A5P`%d zkAADz!nv6bmRHHf{V^840s$q~ysZ#$AuDl_Tq^<`M%BTiw-jZTv%5uiA|@Zd zT{`jh{2!Q2T&@0bXv?IeY4?V0iQl?}BOsY(zX<$!g=i7JfH*WEwjz6^<@UDD< zUA#Kt{2=w`y~jR0I(g{P)ae8IcUr=dUsfNw?c&4RA9U)k9t+yO@W2gDwJIa!KR`St zB1e%PAGA>&RJ#3L-kha7iz?6)eXQ5PJdloGK zA|d7Cz{)`Z7pB}v@xe7ifw&@KUg9oq+r~DYW{F$a7WLx`E!2Ns{ro@dyASTM^5W}x z;_N-@wX40}QLpV1#n<6h4t>dm7~rdC|ymI!^`O8 zg>a@=nnHb8gXke5m@AkOUX8mMY90rZA%iSX7HSHzToxw-E|11-VL&-j%#iyC_7C$V z<>|~&znOlKb&*_b*qH8%lU)1uxmY>*wt7ELo#{>!Z%oYY+pfed-_FaU>>MyYIgewN zUcu0m0ZiG6u1Ap8i_fc?8HG*2w2n|6_+%_bRvtA$;s{3`?%7S1_I>l#2Op@<%Y)VG z-$>~tSEckk)@<`;^%QEFKPdfC%(gWGUXQoP4ThP)2;zWxL>Ww|cS}WGOd?BfbCC!& zN3fX|I3U1UHjY~{oXF%v8ZOWqt+Mbzo^Xan0$Rg(9^DxMdaZZQAo$s$YuCQ}u6EIoy0$rYfpFC`nxh-d9b~u89dC}_AzWm24M@zn17*u- z`xA5YaN!Z=j(Q625cvTYW=NvaU|(f^VjIh1jsNzEK>GuZte#J-)jolU%Db#Pi^oip z)n@WXwhMS4k<`!!rn1|m|H1ovftSr4jqrXIZ7+oA^hCDw8KVRB zz0^iGG3PE2);?o&u)detXoop^xNrfZ_1!Tc3H9tw={-RF8i)OP4ffLAp82`RM6la* zXq+I3uUbY=6w*ASIn$=mc5QU&cNpE=L9lCc7nC;gj5g=?(O@tA0Hgb$hP*L)cxko= zc5}2JU^k?1tk&k^Ak3-BVc&s$H!;UtZGetBlaSlz>maO5)mF;dvpU8p8ODU7IDMs0 zkDiEp4?MTk99<5uC+M&T;Vzxzup@c~bZH`6?3v%t(TeQszdMM0U1s`_fQdJXa3O~yJNWgHz=xm zjlF2XJY3ieDD?9*VXna*@LrWfk2u`+9_A;u2@fGTKmCd7*u~oVE^43XqkV!X7^e9N zGxb!PNk7W%@O}$?CsDA5oPu#%I^V}u`aWLt>cqhqb3`99Lz z*hl1k=qF^(9INk*HZ$#w2FGw=g=cTf(Uq|`FK8<*y@WZ3*ywgZ`o`?da!QTaIn5xr zZ8{`KsTR{MV<%QH#~SXABD*%Wlme8h+e-C$9YR5A682Ar+nm`)gS+$;M!&*213}?H zZ`{rpt)GxN+8=Nmv34PGq(Is+C%d@HJ? zukz{96B#!AZ=<8FqxtF3+&G<~&lu|k2f?h3-7(OF*@Pm-Yb>3l2J>+Afibb%9G!q2 zsjlPfV%+6Be3jkwRbKYM&E02omZ3V_Pmi9+I(tSNZn&Z_>uA18nj5R^Yp&9q+1PDu zW`bOUV>pT(nvk2L%L4K^9r8%EwdCZG_u`OGWEDKHaGGU>TpLaE(`dUeypuUQ538iH zQJ6hepPkDu_Mb6clhm?>%j{*t3T8-C&N6p2`;kWDPGB@qM7xkZ(#IHU&=zM^eXJ%K z1)4J#f;y)gqs^HEyk`DLpV=W4q6ZH%Mw@e2qtVcsDyo^hQd1;!jUk$J#v>iUOSp(> zBuVlYe2*x4%(P^{zol*CYuV1^j{QPp4{=}swgGznm=mh+Lbj&&TCG=C( zDJHkXksJ}Db8d>*_>tcka3VfB)pKXK7E1TP;33-FUCg-)gj>&=TbDZc-2ArF+_>!! zC3HAEGwXCpo4K4h^Hy{L`8(8xET%zy4x=@ww_0zyId`Jh+#aYm3;$+a4M@x#iTf{5 zZ|*>qYWS5fXO7or26D=mxMYp!B<$X1VGC<&j5ejD3i{0G7ip_z7lkCDC5>j=r1xxL z_+9xmhK*BVV#ww~5BP2Dk()7hV-Ur7m;Tg;9y0N+aua_)k{Qz{22RSpH1;07iwCsL z!Pyf$&Fzn|FI6}^*}`g;VbBIc5_cMuMC0;AqgwIv$?j>=D1*m4V|1#+XLgh~XD$@p z!b)`?fH`xJK3bcZXcWy%G-`>5MwxTRdCe`Gb8ltiJos(eR6qwveuiGuj~n?6Qo*Ud5m3R&F8-pF*V3oTTMJjh&}}jP z!JvV73!`+S6Y17o5msb%eu@SlSBhJsrF-rr;%BWq_kE+gm$b(Hyf|6h>MkiTulLen zHs@xwI#I%2>QEkSQ5m#QuYOt{B(6MeDPJCExyB;6)b z;@0hJ0&_MJmDBLCiHS3tg?*lzXW~qVe)BlaSY+SL6U;kpVvKR8r-6RnaS*jY@m=6< zfpFy+lqg=GnMaQBnOpNaQ~)VLrxvFCn5{T}8Fa`QuipwjvyJW$ z%}jS_j^_>;b32pu(c0WZKQ*YgvR%)B8rmtR6WZK#hqSr3G7Hr=<}NZcrD^U``3{$= zF*mfBZEU+*h%?aEzQ&k^xmY#9T#qq}DdphAU?rdv10wT%{mpaBxjaXF$*`bsx!lnh zquc1CE5TaiEATFW+L}v`<3dbxynr#9U1LXSeb(G-_i09lw&v0TjP7gu9-}cgzJEt) zJnqxeXXVh&s`MB}&*79*n>)MoWe+7atRPOC4#_5r9&9^i&YfMF2oHpQvWDJaj{Xs& zn{ryJ&0SbJ!b3~VxgGl4$Pp5&*giDpE-ZZ&r||UL`e>o7+LcYQIWZb@lNaRQzVMAa zQ8U?4eu8bacdybNLUIIK;2^rI!Le1Sqx`wFK8#oX0SA4zYPy=QMh)G$h#xH#Ic<`Hl*jJmVRW6 zHuVTt%rrjdF16YCDpTk?fst!DM&-`@(pSkXZ@57GIUeWH-WUNmMm zZJR#2Otc0&Udust$1HtxS+?F7&G8!5GYt(@*o*J1$YH_U9F~#%JG;0`Stkw)W})|S z3Uq6Ta#gey8L$BM_vLef?)^4wF?^MTRc~;4fy053ogpt|2}%r-`IIe`(HG;BLaBU* zd>}ET_%!rEIqSPVY}~OvK4W}l`$*%C-1NCi12Qo{xk;bM^yz~fK&3BD@hgU!a)V_J z!d7<5eG#w{1cmTZ@SVWfZe?}c$Fw!zE|b+-v-nM94?Wf)PEqOR8CGk4m${5dIyTvo zdSFMMzIoxgj)?uV`SAV3+lpMZrdVHzx(kw24e%x-c5 z!^+KJ;ip2d*oDp0O-^7?tfEMr2Am?>fSv9KjinRpYone7PeDSNt8+6YI(r zzGIDyn`u}CoraX7*#k)0>cGD_d$1{O8G5+0l1|Mv%Ve-Qb0LdlFa2$1gHvcT6Q`h= ziBqica0+v7Lz2_xPB-V?iDGhpw__&xJaESAny)rL*a7%wg>*(cGC-ign(3)q9PzR?D|9$MQMsyz=o&@f(5&R9kEx0r-+ChBp^yr5u}$$ z69inOCA$F@c0-8RviJX;bIWc3f6wsMcW_bsL3~mlr;ShYhmT8RSD)VmE~UaBq@wuaC!arjObT3m-W>^d zmvG*xZYf_#dYgUDJH{;~*1!3+l#PTKEiqYsz1 zi?yUJSgW+@Y0f8ZGrn`obv_lAPjWp5tPk z!3bnD_yDre%~gLRFbaA(e*7cB#__dJ)aE8fLwrAek*moZFPHM=IUccz*ZRIZU+dL# zYtHfFD-V>D@=)#jqzB4NxumWuL!6YAym3+<+Rv9ap7*Szz>VwRtUORo%Hy>dC3kHM zPbZZW)k;~(8H_s*Ijh}YCT4}3sKPT-8`X$M6KQHa6MU4A-o;JZ;{OnHp6SPRu z&+er^wH|(UHSJjOu7kg_HJm&?&^sl^H$2Lyu@h(B7H^P;l`Vc{Cyx)bt?-U3(|pR~ zw`Apy@}%k7^NEM7PqBZRAqAzYB`YY9V~6&;WOo78?_wf=S-y4O%_m{guF4k&6gKIQ1R< zXlmJ&MKV=O$=p1*edW>qzm~MgMa9N@;*Y8M-kdDA{fqxt((X%aWNr&TW#517wOmPA z#^0Qj2hwu=(Q@Bj%7>$6ULoZ~`&bW(20dGF8OEwh9~Zy3MJ^Fzo%y$Cha;d4IR9dwsq1Tr+t)^ zp+4T8H702b4OQA`+w*+s?_=%Oj=c}1bft`WKjxItSeopu_|n-MAHB?u1|OF8{j?kV zL0W=a^B&7jJ=dkkz4rUe!gv&{nF}rS+o_N6VvE;Laa9{vlV4*$=#B$D>&8}^)J@yB zhg?l=&!HyyrmoRa|5nA;f3e%y_tOWS*0dO-eM@nyn2ouc7Pl)_>kf*Qqfdp$ift8e zU9scY`Thw6)2j>IG5_;#f>yjTvmRfBM$MDTOuqp+s zp#IARTeTc*n#m3n(@LCeDB!}n;660ih*-0wq@5VoZBnbG%oLoO?Y4-6W2H8tDtdUjdmJI{pEcMu!u9=nEcHFy1U zp(ES?e|5q__Dd_gn@X93V-KSR`LU&4sMz2mHR;4wbW~|W$MgKSe#%IeWL%+*6L;X9 zK4tv4b)k%!B@(-nwl|55=sgwN>meK*dzk*nVPZFNsp7;|C3Vt%M|Eg#e3c7e>yZ5NCT1rWOa7(%}iH$d9dum-5 z_k&}r5p2Isy~QD(2gmthrqroQ8$P_%kL#!GS-q07VD8|dMx}jD^kX*wbFUAYLya~P z%-0C!!}JrAxQK36b>!)0M+U5ij!JH+(btxqHS0+Lf27ul`>PvQS+irXlv1U+N?GQC z;V-Pqc*0QT(5H;2iZ6>eVl(~Et> z+7s0`q+TDSXC`*?3Fzi}jk1>&pS2fiBBw;(-Ik=L^mA32o2Kw^d#PC!o0`4buUS8C z^ArwlAJ_^tos{3BmwRYzcv9q%gNJGzPV8}v6Zy1HrtRXPT6I&wLupd1g${mPp92~u zob6bCqxZs<8a2Y8as9|sc&8c-bI#2r7#PuGh(HP6-kPFz(!6<2x0nkLKV$3})C zK$%sJ<^4I_a)fq&%IMQ!dBq=nV!1zGHaLQ{4@aPjx2QvMApx6drH(uiH=rie{;%Ut z^40sZl2-V?YnGW!)G7!gH}ULfpM6H%roK-vHtU+Tc2)wnAUrIk18BHyx?xN{x8 zLEE_P%9l=_=g>NT0AsO4P1t+$u1t<1%{IS{O80T zYB$n+4)k=EKO(S<*v+N%PVDh^mt^U^*i+No(g*S8vl9k*6I=QCe^fQ2Y|;MG@>Ci@ z?Y+PJviK>WBc6upO%b`dumcEpX{qPw4kJR?TxFMHWhq z!_xdTe5=fzRjQ4u`AdCo9-N6Qb&&7X0pTw?;mXIVKgveHsoro}i*LK6q(I9XP;;tZ zi^@iIbp0^>rDR#8Z>40JXQP4#Uy)OI5L@sVZ{~VT(O{giEqxyF`34=em-`|G~E1J!)t!u zMoQ@LYirf#krGOuM;q6}Ps6WauXoZK$(@o0zQeOM18#F{B4wdDR?fu!zJ2CfM1^iE zbF3VtgPgcS2lx`e!`b)NIdK(_I2Mue;rrNmvHjV<4i>7%;>4bS2h;DdBxA!P-g-v$ zMm^yw=MCk<_bo0Tb4KHw+4tzKdlL7^7tm|_yFA?`d%}713=Z;l1ss1D`@Ll(eMN`( zyV$w-Apa1Xh@|+tGVdSKVUXwVy1Mjt%ll+{)q}I!x4x#Qou7o$w@_Eyj9p21!i7QsC6L;WXpMrked~8%K(y9>@ zX&gKU??ww+d{CQgslHttsqty>9F4g`OutUkCfoQ<2~QAvQ1Cp$+qmHu3g=to^K+TpACUwG3tmmY2zNB+M=`@w_vz+(|v@G#!$ajl`&vN5;mhgYu`x))L z2P_>O__=+o9c6uwnAN_oPR;kk=ZIs~oAoKBV^lz`YE^nrjjxWB`c&y`j%S?`=o zTiTF3HgZ-ojwa=UT{314tO1ClmQn;$5 zaehfFcdTG6^gYKqo%(q}=q;n0jC%#u=qB_Z%Z@yI<@vpGk0;ffE%#T;JzQiillyDc zy&VSQAu^ut*j)ohL_Ob;k1>AWlE!ZSg0;kVupW4yAK%BiA@PrL;|qR5Kk&mAn5>_l zq@QSJRn8_ZwH=x$`l-}a>?3WTf`0lQwV5>(Y!FmqRi#dBqnEwIqqiTsrJJ^DS)FBN z5Huj|!>?*$o}TAFlCRyi7oTm3yfI9FIq9<%+?8Kd=3St1WaLn0lH4#&lbt%8#xKg* z8)%W)Zfa~LsJ7?fn7Soo%Z6&lW4@@Ix+I*vy_&8nVFFunRvUAa)u!caQ^WQQ&Nnle zkZY;E8dz(6wD)CDKHlB?z&5>Z=*``a&HH%Fi|>xsZ!f(m5skc=`0Isv^WT4K!kfmk z7p{D3(zbh6Jn-b`M}}PW(13>~4w<^{?j^&Y9P{w{VTzv)k|+N|duAq$xk4mDTj9WI zN}j8GeTUprFM&W>TWS#rMZFBuAJW@xKYEdv`dw?>bWhs{p{qXpODN=bfC)3n~_RM{zkSsviV@yswkmL z?qB-3r^;HHRV=c&l{`OK_8uf_ofSSJ3oelOGH+1syU6|9lt!1a^O#G!3HBb(vm~XV zE&8Q7Sh76Nu4PRmwad}N&Te_E0z$`inU??m`fhpb_2W!JmwlLIzXRiJcFUU*xOd?l zn-hQDv+;Fy%bSw^(rqvNdn~)<_5HZN-iod8$Nf4|ZI`!v?onT>b@-Z$bBVm`D>R_( zr^-KP|F3{rM*)pQD!fSP-2RG36Ez>#TPvg?fz1nLCf;s&W0+Qorcd>_DT$Wuj?Kv2 z2B8}B62J$kEpyp|YQ7or_Z#}o|J9lw`#W|PxJtOO3GAc<*hJEP&aihMf=`}{ zkF#z>jebK9w9feM{^|>F+|Re_(ddj;s(Dh*Xk{m(O>(47bf0RO-U`6u;O4b5isy`0 zcG91Nk}h5R*(bR!9tWpA%=kK)wl7<~@vwu_9%eL5rtRw~uZ)tmj8{5%50v>`Zk_sg zH$>8VTFOaZae;&TKv|3CzTxAZst3hN5!#R&RPQ7!h~3h9l3{A5>+^7^o^YwIVn3h6 z-=q7~IxcN)v6^eFuSch6Nez#*3XG%Vp2=+R(0IGr9K~3EOTGiFY}SAQHt>>~g?LWN zEW~kk7ki^u1Ibwdu0CvU73mkMRQ175pqWHkufG&BjSTmwOz+85p^59UuwID z8+&rHM7~|*t-NTIxLstvW5cIuAL_#;&%ue?)yf#?g2bXEA8Ly|T>gu-(2kT=GiZKx z>Ovo!)YE=lc&j~~8ThI$oEG0nTbRV$Z}HwLMMq}tBDNzlJ88cpTe}}S%dI(VtUz;- z=rg4p*Ckp9&KK!}??6c-B=F{71^u34!SplhH0=*h+6W)GG{)+4#<2e6jjX^t-e};w zVg6{Z_1+MDr=*QP(}O&&NnDbCE^=AsyFt^w*2|Ljy@^XQ+KYXHWv{{mBP6_gqK7q5 zw8AD8u9xU<+cQb0Pok$e$-0!1?{&k^w`UQ4AMsPxuM@vq;$NHSk-93B@SYMbEk$TT zOX2;tSg2csCdfYS53(@uHfw1oi_YCBB_6N;mejfayu=2shA)H(P+b@Oso#VOedx6(omzjm!ns_k*e9s{X*Le;f5C)i0_ zNgyZf|G1vlnNc8geN5;ma|T4yFlPX|(w=EU|KF^6p$!EJf*avV58JhRJ&!BJ@>XR_ zT}^%?R^U#n8#0X+1$J^DSVVcbhn52wS=4K#p!k|TTgmZmPr~5~wX)ygi-CF#t=yH- z9$!ptj8t#wzTxnOnyc*a#z4J4Z8!A|m51tMd2c8ieqb8jSdF$ISj}J^LaH86&C$>CHtzQ`(>neWJ|p}LivneWM}k}Q{ppbZw= zMDS74hmpWx`#pP2{3N9A$91HjqK}jEK>d^?eY}*Xsy!_ly0|#0EBZLHZJ_p1l0Lp{ zV{VN9hFGxw)h+_g>|4dxPXF&eui(9fI`~7`H#*W1PVwzfy}sPb^E3nA`%jst%cn@a#-u)z9AlkgZUfIGPepJ z;DJ(n@UYJZJ|$U6bN}P^pF%EI4KX*wj}w$OL?l=Ex{X|c2ZY$8)>-HwNk%$vng&Q#Fuk!`*^i z{;hZ>eiIrE?C-aA@hPj8n7ZDY-dC`FS{iz?92M0{JKmb*=Cn4MleA%#Q&Z^G+Qsc1 zw8rqjRNkzi6s@%9tz+Fck>Vbg_^qF{?EaglB`yi%BC}g+XNpdpVtyn%eN5sKs}VY} zCHr?N9X!QwdW5R?5EskuB8k_I_b18wAt#=N{DoR=c>im8ztT;YJ{sYT5)*3KU6TTa zgbz+ksAYFevMzSwi$0tU9xbFqpIUo$e@&8am3x+y=&azA#CEj6r`BtXeYqOWo25DR z7}wrxBx%q0($;5a^YykKwUYh(?4&1<^sTwU7v1!O`ixtD_u~7hGpntngIh074&V7X ze8n1fUo!aE=aPf^`VI84mqFiM!Dsy(z8aKv*c?u%m4mVdg+BV1tgbu4d&4h7HaRqN z-%w?^D)^oBSN6Q-+}TMy(uN3(?)z;{!j3>4R2#@oVL9 zqE`mR6EaVfGQhpEuM%xic*CnbpIV+5UN{C$bS(9jY9ABzj^Z2d9Y43@Yt{G+zbs#9 zyY%Bd-25DJ(~@)99FBV2ElZmIh4zyDoA-vFzS^V2)4vYAl6lPh+dSM^VJ^LrdCdIV zJWls0rZ_iU^)H-SpQi0S9A8lm&r2)iNMoGMX&L%7#={Q7S(M{~T6q-uc}yjb3%ruo zqE+p3Z1MA$N*;OM8?|WVmqTjawRWj_*{Q*=d3V0Nmsg2z^(t8*y~+!OU&QM5>)w6K z%df<hjB?@Pkz2_vZ-YgO5U#3%Jntyy|ckFz`% zs=p@7SrMxw52;A(Cz6uK*SDTm*-5*tpY}xUW!;x*e%jt_O{agT)-G__D7r)BGIRp`oOO%iAi4&S_ykhv}4|;IKIqxogK&xyJ~P%Km1;qj23JT;#3N6nQPS3^o{WtCViH@%-={)n_0(pGK5yj|MH zQ-mkizpC&{CH!96bB6SNogV$90A2;!(lxZblcbGdb4we;VjOJ_l6;*WNw=!ZFek$VIh;Tb-5w z-+1r%xp`9cX6oY|S(Q9mxM`TaIk_s?ukqF?+%#MKg>SjBZ$3=gEnPp_!D)BWFFQ=y zt^OwMPTKmzq}`%c+R7qx@cuNA&5AC!P5OABl$y4*0tfF;t=A9J3Ocy0z`Gy)_x>Rx2 zxGDWhDiZstBvm}m#8hup4eQ&2jb$8lj9d3V(!+8oE+e8!OVSc$rW|Pp@??BvtQ(sV zdoQ*>n%~H+&4bhK#MeyywEeYnjs7O>PTG&jw55KOOgo}h+Dg_tcz+r&ld|5&+gl+k zcn60P+rj%&>s9-&L-6+I6*zb+o5V?bBIB4oy?wl!xSZn9M0p-n+HlHk@k3I^k0tb@ z=7Wuc_(xRADV##h2lA|!oiv0~u9TY3gHyg1PC3ivh_5BQC=oDAgj4#u=`^x$f`i1L zE1W`nsrwm8%tc?S+RSh%F1`h6KcphDFHUlb-}BFRad*-_5*(ehCyG7ga*FR+$abmX z_$`#YR%t_(=6?H;xT-Ges+95e(37?%F?>>=S+B$W{m#8AmsvV8YN5vF)q+7Wt+<(% zSC1*o?bM;JsV20S)NPl#n>)J}TS57lR$h*b-t(pMA{p3E*<704Yf|?}S0DCPs|gK0 zIH$g2q&~tTpInyhc;&-d)}(Jf%^0%in?2F*<_t;vuBXlV=C46-JzdhH*QAkeS!@1m zd(TMyq~CIX*V{d=2ie#7ua9T08pkKL)~GgqU7}RVDmyi4t=PN#J>x=Xf4=sv-CupF zw_Ou=$E9hBw*sA1-K(*9<@>jeqF2n$35hY*V^a5wDXMVudf|yr5@Q0N2(PqpZpSdr}MphgC}5^mT(Vp&fOlxPKv zn%v+_H}OW1go{ORD=s!N^AztI?WX1C$yWt)+fB>zw@Ff;>&%tS@%S7;a!Wk5%XRYO z1k5@)imj0>CYhx1H4@o-`$Uty($#lCS{dE<=mX1iEs@w#vv%dmxqJ5L*S+-am=~<> z`^>Th3wK#o_t8t2)@-cV{MLwvUNjDmySG;HVBGUv-0K)}#SVTc8@n@&hA&^_@>R(H zzi`+2;-$VSOd4$r9+x-)affcv6c2(!mlPb3d4GpP$~ugH znEm~U(Cl&JjLC@{{b+qlqPf0hw7y_WVjUwjj7$ekfb;5UkEY~~Kv8imHQ5@yP*1xjr5x;# zlPt%?93;j+&i>oX@u&wZHYoiG0rVW+}a$__y_?^cs<6>Me~~ zKCy!_BZ;?nUwdqO8PbwoMocKXUlEbW68~K3+68;Y1 zjwIjbgj;JQydCL(ERr+ihTkLMZAgEHq%WRr(tiRh`R)<*20rwrdr!;EQ`AnWK93E( zaRR9^j}4~<9o7oAn-)k)KyB5uOgCH!lO$j9eIfo&G(X%n_vhCWJwp0}`oo(NJ;oXt zH3y80(Pn;43*+a%P?NehvJFl*9g363Mc!<{SxC>av;ah#Uve9oQE z;3@u-!UKmTi!+48TR3cu5!8FO>BI@(PR zv1-vr29i9=dBhSd#qF$calgBb{7uS|X_oUb?lcj@8GNBh?iB&~sl&;_)ry7-ChDJ; zCB`P++M!Pw|4QQaZTfY3-|dOp-!#V6+-P*HSz?SEZ9G)7#%Npf6!_xHQFFBp!q+3D zKk%jG@895?D{b>2e4W4~zH;y2YqHU+;9Iw@!uQNC^z+vL@yAd4d7q9;tY5z;z9F&x zBYj(2qw1Qf(+>gbUJznk`$bEm? zHh*JgN07OA>iuVUuD&%G)aun!_so-JPrxg%Vvd6i)C|ixhuK}v+lAiQT~E!Axx|gl z+3RiiGkaROeWXv&1F3syb=*F@D27z?pjI3vZEwG2Y$Qf1nt@3R ziT#;1Sbd@1;azDUs;9v&68_h_PE+GKf!(}uf%`@QGxps#JRh~%$=#pLcOA6toYsan z;5IP&%<9Nm8TSnzf4;iFx5%B5$zzm%Rr2WKzF{Qu@co6%AM$3G*_p)KC3!eL!_SNz z$vlK}RXO-NLP>^`M?#5{RWhd!iYcs&rOcXkv644v1!_lf?+w?tr+Q8&x>&uWpX9ya zdmfa})bq-o2v?jW<-q47CC^Tl!}mY1AGp6(;RrPsgDNa;m#JfpTkHU zEqU~I-Z1+o^YA3$ROan@BXaIuII7N(R)W>7$vk8nSJ5hUZ236qBP4lT<-TDh^YDEU z?D$Q;%o+7NopP*^H5@D5wH;4LyHQ?bwf3SV9x$b|CRwv3T=`O(iFd5C8~&Lef04vz zZI;BJCE?fMV^O2FPX9}#^Q{w~9iUR;vs#evuhBl$UQ{XZ3BOIk!N=W8&e6G(0!=-9 zq!%E&OG>`)IqB10{`pMm7ob9Rnp#)WP3Sg^U58|kO1`z{?S!i^NZF~7l2k}eFF=u$ zoeBxR*};JD)SdXeQJ<&rVBa7V>F!X9?^Y?vMEWvgx}{q8q)HN4BjL{xe!qCId${3v z^qlyqyXz7EXbGo=Qg_z_pJ$x-lyR;vCHw|MKN8dZ-&jc-UeHAjpIZzEn7(JKR zuh|DY$>+~9^>)brn6jqqDW%1&g&Un=nxx1{Vu=Hq?> z@l*QFgge}rLHa5Cg%R#(0i>l>lcqdM@Hf~`)TZmcN6D9DeECGYM9tByv(;)a?P_A< zJ8A5%nDKolnXXrcSp-&%@Hr_9zm*B*&B0u)Es-=N+!>cRi`v^G@y~E;&*?QE2RE&i z_}94MNFHjnH|akp@y~YCcS_oa^uLh!{oL>yRs6*LcnG@%*3(K)q(P?XS0^$gow`t9 zXh5x{<$ds(Y=;t?=}o^&S$ENPSoMCUg!5Uqt%QF={MYG;vx3?Qw*wM?E);no(1h^s z-SCXW7UFMV6=HvhzXXx4(r+#C@uOLNBz%pV{&)$;_kcX%OXqr(8~?mSi1G@atYHl* zJh>kQelfXsJa6irb@x1XY>5lG-zxWOz4)>UIH*>B^Zsb??IF)u!{ekUE1rY;0`ER> zpFCeA_p(NpRjNU?qSuXoggkdR5@{x@M}um29iHbjb%9t)Bl6JDf<0 z|HWEFp@_tXB5><}*!e{$`jo6)+(mrV?oUdtMikwqR#kheyJdB*&;x7aPq~LirBR{NxiMsqkEiqIL_)M&m9S%;-_+& zim!GY3aTA6!0uqqtHo*b2rf)?H-EI=!B!jVSb^f;0z>JiG+-<723`kB_P0}AE1Xzn zvJVx^Y(QUeTB`<`oE|P|)vkD2yp{6Jv|QSxhxcn|nHfTXEGRHO3ksxsU@k*> zSokn{%HlM)L#*6W>SM$w);ZDoWA=MB6KBmbuAMa@F-E^d-khaKRpzAYsG=OvkG2#bj(NkyQ80Zp`QN0$BXMFuGc3t(VOhJVdC#2 z*M9x@J$gC3dk-x}Y@+;*q+s5SCV>lw;yW`C8u*LwUJ zx=y<$w%e|Up6ip$s6Yy*57P?gJmFHgTS~ho1xPfP5pnGkm zgj*@s0oEbk@5Tx8)x3%Bb((grHrKt*(6SM1PMTR-Jw4mK&PG!YxU0Vb*^@~ zK7rATA?#87fOeO58{dMt6@Ohb_DpV%<#+;D7xHun;e)iBx$C0cfsdmtSLYEjh;vW> zt-Iy!X1=_5Gilw+u|F|;^7f6uJwQ*wZef@0LHN|~VlP7#?{3~7LaHjyw&d#MtBz+# zn7TTtRw~CIlul|6%}7n*aRYDO5Tie-XXc)CAi#5sG{0XQn-l})m`m(+7NPh zny5Othc{1WC1*SBKKZpJon%^V!Qn1w+YZ{M;&C@2U8%M6;o{4f>2LwFYaBY`X;**t zKyWy280l4Wge(Hf0XA zvBR2<9rZTH_xYLHN7^KgCH!=47VFA&{5o?u&gG}G#{YYci}>lRR90W1U%?t=oiA#w z;<$#N&MJk?9Jlh*wK9G>bIB_>?qbD{uKmT2(GpN*!&BYhn8r*Ho!!41a6E!pr8)i{lk|b#(nI{VI+VXfdY#zW#}3 z@Fl*rglyNhb1c)rMBkdx^R>l%(X zTKzc=um*4(Xpy@$$QsOXh&6=ceHQg=J!3ti8P-UPdbFll%Q&vEs3U8Q#VCgLlSN+E z&sK=zFV;3{MDb82v#`f%R;SKgFV`C0^uS$%wAQ!Wb@T1oDT8jf=MH>Umf|ot&fsLF z-07^xOFlESV9K3|Y)-#v=-orL4u>9Zzxl2^w2p@!Nnhckj*8EN`Ubhz;dmV^1KQDi ze@EAT;l2fWrxo_oG1{?s`P$Ha+R~RGf6CFNd) z!>6*N&llQs?Mv+|R%6YC-&e!IYqcNQFLS;2lePg~-o&bs5FGuBwgryfrft`Dz|-aM zbVRGr+wk4j4)Eydd=dL>{Tw*7vp!sZif@v>0FPW`Tx@hTE;TMQx*6S#9!5{2mvOmq zh0)u%(&%GcWn67sV_a+WHToIX8P^*(7&jU>8U2l$jRD3J##6>K#$g!K=}J1^I`K5^HFoSIRZX^+wV6 z&$&pI%=u-E$|%X0ov|Qed&d6EU}mu@sq@PokTo>*mzl^$w5y-O!1;M`p-yM#mzNI( zQhwP*&QH<8|8)hMp~P|_GvWLcjfs5_M-RuE*`8hqg&KLZYc#?N;-5@v;=GDrAnPs zqBu;>U%{VY6|QKPHJ@4eMelbk-VTgi5zPhPf+V!k~%Fu4qv$2?O((7X>^w*EmkJoNN`nG2sTn9Ymx9eT>F4`b{ z5UaWevorRc+7R^rZ0#=nTXt~1TVJ3r)b7!j;Q6^%U&bD4_vxj0c^)uY8?Chmjbn}D zw1tXFf<1yn|Z4wgsIqgfN@(bEmNamNc8A#_> zw3$fgx3yVHDr@tR%b#eAkjThwI#^tDcVxx^fYZ5vU<9<9C`hfwgQtj^82)1NcsKRUgKBeS1pFL@1w=Va{1L9Y!23g z%6`$)uwU-h)6M(L`}7PY<@HRY{L^|iQhk(OgiL=$Z(zP=zOFYl-!#YQ&CPes@p=n$ zf;mBNWll6F>aEQW%}?}W%t_`{{dn^W^9u$OXP7hflh6X+>ZhOymguLN%gq(~dFBu1 zYW;k3gSk<^(A;cp*1MQn%yRu=bCr|)u=?m@l*OdKWA(NA>Eo>Ht?Tvi zR)4F%{+_a)^a;v((%-i}WtaYms(skaXdk`pus++Ki)}cYexIr3;0ZrZE5M$wOPp#O zt5KUzsG-fUzvn7n-P_oh+9K8_t7o}9TgqzeYEsG2=CG5`Ja(q|o-cYYU|qvPJHpc) z+H(5`Z3Q!#O6{MqXy!2=b3V5GLVFia7w|Mf=*7G<&)zG!EF{KKFjP6@@oXtEqdcp& zKhqi0();jS;fH;PFDna`aWSxvtEKciXWQTD-`IQgxx`$;ya!f*=_~AN+CZ+pQp;f< zwH$d{Sz6Whr@U1TZq@cuJ>4$Xo7y|bV}X9Ay-mN={!zb-H@n#p{YrZc`7Xr{E9Y2k zZz1*`V(%vQ7QT+WQ)2e9w@QpKF;?;92hyn^od{{{Aq~FkXs;qi_2sB?;zqT)lG9oC zR{dOZynu8rCB1I;FT~!WUj>~5+7TSf?Mj~P zbv3p9C+VC>dCme@9nBUuM?i;ffVtqmg!3}EpnzJ*fm4tTaL00LD{6mA%mP zEyeZj(6Eo)Rm%Y9ec-$gocDqAKE2eQtN#GMth5*FtLzQ>8v8psOe^80RZzh2%a+Df zj5p%E@wNNL4C1Wgjp;1tF6E7tP;)hDt$}-0$WB6b6Q`1patYZdaY&hvy(%A_G2OQZI@~%_GE1@J5&8do6u;9LE6g^w65dq&HC|h)Ct_53Y-OI z=R%*0?QiwViF+m3G}4Z;=WB|mud%miW1#d5N;=bCjdZC)-b>t;v=Dw-M*i>8f_jkB zL$vB;q_&w>xsSFtjMlUax^;tho~KOJlnJQV zIbX)PJGk{>Hky)kd%L5?siLBUVk0Cvf=*Jl2B8dhl2X9ua&jIe1vI$$P!zU7Ndiq8$}IRsGC$>!%!ksz$Cj z@;yRoTi}n?@JAH>7*9&8u@rmTgQ5NN+Tfb+w1*RqXpbenf%eBi`%A$0256tBeV?d+ z_D!`#iE?P)SzDgiqpe8PXr+mb(7q?M4}kl((7uZnO(dXwU2?t^+UG+1y3jri+UG+1 zI$(Jww4Vg+3!(j)&^{Lo2SWQUlsOwL&(Y6KR8r=-`o)PDv_ApbUkB|op?v_X+f)8^ zXq9X1d0@B@j99&7|3r?n$YB~etRaUbq^fFDQLl_tR*=dH-d@hzF>0-XS_}KKAszY` zBBcvyRb{+Y4jyGtYX{VFw9%1xt+$Kp$hB9B{c$n8+#Bxg!&%uPgW=SN?NYdRJQSP< z1?Pg_D(!2Y&p}Fk$J_I$;qQ?U3+)Oxc{aH3gbS1u+yoaaX1~a_aMfqvR||L(9z6I#P<&z&dnE2jFyjgYh%48Q5ZPFkiGcSeNp=5G_^@uT247 znOe60po!Qz(inL;x}UvXJ}+#3(=#gM}MXsy_tH(cJeI)!axPE3y1=7yTa^c z_cpHqZnt-vL+o89Wijt2{9dl_qBk(h@8Q4bL9Y8q{c|YfB&cAX#!1*`MzjOYB^Pimm;#|Wy!P&NZv%l{zmd@GWY;v|Z2RH{g zr?dZKCXfx}0{K7zP!A{q8Uam!X26la(LhU}HE=A@251Yk2RZ;J*}JS$fR4cFz?s0= zz`4M`>6TC9&SpDU8kLnwmSn$=`4FQt#=)*cb#60)at&)l^Mz(n9f!e-cI=6CjH>pb9m-~!-Md!0pm zJQE$!|EHtJ&O*Aa=6ao7Le6{0xrCfc$axhxmymM_IhT;@Dso*#uB*s(6}he=*AjAC zMNWIjX%#uGBBxd4w2GWc$Y~WlxwdG=)9k&*jlfMnf8b_d8n6x60h9v~U?;HK-fIrG z_gW_cC-d%w*dExCz=gvzyFq(7oY=Mq3*j zO^Tbm*<@~$U8JgJ^7X;mz7D_Cbk~>v9UiFp_@I{Jfl^~stC7aaqrV9czWDC(JJEk; zkGHsZo&L~l#-o};>$9l4D0LU5?xNIPl)8&jcTwstO5H`NyC`)RrS78CT@-m9rS78C zU6i_uQg>16E=oN`si!FQ6s4Y`)Kiptic(Ke>M2S+MX9GK^%SL^qSRBAdWup{QR*p5 zJw>UfDD@Pjo}$!KlzNI%Pf_Y7O5H@M8+Mrm=$}zHQR;?Wo|#9J4rBt^KrWCE6ae*r zBH&n{4bT?oKw0Xe?V@O?sBu5=0Kn{NG(;2)5k+c8k=jwDb`^n&dlKFDq_nvxZ7xcii_+$zw7Dp4 zE=rq=(&nPHxhQQeN}G$)=AyK@C~YoEn~T!s)ZWoSdj46!)z~O~0o6Zj01U!r9t;ct zh5~om`_OGw=(Z~KN)lM*xih zdSg~|;3%L4K)Eb%vcSnY9%u)g0DMZBRH?(1I!vj z64xJcJw_!MGHROToAlj7!0|6pTy3 zxD<>_!MGHROW6_iLOX;M4k3j@Na2vy1ODp?^rAm=Ip-?~y9)c@YI_^4ej5@xgoF-Z znQzu+bN+@fTCld5>m|T4!gq5Y18Du)KA;NN5B$pW1Dt;cXg^vFVADnoJEU8j>(dKv zfG4ss_ss#?JJLR+BMtN}0Qe#GLrDD)Qa^;$4yeDx zu&y^F=htIhZ$|Tk%vX8-8uzbreuMiri32X?81Bab?{fbU@Hy9C5KfN~DY^|U6+%me zkfz(vR3S7~2u&3-*YW%(U?XY%%>8E0+laFRC(M>y(LL+YJ?qhOA+%fwEf+!$tw+;^uzWXT`EJJY-E5r> zoC%x_;L}3FZ$rXwL&9&fE=J~c1$qNF0XGA;z!!I-Z#JQCHo>8BI5ZB2#^KO792tir zV{l{$jts$(aX2y#N54rhhntT>z%hpXanQygxJ!%cB? z*d}z?CUn>)bl4_z*d{nE4u{3zus9qRhr{A2o7K-46|hM^ilh9YClfx$Ep1|wa-^^fFj^npbgL#=m4B#$Ee*HwHu>$ zW7KYp+Ko}WF={tN?S`n`5F?a9{3cnzRrs;4#;?;C7|ZoHoR{HIYk)6j5I&v3zz|?4 zaHl;UN>@VZN+?|kr7NNILMXiuid90fN+?zd#VVm#B^0ZKVhf>GCDd97wJM=jB~)4n zg%(1gg-~cb6dDhO#zUQjP-P)hSO^ssLWPBtsFD&@Qld&qR7r^{DN!XQs-#2cjiojnH_$vY*Mc|_dd=!C?BJfcJK8nCc5%?$qA4TA!2z(TQk0S6<1U`zuD-n1j z0&hg%iwHarq5dP(e}uY^Q1=n)K0@6`sP72%9ihG>)OUpXj!@qb>N`SxN2u=z^&O$U zBh+_<`i`j9h<8bib{*W~>V+3Z^}4R+XY8v?qo)0y)16Ill`zzY95!M@7pr9tZx%UK(f;Lj5ovoVCM%kb zM(CI9qYfj~-Ci&YQ+KL;RZ>S0>LNltM5qJR-YTgB)#fUp{a)z47n<*d-WAYVwZlqi z9f8gfXdD6SFmzRIvl6;iK-UUrs@iEKbc|>tnQN3!U$cU~W(9rC3i_HAlyWPj+)4?z zXispDkBfe11@k!bwP~Ec;JljWYq(y^^*XLYoK=gd9bbQXRV;mT0x(+f<9}7(G@@3rNCuCH=sK}T%#vIY3R>Z z(4VcKKU+b6wu1g_1=QYRuwSRao?*r_z_Wxs2fP5h1iS;_qo#jbVZ0A8YD53Fg8pp< zwZ!ZnU<(iIo zq;Fh74Q??P61EuF!2Kp51gMr0A>JOs_X05h8k$u=HE;m<9rzQd0c>{0&;jUc1%M-{ zQ8cO56hNC=M*%GW>Xd$V1^w&_`q>p$JKzN1JbMe=u?6nf0(WeME4EoZIja_TIpB9o-g(g+_2x3qj74!Qd`SN)H=>eR))CVOy8`S85l~6MdHRDh)4&~zTypmgSc)kj%Rf@d&koy^gf5%zL93^kI@_ai`1}J&5$F8On zaY_-V6md#XDY8S!id%U`n(P|af^lP~wT79EoC`09;om%XH;)p8;oDrN)p8C2o6(M2 z8MCeA`ET%~$#`%!P%M&MS}{DD3qR(;k9o#rKsTT}&;#fR44`E{!TBlR8K8EHS5i9+ zALT)TFg%n86~gANS}s&TYNP#m*J=HPeMs08?q_iR4)~t1h1@R&R&l+R_}hUpAZ(Yz zLr4I^_W*l|69Xs!AE)UQ67Ah2Os4@Q6-&~WDYx0L(7FX z%Ha(qHOk=)BnM&O3xDK6!7v)fO2YgWuUzEcaJGDyeJrn4_ zsO#wfsY0nTsIvp!*a2_sfH%sZj`GzgKTR3DQ4Uqg;EkP7WCy%a4n@kKL>YWh4queR z7dzpLo$$p@_@W%XC^z?F^PGnt=6v7+fRSE!qa2x64sVoOxAB~GwdP>H9n2Nh+rhdF ztha-88CaLOSnmdF#ts=LJ{?e=rl0NYV7wiSw}YXF-FC23SShbj*+E#9fmIn;?FN(W zU{VGqWnfYUCcE(kcjR~$7Sd|Y>m)ZuDH*XFfK|i@7`g2xx82aE3i?z*pDO561#MKD z*$qvqph*>FuA})VrZwh7UPUA#G;8|(ZsN5 zVpudWESeY=O$>`BhD8&@qKRR}#IRsuSTHd>EHNyU7#2zl3ngYOKvxb1UIktUM$>Y~ za2^MI4onB;6Sf*y$MsLZPGC1J_hR&FSD-uBy*VQp(DX4heGE+>tL1U7M$=cL>8sK3 z)qmr0u14Ee8*#o~bT{xO@GkHXP}}2Nji#?g(^sSEtI_n;X!>e2eYMq@JS^J(9@^6$ zcz+LkzlU-5gFO(=h;`ieJSeY&=W+174QdqnZ@dkM^(-82#CQ}k^LgOE^(v%{{?dnu z(}&qDBe=?Y;EdMB>AS>DXy)-E}=hNLVvnMJdam!PWC8E=v$Z2w=QAsa~6H;5~Ru$?N`Pn4Zvi+ zj(85GS6M=@vV^{N34QGn`r0M*wM!V^%b{19L$5N2US$rw${YhN#F&1ZG5t7W`f?&a>$CIG^O5r-6~cDB?a3FcxaO47>`w4!j9a z4*KvV^x;eB!H$T-|LsXE!S7Il-=V~EJc%W#Jy_)C z6lM-OR%TpTnY7fnvYcqGaawC!Suf1AzmT5mML-we65tBpHQ+5^Hn1320#q`e=2y@sW`joDo(&-_SS&}%#B&&_ievrp9X-S#efESB6q z`1A7o&rz`-{XcXpJAk3_5BZZPwLMieTn@vGw0GIu}jy(P*PEY9aw8Uu^&>|*x%X95+$7POzgp% zrP)1frykjvwpV-XA;9s6Xe4bL|}QNNV8mwNuB!gMuYb9c({<`vwz7?dA2XJ(lAu9*yW}yMGSv zdUyZL*{Pp@{)X_xJ{3RNrjvLi(>XLOg|FoOWZZv#Wxw^$b-y~QKj+@L z_Kt_vi^Tj%p64A}7J2#xY59^jC5~5r8WQNRGC_FA=MGPPc(^#{!@nu{9yZP7+lMQk zo2F1A8MF44{RT705Bjr5IsuGt@uzS?gCTWl|1k&mzxYe#IOa_AmvCgn5__^8Q8nR} z;82}tZ}#Qa1OHc+sd*63U~iDrm6%E=7$Of$JVM8yrQ6`eb=G4Rh?Up?3$cs49<#Bg z)?+r2^_WM>dd#C(kJ*n^na+C561+#P>4AJhDs%ZA&$`P+ctO-k_I9jfU(edijr=;W zmVGm;;?)|=Q&@w!jg|2`_;qAPeL3qick?@))tGy#Xt2Yzq440nb6Lbm6+$s zO3Z)BO3d?RC1xjGt;D=gZ?Cu4E|!&;m&i)YuB^noOS@FRSHDlYTvl23mQ|Kl$|}pN zWR>MLMptarYh``q6RfX%MSE7(QI3^$loMqg z$+C{}b6H0@Mb=T4$U4fYvW{|&tfTx+)=|!tb(HgD9p(43j&i=Nqg){CC>P2)%0;q{ zaiRlRwJZ$xUkQq{e(?^G=N!$&AJ^Gmae~_NcX!+FrGG zl2w+hoz(tNYbUiD)=rMmO<6UWDXS*4Wz}SkteVV~Rg(p>YO+{XO*UZFB-^m^6AV(N6^>BjVYv#>4| zPcxT@A3MnL(^)Cp3eIlL&xFU1!LCvJGZ=6ty#P3~9UQNAl*yFc8Voq|L}H%AFAJXR zNb0BY%Z4Y_Zr^9{%ZDe$YYJE9v3B`vbn6BD>av2lGwTH|oTNu8Pd9%O6zJWtt(wx*AddX3Z->5qjlBLM@aB1ls48( z+E_DMSAF_?{O}4iU}U-hE$uksw9(tJ6Vvgux^!uE8Pe)9q}8R%`sc>_9r_(w6Ilh_ zSig&Q$UH9EVH0VGmb61t+My}!Fvz|Xy)?_X++f8EJ5yY%8SF}NgJ!ZL#m)2!2N(nJ z8sEZ-=(@%o^fv3sy67U>?R{E(<9_2|t(eyPxYodU(s+_MPa98j9BGW?_^k0PDUYH* zT2IzaTgLPBOY6xBYRh<${%Ji~M{OA|(@(7@tEo+-z-wUgIz84RcD{In>o@7S7O@A$ zXs+L)2V2B$7-P5|OHa0leKG#c_1pAli;x{3fd7Zahv4=R>#+@yBZkNkL*$4da>Nih zk}Yy1L*z)N$dOEuBbg#cGLa*5NZ~u`CSB8l>mMEKE-ICB9Su!9HwbawIBr`0j4j4G{>tn{v9R2$V?tM%S>i~~rnM(pr$ zxfW2nd}s#yd|auS?Df$HpZm4uwd}vq*X+yFer7+dj@tKwI5(I#Xc_GOaTC}5&Hlu{ z*}NG)%m8zM7GyV&TX^?Y87a8Uyp1>mS%;G+GO@nM#A1<&4MZjuBNHDa{fCf@X=?8f z;tw~6<2_&p5psE)k%j_x5m9^QJY_yboTrhV0kxk9F-IXoO=Rfv4Yjw?6kg!Ea*w?gT^L6uet-+hT79#`EFs6K z=2S3bmAhJP#CoF~b0&T*CAGf=!#Vg&Sb=1IM{0A;xrEO%=aItqGG;R0oDV(=%msuj zG8d8B5_1X1<>qqIT!F8p2#LRv<0=_fS#7Q+{swacblAvFLB&c3aNJ^Up`=^Qtx#_p zb2b{7+Zlf;Fn8cBYhac!4pU&3Gl!!AdP0rE>^66kPTY)>*FJL}$NeVXRyKb%f93d_ z`5VVS%s)8(W&Xu6VJ5V?ve{2v%diZt`QsS0f*jMVG%aAIRNTVu7|gX?`&9wTo>UrDzfTZ z_1VRUT>v;9VI85F?8n&%Z&PEdG1pD3CR{hQnsVLDYQ}YQt2x(4T1Rqylywx>M_Wg8 z-NI_YbxW%y*R8BpT(`DbbKTx*&yhU^@JO+z0LSxKFP3Nh3*TM?>wMOYtuD7ly9rh!jbnHjKQSIiGr}Qg&$G|VFY{oRvuW6!R>#Dva`b=rr zx>$}axKmm-z}`p4aa5YMk?7F?>+Mb^3pwKfgTDyTzh+i!{cTumdXjS=v5rzxY^x zCFKMBinZVPncDB{KT<4OxmdIL70W(lN;jLVPv=KSnhxKK6q zy&>U^^hO*T>y6ReP4p&QH`AMOY_2yaMD1LXsh_N$Oqw0_j)b3vcejxJq}a8PeW^PU zuJ$!4)-S=^Td4P7tXJ)Kb_Fqe^a0WILDBTNqUjr=>F?4CMaLJ5j!!opF-9riyBD(m)jQxk4!?CFJ7K-c^>|}E*Y6qcaXkS)b|JfCz0dVT{Mm(~ z;~R$(2P_=)Qc#s;o88XLLZWNhME?bnhi+C5XWd!}gjpt0RxbX;_N&?qw)B^ON} zG{Q!hYqf(*(5NsfxK{hP1PxX~a;f+#0;nezK(<%_ z^~3_m77L)BSOD3^AI2YOmtJNsbiA?v0%8H=(wkwI1kwHVMAHXEyXT5_FA%++Yu;|& zj;2vPo?>%|IRs6t`aS8U>h~Dtz2?1ysNPSydB1r-*GjuL61~p1OH8;$w0J=DcR=)a zrs(ei(ccY4e;1msny-?+(&Fi&#fwFY7m5})M2i=R7B3VnUTlsv$D+^1nd5j%X>>z0 zdWLB94AJNrqS13jqZ^{p(?p}Ei7qcTr!b$Pj%f6TqRR`->E?7&OKNn(oMq0U?6b|; zP)up}fN1wZ(eAmT-5tGNU@E;{WG-Y*L>Oji@8qy`kv!LecAmqSp&drPqth zb>=#9{K@=@qtfvK(edf*nzo7SpBZf_WM{w-*GlWBi@whneQ$`q&li1fh`!GkeQ%h| zcEj?Bm=P?7o#swbRu({kSO7(4l#!c4a}V<}baO8wIF=b>Zbluk3>uo1%+aVL_CZ6l z%B5)iH4SGnOrNYqM;RF&PN@wEgFhdQ7HCAp;!`yVnY;)^-w5wL!np< zg<>ldihU3e`ygHHgMiov>0%!Q#6CzD`ye3pLAuxn0kIF##Xbm#eUL8pK|t(-bn6%k z$!Q(S=vAS0oP~z9+AxY$XdQ1I&vjcyvkI+tRy(ehC6UhV;3sh1!RkP`vMPdnkCxu7 z*cL(S6zdeOJ6at%o^GAa@l5MXj%QnEb3E5Nm!q;ja>f2I#Qw+?`@<0XBUkJX!@AhI z7^|hL)s-VV9%-3ke-w!Q@&B}U=J8b(R~)}{=DZLQlDNef1f!w?B9O3&h%AaCyD?hS zx;4mBgTw?75fvUd>>VtU zLRMOWtHmsm7~?9=B+1FymJuUzNQe!StHy-_{it0vEH-whYT=ykz9I}ZEn6uxJ@ zfT*#TVnN-2&2(SXK%B~?ZVPOrHrRe$VMO}lO)kgs8b`F*8PS~RMl7o((K5b*P3q=y zCy4Y9%W^Ey*G|TcJDcd27e|*xSM#>RozeZ#a$;X5b@!ki+G0(XVnOyJQbPqcoW<6i zNyOOs*lG_%jYNA}Sy@(FsbjLl%1PCFPGwd&wrb*d9hW6uGmN>bxO6OM@E(o}Y%xZK=b~xEeQkNZ8+p&$=VeO>KYJDV2tnF5+ zt7@~wGF{EF*lMv%}uHm1DEODb_YV$_^PXY;`Hz)7+d290CA;M;qU!4E*{2BRo ze?J>q;KF7E4xqc7d((mb8`PM$q=lcS`m*3m76tLgV7yA8u zkw3r}`!@bS-`2PD2l*0zus_5f>f8In{Nerx-@$kEo&1r$vp>pr@m+m4U+T+zci+SJ z^u2sO=ZF;#xn<8jO$XW2}_;xUSSy`h-5IPwCV8jIP#a^*McBU(i438n;tl z)IaJ=x>jE%4)&|MPG8g4bv@Cr-_SR8qi)j8`nJ9+#kxiE^ex#(TI)N~O7`YHzR#V^ zHp=wX*e(xYi~K*%^#3l-bgDN_iB@FO7v+23jh^_ewVvkQ=5`8eO45qf(|&f_>(YB^ zMi1Pd-j{8U8}%Rcx&NleCHvb;p|`wl{e-8>#`HcFdQ|8)Qq z?AamMoX!(Q~EuRsk z#hAM<;OzKbpLi|X;p@H*Ox<^^Ct&{RorH?F6$OYF>|!nl|5&N(4x853^>YKEaST1xaPuVT?cn{ zBRtj3@KX!mrS5`{x*P6k2|UwMsgrtHCXMp2JSr<>r92@|!8tt(*R%#+X)WHLb$ER? zz#nabAKD^Yn*6+!TpH8lLsD|TFiqYqO};oyUX+q+F(bHRe#T0IVLlgP`scJ`9#_*e zzgQdXaCtDPL)}<+g_}>0{nTw|%qn9%oW`A4LTzqkJSt|a>E$Q*8e-AUh4onlyRw~m zdl~cHi*y#F!wb5VRr88t?PFbHN5=-ms$vUbt7Cu9*_T?%V{Td;l`u2vEW;^NTtze|3UZv`oFIn8wOhmbEG z63h2;umR7B<(tgo68_e~T3Q}JPyLz8x#c)nEg>jFlu=^Go=f&FojijZ4|qiFh}%t`(ROAai3_oUxz0p_omXsM=LD_ArX}k#%Df?@!wZwL zIaOx8FG#lRrX^v7T(AK)&q|WK8}wIFdD|dWd*1SmdrPTP>!ler zf=}72gySBayTWRf6VBFkG|e(FQ?n0}xb_C? zv>%wzzF@uf2QxK~K@x`xHO=F|1YD?T4giz)dY+~6+Y9@dX^)6g<{k7`AKq-xUkvdRVdB;k8Pm z*ZAL)I!?~pY$j==l;G*vv`cEMfGMlxyssbVhv9zAV>G&x_fL|u&s=1Ob6iXKw$MJD zwSu9}u3(JmJG-a0g%pb?b(FOM<4R4(ok8a$>^W*BU3Nr}t;&#DT|4TtSx>C|?oaNcGzrfV_h0`zgfXHO{>4tx z(fo^Ykd(;5a)@h`_Hr0ntzZ*7aNoL9yGbi>7!0J@e5o8*1&x*Aju0!G$4VR~hoq&B zi*lu(93@?(o0Li)IYy36OD&`&v}xi7ieOsXhFZ*Z%jHnLSZlOar|49jmU)CuOQpKy zI+fI1j!QBOmP;G*NtMsek(p+9DmSxC(r?!hv>rE+J>wmcj6^Qi_CWH%Dwjs=%*9&#Zyq{u{Qv*} literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/Ubuntu_regular.ttf b/resources/captcha/fonts/Ubuntu_regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..45a038bade527cbbf30f197c5a116be3cfb2f0a3 GIT binary patch literal 353824 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 z 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 literal 0 HcmV?d00001 diff --git a/resources/captcha/fonts/license/LICENSE-2.0.txt b/resources/captcha/fonts/license/LICENSE-2.0.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/resources/captcha/fonts/license/LICENSE-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/resources/captcha/fonts/license/OFL.txt b/resources/captcha/fonts/license/OFL.txt new file mode 100644 index 0000000..801ca38 --- /dev/null +++ b/resources/captcha/fonts/license/OFL.txt @@ -0,0 +1 @@ +Copyright (c) , (), with Reserved Font Name . Copyright (c) , (), with Reserved Font Name . Copyright (c) , (). This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/resources/captcha/fonts/license/ubuntu-font-licence-1.0.txt b/resources/captcha/fonts/license/ubuntu-font-licence-1.0.txt new file mode 100644 index 0000000..ae78a8f --- /dev/null +++ b/resources/captcha/fonts/license/ubuntu-font-licence-1.0.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. -- 2.45.2 From f2ecdfcf97773f8016049abd7daa88a4fa174491 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 17:22:19 +0600 Subject: [PATCH 11/90] This commit adds an Image interface and implementation that will be used in the Captcha generation process. The Image object includes methods for manipulating an image, such as adding text, inserting a background, and adding a line. These methods will provide the necessary functionalities for generating a Captcha. --- app/Captcha/Contracts/Image.php | 17 ++++ app/Captcha/Images/Image.php | 138 ++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 app/Captcha/Contracts/Image.php create mode 100644 app/Captcha/Images/Image.php diff --git a/app/Captcha/Contracts/Image.php b/app/Captcha/Contracts/Image.php new file mode 100644 index 0000000..15cb650 --- /dev/null +++ b/app/Captcha/Contracts/Image.php @@ -0,0 +1,17 @@ +image = imagecreatetruecolor($width, $height); + } + + public function getWidth(): int + { + return imagesx($this->image); + } + + public function getHeight(): int + { + return imagesy($this->image); + } + + public function insertBackground(string $pathToFile): ImageContract + { + list($backgroundWidth, $backgroundHeight) = getimagesize($pathToFile); + $background = $this->createImageFromPathToFile($pathToFile); + imagecopyresampled( + dst_image: $this->image, + src_image: $background, + dst_x: 0, + dst_y: 0, + src_x: 0, + src_y: 0, + dst_width: $this->getWidth(), + dst_height: $this->getHeight(), + src_width: $backgroundWidth, + src_height: $backgroundHeight + ); + imagedestroy($background); + + return $this; + } + + public function addText(string $text, int $x, int $y, float $size, float $angle, string $hexColor, string $fontName): Coordinators + { + $y += intval($size); + $result = imagefttext( + image: $this->image, + size: $size, + angle: $angle, + x: $x, + y: $y, + color: $this->colorConvertHexToColorIndex($hexColor), + font_filename: $fontName, + text: $text + ); + + return new Coordinators( + x1: $result[0], + y1: $result[1], + x2: $result[2], + y2: $result[3], + x3: $result[4], + y3: $result[5], + x4: $result[6], + y4: $result[7] + ); + } + + public function addLine(int $x1, int $y1, int $x2, int $y2, string $hexColor): self + { + imageline( + image: $this->image, + x1: $x1, + y1: $y1, + x2: $x2, + y2: $y2, + color: $this->colorConvertHexToColorIndex($hexColor) + ); + + return $this; + } + + public function encode(): string + { + ob_start(); + imagealphablending($this->image, false); + imagesavealpha($this->image, true); + imagepng($this->image, null, -1); + $mime = image_type_to_mime_type(IMAGETYPE_PNG); + $buffer = ob_get_contents(); + ob_end_clean(); + + return sprintf('data:%s;base64,%s', + $mime, + base64_encode($buffer) + ); + } + + public function __destruct() { + imagedestroy($this->image); + } + + private function createImageFromPathToFile(string $pathToFile): \GdImage + { + return match (mime_content_type($pathToFile)) { + 'image/jpeg' => imagecreatefromjpeg($pathToFile), + 'image/png' => imagecreatefrompng($pathToFile), + default => throw new CaptchaException('Couldn\'t open the file. Not a valid type. File ' . $pathToFile . '.') + }; + } + + private function colorConvertHexToColorIndex(string $hexColor): int + { + $hexColor = str_replace('#', '', $hexColor); + + if (strlen($hexColor) === 3) { + return imagecolorexact( + image: $this->image, + red: hexdec(str_repeat(substr($hexColor, 0, 1), 2)), + blue: hexdec(str_repeat(substr($hexColor, 1, 1), 2)), + green: hexdec(str_repeat(substr($hexColor, 2, 1), 2)) + ); + } + + $colorVal = hexdec($hexColor); + return imagecolorexact( + image: $this->image, + red: 0xFF & ($colorVal >> 0x10), + blue: 0xFF & ($colorVal >> 0x8), + green: 0xFF & $colorVal + ); + } +} -- 2.45.2 From c1cf5a1ae96a24b69b6116aceefa6321e10505fc Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 17:24:41 +0600 Subject: [PATCH 12/90] This change introduces ImageLines, an interface for adding randomized lines to captcha images for enhanced security. The interface has been implemented in the Lines class. The goal is to randomize lines on captcha images to prevent bot reads. --- app/Captcha/Contracts/ImageLines.php | 8 +++++++ app/Captcha/Images/Lines.php | 36 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 app/Captcha/Contracts/ImageLines.php create mode 100644 app/Captcha/Images/Lines.php diff --git a/app/Captcha/Contracts/ImageLines.php b/app/Captcha/Contracts/ImageLines.php new file mode 100644 index 0000000..5657006 --- /dev/null +++ b/app/Captcha/Contracts/ImageLines.php @@ -0,0 +1,8 @@ +getWidth(); + $imageHeight = $image->getHeight(); + for ($i = 0; $i <= $lines; $i++) { + $image->addLine( + x1: mt_rand(0, $imageWidth) + $i * mt_rand(0, $imageHeight), + y1: mt_rand(0, $imageHeight), + x2: mt_rand(0, $imageWidth), + y2: mt_rand(0, $imageHeight), + hexColor: $this->lineColors($colors) + ); + } + + return $image; + } + + private function lineColors(array $colors): string + { + if (!empty($colors)) { + return Arr::random($colors); + } + + return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT); + } +} -- 2.45.2 From 81635b4efa17363c14b9d6212823811248068f7f Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 17:26:15 +0600 Subject: [PATCH 13/90] This commit adds an ImageManager class that handles the creation of Image instances. It implements an ImageManagerContract, thereby adhering to set guidelines for the creation of captchas. The ImageManager class contains a createImage method capable of creating new instances of Image, allowing for increased flexibility and consistency in CAPTCHA image generation. --- app/Captcha/Contracts/ImageManager.php | 8 ++++++++ app/Captcha/Images/ImageManager.php | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 app/Captcha/Contracts/ImageManager.php create mode 100644 app/Captcha/Images/ImageManager.php diff --git a/app/Captcha/Contracts/ImageManager.php b/app/Captcha/Contracts/ImageManager.php new file mode 100644 index 0000000..4764aad --- /dev/null +++ b/app/Captcha/Contracts/ImageManager.php @@ -0,0 +1,8 @@ +imageClassName($width, $height); + } + +} -- 2.45.2 From a35b8db2810dc73f0a9a39e2439d328887fbdab9 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 17:29:56 +0600 Subject: [PATCH 14/90] Add captcha image generation functionality. --- app/Captcha/Config/ImageBody.php | 144 +++++++++++++++++ app/Captcha/Config/ImageHead.php | 147 ++++++++++++++++++ app/Captcha/Contracts/ImageBody.php | 12 ++ app/Captcha/Contracts/ImageHead.php | 12 ++ app/Captcha/Contracts/Type.php | 10 ++ app/Captcha/Dto/Coordinators.php | 89 +++++++++++ app/Captcha/Dto/Image.php | 36 +++++ app/Captcha/Dto/ImageBody.php | 27 ++++ app/Captcha/Dto/ImageHead.php | 18 +++ app/Captcha/Dto/Sector.php | 45 ++++++ app/Captcha/Dto/Sectors.php | 24 +++ app/Captcha/Dto/Symbols.php | 38 +++++ app/Captcha/Enums/SymbolType.php | 8 + app/Captcha/Exceptions/CaptchaException.php | 8 + app/Captcha/Images/Body.php | 117 ++++++++++++++ app/Captcha/Images/Head.php | 72 +++++++++ app/Captcha/Type.php | 26 ++++ app/Captcha/Types/StringType.php | 104 +++++++++++++ .../Controllers/Api/V1/CaptchaController.php | 24 +++ .../Controllers/{ => Api/V1}/Controller.php | 4 +- app/Http/Resources/Api/V1/Captcha.php | 31 ++++ app/Providers/AppServiceProvider.php | 29 +++- .../Api/V1/CaptchaService/Captcha.php | 38 +++++ app/Services/Api/V1/CaptchaService.php | 97 ++++++++++++ app/Services/Service.php | 54 +++++++ routes/api-v1.php | 2 + 26 files changed, 1211 insertions(+), 5 deletions(-) create mode 100644 app/Captcha/Config/ImageBody.php create mode 100644 app/Captcha/Config/ImageHead.php create mode 100644 app/Captcha/Contracts/ImageBody.php create mode 100644 app/Captcha/Contracts/ImageHead.php create mode 100644 app/Captcha/Contracts/Type.php create mode 100644 app/Captcha/Dto/Coordinators.php create mode 100644 app/Captcha/Dto/Image.php create mode 100644 app/Captcha/Dto/ImageBody.php create mode 100644 app/Captcha/Dto/ImageHead.php create mode 100644 app/Captcha/Dto/Sector.php create mode 100644 app/Captcha/Dto/Sectors.php create mode 100644 app/Captcha/Dto/Symbols.php create mode 100644 app/Captcha/Enums/SymbolType.php create mode 100644 app/Captcha/Exceptions/CaptchaException.php create mode 100644 app/Captcha/Images/Body.php create mode 100644 app/Captcha/Images/Head.php create mode 100644 app/Captcha/Type.php create mode 100644 app/Captcha/Types/StringType.php create mode 100644 app/Http/Controllers/Api/V1/CaptchaController.php rename app/Http/Controllers/{ => Api/V1}/Controller.php (78%) create mode 100644 app/Http/Resources/Api/V1/Captcha.php create mode 100644 app/ServiceResults/Api/V1/CaptchaService/Captcha.php create mode 100644 app/Services/Api/V1/CaptchaService.php create mode 100644 app/Services/Service.php diff --git a/app/Captcha/Config/ImageBody.php b/app/Captcha/Config/ImageBody.php new file mode 100644 index 0000000..d557311 --- /dev/null +++ b/app/Captcha/Config/ImageBody.php @@ -0,0 +1,144 @@ +width <= 0) { + throw new CaptchaException('Incorrect $width settings.'); + } + if ($this->height <= 0) { + throw new CaptchaException('Incorrect $height settings.'); + } + if (count($this->backgrounds) < 1) { + throw new CaptchaException('Invalid $backgrounds parameter.'); + } + if (count($this->fonts) < 1) { + throw new CaptchaException('Invalid $fonts parameter.'); + } + if (count($this->fontColors) < 1) { + throw new CaptchaException('Invalid $fontColors parameter.'); + } + if ($this->angle < 0) { + throw new CaptchaException('Incorrect $angle settings.'); + } + + if (!is_integer($this->fontSize) && !is_array($this->fontSize)) { + throw new CaptchaException('The $fontSize parameter is not an array or integer.'); + } elseif (is_array($this->fontSize)) { + if (count($this->fontSize) > 2) { + throw new CaptchaException('The array of $fontSize parameters contains more than 2 keys.'); + } + if ($this->fontSize[0] > $this->fontSize[1]) { + throw new CaptchaException('The number of $fontSize[1] is less than $fontSize[0].'); + } + } + } + + /** + * @return array + */ + public function getBackgrounds(): array + { + return $this->backgrounds; + } + + public function randomBackground(): string + { + return Arr::random($this->getBackgrounds()); + } + + /** + * @return array + */ + public function getFonts(): array + { + return $this->fonts; + } + + public function randomFont(): string + { + return Arr::random($this->getFonts()); + } + + /** + * @return array + */ + public function getFontColors(): array + { + return $this->fontColors; + } + + public function randomFontColor(): string + { + return Arr::random($this->getFontColors()); + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * @return int + */ + public function getAngle(): int + { + return $this->angle; + } + + public function randomAngle(): int + { + return mt_rand($this->getAngle() * -1, $this->getAngle()); + } + + public function getNumberLines(): int + { + return $this->numberLines; + } + + public function fontSize(): int + { + $fontSize = $this->fontSize; + if (is_integer($fontSize)) { + return $fontSize; + } + if (empty($fontSize[1])) { + return $fontSize[0]; + } + return random_int($fontSize[0], $fontSize[1]); + } + + /** + * @return array + */ + public function getLineColors(): array + { + return $this->lineColors; + } +} diff --git a/app/Captcha/Config/ImageHead.php b/app/Captcha/Config/ImageHead.php new file mode 100644 index 0000000..55bddd8 --- /dev/null +++ b/app/Captcha/Config/ImageHead.php @@ -0,0 +1,147 @@ +width <= 0) { + throw new CaptchaException('Incorrect $width settings.'); + } + if ($this->height <= 0) { + throw new CaptchaException('Incorrect $height settings.'); + } + if ($this->textPaddingTop < 0) { + throw new CaptchaException('Incorrect $textPaddingTop settings.'); + } + if ($this->textPaddingLeft < 0) { + throw new CaptchaException('Incorrect $textPaddingLeft settings.'); + } + if (count($this->backgrounds) < 1) { + throw new CaptchaException('Invalid $backgrounds parameter.'); + } + if (count($this->fonts) < 1) { + throw new CaptchaException('Invalid $fonts parameter.'); + } + if (count($this->fontColors) < 1) { + throw new CaptchaException('Invalid $fontColors parameter.'); + } + if ($this->angle < 0) { + throw new CaptchaException('Incorrect $angle settings.'); + } + if ($this->numberLines < 0) { + throw new CaptchaException('Incorrect $numberLines settings.'); + } + } + + /** + * @return array + */ + public function getBackgrounds(): array + { + return $this->backgrounds; + } + + public function randomBackground(): string + { + return Arr::random($this->getBackgrounds()); + } + + /** + * @return array + */ + public function getFonts(): array + { + return $this->fonts; + } + + public function randomFont(): string + { + return Arr::random($this->getFonts()); + } + + /** + * @return array + */ + public function getFontColors(): array + { + return $this->fontColors; + } + + public function randomFontColor(): string + { + return Arr::random($this->getFontColors()); + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * @return int + */ + public function getTextPaddingTop(): int + { + return $this->textPaddingTop; + } + + /** + * @return int + */ + public function getTextPaddingLeft(): int + { + return $this->textPaddingLeft; + } + + /** + * @return int + */ + public function getAngle(): int + { + return $this->angle; + } + + public function randomAngle(): int + { + return mt_rand($this->getAngle() * -1, $this->getAngle()); + } + + public function getNumberLines(): int + { + return $this->numberLines; + } + + /** + * @return array + */ + public function getLineColors(): array + { + return $this->lineColors; + } +} diff --git a/app/Captcha/Contracts/ImageBody.php b/app/Captcha/Contracts/ImageBody.php new file mode 100644 index 0000000..549363c --- /dev/null +++ b/app/Captcha/Contracts/ImageBody.php @@ -0,0 +1,12 @@ +x1; + } + + /** + * lower left y-coordinate + * @return int + */ + public function getY1(): int + { + return $this->y1; + } + + /** + * lower right x-coordinate + * @return int + */ + public function getX2(): int + { + return $this->x2; + } + + /** + * lower right y-coordinate + * @return int + */ + public function getY2(): int + { + return $this->y2; + } + + /** + * upper right x-coordinate + * @return int + */ + public function getX3(): int + { + return $this->x3; + } + + /** + * upper right y-coordinate + * @return int + */ + public function getY3(): int + { + return $this->y3; + } + + /** + * upper left x-coordinate + * @return int + */ + public function getX4(): int + { + return $this->x4; + } + + /** + * upper left y-coordinate + * @return int + */ + public function getY4(): int + { + return $this->y4; + } +} diff --git a/app/Captcha/Dto/Image.php b/app/Captcha/Dto/Image.php new file mode 100644 index 0000000..0a737f4 --- /dev/null +++ b/app/Captcha/Dto/Image.php @@ -0,0 +1,36 @@ +imageBase64; + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } +} diff --git a/app/Captcha/Dto/ImageBody.php b/app/Captcha/Dto/ImageBody.php new file mode 100644 index 0000000..1a99d5a --- /dev/null +++ b/app/Captcha/Dto/ImageBody.php @@ -0,0 +1,27 @@ +image; + } + + /** + * @return Coordinators + */ + public function getCoordinators(): array + { + return $this->coordinators; + } +} diff --git a/app/Captcha/Dto/ImageHead.php b/app/Captcha/Dto/ImageHead.php new file mode 100644 index 0000000..1cd5540 --- /dev/null +++ b/app/Captcha/Dto/ImageHead.php @@ -0,0 +1,18 @@ +image; + } +} diff --git a/app/Captcha/Dto/Sector.php b/app/Captcha/Dto/Sector.php new file mode 100644 index 0000000..e6674b2 --- /dev/null +++ b/app/Captcha/Dto/Sector.php @@ -0,0 +1,45 @@ +x; + } + + /** + * @return int + */ + public function getY(): int + { + return $this->y; + } + + /** + * @return int + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * @return int + */ + public function getHeight(): int + { + return $this->height; + } +} diff --git a/app/Captcha/Dto/Sectors.php b/app/Captcha/Dto/Sectors.php new file mode 100644 index 0000000..0107085 --- /dev/null +++ b/app/Captcha/Dto/Sectors.php @@ -0,0 +1,24 @@ +points[] = new Sector((int) $x, (int) $y, (int) $width, (int) $height); + + return $this; + } + + public function random(): Sector + { + $key = array_rand($this->points); + $sector = $this->points[$key]; + unset($this->points[$key]); + + return $sector; + } +} diff --git a/app/Captcha/Dto/Symbols.php b/app/Captcha/Dto/Symbols.php new file mode 100644 index 0000000..cae19af --- /dev/null +++ b/app/Captcha/Dto/Symbols.php @@ -0,0 +1,38 @@ +success; + } + + /** + * @return array + */ + public function getFakes(): array + { + return $this->fakes; + } + + /** + * @return SymbolType + */ + public function getType(): SymbolType + { + return $this->type; + } +} diff --git a/app/Captcha/Enums/SymbolType.php b/app/Captcha/Enums/SymbolType.php new file mode 100644 index 0000000..b7ebb5e --- /dev/null +++ b/app/Captcha/Enums/SymbolType.php @@ -0,0 +1,8 @@ +imageManager->createImage($config->getWidth(), $config->getHeight()); + $image->insertBackground($config->randomBackground()); + + $imageData = match ($symbols->getType()) { + SymbolType::String => $this->processingString($image, $symbols, $config), + }; + $image = $imageData['image']; + + if ($config->getNumberLines() > 0) { + $this->imageLines->processing(image: $image, colors: $config->getLineColors(), lines: $config->getNumberLines()); + } + + $image = new ImageDto( + imageBase64: $image->encode(), + width: $image->getWidth(), + height: $image->getHeight() + ); + + return new ImageBodyDto( + image: $image, + coordinators: $imageData['coordinators'] + ); + } + + private function processingString(Image $image, Symbols $symbols, ImageBodyConfig $config): array + { + $sectors = $this->calculateSectors($symbols, $image->getWidth(), $image->getHeight()); + $coordinators = []; + foreach ($symbols->getSuccess() as $number => $symbol) { + $coordinators[] = $this->processingStringSymbol($image, $symbol, $config, $sectors->random()); + } + + if (!empty($symbols->getFakes())) { + foreach ($symbols->getFakes() as $number => $symbol) { + $this->processingStringSymbol($image, $symbol, $config, $sectors->random()); + } + } + + return [ + 'image' => $image, + 'coordinators' => $coordinators + ]; + } + + private function processingStringSymbol(Image &$image, string|int $symbol, ImageBodyConfig $config, Sector $sector): Coordinators + { + $fontSize = $config->fontSize(); + if ($fontSize > $sector->getHeight()) { + $fontSize = $sector->getHeight(); + } + $fontPathFile = $config->randomFont(); + $fontColor = $config->randomFontColor(); + $angle = $config->randomAngle(); + $marginLeft = mt_rand($sector->getX(), $sector->getX() + $sector->getWidth() - $fontSize); + $marginTop = mt_rand($sector->getY(), $sector->getY() + $sector->getHeight() - $fontSize); + + return $image->addText( + text: $symbol, + x: $marginLeft, + y: $marginTop, + size: $fontSize, + angle: $angle, + hexColor: $fontColor, + fontName: $fontPathFile + ); + } + + private function calculateSectors(Symbols $symbols, int $width, int $height): Sectors + { + $points = count($symbols->getSuccess()) + count($symbols->getFakes()); + $sumFloors = 3; + $sumRooms = ceil($points / $sumFloors); + + $heightFloor = floor($height / $sumFloors); + $widthFloor = floor($width / $sumRooms); + + $sectors = new Sectors(); + for ($floor = 0; $floor < $sumFloors; $floor++) { + $y = $heightFloor * $floor; + for ($room = 0; $room < $sumRooms; $room++) { + $sectors->add( + x: ($widthFloor * $room), + y: $y, + width: $widthFloor, + height: $heightFloor + ); + } + } + + return $sectors; + } +} diff --git a/app/Captcha/Images/Head.php b/app/Captcha/Images/Head.php new file mode 100644 index 0000000..729f855 --- /dev/null +++ b/app/Captcha/Images/Head.php @@ -0,0 +1,72 @@ +imageManager->createImage($config->getWidth(), $config->getHeight()); + $image->insertBackground($config->randomBackground()); + + $image = match ($symbols->getType()) { + SymbolType::String => $this->processingString($image, $symbols, $config), + }; + if ($config->getNumberLines() > 0) { + $this->imageLines->processing(image: $image, colors: $config->getLineColors(), lines: $config->getNumberLines()); + } + + $image = new ImageDto( + imageBase64: $image->encode(), + width: $image->getWidth(), + height: $image->getHeight() + ); + + return new ImageHeadDto(image: $image); + } + + private function processingString(ImageContract $image, Symbols $symbols, ImageHeadConfig $config): Image + { + $textLeftPadding = $config->getTextPaddingLeft(); + $textTopPadding = $config->getTextPaddingTop(); + $countSymbols = count($symbols->getSuccess()); + $widthPrefix = $image->getWidth() - $textLeftPadding; + $imageHeight = $image->getHeight() - $textTopPadding; + + foreach ($symbols->getSuccess() as $number => $symbol) { + $marginLeft = $textLeftPadding + $number * $widthPrefix / $countSymbols; + + $image->addText( + text: $symbol, + x: intval($marginLeft), + y: $textTopPadding, + size: $this->randomFontSize($imageHeight), + angle: $config->randomAngle(), + hexColor: $config->randomFontColor(), + fontName: $config->randomFont() + ); + } + + return $image; + } + + private function randomFontSize(int $imageHeight): int + { + return mt_rand($imageHeight - 10, $imageHeight); + } +} diff --git a/app/Captcha/Type.php b/app/Captcha/Type.php new file mode 100644 index 0000000..c99ef00 --- /dev/null +++ b/app/Captcha/Type.php @@ -0,0 +1,26 @@ +config; + } + + final public function getConfigValue(string | int $name, mixed $default = null): mixed + { + $config = $this->getConfig(); + return $config[$name] ?? $default; + } +} diff --git a/app/Captcha/Types/StringType.php b/app/Captcha/Types/StringType.php new file mode 100644 index 0000000..121993a --- /dev/null +++ b/app/Captcha/Types/StringType.php @@ -0,0 +1,104 @@ +lengthSymbols(); + $lengthFakeSymbols = $this->lengthFakeSymbols(); + + $success = $this->randomSymbols($lengthSymbols); + $fakes = []; + if (!empty($lengthFakeSymbols)) { + $fakes = $this->randomSymbols($lengthFakeSymbols, $fakes); + } + + return new Symbols( + success: $success, + fakes: $fakes, + type: SymbolType::String + ); + } + + /** + * @param int $min + * @param int $max + * @param array $except + * @return array + * @throws CaptchaException + */ + private function randomSymbols(int $lenght, array $except = []): array + { + $symbols = $this->symbols(); + if (!empty($except)) { + $symbols = array_diff($symbols, $except); + } + + if (count($symbols) < $lenght) { + throw new CaptchaException('The number of characters is less than $lenght.'); + } + + return Arr::random($symbols, $lenght); + } + + /** + * @return array + * @throws CaptchaException + */ + private function symbols(): array + { + $symbols = $this->getConfigValue('symbols'); + if (!is_array($symbols)) { + throw new CaptchaException('The symbols parameter is not an array.'); + } + return $symbols; + } + + private function lengthSymbols(): int + { + $length = $this->getConfigValue('length_symbols'); + if (is_integer($length)) { + return $length; + } + if (!is_array($length)) { + throw new CaptchaException('The length_symbols parameter is not an array or integer.'); + } + if (count($length) > 2) { + throw new CaptchaException('The array of length_symbols parameters contains more than 2 keys.'); + } + if ($length[0] > $length[1]) { + throw new CaptchaException('The number of length_symbols[1] is less than length_symbols[0].'); + } + return random_int($length[0], $length[1]); + } + + private function lengthFakeSymbols(): int + { + $length = $this->getConfigValue('length_fake_symbols'); + if (is_integer($length)) { + return $length; + } + if (is_null($length) || $length === false) { + return 0; + } + if (!is_array($length)) { + throw new CaptchaException('The length_fake_symbols parameter is not an array or integer or null or false.'); + } + if (count($length) > 2) { + throw new CaptchaException('The array of length_fake_symbols parameters contains more than 2 keys.'); + } + if ($length[0] > $length[1]) { + throw new CaptchaException('The number of length_fake_symbols[1] is less than length_fake_symbols[0].'); + } + return random_int($length[0], $length[1]); + } +} diff --git a/app/Http/Controllers/Api/V1/CaptchaController.php b/app/Http/Controllers/Api/V1/CaptchaController.php new file mode 100644 index 0000000..1e1f3f9 --- /dev/null +++ b/app/Http/Controllers/Api/V1/CaptchaController.php @@ -0,0 +1,24 @@ +captchaService->generate(); + if (!$result->isSuccess()) { + return response()->json($result->getData())->setStatusCode($result->getCode()); + } + + return response()->json(new Captcha($result)); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Api/V1/Controller.php similarity index 78% rename from app/Http/Controllers/Controller.php rename to app/Http/Controllers/Api/V1/Controller.php index 77ec359..8075c0e 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Api/V1/Controller.php @@ -1,6 +1,6 @@ - $this->resource->getImageBase64(), + 'image_text_base64' => $this->resource->getImageTextBase64(), + 'captcha_key' => $this->resource->getKey() + ]; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..4d778a2 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -1,17 +1,40 @@ -app->bind(ImageManagerContract::class, function () { + return new ImageManager(imageClassName: config('captcha.imageClass')); + }); + $this->app->bind(ImageHead::class, Head::class); + $this->app->bind(ImageBody::class, Body::class); + $this->app->bind(ImageLines::class, Lines::class); + + $this->app->bind(CaptchaService::class, function (Application $app) { + return new CaptchaService( + config: config('captcha', []), + imageHead: $app->make(ImageHead::class), + imageBody: $app->make(ImageBody::class) + ); + }); } /** diff --git a/app/ServiceResults/Api/V1/CaptchaService/Captcha.php b/app/ServiceResults/Api/V1/CaptchaService/Captcha.php new file mode 100644 index 0000000..79edf7c --- /dev/null +++ b/app/ServiceResults/Api/V1/CaptchaService/Captcha.php @@ -0,0 +1,38 @@ +imageBase64; + } + + /** + * @return string + */ + public function getImageTextBase64(): string + { + return $this->imageTextBase64; + } + + /** + * @return string + */ + public function getKey(): string + { + return $this->key; + } +} diff --git a/app/Services/Api/V1/CaptchaService.php b/app/Services/Api/V1/CaptchaService.php new file mode 100644 index 0000000..33553d2 --- /dev/null +++ b/app/Services/Api/V1/CaptchaService.php @@ -0,0 +1,97 @@ +config['types'] ?? []; + if (empty($types)) { + $error = __('No captcha type settings!'); + report($error); + return $this->errService($error); + } + + try { + $type = Arr::random($types); + + /** @var Type $captcha */ + $typeCaptcha = new $type['class']( + $type['params'] ?? [] + ); + $symbols = $typeCaptcha->getSymbols(); + + $imageHeadConfig = $this->makeImageHeadConfig($this->config['image_head'] ?? []); + $imageHead = $this->imageHead->processing($symbols, $imageHeadConfig); + unset($imageHeadConfig); + + $imageBodyConfig = $this->makeImageBodyConfig($this->config['image_body'] ?? []); + $imageBody = $this->imageBody->processing($symbols, $imageBodyConfig); + unset($imageBodyConfig); + + + dd($imageHead, $imageBody); + } catch (\Throwable $e) { + report($e); + return $this->errService('Captcha service error!'); + } + + + + + + return new Captcha( + imageBase64: $imageHead->getImage()->getImageBase64(), + imageTextBase64: $imageBody->getImage()->getImageBase64(), + key: 'dddd' + ); + } + + private function makeImageHeadConfig(array $params): ImageHeadConfig + { + return new ImageHeadConfig( + backgrounds: $params['backgrounds'] ?? [], + fonts: $params['fonts'] ?? [], + fontColors: $params['font_colors'] ?? [], + width: $params['width'] ?? 150, + height: $params['height'] ?? 40, + textPaddingTop: $params['text_padding_top'] ?? 5, + textPaddingLeft: $params['text_padding_left'] ?? 10, + angle: $params['angle'] ?? 20, + numberLines: $params['number_lines'] ?? 3, + lineColors: $params['line_colors'] ?? [] + ); + } + + private function makeImageBodyConfig(array $params): ImageBodyConfig + { + return new ImageBodyConfig( + backgrounds: $params['backgrounds'] ?? [], + fonts: $params['fonts'] ?? [], + fontColors: $params['font_colors'] ?? [], + width: $params['width'] ?? 300, + height: $params['height'] ?? 240, + angle: $params['angle'] ?? 20, + fontSize: $params['font_size'] ?? [20, 50], + numberLines: $params['number_lines'] ?? 3, + lineColors: $params['line_colors'] ?? [] + ); + } +} diff --git a/app/Services/Service.php b/app/Services/Service.php new file mode 100644 index 0000000..10fb348 --- /dev/null +++ b/app/Services/Service.php @@ -0,0 +1,54 @@ +error(422, $message, $errors); + } + + final protected function errFobidden(string $message): ServiceResultError + { + return $this->error(403, $message); + } + + final protected function errNotFound(string $message): ServiceResultError + { + return $this->error(404, $message); + } + + final protected function errService(string $message): ServiceResultError + { + return $this->error(500, $message); + } + + final protected function notAcceptable(string $message): ServiceResultError + { + return $this->error(406, $message); + } + + final protected function ok(string $message = 'OK'): ServiceResultArray + { + return $this->result(['message' => $message]); + } + + final protected function result(array $data = []): ServiceResultArray + { + return new ServiceResultArray(data: $data); + } + + final protected function error(int $code, string $message, array $errors = []): ServiceResultError + { + return new ServiceResultError( + message: $message, + errors: $errors, + code: $code + ); + } +} diff --git a/routes/api-v1.php b/routes/api-v1.php index fa84410..a6295b9 100644 --- a/routes/api-v1.php +++ b/routes/api-v1.php @@ -13,3 +13,5 @@ use Illuminate\Support\Facades\Route; | be assigned to the "api" middleware group. Make something great! | */ + +Route::get('/captcha', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'getCaptcha']); -- 2.45.2 From fcf7cfa584896e11683508b9dd372acf9aea96ad Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 21:43:39 +0600 Subject: [PATCH 15/90] This commit introduces a MySQL container and an Adminer container to the docker-compose.yml file. The dependencies list was also updated, swapping the 'app' and 'db' listings to ensure the correct start-up order. An additional MySQL configuration file was added to mitigate heavy CPU usage. A new .gitignore file is also introduced to avoid unintended inclusion of database files in version control. --- docker-compose.yml | 22 +++++++++++++++++++++- docker/dev/.gitignore | 2 ++ docker/dev/my.cnf | 9 +++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 docker/dev/.gitignore create mode 100644 docker/dev/my.cnf diff --git a/docker-compose.yml b/docker-compose.yml index 16ef840..eff1f1f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,8 +9,9 @@ services: - ${DOCKER_ANGIE_PORT}:80 #restart: always depends_on: - - app + - db - redis + - app app: image: service-captcha-laravel container_name: service-captcha-laravel-www @@ -25,3 +26,22 @@ services: - "9000" redis: image: redis:3.0-alpine + db: + image: mysql:8.0.33 + command: --default-authentication-plugin=mysql_native_password + #restart: always + ports: + - ${DOCKER_DB_PORT}:3306 + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_DATABASE: ${DB_DATABASE} + MYSQL_USER: ${DB_USERNAME} + MYSQL_PASSWORD: ${DB_PASSWORD} + volumes: + - ./docker/dev/db:/var/lib/mysql + - ./docker/dev/my.cnf:/etc/mysql/conf.d/my.cnf + adminer: + image: adminer + #restart: always + ports: + - ${DOCKER_ADMINER_PORT}:8080 diff --git a/docker/dev/.gitignore b/docker/dev/.gitignore new file mode 100644 index 0000000..2f526f2 --- /dev/null +++ b/docker/dev/.gitignore @@ -0,0 +1,2 @@ +db/* +!db/.gitignore diff --git a/docker/dev/my.cnf b/docker/dev/my.cnf new file mode 100644 index 0000000..c56e049 --- /dev/null +++ b/docker/dev/my.cnf @@ -0,0 +1,9 @@ +[mysqld] +innodb_lru_scan_depth=100 # from 1024 to conserve 90% CPU cycles used for function +innodb_io_capacity=1900 # from 200 to allow more IOPSecond to your storage device +innodb_flush_neighbors=2 # from 0 to expedite writing to current extent +innodb_max_dirty_pages_pct_lwm=1 # from 10 percent to expedite writes +innodb_max_dirty_pages_pct=1 # from 90 percent to reduce innodb_buffer_pool_pages_dirty count +innodb_change_buffer_max_size=50 # from 25 percent to expedite your high volume activity +innodb_flush_log_at_trx_commit=0 +skip_log_bin=1 -- 2.45.2 From cf449eb8e2fe8a7118ba3f6271ff392e8556d982 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 23:05:31 +0600 Subject: [PATCH 16/90] Add SoftDeletes feature to User model. --- app/Models/User.php | 3 ++- database/migrations/2014_10_12_000000_create_users_table.php | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Models/User.php b/app/Models/User.php index 23b4063..7305dc7 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,13 +4,14 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { - use HasApiTokens, HasFactory, Notifiable; + use HasApiTokens, HasFactory, Notifiable, SoftDeletes; /** * The attributes that are mass assignable. diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 444fafb..76d2754 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -19,6 +19,7 @@ return new class extends Migration $table->string('password'); $table->rememberToken(); $table->timestamps(); + $table->softDeletes(); }); } -- 2.45.2 From 34319e5724d31271610cad68a894216fe3a256a5 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 23:44:06 +0600 Subject: [PATCH 17/90] Additional fields 'is_active' and 'timezone' have been added to the users table in the database migrations and the User model. This update allows us to better manage user's activation status and time zone preferences. 'is_active' field, a boolean field, signifies the active status of a user and has been set to default to false. 'timezone', an optional string, will store user's preferred timezone. --- app/Models/User.php | 3 +++ database/migrations/2014_10_12_000000_create_users_table.php | 2 ++ 2 files changed, 5 insertions(+) diff --git a/app/Models/User.php b/app/Models/User.php index 7305dc7..b1843b9 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -22,6 +22,8 @@ class User extends Authenticatable 'name', 'email', 'password', + 'timezone', + 'is_active', ]; /** @@ -41,5 +43,6 @@ class User extends Authenticatable */ protected $casts = [ 'email_verified_at' => 'datetime', + 'is_active' => 'boolean' ]; } diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 76d2754..8b37449 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -13,11 +13,13 @@ return new class extends Migration { Schema::create('users', function (Blueprint $table) { $table->id(); + $table->boolean('is_active')->default(0)->index(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); + $table->string('timezone')->nullable(); $table->timestamps(); $table->softDeletes(); }); -- 2.45.2 From 90cab02d62206c95a9c7f35f3d920875eb67e21c Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 28 Jun 2023 23:46:16 +0600 Subject: [PATCH 18/90] Enforce strict types and final class in User model. --- app/Models/User.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index b1843b9..8d6ac1d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -1,4 +1,4 @@ - Date: Thu, 29 Jun 2023 00:06:27 +0600 Subject: [PATCH 19/90] A new 'locale' field of string type with a maximum length of 2 characters and a default value as 'ru' has been added to the users table through a migration file. This field has been also added to the User model. The addition of the 'locale' field will allow users to specify their preferred language in their profile settings. --- app/Models/User.php | 1 + database/migrations/2014_10_12_000000_create_users_table.php | 1 + 2 files changed, 2 insertions(+) diff --git a/app/Models/User.php b/app/Models/User.php index 8d6ac1d..af1babe 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -24,6 +24,7 @@ final class User extends Authenticatable 'password', 'timezone', 'is_active', + 'locale', ]; /** diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 8b37449..28d52cf 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -19,6 +19,7 @@ return new class extends Migration $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); + $table->string('locale', 2)->default('ru'); $table->string('timezone')->nullable(); $table->timestamps(); $table->softDeletes(); -- 2.45.2 From b9f88ba2eb3348ccfe1f38b45f66d808270bf128 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 00:06:52 +0600 Subject: [PATCH 20/90] Change default locale settings to Russian. --- config/app.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/app.php b/config/app.php index ef76a7e..15f6c33 100644 --- a/config/app.php +++ b/config/app.php @@ -82,7 +82,7 @@ return [ | */ - 'locale' => 'en', + 'locale' => 'ru', /* |-------------------------------------------------------------------------- @@ -95,7 +95,7 @@ return [ | */ - 'fallback_locale' => 'en', + 'fallback_locale' => 'ru', /* |-------------------------------------------------------------------------- @@ -108,7 +108,7 @@ return [ | */ - 'faker_locale' => 'en_US', + 'faker_locale' => 'ru_RU', /* |-------------------------------------------------------------------------- -- 2.45.2 From 6b8554d6d879b191b0f1bf0554ba48facdd51b09 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:11:53 +0600 Subject: [PATCH 21/90] Updated composer.lock dependencies settings. Added laravel-lang/common. --- composer.json | 1 + composer.lock | 857 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 857 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b40b2d0..b30e8f1 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ }, "require-dev": { "fakerphp/faker": "^1.9.1", + "laravel-lang/common": "^3.1", "laravel/pint": "^1.0", "laravel/sail": "^1.18", "mockery/mockery": "^1.4.4", diff --git a/composer.lock b/composer.lock index 5197328..dabd871 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d3514981a93fe871564aa46c2746bca8", + "content-hash": "e0b02ec003503b320831a9a9a4f8a9d2", "packages": [ { "name": "brick/math", @@ -5409,6 +5409,385 @@ } ], "packages-dev": [ + { + "name": "archtechx/enums", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/archtechx/enums.git", + "reference": "475f45e682b0771253707f9403b704759a08da5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/archtechx/enums/zipball/475f45e682b0771253707f9403b704759a08da5f", + "reference": "475f45e682b0771253707f9403b704759a08da5f", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "nunomaduro/larastan": "^1.0|^2.4", + "orchestra/testbench": "^6.9|^7.0|^8.0", + "pestphp/pest": "^1.2|^2.0", + "pestphp/pest-plugin-laravel": "^1.0|^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ArchTech\\Enums\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Štancl", + "email": "samuel@archte.ch" + } + ], + "description": "Helpers for making PHP enums more lovable.", + "support": { + "issues": "https://github.com/archtechx/enums/issues", + "source": "https://github.com/archtechx/enums/tree/v0.3.2" + }, + "time": "2023-02-15T13:05:41+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "dragon-code/contracts", + "version": "v2.20.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/contracts.git", + "reference": "410d35bec404f465a126bb1e672f3abe1150f5d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/410d35bec404f465a126bb1e672f3abe1150f5d7", + "reference": "410d35bec404f465a126bb1e672f3abe1150f5d7", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.23" + }, + "conflict": { + "andrey-helldar/contracts": "*" + }, + "require-dev": { + "illuminate/database": "^10.0", + "phpdocumentor/reflection-docblock": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\Contracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "A set of contracts for any project", + "keywords": [ + "contracts", + "interfaces" + ], + "support": { + "source": "https://github.com/TheDragonCode/contracts" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-06-02T11:06:31+00:00" + }, + { + "name": "dragon-code/pretty-array", + "version": "v4.1.0", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/pretty-array.git", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/6c84e2454491b414efbd37985c322712cdf9012f", + "reference": "6c84e2454491b414efbd37985c322712cdf9012f", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.20", + "dragon-code/support": "^6.11.2", + "ext-dom": "*", + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^10.2" + }, + "suggest": { + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "autoload": { + "psr-4": { + "DragonCode\\PrettyArray\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Simple conversion of an array to a pretty view", + "keywords": [ + "andrey helldar", + "array", + "dragon", + "dragon code", + "pretty", + "pretty array" + ], + "support": { + "issues": "https://github.com/TheDragonCode/pretty-array/issues", + "source": "https://github.com/TheDragonCode/pretty-array" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-06-02T11:37:44+00:00" + }, + { + "name": "dragon-code/support", + "version": "v6.11.2", + "source": { + "type": "git", + "url": "https://github.com/TheDragonCode/support.git", + "reference": "81b4432f35ee5d1d7a310669ccc698d78b3e83a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TheDragonCode/support/zipball/81b4432f35ee5d1d7a310669ccc698d78b3e83a6", + "reference": "81b4432f35ee5d1d7a310669ccc698d78b3e83a6", + "shasum": "" + }, + "require": { + "dragon-code/contracts": "^2.19.1", + "ext-bcmath": "*", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "psr/http-message": "^1.0.1 || ^2.0", + "symfony/polyfill-php81": "^1.25", + "voku/portable-ascii": "^1.4.8 || ^2.0.1" + }, + "conflict": { + "andrey-helldar/support": "*" + }, + "require-dev": { + "illuminate/contracts": "^9.0 || ^10.0", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^6.0" + }, + "suggest": { + "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", + "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" + }, + "type": "library", + "extra": { + "dragon-code": { + "docs-generator": { + "preview": { + "brand": "php", + "vendor": "The Dragon Code" + } + } + } + }, + "autoload": { + "psr-4": { + "DragonCode\\Support\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Support package is a collection of helpers and tools for any project.", + "keywords": [ + "dragon", + "dragon-code", + "framework", + "helper", + "helpers", + "laravel", + "php", + "support", + "symfony", + "yii", + "yii2" + ], + "support": { + "issues": "https://github.com/TheDragonCode/support/issues", + "source": "https://github.com/TheDragonCode/support" + }, + "funding": [ + { + "url": "https://boosty.to/dragon-code", + "type": "boosty" + }, + { + "url": "https://github.com/sponsors/TheDragonCode", + "type": "github" + }, + { + "url": "https://opencollective.com/dragon-code", + "type": "open_collective" + }, + { + "url": "https://yoomoney.ru/to/410012608840929", + "type": "yoomoney" + } + ], + "time": "2023-04-19T08:29:55+00:00" + }, { "name": "fakerphp/faker", "version": "v1.21.0", @@ -5599,6 +5978,403 @@ }, "time": "2020-07-09T08:09:16+00:00" }, + { + "name": "laravel-lang/attributes", + "version": "v2.3.3", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/attributes.git", + "reference": "866473306491d9b84d37dfbb80193ce8099368ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/866473306491d9b84d37dfbb80193ce8099368ad", + "reference": "866473306491d9b84d37dfbb80193ce8099368ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.3", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Attributes\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Attributes\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 78 languages for form field names", + "keywords": [ + "attributes", + "fields", + "form", + "lang", + "languages", + "laravel", + "messages", + "translations", + "validation" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/attributes/issues", + "source": "https://github.com/Laravel-Lang/attributes/tree/v2.3.3" + }, + "funding": [ + { + "url": "https://opencollective.com/laravel-lang", + "type": "open_collective" + } + ], + "time": "2023-04-03T16:25:20+00:00" + }, + { + "name": "laravel-lang/common", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/common.git", + "reference": "ce2d52543846052dc79de6d3060044b49545e018" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/ce2d52543846052dc79de6d3060044b49545e018", + "reference": "ce2d52543846052dc79de6d3060044b49545e018", + "shasum": "" + }, + "require": { + "laravel-lang/attributes": "^2.0", + "laravel-lang/http-statuses": "^3.0", + "laravel-lang/lang": "^12.0", + "laravel-lang/publisher": "^14.0", + "php": "^8.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0 || ^7.0 || ^8.0", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^5.4 || ^6.0" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + }, + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro", + "homepage": "https://github.com/andrey-helldar" + } + ], + "description": "Easily connect the necessary language packs to the application", + "keywords": [ + "Laravel-lang", + "attribute", + "attributes", + "http", + "http-status", + "http-status-code", + "i18n", + "lang", + "language", + "languages", + "laravel", + "locale", + "locales", + "publisher", + "translation", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/common/issues", + "source": "https://github.com/Laravel-Lang/common" + }, + "funding": [ + { + "url": "https://opencollective.com/laravel-lang", + "type": "open_collective" + } + ], + "time": "2023-02-17T12:46:13+00:00" + }, + { + "name": "laravel-lang/http-statuses", + "version": "v3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/http-statuses.git", + "reference": "5d9770879bf279dfe10b4f50e370c615be65541a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/5d9770879bf279dfe10b4f50e370c615be65541a", + "reference": "5d9770879bf279dfe10b4f50e370c615be65541a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.1", + "php": "^8.1" + }, + "conflict": { + "laravel-lang/publisher": "<14.0" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.3.4", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\HttpStatuses\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\HttpStatuses\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 78 languages for HTTP statuses", + "keywords": [ + "http", + "lang", + "languages", + "laravel", + "messages", + "status", + "translations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/http-statuses/issues", + "source": "https://github.com/Laravel-Lang/http-statuses/tree/v3.3.1" + }, + "funding": [ + { + "url": "https://opencollective.com/laravel-lang", + "type": "open_collective" + } + ], + "time": "2023-04-03T16:25:01+00:00" + }, + { + "name": "laravel-lang/lang", + "version": "12.22.1", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/lang.git", + "reference": "b2d02fd28b57babf6fb26526b97b5742d5bf013f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/b2d02fd28b57babf6fb26526b97b5742d5bf013f", + "reference": "b2d02fd28b57babf6fb26526b97b5742d5bf013f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel-lang/publisher": "^14.0", + "php": "^8.1" + }, + "require-dev": { + "laravel-lang/status-generator": "^1.15", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Lang\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaravelLang\\Lang\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "List of 78 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", + "keywords": [ + "lang", + "languages", + "laravel", + "lpm" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/lang/issues", + "source": "https://github.com/Laravel-Lang/lang" + }, + "funding": [ + { + "url": "https://opencollective.com/laravel-lang", + "type": "open_collective" + } + ], + "time": "2023-06-23T10:49:52+00:00" + }, + { + "name": "laravel-lang/publisher", + "version": "v14.6.4", + "source": { + "type": "git", + "url": "https://github.com/Laravel-Lang/publisher.git", + "reference": "a6df495f4c8bb7e8555cfbf82070bd417fbef9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/a6df495f4c8bb7e8555cfbf82070bd417fbef9bb", + "reference": "a6df495f4c8bb7e8555cfbf82070bd417fbef9bb", + "shasum": "" + }, + "require": { + "archtechx/enums": "^0.3", + "composer/semver": "^3.3", + "dragon-code/pretty-array": "^4.0", + "dragon-code/support": "^6.3", + "ext-json": "*", + "illuminate/console": "^8.79 || ^9.18 || ^10.0", + "illuminate/support": "^8.79 || ^9.18 || ^10.0", + "league/commonmark": "^2.3", + "league/config": "^1.2", + "php": "^8.1" + }, + "conflict": { + "laravel-lang/attributes": "<2.0", + "laravel-lang/http-statuses": "<3.0", + "laravel-lang/lang": "<11.0" + }, + "require-dev": { + "laravel-lang/json-fallback-hotfix": "^1.0", + "orchestra/testbench": "^6.25 || ^7.22 || ^8.0", + "phpunit/phpunit": "^9.6", + "symfony/var-dumper": "^5.0 || ^6.0" + }, + "suggest": { + "laravel-lang/attributes": "List of 78 languages for form field names", + "laravel-lang/http-statuses": "List of 78 languages for HTTP statuses", + "laravel-lang/lang": "List of 78 languages for Laravel Framework, Jetstream, Fortify, Breeze, Cashier, Nova, Spark and UI." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaravelLang\\Publisher\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "helper.php" + ], + "psr-4": { + "LaravelLang\\Publisher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andrey Helldar", + "email": "helldar@dragon-code.pro" + }, + { + "name": "Laravel-Lang Team", + "homepage": "https://github.com/Laravel-Lang" + } + ], + "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "keywords": [ + "breeze", + "cashier", + "fortify", + "framework", + "i18n", + "jetstream", + "lang", + "languages", + "laravel", + "locale", + "locales", + "localization", + "lpm", + "lumen", + "nova", + "publisher", + "spark", + "trans", + "translations", + "validations" + ], + "support": { + "issues": "https://github.com/Laravel-Lang/publisher/issues", + "source": "https://github.com/Laravel-Lang/publisher" + }, + "funding": [ + { + "url": "https://opencollective.com/laravel-lang", + "type": "open_collective" + } + ], + "time": "2023-03-31T14:18:17+00:00" + }, { "name": "laravel/pint", "version": "v1.6.0", @@ -7685,6 +8461,85 @@ ], "time": "2023-01-24T07:20:39+00:00" }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "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.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + }, { "name": "symfony/yaml", "version": "v6.2.7", -- 2.45.2 From 2ebc9e3218a2100f0285b95a5e1255260e2f429d Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:13:01 +0600 Subject: [PATCH 22/90] Added language "En". --- lang/en.json | 41 +++++++ lang/en/auth.php | 9 ++ lang/en/http-statuses.php | 84 +++++++++++++++ lang/en/pagination.php | 8 ++ lang/en/passwords.php | 11 ++ lang/en/validation.php | 217 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 370 insertions(+) create mode 100644 lang/en.json create mode 100644 lang/en/auth.php create mode 100644 lang/en/http-statuses.php create mode 100644 lang/en/pagination.php create mode 100644 lang/en/passwords.php create mode 100644 lang/en/validation.php diff --git a/lang/en.json b/lang/en.json new file mode 100644 index 0000000..b7e847e --- /dev/null +++ b/lang/en.json @@ -0,0 +1,41 @@ +{ + "(and :count more error)": "(and :count more error)", + "(and :count more errors)": "(and :count more errors)", + "All rights reserved.": "All rights reserved.", + "Forbidden": "Forbidden", + "Go to page :page": "Go to page :page", + "Hello!": "Hello!", + "If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.", + "If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.", + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:", + "Login": "Login", + "Logout": "Logout", + "Not Found": "Not Found", + "of": "of", + "Page Expired": "Page Expired", + "Pagination Navigation": "Pagination Navigation", + "Payment Required": "Payment Required", + "Please click the button below to verify your email address.": "Please click the button below to verify your email address.", + "Regards": "Regards", + "Register": "Register", + "Reset Password": "Reset Password", + "Reset Password Notification": "Reset Password Notification", + "results": "results", + "Server Error": "Server Error", + "Service Unavailable": "Service Unavailable", + "Showing": "Showing", + "The given data was invalid.": "The given data was invalid.", + "This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.", + "to": "to", + "Toggle navigation": "Toggle navigation", + "Too Many Requests": "Too Many Requests", + "Unauthorized": "Unauthorized", + "Verify Email Address": "Verify Email Address", + "Whoops!": "Whoops!", + "You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.", + "Sign in to our platform": "Sign in to our platform", + "Your Email": "Your Email", + "Your Password": "Your Password", + "Remember me": "Remember me", + "Sign in": "Sign in" +} diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6db4982 --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,9 @@ + 'These credentials do not match our records.', + 'password' => 'The password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', +]; diff --git a/lang/en/http-statuses.php b/lang/en/http-statuses.php new file mode 100644 index 0000000..3346f78 --- /dev/null +++ b/lang/en/http-statuses.php @@ -0,0 +1,84 @@ + 'Unknown Error', + '100' => 'Continue', + '101' => 'Switching Protocols', + '102' => 'Processing', + '200' => 'OK', + '201' => 'Created', + '202' => 'Accepted', + '203' => 'Non-Authoritative Information', + '204' => 'No Content', + '205' => 'Reset Content', + '206' => 'Partial Content', + '207' => 'Multi-Status', + '208' => 'Already Reported', + '226' => 'IM Used', + '300' => 'Multiple Choices', + '301' => 'Moved Permanently', + '302' => 'Found', + '303' => 'See Other', + '304' => 'Not Modified', + '305' => 'Use Proxy', + '307' => 'Temporary Redirect', + '308' => 'Permanent Redirect', + '400' => 'Bad Request', + '401' => 'Unauthorized', + '402' => 'Payment Required', + '403' => 'Forbidden', + '404' => 'Not Found', + '405' => 'Method Not Allowed', + '406' => 'Not Acceptable', + '407' => 'Proxy Authentication Required', + '408' => 'Request Timeout', + '409' => 'Conflict', + '410' => 'Gone', + '411' => 'Length Required', + '412' => 'Precondition Failed', + '413' => 'Payload Too Large', + '414' => 'URI Too Long', + '415' => 'Unsupported Media Type', + '416' => 'Range Not Satisfiable', + '417' => 'Expectation Failed', + '418' => 'I\'m a teapot', + '419' => 'Session Has Expired', + '421' => 'Misdirected Request', + '422' => 'Unprocessable Entity', + '423' => 'Locked', + '424' => 'Failed Dependency', + '425' => 'Too Early', + '426' => 'Upgrade Required', + '428' => 'Precondition Required', + '429' => 'Too Many Requests', + '431' => 'Request Header Fields Too Large', + '444' => 'Connection Closed Without Response', + '449' => 'Retry With', + '451' => 'Unavailable For Legal Reasons', + '499' => 'Client Closed Request', + '500' => 'Internal Server Error', + '501' => 'Not Implemented', + '502' => 'Bad Gateway', + '503' => 'Maintenance Mode', + '504' => 'Gateway Timeout', + '505' => 'HTTP Version Not Supported', + '506' => 'Variant Also Negotiates', + '507' => 'Insufficient Storage', + '508' => 'Loop Detected', + '509' => 'Bandwidth Limit Exceeded', + '510' => 'Not Extended', + '511' => 'Network Authentication Required', + '520' => 'Unknown Error', + '521' => 'Web Server is Down', + '522' => 'Connection Timed Out', + '523' => 'Origin Is Unreachable', + '524' => 'A Timeout Occurred', + '525' => 'SSL Handshake Failed', + '526' => 'Invalid SSL Certificate', + '527' => 'Railgun Error', + '598' => 'Network Read Timeout Error', + '599' => 'Network Connect Timeout Error', + 'unknownError' => 'Unknown Error', +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..f4cedde --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,8 @@ + 'Next »', + 'previous' => '« Previous', +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..2d619e9 --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,11 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => 'We can\'t find a user with that email address.', +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..c470d1c --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,217 @@ + 'The :attribute must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'ascii' => 'The :attribute must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute must have between :min and :max items.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute must be between :min and :max.', + 'string' => 'The :attribute must be between :min and :max characters.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'can' => 'The :attribute field contains an unauthorized value.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'decimal' => 'The :attribute must have :decimal decimal places.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'doesnt_end_with' => 'The :attribute may not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute may not start with one of the following: :values.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field is required.', + 'gt' => [ + 'array' => 'The :attribute must have more than :value items.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'numeric' => 'The :attribute must be greater than :value.', + 'string' => 'The :attribute must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute must have :value items or more.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lowercase' => 'The :attribute must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute must have less than :value items.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'numeric' => 'The :attribute must be less than :value.', + 'string' => 'The :attribute must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute must not have more than :value items.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'numeric' => 'The :attribute must be less than or equal :value.', + 'string' => 'The :attribute must be less than or equal :value characters.', + ], + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute may not have more than :max items.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'numeric' => 'The :attribute may not be greater than :max.', + 'string' => 'The :attribute may not be greater than :max characters.', + ], + 'max_digits' => 'The :attribute must not have more than :max digits.', + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute must have at least :min items.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'numeric' => 'The :attribute must be at least :min.', + 'string' => 'The :attribute must be at least :min characters.', + ], + 'min_digits' => 'The :attribute must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => [ + 'letters' => 'The :attribute must contain at least one letter.', + 'mixed' => 'The :attribute must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute must contain at least one number.', + 'symbols' => 'The :attribute must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'array' => 'The :attribute must contain :size items.', + 'file' => 'The :attribute must be :size kilobytes.', + 'numeric' => 'The :attribute must be :size.', + 'string' => 'The :attribute must be :size characters.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'ulid' => 'The :attribute must be a valid ULID.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'uppercase' => 'The :attribute must be uppercase.', + 'url' => 'The :attribute format is invalid.', + 'uuid' => 'The :attribute must be a valid UUID.', + 'attributes' => [ + 'address' => 'address', + 'age' => 'age', + 'amount' => 'amount', + 'area' => 'area', + 'available' => 'available', + 'birthday' => 'birthday', + 'body' => 'body', + 'city' => 'city', + 'content' => 'content', + 'country' => 'country', + 'created_at' => 'created at', + 'creator' => 'creator', + 'current_password' => 'current password', + 'date' => 'date', + 'date_of_birth' => 'date of birth', + 'day' => 'day', + 'deleted_at' => 'deleted at', + 'description' => 'description', + 'district' => 'district', + 'duration' => 'duration', + 'email' => 'email', + 'excerpt' => 'excerpt', + 'filter' => 'filter', + 'first_name' => 'first name', + 'gender' => 'gender', + 'group' => 'group', + 'hour' => 'hour', + 'image' => 'image', + 'last_name' => 'last name', + 'lesson' => 'lesson', + 'line_address_1' => 'line address 1', + 'line_address_2' => 'line address 2', + 'message' => 'message', + 'middle_name' => 'middle name', + 'minute' => 'minute', + 'mobile' => 'mobile', + 'month' => 'month', + 'name' => 'name', + 'national_code' => 'national code', + 'number' => 'number', + 'password' => 'password', + 'password_confirmation' => 'password confirmation', + 'phone' => 'phone', + 'photo' => 'photo', + 'postal_code' => 'postal code', + 'price' => 'price', + 'province' => 'province', + 'recaptcha_response_field' => 'recaptcha response field', + 'remember' => 'remember', + 'restored_at' => 'restored at', + 'result_text_under_image' => 'result text under image', + 'role' => 'role', + 'second' => 'second', + 'sex' => 'sex', + 'short_text' => 'short text', + 'size' => 'size', + 'state' => 'state', + 'street' => 'street', + 'student' => 'student', + 'subject' => 'subject', + 'teacher' => 'teacher', + 'terms' => 'terms', + 'test_description' => 'test description', + 'test_locale' => 'test locale', + 'test_name' => 'test name', + 'text' => 'text', + 'time' => 'time', + 'title' => 'title', + 'updated_at' => 'updated at', + 'username' => 'username', + 'year' => 'year', + ], +]; -- 2.45.2 From fe967d71a7aece52a20bc49c9de00bccb0a0e10e Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:13:48 +0600 Subject: [PATCH 23/90] Added language "Ru". --- lang/ru.json | 41 ++++++++ lang/ru/auth.php | 9 ++ lang/ru/pagination.php | 8 ++ lang/ru/passwords.php | 11 +++ lang/ru/validation.php | 217 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 286 insertions(+) create mode 100644 lang/ru.json create mode 100644 lang/ru/auth.php create mode 100644 lang/ru/pagination.php create mode 100644 lang/ru/passwords.php create mode 100644 lang/ru/validation.php diff --git a/lang/ru.json b/lang/ru.json new file mode 100644 index 0000000..16231f6 --- /dev/null +++ b/lang/ru.json @@ -0,0 +1,41 @@ +{ + "(and :count more error)": "(и ещё :count ошибка)", + "(and :count more errors)": "(и ещё :count ошибок)", + "All rights reserved.": "Все права защищены.", + "Forbidden": "Запрещено", + "Go to page :page": "Перейти к :page-й странице", + "Hello!": "Здравствуйте!", + "If you did not create an account, no further action is required.": "Если Вы не создавали учетную запись, никаких дополнительных действий не требуется.", + "If you did not request a password reset, no further action is required.": "Если Вы не запрашивали восстановление пароля, никаких дополнительных действий не требуется.", + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Если у Вас возникли проблемы с нажатием кнопки \":actionText\", скопируйте и вставьте приведенный ниже URL-адрес в свой браузер:", + "Login": "Войти", + "Logout": "Выйти", + "Not Found": "Не найдено", + "of": "из", + "Page Expired": "Страница устарела", + "Pagination Navigation": "Навигация", + "Payment Required": "Требуется оплата", + "Please click the button below to verify your email address.": "Пожалуйста, нажмите кнопку ниже, чтобы подтвердить свой адрес электронной почты.", + "Regards": "С уважением", + "Register": "Регистрация", + "Reset Password": "Сбросить пароль", + "Reset Password Notification": "Оповещение о сбросе пароля", + "results": "результатов", + "Server Error": "Ошибка сервера", + "Service Unavailable": "Сервис недоступен", + "Showing": "Показано с", + "The given data was invalid.": "Указанные данные недействительны.", + "This password reset link will expire in :count minutes.": "Срок действия ссылки для сброса пароля истекает через :count минут.", + "to": "по", + "Toggle navigation": "Переключить навигацию", + "Too Many Requests": "Слишком много запросов", + "Unauthorized": "Не авторизован", + "Verify Email Address": "Подтвердить адрес электронной почты", + "Whoops!": "Упс!", + "You are receiving this email because we received a password reset request for your account.": "Вы получили это письмо, потому что мы получили запрос на сброс пароля для Вашей учётной записи.", + "Sign in to our platform": "Войдите на нашу платформу", + "Your Email": "Ваш Email", + "Your Password": "Ваш пароль", + "Remember me": "Запомнить", + "Sign in": "Войти" +} diff --git a/lang/ru/auth.php b/lang/ru/auth.php new file mode 100644 index 0000000..38ca958 --- /dev/null +++ b/lang/ru/auth.php @@ -0,0 +1,9 @@ + 'Неверное имя пользователя или пароль.', + 'password' => 'Некорректный пароль.', + 'throttle' => 'Слишком много попыток входа. Пожалуйста, попробуйте ещё раз через :seconds секунд.', +]; diff --git a/lang/ru/pagination.php b/lang/ru/pagination.php new file mode 100644 index 0000000..f7cccdc --- /dev/null +++ b/lang/ru/pagination.php @@ -0,0 +1,8 @@ + 'Вперёд »', + 'previous' => '« Назад', +]; diff --git a/lang/ru/passwords.php b/lang/ru/passwords.php new file mode 100644 index 0000000..61f5336 --- /dev/null +++ b/lang/ru/passwords.php @@ -0,0 +1,11 @@ + 'Ваш пароль был сброшен.', + 'sent' => 'Ссылка на сброс пароля была отправлена.', + 'throttled' => 'Пожалуйста, подождите перед повторной попыткой.', + 'token' => 'Ошибочный код сброса пароля.', + 'user' => 'Не удалось найти пользователя с указанным электронным адресом.', +]; diff --git a/lang/ru/validation.php b/lang/ru/validation.php new file mode 100644 index 0000000..2af40fd --- /dev/null +++ b/lang/ru/validation.php @@ -0,0 +1,217 @@ + 'Вы должны принять :attribute.', + 'accepted_if' => 'Вы должны принять :attribute, когда :other соответствует :value.', + 'active_url' => 'Значение поля :attribute должно быть действительным URL адресом.', + 'after' => 'Значение поля :attribute должно быть датой после :date.', + 'after_or_equal' => 'Значение поля :attribute должно быть датой после или равной :date.', + 'alpha' => 'Значение поля :attribute может содержать только буквы.', + 'alpha_dash' => 'Значение поля :attribute может содержать только буквы, цифры, дефис и нижнее подчеркивание.', + 'alpha_num' => 'Значение поля :attribute может содержать только буквы и цифры.', + 'array' => 'Значение поля :attribute должно быть массивом.', + 'ascii' => 'Значение поля :attribute должно содержать только однобайтовые цифро-буквенные символы.', + 'before' => 'Значение поля :attribute должно быть датой до :date.', + 'before_or_equal' => 'Значение поля :attribute должно быть датой до или равной :date.', + 'between' => [ + 'array' => 'Количество элементов в поле :attribute должно быть между :min и :max.', + 'file' => 'Размер файла в поле :attribute должен быть между :min и :max Кб.', + 'numeric' => 'Значение поля :attribute должно быть между :min и :max.', + 'string' => 'Количество символов в поле :attribute должно быть между :min и :max.', + ], + 'boolean' => 'Значение поля :attribute должно быть логического типа.', + 'can' => 'Значение поля :attribute должно быть авторизованным.', + 'confirmed' => 'Значение поля :attribute не совпадает с подтверждаемым.', + 'current_password' => 'Неверный пароль.', + 'date' => 'Значение поля :attribute должно быть корректной датой.', + 'date_equals' => 'Значение поля :attribute должно быть датой равной :date.', + 'date_format' => 'Значение поля :attribute должно соответствовать формату даты :format.', + 'decimal' => 'Значение поля :attribute должно содержать :decimal цифр десятичных разрядов.', + 'declined' => 'Поле :attribute должно быть отклонено.', + 'declined_if' => 'Поле :attribute должно быть отклонено, когда :other равно :value.', + 'different' => 'Значения полей :attribute и :other должны различаться.', + 'digits' => 'Количество символов в поле :attribute должно быть равным :digits.', + 'digits_between' => 'Количество символов в поле :attribute должно быть между :min и :max.', + 'dimensions' => 'Изображение, указанное в поле :attribute, имеет недопустимые размеры.', + 'distinct' => 'Значения поля :attribute не должны повторяться.', + 'doesnt_end_with' => 'Значение поля :attribute не должно заканчиваться одним из следующих: :values.', + 'doesnt_start_with' => 'Значение поля :attribute не должно начинаться с одного из следующих: :values.', + 'email' => 'Значение поля :attribute должно быть действительным электронным адресом.', + 'ends_with' => 'Значение поля :attribute должно заканчиваться одним из следующих: :values', + 'enum' => 'Значение поля :attribute некорректно.', + 'exists' => 'Значение поля :attribute не существует.', + 'file' => 'В поле :attribute должен быть указан файл.', + 'filled' => 'Значение поля :attribute обязательно для заполнения.', + 'gt' => [ + 'array' => 'Количество элементов в поле :attribute должно быть больше :value.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть больше :value Кб.', + 'numeric' => 'Значение поля :attribute должно быть больше :value.', + 'string' => 'Количество символов в поле :attribute должно быть больше :value.', + ], + 'gte' => [ + 'array' => 'Количество элементов в поле :attribute должно быть :value или больше.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть :value Кб или больше.', + 'numeric' => 'Значение поля :attribute должно быть :value или больше.', + 'string' => 'Количество символов в поле :attribute должно быть :value или больше.', + ], + 'image' => 'Файл, указанный в поле :attribute, должен быть изображением.', + 'in' => 'Значение поля :attribute некорректно.', + 'in_array' => 'Значение поля :attribute должно присутствовать в :other.', + 'integer' => 'Значение поля :attribute должно быть целым числом.', + 'ip' => 'Значение поля :attribute должно быть действительным IP-адресом.', + 'ipv4' => 'Значение поля :attribute должно быть действительным IPv4-адресом.', + 'ipv6' => 'Значение поля :attribute должно быть действительным IPv6-адресом.', + 'json' => 'Значение поля :attribute должно быть JSON строкой.', + 'lowercase' => 'Значение поля :attribute должно быть в нижнем регистре.', + 'lt' => [ + 'array' => 'Количество элементов в поле :attribute должно быть меньше :value.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть меньше :value Кб.', + 'numeric' => 'Значение поля :attribute должно быть меньше :value.', + 'string' => 'Количество символов в поле :attribute должно быть меньше :value.', + ], + 'lte' => [ + 'array' => 'Количество элементов в поле :attribute должно быть :value или меньше.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть :value Кб или меньше.', + 'numeric' => 'Значение поля :attribute должно быть равным или меньше :value.', + 'string' => 'Количество символов в поле :attribute должно быть :value или меньше.', + ], + 'mac_address' => 'Значение поля :attribute должно быть корректным MAC-адресом.', + 'max' => [ + 'array' => 'Количество элементов в поле :attribute не может превышать :max.', + 'file' => 'Размер файла в поле :attribute не может быть больше :max Кб.', + 'numeric' => 'Значение поля :attribute не может быть больше :max.', + 'string' => 'Количество символов в значении поля :attribute не может превышать :max.', + ], + 'max_digits' => 'Значение поля :attribute не должно содержать больше :max цифр.', + 'mimes' => 'Файл, указанный в поле :attribute, должен быть одного из следующих типов: :values.', + 'mimetypes' => 'Файл, указанный в поле :attribute, должен быть одного из следующих типов: :values.', + 'min' => [ + 'array' => 'Количество элементов в поле :attribute должно быть не меньше :min.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть не меньше :min Кб.', + 'numeric' => 'Значение поля :attribute должно быть не меньше :min.', + 'string' => 'Количество символов в поле :attribute должно быть не меньше :min.', + ], + 'min_digits' => 'Значение поля :attribute должно содержать не меньше :min цифр.', + 'missing' => 'Значение поля :attribute должно отсутствовать.', + 'missing_if' => 'Значение поля :attribute должно отсутствовать, когда :other равно :value.', + 'missing_unless' => 'Значение поля :attribute должно отсутствовать, когда :other не равно :value.', + 'missing_with' => 'Значение поля :attribute должно отсутствовать, если :values указано.', + 'missing_with_all' => 'Значение поля :attribute должно отсутствовать, когда указаны все :values.', + 'multiple_of' => 'Значение поля :attribute должно быть кратным :value', + 'not_in' => 'Значение поля :attribute некорректно.', + 'not_regex' => 'Значение поля :attribute имеет некорректный формат.', + 'numeric' => 'Значение поля :attribute должно быть числом.', + 'password' => [ + 'letters' => 'Значение поля :attribute должно содержать хотя бы одну букву.', + 'mixed' => 'Значение поля :attribute должно содержать хотя бы одну прописную и одну строчную буквы.', + 'numbers' => 'Значение поля :attribute должно содержать хотя бы одну цифру.', + 'symbols' => 'Значение поля :attribute должно содержать хотя бы один символ.', + 'uncompromised' => 'Значение поля :attribute обнаружено в утёкших данных. Пожалуйста, выберите другое значение для :attribute.', + ], + 'present' => 'Значение поля :attribute должно быть.', + 'prohibited' => 'Значение поля :attribute запрещено.', + 'prohibited_if' => 'Значение поля :attribute запрещено, когда :other равно :value.', + 'prohibited_unless' => 'Значение поля :attribute запрещено, если :other не состоит в :values.', + 'prohibits' => 'Значение поля :attribute запрещает присутствие :other.', + 'regex' => 'Значение поля :attribute имеет некорректный формат.', + 'required' => 'Поле :attribute обязательно.', + 'required_array_keys' => 'Массив в поле :attribute обязательно должен иметь ключи: :values', + 'required_if' => 'Поле :attribute обязательно для заполнения, когда :other равно :value.', + 'required_if_accepted' => 'Поле :attribute обязательно, когда :other принято.', + 'required_unless' => 'Поле :attribute обязательно для заполнения, когда :other не равно :values.', + 'required_with' => 'Поле :attribute обязательно для заполнения, когда :values указано.', + 'required_with_all' => 'Поле :attribute обязательно для заполнения, когда :values указано.', + 'required_without' => 'Поле :attribute обязательно для заполнения, когда :values не указано.', + 'required_without_all' => 'Поле :attribute обязательно для заполнения, когда ни одно из :values не указано.', + 'same' => 'Значения полей :attribute и :other должны совпадать.', + 'size' => [ + 'array' => 'Количество элементов в поле :attribute должно быть равным :size.', + 'file' => 'Размер файла, указанный в поле :attribute, должен быть равен :size Кб.', + 'numeric' => 'Значение поля :attribute должно быть равным :size.', + 'string' => 'Количество символов в поле :attribute должно быть равным :size.', + ], + 'starts_with' => 'Поле :attribute должно начинаться с одного из следующих значений: :values', + 'string' => 'Значение поля :attribute должно быть строкой.', + 'timezone' => 'Значение поля :attribute должно быть действительным часовым поясом.', + 'ulid' => 'Значение поля :attribute должно быть корректным ULID.', + 'unique' => 'Такое значение поля :attribute уже существует.', + 'uploaded' => 'Загрузка файла из поля :attribute не удалась.', + 'uppercase' => 'Значение поля :attribute должно быть в верхнем регистре.', + 'url' => 'Значение поля :attribute имеет ошибочный формат URL.', + 'uuid' => 'Значение поля :attribute должно быть корректным UUID.', + 'attributes' => [ + 'address' => 'адрес', + 'age' => 'возраст', + 'amount' => 'количество', + 'area' => 'область', + 'available' => 'доступно', + 'birthday' => 'дата рождения', + 'body' => 'контент', + 'city' => 'город', + 'content' => 'контент', + 'country' => 'страна', + 'created_at' => 'создано в', + 'creator' => 'создатель', + 'current_password' => 'текущий пароль', + 'date' => 'дата', + 'date_of_birth' => 'день рождения', + 'day' => 'день', + 'deleted_at' => 'удалено в', + 'description' => 'описание', + 'district' => 'округ', + 'duration' => 'продолжительность', + 'email' => 'email адрес', + 'excerpt' => 'выдержка', + 'filter' => 'фильтр', + 'first_name' => 'имя', + 'gender' => 'пол', + 'group' => 'группа', + 'hour' => 'час', + 'image' => 'изображение', + 'last_name' => 'фамилия', + 'lesson' => 'урок', + 'line_address_1' => 'строка адреса 1', + 'line_address_2' => 'строка адреса 2', + 'message' => 'сообщение', + 'middle_name' => 'отчество', + 'minute' => 'минута', + 'mobile' => 'моб. номер', + 'month' => 'месяц', + 'name' => 'имя', + 'national_code' => 'национальный код', + 'number' => 'номер', + 'password' => 'пароль', + 'password_confirmation' => 'подтверждение пароля', + 'phone' => 'номер телефона', + 'photo' => 'фотография', + 'postal_code' => 'индекс', + 'price' => 'стоимость', + 'province' => 'провинция', + 'recaptcha_response_field' => 'ошибка рекапчи', + 'remember' => 'запомнить', + 'restored_at' => 'восстановлено в', + 'result_text_under_image' => 'текст под изображением', + 'role' => 'роль', + 'second' => 'секунда', + 'sex' => 'пол', + 'short_text' => 'короткое описание', + 'size' => 'размер', + 'state' => 'штат', + 'street' => 'улица', + 'student' => 'студент', + 'subject' => 'заголовок', + 'teacher' => 'учитель', + 'terms' => 'правила', + 'test_description' => 'тестовое описание', + 'test_locale' => 'тестовая локализация', + 'test_name' => 'тестовое имя', + 'text' => 'текст', + 'time' => 'время', + 'title' => 'наименование', + 'updated_at' => 'обновлено в', + 'username' => 'никнейм', + 'year' => 'год', + ], +]; -- 2.45.2 From aed3e0c803b7d68c8d314ec2d3da6c6e2b153981 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:14:16 +0600 Subject: [PATCH 24/90] Added language "Ru". --- lang/ru/http-statuses.php | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 lang/ru/http-statuses.php diff --git a/lang/ru/http-statuses.php b/lang/ru/http-statuses.php new file mode 100644 index 0000000..06e2633 --- /dev/null +++ b/lang/ru/http-statuses.php @@ -0,0 +1,84 @@ + 'Неизвестная ошибка', + '100' => 'Продолжай', + '101' => 'Переключение протоколов', + '102' => 'Идет обработка', + '200' => 'ОК', + '201' => 'Создано', + '202' => 'Принято', + '203' => 'Информация не авторитетна', + '204' => 'Содержимое отсутствует', + '205' => 'Сбросить содержимое', + '206' => 'Частичное содержимое', + '207' => 'Много статусов', + '208' => 'Уже сообщалось', + '226' => 'Использовано IM', + '300' => 'Множество выбора', + '301' => 'Перемещено навсегда', + '302' => 'Найдено', + '303' => 'Смотри другое', + '304' => 'Не изменялось', + '305' => 'Используй прокси', + '307' => 'Временное перенаправление', + '308' => 'Постоянное перенаправление', + '400' => 'Некорректный запрос', + '401' => 'Не авторизован', + '402' => 'Необходима оплата', + '403' => 'Доступ запрещен', + '404' => 'Не найдено', + '405' => 'Метод запрещен', + '406' => 'Неприемлемо', + '407' => 'Требуется аутентификация прокси', + '408' => 'Истекло время ожидания', + '409' => 'Конфликт', + '410' => 'Удалено', + '411' => 'Необходима длина', + '412' => 'Условие ложно', + '413' => 'Полезная нагрузка слишком велика', + '414' => 'URI слишком длинный', + '415' => 'Неподдерживаемый тип данных', + '416' => 'Диапазон недостижим', + '417' => 'Ожидание не удалось', + '418' => 'Я - чайник', + '419' => 'Сессия устарела', + '421' => 'Неверный запрос', + '422' => 'Необрабатываемый экземпляр', + '423' => 'Доступ заблокирован', + '424' => 'Ошибка зависимости', + '425' => 'Слишком рано', + '426' => 'Требуется обновление', + '428' => 'Требуется предусловие', + '429' => 'Слишком много запросов', + '431' => 'Поля заголовка слишком большие', + '444' => 'Соединение закрыто без ответа', + '449' => 'Повторить с', + '451' => 'Недоступно по юридическим причинам', + '499' => 'Клиент прервал запрос', + '500' => 'Внутренняя ошибка сервера', + '501' => 'Не реализовано', + '502' => 'Плохой шлюз', + '503' => 'Ведутся технические работы', + '504' => 'Шлюз не отвечает', + '505' => 'Версия HTTP не поддерживается', + '506' => 'Вариант тоже проводит согласование', + '507' => 'Переполнение хранилища', + '508' => 'Обнаружено бесконеечное перенаправление', + '509' => 'Исчерпана пропускная ширина канала', + '510' => 'Не расширено', + '511' => 'Требуется сетевая аутентификация', + '520' => 'Неизвестная ошибка', + '521' => 'Веб-сервер не работает', + '522' => 'Соединение не отвечает', + '523' => 'Источник недоступен', + '524' => 'Время ожидания истекло', + '525' => 'Квитирование SSL не удалось', + '526' => 'Недействительный SSL сертификат', + '527' => 'Ошибка рельсотрона', + '598' => 'Истекло время ожидания', + '599' => 'Истекло время подключения', + 'unknownError' => 'Неизвестная ошибка', +]; -- 2.45.2 From 37e5c6f8a64d2278b93e5f3e96589769c6b0add3 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:14:58 +0600 Subject: [PATCH 25/90] Changed nodejs to 20. --- docker/dev/php/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/dev/php/Dockerfile b/docker/dev/php/Dockerfile index 6b3dcb1..83273c2 100644 --- a/docker/dev/php/Dockerfile +++ b/docker/dev/php/Dockerfile @@ -40,7 +40,7 @@ RUN apt-get update \ libbz2-dev \ libwebp-dev -RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - +RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - RUN apt-get -y install nodejs # Clear cache -- 2.45.2 From fbb56d819124bd3ffc897870811421ff3ae2f2d6 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:17:55 +0600 Subject: [PATCH 26/90] Added packages: "dependencies": { "@popperjs/core": "^2.9.2", "bootstrap": "5.0.2", "chartist": "^0.11.4", "chartist-plugin-tooltips": "^0.0.17", "notyf": "^3.10.0", "nouislider": "^15.2.0", "onscreen": "^1.4.0", "sass": "^1.47.0", "simplebar": "^5.3.4", "smooth-scroll": "^16.1.3", "sweetalert2": "^11.0.18", "vanillajs-datepicker": "^1.2.0", "waypoints": "^4.0.1" }, "devDependencies": { "sass-loader": "^13.3.2", } --- package-lock.json | 3164 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 16 + 2 files changed, 3180 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..02fc257 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3164 @@ +{ + "name": "html", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "@popperjs/core": "^2.9.2", + "bootstrap": "5.0.2", + "chartist": "^0.11.4", + "chartist-plugin-tooltips": "^0.0.17", + "notyf": "^3.10.0", + "nouislider": "^15.2.0", + "onscreen": "^1.4.0", + "sass": "^1.47.0", + "simplebar": "^5.3.4", + "smooth-scroll": "^16.1.3", + "sweetalert2": "^11.0.18", + "vanillajs-datepicker": "^1.2.0", + "waypoints": "^4.0.1" + }, + "devDependencies": { + "axios": "^1.1.2", + "laravel-vite-plugin": "^0.7.2", + "sass-loader": "^13.3.2", + "vite": "^4.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true, + "peer": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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 + }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bootstrap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.2.tgz", + "integrity": "sha512-1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + }, + "peerDependencies": { + "@popperjs/core": "^2.9.2" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "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" + } + ], + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "node_modules/can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "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" + } + ], + "peer": true + }, + "node_modules/chartist": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/chartist/-/chartist-0.11.4.tgz", + "integrity": "sha512-H4AimxaUD738/u9Mq8t27J4lh6STsLi4BQHt65nOtpLk3xyrBPaLiLMrHw7/WV9CmsjGA02WihjuL5qpSagLYw==", + "engines": { + "node": ">=4.6.0" + } + }, + "node_modules/chartist-plugin-tooltips": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/chartist-plugin-tooltips/-/chartist-plugin-tooltips-0.0.17.tgz", + "integrity": "sha512-frXv269MyRHfuhyZILdTTsNG4PP3+Ab0NkysdnMk73aN4w76oWarsGguuciYzZawKrctp8RZzU/W44A4+Y4vOg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/core-js": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", + "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.445", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz", + "integrity": "sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==", + "dev": true, + "peer": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true, + "peer": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "peer": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==" + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "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, + "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/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "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, + "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, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true, + "peer": true + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/notyf": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/notyf/-/notyf-3.10.0.tgz", + "integrity": "sha512-Mtnp+0qiZxgrH+TzVlzhWyZceHdAZ/UWK0/ju9U0HQeDpap1mZ8cC7H5wSI5mwgni6yeAjaxsTw0sbMK+aSuHw==" + }, + "node_modules/nouislider": { + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.7.1.tgz", + "integrity": "sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w==" + }, + "node_modules/onscreen": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/onscreen/-/onscreen-1.4.0.tgz", + "integrity": "sha512-fmMKd0DSAxxCx36/K6gsj5AlyIGg2WvCiYkDGTZm+YeiNm9q5xJA0IlKMU75wRS5HzvxwGEY+i5CqkxpS//E7w==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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 + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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" + } + ], + "peer": true + }, + "node_modules/sass": { + "version": "1.63.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", + "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/simplebar": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.9.tgz", + "integrity": "sha512-1vIIpjDvY9sVH14e0LGeiCiTFU3ILqAghzO6OI9axeG+mvU/vMSrvXeAXkBolqFFz3XYaY8n5ahH9MeP3sp2Ag==", + "dependencies": { + "@juggle/resize-observer": "^3.3.1", + "can-use-dom": "^0.1.0", + "core-js": "^3.0.1", + "lodash.debounce": "^4.0.8", + "lodash.memoize": "^4.1.2", + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/smooth-scroll": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/smooth-scroll/-/smooth-scroll-16.1.3.tgz", + "integrity": "sha512-ca9U+neJS/cbdScTBuUTCZvUWNF2EuMCk7oAx3ImdeRK5FPm+xRo9XsVHIkeEVkn7MBRx+ufVEhyveM4ZhaTGA==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/sweetalert2": { + "version": "11.7.12", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz", + "integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vanillajs-datepicker": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/vanillajs-datepicker/-/vanillajs-datepicker-1.3.3.tgz", + "integrity": "sha512-O7eeSSyZ9aeTcy6X9NBswNvWZRRvKIl2F20sbYvL1L32+1fMpiIPD3TvDF4hrU0ezXspHPgGFyvbFkoXIBs83w==" + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", + "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "vite": "^2 || ^3 || ^4" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/waypoints": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/waypoints/-/waypoints-4.0.1.tgz", + "integrity": "sha512-PbydbsTvCFYoE1DaRAKBM4xPQi+7ULcULZ7vK79NLM55da5g46oyY62Xv9X5Z9F7O/qXmcS/XJ7Ae2pYij4bpw==" + }, + "node_modules/webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "peer": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "peer": true + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "peer": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" + }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, + "@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true, + "peer": true + }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true, + "peer": true + }, + "@types/node": { + "version": "20.3.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.2.tgz", + "integrity": "sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==", + "dev": true, + "peer": true + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "peer": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "bootstrap": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.2.tgz", + "integrity": "sha512-1Ge963tyEQWJJ+8qtXFU6wgmAVj9gweEjibUdbmcCEYsn38tVwRk8107rk2vzt6cfQcRr3SlZ8aQBqaD8aqf+Q==", + "requires": {} + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "peer": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "peer": true + }, + "can-use-dom": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz", + "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ==" + }, + "caniuse-lite": { + "version": "1.0.30001509", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", + "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "dev": true, + "peer": true + }, + "chartist": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/chartist/-/chartist-0.11.4.tgz", + "integrity": "sha512-H4AimxaUD738/u9Mq8t27J4lh6STsLi4BQHt65nOtpLk3xyrBPaLiLMrHw7/WV9CmsjGA02WihjuL5qpSagLYw==" + }, + "chartist-plugin-tooltips": { + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/chartist-plugin-tooltips/-/chartist-plugin-tooltips-0.0.17.tgz", + "integrity": "sha512-frXv269MyRHfuhyZILdTTsNG4PP3+Ab0NkysdnMk73aN4w76oWarsGguuciYzZawKrctp8RZzU/W44A4+Y4vOg==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true + }, + "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, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "core-js": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", + "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.445", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz", + "integrity": "sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA==", + "dev": true, + "peer": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true, + "peer": true + }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "peer": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==" + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "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, + "requires": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.0.5" + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "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 + }, + "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, + "requires": { + "mime-db": "1.52.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true, + "peer": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "notyf": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/notyf/-/notyf-3.10.0.tgz", + "integrity": "sha512-Mtnp+0qiZxgrH+TzVlzhWyZceHdAZ/UWK0/ju9U0HQeDpap1mZ8cC7H5wSI5mwgni6yeAjaxsTw0sbMK+aSuHw==" + }, + "nouislider": { + "version": "15.7.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.7.1.tgz", + "integrity": "sha512-5N7C1ru/i8y3dg9+Z6ilj6+m1EfabvOoaRa7ztpxBSKKRZso4vA52DGSbBJjw5XLtFr/LZ9SgGAXqyVtlVHO5w==" + }, + "onscreen": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/onscreen/-/onscreen-1.4.0.tgz", + "integrity": "sha512-fmMKd0DSAxxCx36/K6gsj5AlyIGg2WvCiYkDGTZm+YeiNm9q5xJA0IlKMU75wRS5HzvxwGEY+i5CqkxpS//E7w==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "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 + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "peer": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rollup": { + "version": "3.25.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.3.tgz", + "integrity": "sha512-ZT279hx8gszBj9uy5FfhoG4bZx8c+0A1sbqtr7Q3KNWIizpTdDEPZbV2xcbvHsnFp4MavCQYZyzApJ+virB8Yw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "peer": true + }, + "sass": { + "version": "1.63.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz", + "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "requires": { + "neo-async": "^2.6.2" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "simplebar": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.9.tgz", + "integrity": "sha512-1vIIpjDvY9sVH14e0LGeiCiTFU3ILqAghzO6OI9axeG+mvU/vMSrvXeAXkBolqFFz3XYaY8n5ahH9MeP3sp2Ag==", + "requires": { + "@juggle/resize-observer": "^3.3.1", + "can-use-dom": "^0.1.0", + "core-js": "^3.0.1", + "lodash.debounce": "^4.0.8", + "lodash.memoize": "^4.1.2", + "lodash.throttle": "^4.1.1" + } + }, + "smooth-scroll": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/smooth-scroll/-/smooth-scroll-16.1.3.tgz", + "integrity": "sha512-ca9U+neJS/cbdScTBuUTCZvUWNF2EuMCk7oAx3ImdeRK5FPm+xRo9XsVHIkeEVkn7MBRx+ufVEhyveM4ZhaTGA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "sweetalert2": { + "version": "11.7.12", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz", + "integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg==" + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + } + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "peer": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "vanillajs-datepicker": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/vanillajs-datepicker/-/vanillajs-datepicker-1.3.3.tgz", + "integrity": "sha512-O7eeSSyZ9aeTcy6X9NBswNvWZRRvKIl2F20sbYvL1L32+1fMpiIPD3TvDF4hrU0ezXspHPgGFyvbFkoXIBs83w==" + }, + "vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + } + }, + "vite-plugin-full-reload": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", + "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "waypoints": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/waypoints/-/waypoints-4.0.1.tgz", + "integrity": "sha512-PbydbsTvCFYoE1DaRAKBM4xPQi+7ULcULZ7vK79NLM55da5g46oyY62Xv9X5Z9F7O/qXmcS/XJ7Ae2pYij4bpw==" + }, + "webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dev": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + } + } +} diff --git a/package.json b/package.json index 3a76ed0..612ecc5 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,25 @@ "dev": "vite", "build": "vite build" }, + "dependencies": { + "@popperjs/core": "^2.9.2", + "bootstrap": "5.0.2", + "chartist": "^0.11.4", + "chartist-plugin-tooltips": "^0.0.17", + "notyf": "^3.10.0", + "nouislider": "^15.2.0", + "onscreen": "^1.4.0", + "sass": "^1.47.0", + "simplebar": "^5.3.4", + "smooth-scroll": "^16.1.3", + "sweetalert2": "^11.0.18", + "vanillajs-datepicker": "^1.2.0", + "waypoints": "^4.0.1" + }, "devDependencies": { "axios": "^1.1.2", "laravel-vite-plugin": "^0.7.2", + "sass-loader": "^13.3.2", "vite": "^4.0.0" } } -- 2.45.2 From 719d4c7f106e12befee411cae1fc8d7f740f9186 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 29 Jun 2023 22:20:38 +0600 Subject: [PATCH 27/90] Added and configured css, js in Vite. --- resources/css/app.css | 0 resources/js/app.js | 1 - resources/volt/LICENSE.md | 7 + .../volt/images/illustrations/signin.svg | 2332 +++++++++++++++++ resources/volt/js/app.js | 5 + resources/{ => volt}/js/bootstrap.js | 0 resources/volt/js/volt.js | 362 +++ resources/volt/scss/_variables.scss | 1 + resources/volt/scss/app.scss | 89 + resources/volt/scss/volt/_components.scss | 30 + resources/volt/scss/volt/_forms.scss | 4 + resources/volt/scss/volt/_functions.scss | 23 + resources/volt/scss/volt/_layout.scss | 5 + resources/volt/scss/volt/_mixins.scss | 7 + resources/volt/scss/volt/_utilities.scss | 95 + resources/volt/scss/volt/_variables.scss | 1660 ++++++++++++ resources/volt/scss/volt/_vendor.scss | 6 + .../scss/volt/components/_accordions.scss | 52 + .../volt/scss/volt/components/_alerts.scss | 10 + .../scss/volt/components/_animations.scss | 234 ++ .../volt/scss/volt/components/_avatars.scss | 102 + .../volt/scss/volt/components/_badge.scss | 98 + .../volt/scss/volt/components/_body.scss | 31 + .../scss/volt/components/_breadcrumb.scss | 56 + .../volt/scss/volt/components/_buttons.scss | 86 + .../volt/scss/volt/components/_card.scss | 149 ++ .../volt/scss/volt/components/_carousel.scss | 52 + .../volt/scss/volt/components/_charts.scss | 52 + .../volt/scss/volt/components/_close.scss | 33 + .../scss/volt/components/_custom-forms.scss | 103 + .../scss/volt/components/_datepicker.scss | 13 + .../volt/scss/volt/components/_dropdown.scss | 68 + .../volt/scss/volt/components/_icons.scss | 202 ++ .../volt/scss/volt/components/_images.scss | 67 + .../scss/volt/components/_list-group.scss | 96 + .../volt/scss/volt/components/_modal.scss | 36 + resources/volt/scss/volt/components/_nav.scss | 256 ++ .../scss/volt/components/_pagination.scss | 16 + .../volt/scss/volt/components/_popover.scss | 19 + .../volt/scss/volt/components/_progress.scss | 116 + .../volt/scss/volt/components/_scrollbar.scss | 228 ++ .../volt/scss/volt/components/_shapes.scss | 18 + .../volt/scss/volt/components/_steps.scss | 61 + .../volt/scss/volt/components/_tables.scss | 394 +++ .../volt/scss/volt/components/_timelines.scss | 22 + .../volt/scss/volt/components/_tooltip.scss | 43 + .../volt/scss/volt/components/_type.scss | 170 ++ .../volt/scss/volt/forms/_form-check.scss | 15 + .../volt/scss/volt/forms/_form-control.scss | 25 + .../volt/scss/volt/forms/_form-select.scss | 23 + .../volt/scss/volt/forms/_input-group.scss | 13 + resources/volt/scss/volt/layout/_footer.scss | 105 + resources/volt/scss/volt/layout/_navbar.scss | 414 +++ resources/volt/scss/volt/layout/_section.scss | 164 ++ resources/volt/scss/volt/layout/_sidebar.scss | 34 + resources/volt/scss/volt/layout/_sidenav.scss | 191 ++ .../volt/scss/volt/mixins/_animations.scss | 45 + .../scss/volt/mixins/_background-variant.scss | 25 + resources/volt/scss/volt/mixins/_icon.scss | 17 + resources/volt/scss/volt/mixins/_modals.scss | 23 + resources/volt/scss/volt/mixins/_popover.scss | 36 + .../volt/scss/volt/mixins/_transform.scss | 19 + .../volt/scss/volt/mixins/_utilities.scss | 123 + vite.config.js | 5 +- 64 files changed, 8785 insertions(+), 2 deletions(-) delete mode 100644 resources/css/app.css delete mode 100644 resources/js/app.js create mode 100644 resources/volt/LICENSE.md create mode 100644 resources/volt/images/illustrations/signin.svg create mode 100644 resources/volt/js/app.js rename resources/{ => volt}/js/bootstrap.js (100%) create mode 100644 resources/volt/js/volt.js create mode 100644 resources/volt/scss/_variables.scss create mode 100644 resources/volt/scss/app.scss create mode 100644 resources/volt/scss/volt/_components.scss create mode 100644 resources/volt/scss/volt/_forms.scss create mode 100755 resources/volt/scss/volt/_functions.scss create mode 100644 resources/volt/scss/volt/_layout.scss create mode 100755 resources/volt/scss/volt/_mixins.scss create mode 100755 resources/volt/scss/volt/_utilities.scss create mode 100644 resources/volt/scss/volt/_variables.scss create mode 100644 resources/volt/scss/volt/_vendor.scss create mode 100755 resources/volt/scss/volt/components/_accordions.scss create mode 100644 resources/volt/scss/volt/components/_alerts.scss create mode 100644 resources/volt/scss/volt/components/_animations.scss create mode 100755 resources/volt/scss/volt/components/_avatars.scss create mode 100755 resources/volt/scss/volt/components/_badge.scss create mode 100644 resources/volt/scss/volt/components/_body.scss create mode 100755 resources/volt/scss/volt/components/_breadcrumb.scss create mode 100755 resources/volt/scss/volt/components/_buttons.scss create mode 100755 resources/volt/scss/volt/components/_card.scss create mode 100755 resources/volt/scss/volt/components/_carousel.scss create mode 100644 resources/volt/scss/volt/components/_charts.scss create mode 100755 resources/volt/scss/volt/components/_close.scss create mode 100755 resources/volt/scss/volt/components/_custom-forms.scss create mode 100755 resources/volt/scss/volt/components/_datepicker.scss create mode 100755 resources/volt/scss/volt/components/_dropdown.scss create mode 100755 resources/volt/scss/volt/components/_icons.scss create mode 100644 resources/volt/scss/volt/components/_images.scss create mode 100755 resources/volt/scss/volt/components/_list-group.scss create mode 100755 resources/volt/scss/volt/components/_modal.scss create mode 100755 resources/volt/scss/volt/components/_nav.scss create mode 100755 resources/volt/scss/volt/components/_pagination.scss create mode 100755 resources/volt/scss/volt/components/_popover.scss create mode 100755 resources/volt/scss/volt/components/_progress.scss create mode 100644 resources/volt/scss/volt/components/_scrollbar.scss create mode 100755 resources/volt/scss/volt/components/_shapes.scss create mode 100755 resources/volt/scss/volt/components/_steps.scss create mode 100644 resources/volt/scss/volt/components/_tables.scss create mode 100755 resources/volt/scss/volt/components/_timelines.scss create mode 100755 resources/volt/scss/volt/components/_tooltip.scss create mode 100755 resources/volt/scss/volt/components/_type.scss create mode 100644 resources/volt/scss/volt/forms/_form-check.scss create mode 100644 resources/volt/scss/volt/forms/_form-control.scss create mode 100644 resources/volt/scss/volt/forms/_form-select.scss create mode 100644 resources/volt/scss/volt/forms/_input-group.scss create mode 100755 resources/volt/scss/volt/layout/_footer.scss create mode 100755 resources/volt/scss/volt/layout/_navbar.scss create mode 100644 resources/volt/scss/volt/layout/_section.scss create mode 100644 resources/volt/scss/volt/layout/_sidebar.scss create mode 100644 resources/volt/scss/volt/layout/_sidenav.scss create mode 100755 resources/volt/scss/volt/mixins/_animations.scss create mode 100755 resources/volt/scss/volt/mixins/_background-variant.scss create mode 100755 resources/volt/scss/volt/mixins/_icon.scss create mode 100755 resources/volt/scss/volt/mixins/_modals.scss create mode 100755 resources/volt/scss/volt/mixins/_popover.scss create mode 100755 resources/volt/scss/volt/mixins/_transform.scss create mode 100644 resources/volt/scss/volt/mixins/_utilities.scss diff --git a/resources/css/app.css b/resources/css/app.css deleted file mode 100644 index e69de29..0000000 diff --git a/resources/js/app.js b/resources/js/app.js deleted file mode 100644 index e59d6a0..0000000 --- a/resources/js/app.js +++ /dev/null @@ -1 +0,0 @@ -import './bootstrap'; diff --git a/resources/volt/LICENSE.md b/resources/volt/LICENSE.md new file mode 100644 index 0000000..b852f2b --- /dev/null +++ b/resources/volt/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2021 Themesberg (Crafty Dwarf LLC) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/resources/volt/images/illustrations/signin.svg b/resources/volt/images/illustrations/signin.svg new file mode 100644 index 0000000..dfd96a8 --- /dev/null +++ b/resources/volt/images/illustrations/signin.svg @@ -0,0 +1,2332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/volt/js/app.js b/resources/volt/js/app.js new file mode 100644 index 0000000..daaea29 --- /dev/null +++ b/resources/volt/js/app.js @@ -0,0 +1,5 @@ +import.meta.glob([ + '../images/**', +]); +import './bootstrap'; +import './volt.js'; diff --git a/resources/js/bootstrap.js b/resources/volt/js/bootstrap.js similarity index 100% rename from resources/js/bootstrap.js rename to resources/volt/js/bootstrap.js diff --git a/resources/volt/js/volt.js b/resources/volt/js/volt.js new file mode 100644 index 0000000..c0bcd18 --- /dev/null +++ b/resources/volt/js/volt.js @@ -0,0 +1,362 @@ +/* + +========================================================= +* Volt Pro - Premium Bootstrap 5 Dashboard +========================================================= + +* Product Page: https://themesberg.com/product/admin-dashboard/volt-bootstrap-5-dashboard +* Copyright 2021 Themesberg (https://www.themesberg.com) + +* Designed and coded by https://themesberg.com + +========================================================= + +* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Please contact us to request a removal. Contact us if you want to remove it. + +*/ + +"use strict"; +const d = document; + +import 'bootstrap'; +import Swal from 'sweetalert2'; +import SmoothScroll from 'smooth-scroll'; + +d.addEventListener("DOMContentLoaded", function(event) { + + const swalWithBootstrapButtons = Swal.mixin({ + customClass: { + confirmButton: 'btn btn-primary me-3', + cancelButton: 'btn btn-gray' + }, + buttonsStyling: false + }); + + var themeSettingsEl = document.getElementById('theme-settings'); + var themeSettingsExpandEl = document.getElementById('theme-settings-expand'); + + if(themeSettingsEl) { + + var themeSettingsCollapse = new bootstrap.Collapse(themeSettingsEl, { + show: true, + toggle: false + }); + + if (window.localStorage.getItem('settings_expanded') === 'true') { + themeSettingsCollapse.show(); + themeSettingsExpandEl.classList.remove('show'); + } else { + themeSettingsCollapse.hide(); + themeSettingsExpandEl.classList.add('show'); + } + + themeSettingsEl.addEventListener('hidden.bs.collapse', function () { + themeSettingsExpandEl.classList.add('show'); + window.localStorage.setItem('settings_expanded', false); + }); + + themeSettingsExpandEl.addEventListener('click', function () { + themeSettingsExpandEl.classList.remove('show'); + window.localStorage.setItem('settings_expanded', true); + setTimeout(function() { + themeSettingsCollapse.show(); + }, 300); + }); + } + + // options + const breakpoints = { + sm: 540, + md: 720, + lg: 960, + xl: 1140 + }; + + var sidebar = document.getElementById('sidebarMenu') + if(sidebar && d.body.clientWidth < breakpoints.lg) { + sidebar.addEventListener('shown.bs.collapse', function () { + document.querySelector('body').style.position = 'fixed'; + }); + sidebar.addEventListener('hidden.bs.collapse', function () { + document.querySelector('body').style.position = 'relative'; + }); + } + + var iconNotifications = d.querySelector('.notification-bell'); + if (iconNotifications) { + iconNotifications.addEventListener('shown.bs.dropdown', function () { + iconNotifications.classList.remove('unread'); + }); + } + + [].slice.call(d.querySelectorAll('[data-background]')).map(function(el) { + el.style.background = 'url(' + el.getAttribute('data-background') + ')'; + }); + + [].slice.call(d.querySelectorAll('[data-background-lg]')).map(function(el) { + if(document.body.clientWidth > breakpoints.lg) { + el.style.background = 'url(' + el.getAttribute('data-background-lg') + ')'; + } + }); + + [].slice.call(d.querySelectorAll('[data-background-color]')).map(function(el) { + el.style.background = 'url(' + el.getAttribute('data-background-color') + ')'; + }); + + [].slice.call(d.querySelectorAll('[data-color]')).map(function(el) { + el.style.color = 'url(' + el.getAttribute('data-color') + ')'; + }); + + //Tooltips + var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) + var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl) + }) + + + // Popovers + var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')) + var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { + return new bootstrap.Popover(popoverTriggerEl) + }) + + + // Datepicker + var datepickers = [].slice.call(d.querySelectorAll('[data-datepicker]')) + var datepickersList = datepickers.map(function (el) { + return new Datepicker(el, { + buttonClass: 'btn' + }); + }) + + if(d.querySelector('.input-slider-container')) { + [].slice.call(d.querySelectorAll('.input-slider-container')).map(function(el) { + var slider = el.querySelector(':scope .input-slider'); + var sliderId = slider.getAttribute('id'); + var minValue = slider.getAttribute('data-range-value-min'); + var maxValue = slider.getAttribute('data-range-value-max'); + + var sliderValue = el.querySelector(':scope .range-slider-value'); + var sliderValueId = sliderValue.getAttribute('id'); + var startValue = sliderValue.getAttribute('data-range-value-low'); + + var c = d.getElementById(sliderId), + id = d.getElementById(sliderValueId); + + noUiSlider.create(c, { + start: [parseInt(startValue)], + connect: [true, false], + //step: 1000, + range: { + 'min': [parseInt(minValue)], + 'max': [parseInt(maxValue)] + } + }); + }); + } + + if (d.getElementById('input-slider-range')) { + var c = d.getElementById("input-slider-range"), + low = d.getElementById("input-slider-range-value-low"), + e = d.getElementById("input-slider-range-value-high"), + f = [d, e]; + + noUiSlider.create(c, { + start: [parseInt(low.getAttribute('data-range-value-low')), parseInt(e.getAttribute('data-range-value-high'))], + connect: !0, + tooltips: true, + range: { + min: parseInt(c.getAttribute('data-range-value-min')), + max: parseInt(c.getAttribute('data-range-value-max')) + } + }), c.noUiSlider.on("update", function (a, b) { + f[b].textContent = a[b] + }); + } + + //Chartist + + if(d.querySelector('.ct-chart-sales-value')) { + //Chart 5 + new Chartist.Line('.ct-chart-sales-value', { + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + series: [ + [0, 10, 30, 40, 80, 60, 100] + ] + }, { + low: 0, + showArea: true, + fullWidth: true, + plugins: [ + Chartist.plugins.tooltip() + ], + axisX: { + // On the x-axis start means top and end means bottom + position: 'end', + showGrid: true + }, + axisY: { + // On the y-axis start means left and end means right + showGrid: false, + showLabel: false, + labelInterpolationFnc: function(value) { + return '$' + (value / 1) + 'k'; + } + } + }); + } + + if(d.querySelector('.ct-chart-ranking')) { + var chart = new Chartist.Bar('.ct-chart-ranking', { + labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + series: [ + [1, 5, 2, 5, 4, 3], + [2, 3, 4, 8, 1, 2], + ] + }, { + low: 0, + showArea: true, + plugins: [ + Chartist.plugins.tooltip() + ], + axisX: { + // On the x-axis start means top and end means bottom + position: 'end' + }, + axisY: { + // On the y-axis start means left and end means right + showGrid: false, + showLabel: false, + offset: 0 + } + }); + + chart.on('draw', function(data) { + if(data.type === 'line' || data.type === 'area') { + data.element.animate({ + d: { + begin: 2000 * data.index, + dur: 2000, + from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(), + to: data.path.clone().stringify(), + easing: Chartist.Svg.Easing.easeOutQuint + } + }); + } + }); + } + + if(d.querySelector('.ct-chart-traffic-share')) { + var data = { + series: [70, 20, 10] + }; + + var sum = function(a, b) { return a + b }; + + new Chartist.Pie('.ct-chart-traffic-share', data, { + labelInterpolationFnc: function(value) { + return Math.round(value / data.series.reduce(sum) * 100) + '%'; + }, + low: 0, + high: 8, + donut: true, + donutWidth: 20, + donutSolid: true, + fullWidth: false, + showLabel: false, + plugins: [ + Chartist.plugins.tooltip() + ], + }); + } + + if (d.getElementById('loadOnClick')) { + d.getElementById('loadOnClick').addEventListener('click', function () { + var button = this; + var loadContent = d.getElementById('extraContent'); + var allLoaded = d.getElementById('allLoadedText'); + + button.classList.add('btn-loading'); + button.setAttribute('disabled', 'true'); + + setTimeout(function () { + loadContent.style.display = 'block'; + button.style.display = 'none'; + allLoaded.style.display = 'block'; + }, 1500); + }); + } + + var scroll = new SmoothScroll('a[href*="#"]', { + speed: 500, + speedAsDuration: true + }); + + if(d.querySelector('.current-year')){ + d.querySelector('.current-year').textContent = new Date().getFullYear(); + } + + // Glide JS + + if (d.querySelector('.glide')) { + new Glide('.glide', { + type: 'carousel', + startAt: 0, + perView: 3 + }).mount(); + } + + if (d.querySelector('.glide-testimonials')) { + new Glide('.glide-testimonials', { + type: 'carousel', + startAt: 0, + perView: 1, + autoplay: 2000 + }).mount(); + } + + if (d.querySelector('.glide-clients')) { + new Glide('.glide-clients', { + type: 'carousel', + startAt: 0, + perView: 5, + autoplay: 2000 + }).mount(); + } + + if (d.querySelector('.glide-news-widget')) { + new Glide('.glide-news-widget', { + type: 'carousel', + startAt: 0, + perView: 1, + autoplay: 2000 + }).mount(); + } + + if (d.querySelector('.glide-autoplay')) { + new Glide('.glide-autoplay', { + type: 'carousel', + startAt: 0, + perView: 3, + autoplay: 2000 + }).mount(); + } + + // Pricing countup + var billingSwitchEl = d.getElementById('billingSwitch'); + if(billingSwitchEl) { + const countUpStandard = new countUp.CountUp('priceStandard', 99, { startVal: 199 }); + const countUpPremium = new countUp.CountUp('pricePremium', 199, { startVal: 299 }); + + billingSwitchEl.addEventListener('change', function() { + if(billingSwitch.checked) { + countUpStandard.start(); + countUpPremium.start(); + } else { + countUpStandard.reset(); + countUpPremium.reset(); + } + }); + } + +}); diff --git a/resources/volt/scss/_variables.scss b/resources/volt/scss/_variables.scss new file mode 100644 index 0000000..c094802 --- /dev/null +++ b/resources/volt/scss/_variables.scss @@ -0,0 +1 @@ +// $primary: blue; diff --git a/resources/volt/scss/app.scss b/resources/volt/scss/app.scss new file mode 100644 index 0000000..fca7402 --- /dev/null +++ b/resources/volt/scss/app.scss @@ -0,0 +1,89 @@ +/* + +========================================================= +* Volt - Free Bootstrap 5 Dashboard +========================================================= + +* Product Page: https://themesberg.com/product/admin-dashboard/volt-bootstrap-5-dashboard +* Copyright 2021 Themesberg (https://www.themesberg.com) + +* Designed and coded by https://themesberg.com + +========================================================= + +* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Please contact us to request a removal. Contact us if you want to remove it. + +*/ + +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap'); + +// update variables here +@import "variables"; + +@import "bootstrap/scss/functions"; +@import "volt/variables"; + +// Third party +@import 'vanillajs-datepicker/sass/datepicker.scss'; +@import "chartist/dist/scss/chartist.scss"; + +// Bootstrap +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/mixins"; +@import "bootstrap/scss/utilities"; + +// Modify utilities here +@import "volt/utilities"; + +// Bootstrap Layout & components +@import "bootstrap/scss/root"; +@import "bootstrap/scss/reboot"; +@import "bootstrap/scss/type"; +@import "bootstrap/scss/images"; +@import "bootstrap/scss/containers"; +@import "bootstrap/scss/grid"; +@import "bootstrap/scss/tables"; +@import "bootstrap/scss/forms"; +@import "bootstrap/scss/buttons"; +@import "bootstrap/scss/transitions"; +@import "bootstrap/scss/dropdown"; +@import "bootstrap/scss/button-group"; +@import "bootstrap/scss/nav"; +@import "bootstrap/scss/navbar"; +@import "bootstrap/scss/card"; +@import "bootstrap/scss/accordion"; +@import "bootstrap/scss/breadcrumb"; +@import "bootstrap/scss/pagination"; +@import "bootstrap/scss/badge"; +@import "bootstrap/scss/alert"; +@import "bootstrap/scss/progress"; +@import "bootstrap/scss/list-group"; +@import "bootstrap/scss/close"; +@import "bootstrap/scss/toasts"; +@import "bootstrap/scss/modal"; +@import "bootstrap/scss/tooltip"; +@import "bootstrap/scss/popover"; +@import "bootstrap/scss/carousel"; +@import "bootstrap/scss/spinners"; + +// Helpers +@import "bootstrap/scss/helpers"; + +// Utilities +@import "bootstrap/scss/utilities/api"; +// scss-docs-end import-stack + +// volt mixins & functions +@import "volt/mixins"; +@import "volt/functions"; + +// Layout +@import "volt/layout"; + +// Components +@import "volt/components"; + +// Forms +@import "volt/forms"; + +// write your custom styles here! diff --git a/resources/volt/scss/volt/_components.scss b/resources/volt/scss/volt/_components.scss new file mode 100644 index 0000000..d317837 --- /dev/null +++ b/resources/volt/scss/volt/_components.scss @@ -0,0 +1,30 @@ +@import "components/body"; +@import "components/accordions"; +@import "components/animations"; +@import "components/alerts"; +@import "components/avatars"; +@import "components/badge"; +@import "components/buttons"; +@import "components/breadcrumb"; +@import "components/card"; +@import "components/carousel"; +@import "components/close"; +@import "components/custom-forms"; +@import "components/charts"; +@import "components/dropdown"; +@import "components/icons"; +@import "components/images"; +@import "components/list-group"; +@import "components/modal"; +@import "components/nav"; +@import "components/pagination"; +@import "components/popover"; +@import "components/progress"; +@import "components/shapes"; +@import "components/datepicker"; +@import "components/steps"; +@import "components/tables"; +@import "components/type"; +@import "components/timelines"; +@import "components/tooltip"; +@import "components/scrollbar"; diff --git a/resources/volt/scss/volt/_forms.scss b/resources/volt/scss/volt/_forms.scss new file mode 100644 index 0000000..cecae7b --- /dev/null +++ b/resources/volt/scss/volt/_forms.scss @@ -0,0 +1,4 @@ +@import "forms/form-control"; +@import "forms/form-check"; +@import "forms/input-group"; +@import "forms/form-select"; \ No newline at end of file diff --git a/resources/volt/scss/volt/_functions.scss b/resources/volt/scss/volt/_functions.scss new file mode 100755 index 0000000..99ef591 --- /dev/null +++ b/resources/volt/scss/volt/_functions.scss @@ -0,0 +1,23 @@ +// Retrieve color Sass maps + +@function section-color($key: "primary") { + @return map-get($section-colors, $key); +} + +// Lines colors + +@function shapes-primary-color($key: "step-1-gradient-bg") { + @return map-get($shapes-primary-colors, $key); +} + +@function shapes-default-color($key: "step-1-gradient-bg") { + @return map-get($shapes-default-colors, $key); +} + +@function lines-light-color($key: "step-1-gradient-bg") { + @return map-get($shapes-light-colors, $key); +} + +@function shapes-dark-color($key: "step-1-gradient-bg") { + @return map-get($shapes-dark-colors, $key); +} \ No newline at end of file diff --git a/resources/volt/scss/volt/_layout.scss b/resources/volt/scss/volt/_layout.scss new file mode 100644 index 0000000..f687e04 --- /dev/null +++ b/resources/volt/scss/volt/_layout.scss @@ -0,0 +1,5 @@ +@import "layout/navbar"; +@import "layout/section"; +@import "layout/footer"; +@import "layout/sidebar"; +@import "layout/sidenav"; diff --git a/resources/volt/scss/volt/_mixins.scss b/resources/volt/scss/volt/_mixins.scss new file mode 100755 index 0000000..45a7df7 --- /dev/null +++ b/resources/volt/scss/volt/_mixins.scss @@ -0,0 +1,7 @@ +@import "mixins/animations"; +@import "mixins/background-variant"; +@import "mixins/icon"; +@import "mixins/modals"; +@import "mixins/popover"; +@import "mixins/transform"; +@import "mixins/utilities"; diff --git a/resources/volt/scss/volt/_utilities.scss b/resources/volt/scss/volt/_utilities.scss new file mode 100755 index 0000000..f3c2c14 --- /dev/null +++ b/resources/volt/scss/volt/_utilities.scss @@ -0,0 +1,95 @@ +// check docs https://v5.getbootstrap.com/docs/5.0/utilities/api/ + +$utilities: map-merge( + $utilities, + ( + "blur": ( + property: backdrop-filter, + class: blur, + values: ( + 0: blur(0), + 1: blur(1px), + 2: blur(2px), + 3: blur(3px), + 4: blur(4px), + 5: blur(5px), + 6: blur(6px), + 7: blur(7px), + 8: blur(8px), + 9: blur(91px), + 10: blur(10px), + 11: blur(11px), + 12: blur(12px), + 13: blur(13px), + 14: blur(14px), + ), + ), + "opacity": ( + property: opacity, + class: o, + values: ( + 0: 0, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1, + ), + ), + "z-index": ( + property: z-index, + class: z, + values: ( + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 999: 999, + ), + ), + "viewport-height": ( + property: height, + class: vh, + responsive: true, + values: ( + 100: 100vh, + ), + ), + "font-weight": ( + property: font-weight, + class: fw, + values: ( + light: $font-weight-light, + lighter: $font-weight-lighter, + normal: $font-weight-normal, + bold: $font-weight-bold, + bolder: $font-weight-bolder, + extrabold: $font-weight-extrabold, + black: $font-weight-black, + ), + ), + "max-width": ( + property: max-width, + class: fmxw, + values: ( + 100: 100px, + 200: 200px, + 300: 300px, + 400: 400px, + 500: 500px, + 999: 999px, + ), + ), + "min-height": ( + property: min-height, + class: fmxh, + values: ( + 100: 100px, + 200: 200px, + 300: 300px, + 400: 400px, + 500: 500px, + 999: 999px, + ), + ), + ) +); diff --git a/resources/volt/scss/volt/_variables.scss b/resources/volt/scss/volt/_variables.scss new file mode 100644 index 0000000..5c7abc0 --- /dev/null +++ b/resources/volt/scss/volt/_variables.scss @@ -0,0 +1,1660 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. + +// Color system + +// Shades of grey +$white : #ffffff !default; +$gray-50: #F9FAFB !default; +$gray-100: #F2F4F6 !default; +$gray-200: #E5E7EB !default; +$gray-300: #D1D5DB !default; +$gray-400: #9CA3AF !default; +$gray-500: #6B7280 !default; +$gray-600: #4B5563 !default; +$gray-700: #374151 !default; +$gray-800: #1F2937 !default; +$gray-900: #111827 !default; +$dark : $gray-800 !default; +$black : $gray-900 !default; + +// fusv-disable +$grays: ("100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900) !default; +// fusv-enable + +// Generic colors +$blue : #2361ce !default; +$indigo : #4F46E5 !default; +$purple : #7C3AED !default; +$pink : #EF4683 !default; +$red : #E11D48 !default; +$orange : #FBA918 !default; +$brown : #b9a084 !default; +$yellow : #f3c78e !default; +$yellow-100 : #ffeed6 !default; +$yellow-200 : #f5dbb8 !default; +$green : #10B981 !default; +$teal : #1E90FF !default; +$cyan : #63b1bd !default; +$soft-indigo: #f5e8ff !default; +$soft-green : #2CA58D !default; + +// scss-docs-start colors-map +$colors: ("blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800) !default; +// scss-docs-end colors-map + +// Color scheme +$primary : #1F2937 !default; +$secondary: #f0bc74 !default; +$tertiary : #31316A !default; + +// Series names and colors. This can be extended or customized as desired. Just add more series and colors. +$ct-series-names: (a, b, c, d, e, f, g) !default !default; +$ct-series-colors: (#262B40, + #F8BD7A, + #2CA58D, + #31316A, + #C96480, + #ffffff, + #F8BD7A, + +) !default; + + +$success: $green !default; +$info : $blue !default; +$warning: $yellow !default; +$danger : $red !default; +$gray : $gray-900 !default; +$light : $gray-400 !default; +$lighten: $gray-300 !default; +$soft : $gray-200 !default; +$dark : $dark !default; + +// Brands colors +$facebook : #3b5999 !default; +$twitter : #1da1f2 !default; +$google : #DB4337 !default; +$instagram: #e4405f !default; +$pinterest: #bd081c !default; +$youtube : #cd201f !default; +$slack : #3aaf85 !default; +$dribbble : #ea4c89 !default; +$github : #222222 !default; +$dropbox : #1E90FF !default; +$twitch : #4B367C !default; +$paypal : #ecb32c !default; +$behance : #0057ff !default; +$reddit : #E84422 !default; + +// Brand colors +$brand-colors: ("facebook": $facebook, + "twitter": $twitter, + "google": $google, + "instagram": $instagram, + "pinterest": $pinterest, + "youtube": $youtube, + "slack": $slack, + "dribbble": $dribbble, + "dropbox": $dropbox, + "twitch": $twitch, + "paypal": $paypal, + "behance": $behance, + "reddit" : $reddit, + "github": $github) !default; + +// Theme colors +$theme-colors: ( + "primary": $primary, + "secondary": $secondary, + "tertiary": $tertiary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "white": $white, + "indigo": $indigo, + "purple": $purple, + "yellow-100": $yellow-100, + "yellow-200": $yellow-200, + "gray-50": $gray-50, + "gray-100": $gray-100, + "gray-200": $gray-200, + "gray-300": $gray-300, + "gray-400": $gray-400, + "gray-500": $gray-500, + "gray-600": $gray-600, + "gray-700": $gray-700, + "gray-800": $gray-800, + "gray-900": $gray-900 + ) !default; + + // Navbar colors + $navbar-colors: ("primary": $primary, +) !default; + +// Set a specific jump point for requesting color jumps +$theme-color-interval: 8% !default; + +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 3 !default; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark : $dark !default; +$color-contrast-light: $white !default; + +// fusv-disable +$blue-100: tint-color($blue, 8) !default; +$blue-200: tint-color($blue, 6) !default; +$blue-300: tint-color($blue, 4) !default; +$blue-400: tint-color($blue, 2) !default; +$blue-500: $blue !default; +$blue-600: shade-color($blue, 2) !default; +$blue-700: shade-color($blue, 4) !default; +$blue-800: shade-color($blue, 6) !default; +$blue-900: shade-color($blue, 8) !default; + +$indigo-100: tint-color($indigo, 8) !default; +$indigo-200: tint-color($indigo, 6) !default; +$indigo-300: tint-color($indigo, 4) !default; +$indigo-400: tint-color($indigo, 2) !default; +$indigo-500: $indigo !default; +$indigo-600: shade-color($indigo, 2) !default; +$indigo-700: shade-color($indigo, 4) !default; +$indigo-800: shade-color($indigo, 6) !default; +$indigo-900: shade-color($indigo, 8) !default; + +$purple-100: tint-color($purple, 8) !default; +$purple-200: tint-color($purple, 6) !default; +$purple-300: tint-color($purple, 4) !default; +$purple-400: tint-color($purple, 2) !default; +$purple-500: $purple !default; +$purple-600: shade-color($purple, 2) !default; +$purple-700: shade-color($purple, 4) !default; +$purple-800: shade-color($purple, 6) !default; +$purple-900: shade-color($purple, 8) !default; + +$pink-100: tint-color($pink, 8) !default; +$pink-200: tint-color($pink, 6) !default; +$pink-300: tint-color($pink, 4) !default; +$pink-400: tint-color($pink, 2) !default; +$pink-500: $pink !default; +$pink-600: shade-color($pink, 2) !default; +$pink-700: shade-color($pink, 4) !default; +$pink-800: shade-color($pink, 6) !default; +$pink-900: shade-color($pink, 8) !default; + +$red-100: tint-color($red, 8) !default; +$red-200: tint-color($red, 6) !default; +$red-300: tint-color($red, 4) !default; +$red-400: tint-color($red, 2) !default; +$red-500: $red !default; +$red-600: shade-color($red, 2) !default; +$red-700: shade-color($red, 4) !default; +$red-800: shade-color($red, 6) !default; +$red-900: shade-color($red, 8) !default; + +$orange-100: tint-color($orange, 8) !default; +$orange-200: tint-color($orange, 6) !default; +$orange-300: tint-color($orange, 4) !default; +$orange-400: tint-color($orange, 2) !default; +$orange-500: $orange !default; +$orange-600: shade-color($orange, 2) !default; +$orange-700: shade-color($orange, 4) !default; +$orange-800: shade-color($orange, 6) !default; +$orange-900: shade-color($orange, 8) !default; + +$yellow-100: tint-color($yellow, 8) !default; +$yellow-200: tint-color($yellow, 6) !default; +$yellow-300: tint-color($yellow, 4) !default; +$yellow-400: tint-color($yellow, 2) !default; +$yellow-500: $yellow !default; +$yellow-600: shade-color($yellow, 2) !default; +$yellow-700: shade-color($yellow, 4) !default; +$yellow-800: shade-color($yellow, 6) !default; +$yellow-900: shade-color($yellow, 8) !default; + +$green-100: tint-color($green, 8) !default; +$green-200: tint-color($green, 6) !default; +$green-300: tint-color($green, 4) !default; +$green-400: tint-color($green, 2) !default; +$green-500: $green !default; +$green-600: shade-color($green, 2) !default; +$green-700: shade-color($green, 4) !default; +$green-800: shade-color($green, 6) !default; +$green-900: shade-color($green, 8) !default; + +$teal-100: tint-color($teal, 8) !default; +$teal-200: tint-color($teal, 6) !default; +$teal-300: tint-color($teal, 4) !default; +$teal-400: tint-color($teal, 2) !default; +$teal-500: $teal !default; +$teal-600: shade-color($teal, 2) !default; +$teal-700: shade-color($teal, 4) !default; +$teal-800: shade-color($teal, 6) !default; +$teal-900: shade-color($teal, 8) !default; + +$cyan-100: tint-color($cyan, 8) !default; +$cyan-200: tint-color($cyan, 6) !default; +$cyan-300: tint-color($cyan, 4) !default; +$cyan-400: tint-color($cyan, 2) !default; +$cyan-500: $cyan !default; +$cyan-600: shade-color($cyan, 2) !default; +$cyan-700: shade-color($cyan, 4) !default; +$cyan-800: shade-color($cyan, 6) !default; +$cyan-900: shade-color($cyan, 8) !default; +// fusv-enable + +// Characters which are escaped by the escape-svg function +$escaped-characters: (("<", "%3c"), + (">", "%3e"), + ("#", "%23"), + ("(", "%28"), + (")", "%29"), +) !default; + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret : true !default; +$enable-rounded : true !default; +$enable-shadows : true !default; +$enable-gradients : false !default; +$enable-transitions : true !default; +$enable-reduced-motion : true !default; +$enable-grid-classes : true !default; +$enable-button-pointers : true !default; +$enable-rfs : true !default; +$enable-validation-icons : true !default; +$enable-negative-margins : true !default; +$enable-deprecation-messages: true !default; +$enable-important-utilities : true !default; + +// Gradient +// +// The gradient which is added to components if `$enable-gradients` is `true` +// This gradient is also added to elements with `.bg-gradient` +$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default; + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +$spacer: 1rem !default; +$spacers: (0: 0, + 1: $spacer * 0.25, + 2: $spacer * 0.5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, + 6: ($spacer * 5), + 7: ($spacer * 8), + 8: ($spacer * 10), + 9: ($spacer * 11), + 10: ($spacer * 14), + 11: ($spacer * 16), + 12: ($spacer * 20), + 'sm': ($spacer * 1), + 'md': ($spacer * 2), + 'lg': ($spacer * 4), + 'xl': ($spacer * 8)) !default; + +$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; + +// Body +// +// Settings for the `` element. + +$body-bg : $gray-100 !default; +$body-color : $gray-700 !default; +$body-text-align: null !default; + + +// Links +// +// Style anchor elements. + +$link-color : $primary !default; +$link-decoration : none !default; +$link-hover-color : darken($link-color, 50%) !default; +$link-hover-decoration : none !default; +// Darken percentage for links with `.text-*` class (e.g. `.text-success`) +$emphasized-link-hover-darken-percentage: 10% !default; + +$stretched-link-pseudo-element: after !default; +$stretched-link-z-index : 1 !default; + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem !default; + + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: (xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px) !default; +// scss-docs-end grid-breakpoints + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: (sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px) !default; +// scss-docs-end container-max-widths + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns : 12 !default; +$grid-gutter-width: 1.5rem !default; +$grid-row-columns : 6 !default; + +$gutters: $spacers !default; + +// Container padding + +$container-padding-x: 1rem !default; + + +// Components +// +// Define common padding and border radius sizes and more. + +$border-width : .0625rem !default; +$border-width-md : 0.125rem !default; +$border-width-lg : 0.25rem !default; +$border-width-xl : 0.375rem !default; +$border-color-white: $white !default; +$border-color : $gray-200 !default; + + +$border-radius : .5rem !default; +$border-radius-sm : .35rem !default; +$border-radius-lg : 1rem !default; +$border-radius-xl : 3rem !default; +$border-radius-pill: 50rem !default; +$circle-radius : 50% !default; + +$component-active-color : $white !default; +$component-active-bg : $primary !default; +$component-active-border-color: $primary !default; + +$component-hover-color : $gray-300 !default; +$component-hover-bg : $gray-300 !default; +$component-hover-border-color: $gray-300 !default; + +$rounded-pill: 50rem !default; + +$box-shadow : 0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06) !default; +$box-shadow-sm : 0 2px 5px rgba(140, 152, 164, .2) !default; +$box-shadow-lg : 0 1rem 3rem rgba($black, .175) !default; +$box-shadow-inset: inset 0 1px 2px rgba($black, .0125) !default; + +$component-active-color: $white !default; +$component-active-bg : $primary !default; + +$caret-width : .3em !default; +$caret-vertical-align: $caret-width * .85 !default; +$caret-spacing : $caret-width * .85 !default; + +$transition-base : all .2s ease !default; +$transition-transform: transform .2s ease !default; +$transition-fade : opacity .15s linear !default; +$transition-collapse : height .35s ease !default; +$transition-tabs : all 0.2s !default; + +// scss-docs-start embed-responsive-aspect-ratios +$embed-responsive-aspect-ratios: ("21by9": (x: 21, + y: 9), + "16by9": (x: 16, + y: 9), + "4by3": (x: 4, + y: 3), + "1by1": (x: 1, + y: 1)) !default; +// scss-docs-end embed-responsive-aspect-ratios + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// font awesome +$fontawesome-webfonts-path: '../vendor/font-awesome/webfonts' !default; +$font-awesome-5 : 'Font Awesome 5 Free' !default; + +// stylelint-disable value-keyword-case +$font-family-sans-serif: 'Inter', sans-serif !default; +// stylelint-enable value-keyword-case +$font-family-base: var(--bs-font-sans-serif) !default; +$font-family-code: var(--bs-font-monospace) !default; + +// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins +// $font-size-base effects the font size of the body text +$font-size-root: null !default; +$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` +$font-size-xs : ($font-size-base * .75) !default; +$font-size-sm : ($font-size-base * .875) !default; +$font-size-md : ($font-size-base * 1) !default; +$font-size-lg : ($font-size-base * 1.25) !default; +$font-size-xl : ($font-size-base * 1.5) !default; +$font-size-xxl : ($font-size-base * 2) !default; + +$font-weight-lighter: lighter !default; +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-bold: 500 !default; +$font-weight-bolder: 600 !default; +$font-weight-extrabold: 700 !default; +$font-weight-black: 800 !default; + +$font-weight-base: $font-weight-normal !default; + +$line-height-base: 1.5 !default; +$line-height-sm : 1.25 !default; +$line-height-lg : 2 !default; + +$h1-font-size: $font-size-base * 2.5 !default; +$h2-font-size: $font-size-base * 2 !default; +$h3-font-size: $font-size-base * 1.75 !default; +$h4-font-size: $font-size-base * 1.5 !default; +$h5-font-size: $font-size-base * 1.25 !default; +$h6-font-size: $font-size-base !default; + +$headings-margin-bottom: $spacer * 0.5 !default; +$headings-font-family : null !default; +$headings-font-style : null !default; +$headings-font-weight : $font-weight-bold !default; +$headings-line-height : 1.3 !default; +$headings-color : $dark !default; + +// Display headings +$display1-size: 5rem !default; +$display2-size: 3.5rem !default; +$display3-size: 2.5rem !default; +$display4-size: 1.875rem !default; + +// scss-docs-start display-headings +$display-font-sizes: (1: 5rem, + 2: 3.5rem, + 3: 2.5rem, + 4: 1.875rem, + 5: 1.2rem, + 6: 1rem) !default; + +$display-font-weight: $font-weight-bold !default; +$display-line-height: $headings-line-height !default; +// scss-docs-end display-headings + +$paragraph-font-size : 1rem !default; +$paragraph-font-weight: 300 !default; +$paragraph-line-height: 1.6 !default; + +$lead-font-size : $font-size-base * 1.25 !default; +$lead-font-weight: 300 !default; + +$small-font-size: .875em !default; + +$sub-sup-font-size: .75em !default; + +$text-muted: #58677d !default; + +$initialism-font-size: $small-font-size !default; + +$blockquote-margin-y : $spacer !default; +$blockquote-font-size : $font-size-base * 1.25 !default; +$blockquote-footer-color : $gray-600 !default; +$blockquote-footer-font-size: $small-font-size !default; + +$hr-margin-y: $spacer !default; +$hr-color : inherit !default; +$hr-height : $border-width !default; +$hr-opacity : .25 !default; + +$legend-margin-bottom: .5rem !default; +$legend-font-size : 1.5rem !default; +$legend-font-weight : null !default; + +$mark-padding: .2em !default; + +$dt-font-weight: $font-weight-bold !default; + +$nested-kbd-font-weight: $font-weight-bold !default; + +$list-inline-padding: .5rem !default; + +$mark-bg: #fcf8e3 !default; + + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +// scss-docs-start table-variables +$table-cell-padding-y : .75rem !default; +$table-cell-padding-x : .5rem !default; +$table-cell-padding-y-sm: .25rem !default; +$table-cell-padding-x-sm: .25rem !default; + +$table-cell-vertical-align: top !default; + +$table-color: $body-color !default; +$table-bg : transparent !default; + +$table-striped-color : $table-color !default; +$table-striped-bg-factor: .05 !default; +$table-striped-bg : rgba($black, $table-striped-bg-factor) !default; + +$table-active-color : $table-color !default; +$table-active-bg-factor: .1 !default; +$table-active-bg : rgba($black, $table-active-bg-factor) !default; + +$table-hover-color : $table-color !default; +$table-hover-bg-factor: .075 !default; +$table-hover-bg : rgba($black, $table-hover-bg-factor) !default; + +$table-border-factor: .1 !default; +$table-border-width : $border-width !default; +$table-border-color : $border-color !default; + +$table-striped-order: odd !default; + +$table-group-seperator-color: $light !default; + +$table-caption-color: $text-muted !default; + +$table-bg-scale: -80% !default; + +$table-head-spacer-y : .75rem !default; +$table-head-spacer-x : 1rem !default; +$table-head-font-size : .75rem !default; +$table-head-text-transform: uppercase !default; +$table-body-font-size : $font-size-sm !default; + +$table-variants: ("primary": shift-color($primary, $table-bg-scale), + "secondary": shift-color($secondary, $table-bg-scale), + "success": shift-color($success, $table-bg-scale), + "info": shift-color($info, $table-bg-scale), + "warning": shift-color($warning, $table-bg-scale), + "danger": shift-color($danger, $table-bg-scale), + "light": $light, + "dark": $dark, +) !default; + +// Accordion +$accordion-padding-y : 1rem !default; +$accordion-padding-x : 1.25rem !default; +$accordion-color : $body-color !default; +$accordion-bg : transparent !default; +$accordion-border-width : $border-width !default; +$accordion-border-color : $gray-400 !default; +$accordion-border-radius: $border-radius !default; + +$accordion-body-padding-y: $accordion-padding-y !default; +$accordion-body-padding-x: $accordion-padding-x !default; + +$accordion-button-padding-y : $accordion-padding-y !default; +$accordion-button-padding-x : $accordion-padding-x !default; +$accordion-button-color : $accordion-color !default; +$accordion-button-bg : $accordion-bg !default; +$accordion-button-active-bg : $light !default; +$accordion-button-active-color: shade-color($primary, 10%) !default; + + +$accordion-icon-width : 1.25rem !default !default; +$accordion-icon-color : $accordion-color !default !default; +$accordion-icon-active-color: $accordion-button-active-color !default !default; +$accordion-icon-transition : transform .2s ease-in-out !default !default; +$accordion-icon-transform : rotate(180deg) !default !default; + +$accordion-button-icon : url("data:image/svg+xml,") !default !default; +$accordion-button-active-icon: url("data:image/svg+xml,") !default !default; + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +$input-btn-padding-y : .5rem !default; +$input-btn-padding-x : 1rem !default; +$input-btn-font-family: null !default; +$input-btn-font-size : $font-size-sm !default; +$input-btn-line-height: $line-height-base !default; + +$input-btn-focus-width : .18rem !default; +$input-btn-focus-color-opacity: .25 !default; +$input-btn-focus-color : rgba($component-active-bg, $input-btn-focus-color-opacity) !default; +$input-btn-focus-box-shadow : 0 0 0 $input-btn-focus-width $input-btn-focus-color !default; + +$input-btn-padding-y-sm: .375rem !default; +$input-btn-padding-x-sm: .625rem !default; +$input-btn-font-size-sm: $font-size-sm !default; + +$input-btn-padding-y-lg: .5rem !default; +$input-btn-padding-x-lg: 1rem !default; +$input-btn-font-size-lg: $font-size-lg !default; + +$input-btn-border-width: $border-width !default; + +$shadow-input : $box-shadow !default; +$shadow-input-focus: .1rem .1rem 0 rgba($gray-200, .5) !default; + + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +$btn-padding-y : $input-btn-padding-y !default; +$btn-padding-x : $input-btn-padding-x !default; +$btn-font-family: $input-btn-font-family !default; +$btn-font-size : $input-btn-font-size !default; +$btn-line-height: $input-btn-line-height !default; +$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm !default; +$btn-padding-x-sm: $input-btn-padding-x-sm !default; +$btn-font-size-sm: $input-btn-font-size-sm !default; + +$btn-padding-y-lg: $input-btn-padding-y-lg !default; +$btn-padding-x-lg: $input-btn-padding-x-lg !default; +$btn-font-size-lg: $input-btn-font-size-lg !default; + +$btn-border-width: $input-btn-border-width !default; + +$btn-font-weight: $font-weight-bold !default; +$btn-box-shadow : inset 0 1px 0 rgba($white, .15), +0 1px 1px rgba($black, .075) !default; +$btn-focus-width : $input-btn-focus-width !default; +$btn-focus-box-shadow : $input-btn-focus-box-shadow !default; +$btn-disabled-opacity : .65 !default; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; + +$btn-link-color : $link-color !default; +$btn-link-hover-color : $link-hover-color !default; +$btn-link-disabled-color: $gray-600 !default; + +$btn-block-spacing-y: .5rem !default; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius : $border-radius !default; +$btn-border-radius-sm: $border-radius !default; +$btn-border-radius-lg: $border-radius !default; + +$btn-transition: color .15s ease-in-out, +background-color .15s ease-in-out, +border-color .15s ease-in-out, +box-shadow .15s ease-in-out !default; + + +$btn-close-width: 1em !default; +$btn-close-height: $btn-close-width !default; +$btn-close-padding-x: .25em !default; +$btn-close-padding-y: $btn-close-padding-x !default; +$btn-close-color: $black !default; +$btn-close-bg: url("data:image/svg+xml,") !default; +$btn-close-color-white: $white !default; +$btn-close-bg-white: url("data:image/svg+xml,") !default; +$btn-close-focus-shadow: $input-btn-focus-box-shadow !default; +$btn-close-opacity: .5 !default; +$btn-close-hover-opacity: .75 !default; +$btn-close-focus-opacity: 1 !default; +$btn-close-disabled-opacity: .25 !default; +$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; + +// Forms + +$form-text-margin-top : .25rem !default; +$form-text-font-size : $small-font-size !default; +$form-text-font-style : null !default; +$form-text-font-weight: null !default; +$form-text-color : $text-muted !default; + +$form-label-margin-bottom: .5rem !default; +$form-label-font-size : null !default; +$form-label-font-style : null !default; +$form-label-font-weight : null !default; +$form-label-color : null !default; + +$input-padding-y : $input-btn-padding-y !default; +$input-padding-x : $input-btn-padding-x !default; +$inpu-lg-padding-y: 1rem !default; +$input-font-family: $input-btn-font-family !default; +$input-font-size : $input-btn-font-size !default; +$input-font-weight: $font-weight-base !default; +$input-line-height: $input-btn-line-height !default; + +$input-padding-y-sm: $input-btn-padding-y-sm !default; +$input-padding-x-sm: $input-btn-padding-x-sm !default; +$input-font-size-sm: $input-btn-font-size-sm !default; + +$input-padding-y-lg: $input-btn-padding-y-lg !default; +$input-padding-x-lg: $input-btn-padding-x-lg !default; +$input-font-size-lg: $input-btn-font-size-lg !default; + +$input-bg : $white !default; +$input-disabled-bg : $gray-200 !default; +$input-disabled-border-color: null !default; + +$input-color : $gray-500 !default; +$input-border-color: $gray-300 !default; +$input-border-width: $input-btn-border-width !default; +$input-box-shadow : 0 1px 2px 0 rgba(0, 0, 0, 0.07) !default; + +$input-border-radius : $border-radius !default; +$input-border-radius-sm: $border-radius !default; +$input-border-radius-lg: $border-radius !default; + +$input-focus-bg : $input-bg !default; +$input-focus-border-color: lighten($component-active-bg, 25%) !default; +$input-focus-color : $input-color !default; +$input-focus-width : $input-btn-focus-width !default; +$input-focus-box-shadow : $input-btn-focus-box-shadow !default; + +$input-placeholder-color: $gray-600 !default; +$input-plaintext-color : $body-color !default; + +$input-height-border: $input-border-width * 2 !default; + +$input-height-inner : add($input-line-height * 1em, $input-padding-y * 2) !default; +$input-height-inner-half : add($input-line-height * .5em, $input-padding-y) !default; +$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * 0.5) !default; + +$input-height : add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default; +$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default; +$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default; +$input-height-xl: calc(#{$input-line-height * 1.5em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default; + +$input-transition: border-color .15s ease-in-out, +box-shadow .15s ease-in-out !default; + +// Custom forms + +$custom-control-gutter : 1.75rem !default; +$custom-control-spacer-x : 1rem !default; +$custom-control-line-height : 1 !default; +$custom-control-indicator-size: 1.25rem !default; + +$custom-control-bg : $gray-400 !default; +$custom-control-indicator-bg: $white !default; +$custom-control-border-width: $border-width !default; +$custom-control-border-color: $input-border-color !default; +$custom-control-box-shadow : none !default; + + + +$custom-control-indicator-hover-color : $component-hover-color !default; +$custom-control-indicator-hover-bg : $primary !default; +$custom-control-indicator-hover-border-color: $component-hover-border-color !default; + +$custom-control-indicator-active-color : $component-active-color !default; +$custom-control-indicator-active-border-color: $component-active-border-color !default; + + +$custom-control-indicator-checked-color : $component-active-color !default; +$custom-control-indicator-checked-bg : $primary !default; +$custom-control-indicator-checked-border-color: $primary !default; +$custom-control-indicator-checked-disabled-bg : rgba($primary, .7) !default; +$custom-control-indicator-border-width : 1px !default; + +$custom-control-indicator-disabled-bg: $gray-200 !default; +$custom-control-label-disabled-color : $gray-800 !default; + +$custom-checkbox-bg : $gray-400 !default; +$custom-checkbox-checked-bg : $primary !default; +$custom-checkbox-disabled-checked-bg : rgba($primary, .7) !default; +$custom-checkbox-indicator-border-radius: $border-radius-xl !default; +$custom-checkbox-indicator-border-width : $border-width-md !default; +$custom-checkbox-indicator-icon-checked : $font-awesome-5 !default; +$square-checkbox-indicator-border-radius: 3px !default; + +$custom-toggle-slider-bg : $gray-400 !default; +$custom-toggle-slider-indicator-bg: $white !default; +$custom-toggle-checked-bg : $primary !default; +$custom-toggle-disabled-bg : $gray-200 !default; +$custom-toggle-disabled-checked-bg: rgba($primary, .7) !default; +$custom-toggle-border-radius : .8rem !default; + +$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default; + +$custom-checkbox-disabled-checked-color: $gray-800 !default; + + +$form-check-input-width : 1.125em !default; +$form-check-min-height : $font-size-base * $line-height-base !default; +$form-check-padding-left : $form-check-input-width+.5em !default; +$form-check-margin-bottom: .125rem !default; +$form-check-label-color : null !default; +$form-check-label-cursor : null !default; +$form-check-transition : background-color .2s ease-in-out, +background-position .2s ease-in-out, +border-color .2s ease-in-out, +box-shadow .2s ease-in-out !default; + +$form-check-input-active-filter: brightness(90%) !default; + +$form-check-input-bg : $body-bg !default; +$form-check-input-border : 1px solid $input-border-color !default; +$form-check-input-border-radius : .25em !default; +$form-check-radio-border-radius : 50% !default; +$form-check-input-focus-border : $input-focus-border-color !default; +$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default; + +$form-check-input-checked-color : $component-active-color !default; +$form-check-input-checked-bg-color : $component-active-bg !default; +$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default; +$form-check-input-checked-bg-image : url("data:image/svg+xml,") !default; +$form-check-radio-checked-bg-image : url("data:image/svg+xml,") !default; + +$form-check-input-indeterminate-color : $component-active-color !default; +$form-check-input-indeterminate-bg-color : $component-active-bg !default; +$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default; +$form-check-input-indeterminate-bg-image : url("data:image/svg+xml,") !default; + +$form-switch-color : $gray-600 !default; +$form-switch-width : 2.25em !default; +$form-switch-padding-left : $form-switch-width+.5em !default; +$form-switch-bg-image : url("data:image/svg+xml,") !default; +$form-switch-border-radius: $form-switch-width !default; + +$form-switch-focus-color : $input-focus-border-color !default; +$form-switch-focus-bg-image: url("data:image/svg+xml,") !default; + +$form-switch-checked-color : $component-active-color !default; +$form-switch-checked-bg-image : url("data:image/svg+xml,") !default; +$form-switch-checked-bg-position: right center !default; + +$form-check-inline-margin-right: 1rem !default; + +$input-group-addon-color : $input-color !default; +$input-group-addon-border-color: $input-border-color !default; + +// Input groups + +// scss-docs-start input-group-variables +$input-group-addon-padding-y: .5rem !default; +$input-group-addon-padding-x: .625rem !default; +$input-group-addon-font-weight: $input-font-weight !default; +$input-group-addon-color: $gray-400 !default; +$input-group-addon-bg: $white !default; +$input-group-addon-border-color: $input-border-color !default; +// scss-docs-end input-group-variables + +$form-select-padding-y : $input-padding-y !default; +$form-select-padding-x : $input-padding-x !default; +$form-select-font-family : $input-font-family !default; +$form-select-font-size : $input-font-size !default; +$form-select-height : $input-height !default; +$form-select-indicator-padding : 1rem !default; // Extra padding to account for the presence of the background-image based indicator +$form-select-font-weight : $input-font-weight !default; +$form-select-line-height : $input-line-height !default; +$form-select-color : $input-color !default; +$form-select-disabled-color : $gray-600 !default; +$form-select-bg : $input-bg !default; +$form-select-disabled-bg : $gray-200 !default; +$form-select-disabled-border-color: $input-disabled-border-color !default; +$form-select-bg-position : right $form-select-padding-x center !default; +$form-select-bg-size : 16px 12px !default; // In pixels because image dimensions +$form-select-indicator-color : $gray-800 !default; +$form-select-indicator : url("data:image/svg+xml,") !default; + +$form-select-feedback-icon-padding-right: add(1em * .75, (2 * $form-select-padding-y * .75) + $form-select-padding-x + $form-select-indicator-padding) !default; +$form-select-feedback-icon-position : center right ($form-select-padding-x + $form-select-indicator-padding) !default; +$form-select-feedback-icon-size : $input-height-inner-half $input-height-inner-half !default; + +$form-select-border-width : $input-border-width !default; +$form-select-border-color : $input-border-color !default; +$form-select-border-radius: $border-radius !default; +$form-select-box-shadow : $box-shadow-inset !default; + +$form-select-focus-border-color: $input-focus-border-color !default; +$form-select-focus-width : $input-focus-width !default; +$form-select-focus-box-shadow : 0 0 0 $form-select-focus-width $input-btn-focus-color !default; + +$form-select-padding-y-sm: $input-padding-y-sm !default; +$form-select-padding-x-sm: $input-padding-x-sm !default; +$form-select-font-size-sm: $input-font-size-sm !default; +$form-select-height-sm : $input-height-sm !default; + +$form-select-padding-y-lg: $input-padding-y-lg !default; +$form-select-padding-x-lg: $input-padding-x-lg !default; +$form-select-font-size-lg: $input-font-size-lg !default; +$form-select-height-lg : $input-height-lg !default; + +$form-range-track-width : 100% !default; +$form-range-track-height : .5rem !default; +$form-range-track-cursor : pointer !default; +$form-range-track-bg : $gray-300 !default; +$form-range-track-border-radius: 1rem !default; +$form-range-track-box-shadow : $box-shadow-inset !default; + +$form-range-thumb-width : 1rem !default; +$form-range-thumb-height : $form-range-thumb-width !default; +$form-range-thumb-bg : $component-active-bg !default; +$form-range-thumb-border : 0 !default; +$form-range-thumb-border-radius: 1rem !default; +$form-range-thumb-box-shadow : 0 .1rem .25rem rgba($black, .1) !default; +$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, +$input-focus-box-shadow !default; +$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge +$form-range-thumb-active-bg : lighten($component-active-bg, 35%) !default; +$form-range-thumb-disabled-bg : $gray-500 !default; +$form-range-thumb-transition : background-color .15s ease-in-out, +border-color .15s ease-in-out, +box-shadow .15s ease-in-out !default; + +$form-file-height : $input-height !default; +$form-file-focus-border-color : $input-focus-border-color !default; +$form-file-focus-box-shadow : $input-focus-box-shadow !default; +$form-file-disabled-bg : $input-disabled-bg !default; +$form-file-disabled-border-color: $input-disabled-border-color !default; + +$form-file-padding-y : $input-padding-y !default; +$form-file-padding-x : $input-padding-x !default; +$form-file-line-height : $input-line-height !default; +$form-file-font-family : $input-font-family !default; +$form-file-font-weight : $input-font-weight !default; +$form-file-color : $input-color !default; +$form-file-bg : $input-bg !default; +$form-file-border-width : $input-border-width !default; +$form-file-border-color : $input-border-color !default; +$form-file-border-radius: $input-border-radius !default; +$form-file-box-shadow : $input-box-shadow !default; +$form-file-button-color : $form-file-color !default; +$form-file-button-bg : $input-group-addon-bg !default; + +$form-file-padding-y-sm: $input-padding-y-sm !default; +$form-file-padding-x-sm: $input-padding-x-sm !default; +$form-file-font-size-sm: $input-font-size-sm !default; +$form-file-height-sm : $input-height-sm !default; + +$form-file-padding-y-lg: $input-padding-y-lg !default; +$form-file-padding-x-lg: $input-padding-x-lg !default; +$form-file-font-size-lg: $input-font-size-lg !default; +$form-file-height-lg : $input-height-lg !default; + +$input-muted-bg : $gray-100 !default; +$input-placeholder-color : $gray-800 !default; +$input-focus-placeholder-color: $gray-800 !default; + +// Form validation + +$form-feedback-margin-top : $form-text-margin-top !default; +$form-feedback-font-size : $form-text-font-size !default; +$form-feedback-font-style : $form-text-font-style !default; +$form-feedback-valid-color : $success !default; +$form-feedback-invalid-color: $danger !default; + +$form-feedback-icon-valid-color : $form-feedback-valid-color !default; +$form-feedback-icon-valid : url("data:image/svg+xml,") !default; +$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; +$form-feedback-icon-invalid : url("data:image/svg+xml,") !default; + +// scss-docs-start form-validation-states +$form-validation-states: ("valid": ("color": $form-feedback-valid-color, + "icon": $form-feedback-icon-valid), + "invalid": ("color": $form-feedback-invalid-color, + "icon": $form-feedback-icon-invalid)) !default; +// scss-docs-end form-validation-states + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +// scss-docs-start zindex-stack +$zindex-dropdown : 1000 !default; +$zindex-sticky : 1020 !default; +$zindex-fixed : 1030 !default; +$zindex-modal-backdrop: 1040 !default; +$zindex-modal : 1050 !default; +$zindex-popover : 1060 !default; +$zindex-tooltip : 1070 !default; +// scss-docs-end zindex-stack + +// No UI Slider + +$noui-target-bg : $gray-400 !default; +$noui-target-thickness : 5px !default; +$noui-target-border-radius : 5px !default; +$noui-target-border-color : 0 !default; +$noui-target-box-shadow : inset $box-shadow-sm !default; +$noui-box-shadow : $box-shadow-sm !default; +$noui-slider-connect-bg : $primary !default; +$noui-slider-connect-disabled-bg: $gray-200 !default; +$noui-handle-active-shadow : 0 0 0 0.2rem rgba(69, 77, 103, 0.5) !default; +$noui-handle-width : 15px !default; +$noui-handle-bg : $primary !default; +$noui-handle-border : 0 !default; +$noui-handle-border-radius : $border-radius !default; +$noui-origin-border-radius : $circle-radius !default; + + +// Navs + +$nav-link-padding-y : .5rem !default; +$nav-link-padding-x : 1rem !default; +$nav-link-color : $gray-800 !default; +$nav-link-hover-color : $dark !default; +$nav-link-active-color: $gray-800 !default; +$nav-link-shadow : none !default; +$nav-link-transition : color .15s ease-in-out, +background-color .15s ease-in-out, +border-color .15s ease-in-out !default; +$nav-link-disabled-color: $gray-600 !default; + +$nav-tabs-border-color : $light !default; +$nav-tabs-border-width : $border-width !default; +$nav-tabs-border-radius : $border-radius !default; +$nav-tabs-link-hover-border-color : $gray-200 $gray-200 $nav-tabs-border-color !default; +$nav-tabs-link-active-color : $gray-700 !default; +$nav-tabs-link-active-bg : $light !default; +$nav-tabs-link-active-border-color: $light !default; + +$nav-pills-padding-y: .75rem !default; +$nav-pills-padding-x: .85rem !default; + +$nav-pills-space-x : 1rem !default; +$nav-pills-border-circle: 50% !default; + +$nav-pills-bg : $white !default; +$nav-pills-border-width : 1px !default; +$nav-pills-border-color : $light !default; +$nav-pills-border-radius: $border-radius !default; + +$nav-pills-link-hover-color : $primary !default; +$nav-pills-link-active-color : $primary !default; +$nav-pills-active-border-color: $gray-300 !default; +$nav-pills-link-active-bg : #f8f8f8 !default; + +// Owl navs + +$owl-nav-color : $gray-600 !default; +$owl-nav-color-hover : $gray-900 !default; +$owl-nav-font-size : $font-size-xxl !default; +$owl-nav-rounded : 3px !default; +$owl-nav-margin : 5px !default; +$owl-nav-padding : 4px 7px !default; +$owl-nav-background : $gray-400 !default; +$owl-nav-background-hover: $gray-800 !default; +$owl-nav-disabled-opacity: 0.5 !default; + +// Owl dots + +$owl-dot-width : 10px !default; +$owl-dot-height : 10px !default; +$owl-dot-rounded : $circle-radius !default; +$owl-dot-margin : 5px 5px !default; +$owl-dot-border-width : 2px !default; +$owl-dot-background : $gray-400 !default; +$owl-dot-background-active: $gray-800 !default; + + +// Navbar + +$navbar-padding-y: 1rem !default; +$navbar-padding-x: null !default; + +$navbar-nav-link-padding-x: .8rem !default; + +$navbar-brand-font-size : $font-size-lg !default; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height : $font-size-base * $line-height-base+$nav-link-padding-y * 4 !default; +$navbar-brand-height : $navbar-brand-font-size * $line-height-base !default; +$navbar-brand-padding-y : 0 !default; +$navbar-brand-margin-right: 1rem !default; + +$navbar-toggler-padding-y : .4rem !default; +$navbar-toggler-padding-x : .6rem !default; +$navbar-toggler-font-size : $font-size-lg !default; +$navbar-toggler-border-radius: $btn-border-radius !default; +$navbar-toggler-focus-width : $btn-focus-width !default; +$navbar-toggler-transition : box-shadow .15s ease-in-out !default; + +$navbar-dark-color : rgba($white, 0.9) !default; +$navbar-dark-hover-color : rgba($white, 1) !default; +$navbar-dark-active-color : $white !default; +$navbar-dark-disabled-color : rgba($white, .9) !default; +$navbar-dark-toggler-icon-bg : url("data:image/svg+xml,") !default; +$navbar-dark-toggler-border-color: rgba($white, .1) !default; + +$navbar-light-color : rgba($black, .9) !default; +$navbar-light-hover-color : rgba($black, 1) !default; +$navbar-light-active-color : rgba($black, 1) !default; +$navbar-light-disabled-color : rgba($black, .9) !default; +$navbar-light-toggler-icon-bg : url("data:image/svg+xml,") !default; +$navbar-light-toggler-border-color: rgba($black, .1) !default; + +$navbar-light-brand-color : $navbar-light-active-color !default; +$navbar-light-brand-hover-color: $navbar-light-active-color !default; +$navbar-dark-brand-color : $navbar-dark-active-color !default; +$navbar-dark-brand-hover-color : $navbar-dark-active-color !default; + + +// Dropdowns +// +// Dropdown menu container and contents. + +$dropdown-min-width : 12rem !default; +$dropdown-padding-y : .5rem !default; +$dropdown-spacer : .125rem !default; +$dropdown-font-size : .875rem !default; +$dropdown-item-font-weight: $font-weight-normal !default; +$dropdown-item-hover-color: $gray-900 !default; + +$dropdown-color : $body-color !default; +$dropdown-bg : $white !default; +$dropdown-border-color : $border-color !default; +$dropdown-border-radius : $border-radius-sm !default; +$dropdown-border-width : $border-width !default; +$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default; +$dropdown-divider-bg : $gray-200 !default; +$dropdown-divider-margin-y : $spacer * 0.5 !default; +$dropdown-box-shadow : 0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05) !default; + +$dropdown-link-color : $gray-900 !default; +$dropdown-link-hover-color: darken($gray-900, 5%) !default; +$dropdown-link-hover-bg : $gray-100 !default; + +$dropdown-link-active-color: $gray-900 !default; +$dropdown-link-active-bg : $gray-200 !default; + +$dropdown-link-disabled-color: $gray-600 !default; + +$dropdown-item-padding-y: $spacer * 0.25 !default; +$dropdown-item-padding-x: $spacer !default; + +$dropdown-header-color : $gray-900 !default; +$dropdown-header-font-weight: $font-weight-bold !default; +$dropdown-header-padding : $dropdown-padding-y $dropdown-item-padding-x !default; + + +// Pagination + +$pagination-padding-y : .375rem !default; +$pagination-padding-x : .75rem !default; +$pagination-padding-y-sm: .25rem !default; +$pagination-padding-x-sm: .5rem !default; +$pagination-padding-y-lg: .75rem !default; +$pagination-padding-x-lg: 1.5rem !default; + +$pagination-color : $link-color !default; +$pagination-bg : $white !default; +$pagination-border-width : $border-width !default; +$pagination-border-radius: $border-radius !default; +$pagination-margin-left : -$pagination-border-width !default; +$pagination-border-color : $light !default; + +$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; +$pagination-focus-outline : 0 !default; + +$pagination-hover-color : $link-hover-color !default; +$pagination-hover-bg : $gray-200 !default; +$pagination-hover-border-color: $gray-300 !default; + +$pagination-active-color : $component-active-color !default; +$pagination-active-bg : $component-active-bg !default; +$pagination-active-border-color: $pagination-active-bg !default; + +$pagination-disabled-color : $gray-600 !default; +$pagination-disabled-bg : $white !default; +$pagination-disabled-border-color: $gray-300 !default; + + +// Cards + +$card-spacer-y : 1.25rem !default; +$card-spacer-x : 1.5rem !default; +$card-social-padding : .25rem .375rem !default; +$card-title-spacer-y : .875rem !default; +$card-border-width : $border-width !default; +$card-border-radius : $border-radius !default; +$card-border-color : rgba($black, .125) !default; +$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default; +$card-cap-padding-y : 1.25rem !default; +$card-cap-padding-x : $card-spacer-x !default; +$card-cap-bg : rgba($black, .03) !default; +$card-cap-color : null !default; +$card-height : null !default; +$card-color : null !default; +$card-bg : $white !default; + +$card-img-overlay-padding: $spacer !default; + +$card-group-margin : $grid-gutter-width * 0.5 !default; +$transition-bezier-card: cubic-bezier(0.34, 1.45, 0.7, 1) !default; + +//Timelines +$timeline-font-size : $font-size-xxl !default; +$timeline-font-color : $body-color !default; +$timeline-border-color : $light !default; +$timeline-border-color-dark: $gray-500 !default; +$timeline-background-color : $white !default; +$timeline-line-height : 3 !default; +$timeline-border-width : $border-width !default; +$timeline-circle-radius : 50% !default; +$timeline-spacer-y : 1.25rem !default; +$timeline-spacer-x : 2.75rem !default; + +// Icons & Shapes sizes + +$icon-size-xxs: 1rem !default; +$icon-size-xs: 1.25rem !default; +$icon-size-sm: 1.5rem !default; +$icon-size: 2rem !default; +$icon-size-lg: 3.5rem !default; +$icon-size-xl: 4.5rem !default; +$icon-size-xxl: 6rem !default; + +$icon-shape-xxs: 1.5rem !default; +$icon-shape-xs: 2.5rem !default; +$icon-shape-sm: 3.275rem !default; +$icon-shape: 4rem !default; +$icon-shape-lg: 5rem !default; +$icon-shape-xl: 6rem !default; +$icon-shape-xxl: 7.5rem !default; + + +// Steps +$step-number-size : 12rem !default; +$step-shape-size : 7rem !default; +$step-border-width: $border-width-md !default; +$step-icon-size : $icon-size-xl !default; + +// Tooltips + +$tooltip-font-size : $font-size-sm !default; +$tooltip-max-width : 200px !default; +$tooltip-color : $white !default; +$tooltip-bg : $dark !default; +$tooltip-border-radius: $border-radius !default; +$tooltip-opacity : .99 !default; +$tooltip-padding-y : .5rem !default; +$tooltip-padding-x : .55rem !default; +$tooltip-margin : 2rem !default; + +$tooltip-arrow-width : .8rem !default; +$tooltip-arrow-height: .4rem !default; +$tooltip-arrow-color : $tooltip-bg !default; + +// Form tooltips must come after regular tooltips +$form-feedback-tooltip-padding-y : $tooltip-padding-y !default; +$form-feedback-tooltip-padding-x : $tooltip-padding-x !default; +$form-feedback-tooltip-font-size : $tooltip-font-size !default; +$form-feedback-tooltip-line-height : null !default; +$form-feedback-tooltip-opacity : $tooltip-opacity !default; +$form-feedback-tooltip-border-radius: $tooltip-border-radius !default; + + +// Popovers + +$popover-font-size : $font-size-sm !default; +$popover-bg : $dark !default; +$popover-max-width : 276px !default; +$popover-border-width : $border-width !default; +$popover-border-color : rgba($black, .2) !default; +$popover-border-radius : $border-radius-lg !default; +$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default; +$popover-box-shadow : $box-shadow !default; + +$popover-header-bg : darken($popover-bg, 3%) !default; +$popover-header-color : $headings-color !default; +$popover-header-padding-y: .5rem !default; +$popover-header-padding-x: $spacer !default; + +$popover-body-color : $white !default; +$popover-body-padding-y: $spacer !default; +$popover-body-padding-x: $spacer !default; + +$popover-arrow-width : 1rem !default; +$popover-arrow-height: .5rem !default; +$popover-arrow-color : $popover-bg !default; + +$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; + + +// Toasts + +$toast-max-width : 350px !default; +$toast-padding-x : .75rem !default; +$toast-padding-y : .25rem !default; +$toast-font-size : .875rem !default; +$toast-color : null !default; +$toast-background-color: rgba($white, .85) !default; +$toast-border-width : 1px !default; +$toast-border-color : rgba(0, 0, 0, .1) !default; +$toast-border-radius : $border-radius !default; +$toast-box-shadow : $box-shadow !default; + +$toast-header-color : $gray-600 !default; +$toast-header-background-color: rgba($white, .85) !default; +$toast-header-border-color : rgba(0, 0, 0, .05) !default; + + +// Badges + +$badge-font-size : .75em !default; +$badge-font-weight : $font-weight-bolder !default; +$badge-padding-y : .2rem !default; +$badge-padding-x : .4rem !default; +$badge-color : $white !default; +$badge-border-radius: $border-radius !default; + +$badge-pill-padding-x : .875em !default; +$badge-pill-border-radius: 10rem !default; + +$badge-circle-size: 2rem !default; + + +// Modals + +// Padding applied to the modal body +$modal-inner-padding: $spacer !default; + +// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding +$modal-footer-margin-between: .5rem !default; + +$modal-dialog-margin : .5rem !default; +$modal-dialog-margin-y-sm-up: 1.75rem !default; + +$modal-title-line-height: $line-height-base !default; + +$modal-content-color : null !default; +$modal-content-bg : $white !default; +$modal-content-border-color : rgba($black, .2) !default; +$modal-content-border-width : $border-width !default; +$modal-content-border-radius : $border-radius !default; +$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default; +$modal-content-box-shadow-xs : $box-shadow-sm !default; +$modal-content-box-shadow-sm-up : $box-shadow !default; + +$modal-backdrop-bg : $black !default; +$modal-backdrop-opacity : .5 !default; +$modal-header-border-color: $border-color !default; +$modal-footer-border-color: $modal-header-border-color !default; +$modal-header-border-width: $modal-content-border-width !default; +$modal-footer-border-width: $modal-header-border-width !default; +$modal-header-padding-y : $modal-inner-padding !default; +$modal-header-padding-x : $modal-inner-padding !default; +$modal-header-padding : $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility + +$modal-sm: 300px !default; +$modal-md: 500px !default; +$modal-lg: 800px !default; +$modal-xl: 1140px !default; + +$modal-fade-transform : translate(0, -50px) !default; +$modal-show-transform : none !default; +$modal-transition : transform .3s ease-out !default; +$modal-scale-transform: scale(1.02) !default; + + +// Alerts +// +// Define alert colors, border radius, and padding. + +$alert-padding-y : $spacer !default; +$alert-padding-x : $spacer !default; +$alert-margin-bottom : 1rem !default; +$alert-border-radius : $border-radius !default; +$alert-link-font-weight: $font-weight-bold !default; +$alert-border-width : $border-width !default; +$alert-icon-font-size : 2rem !default; +$alert-link-color : $white !default; + +$alert-bg-level : -10 !default !default; +$alert-border-level: -9 !default !default; +$alert-color-level : 10 !default !default; + + +// Progress bars + +$progress-height : 1rem !default; +$progress-font-size : $font-size-base * .75 !default; +$progress-bg : $gray-200 !default; +$progress-border-radius : $border-radius !default; +$progress-box-shadow : $box-shadow-inset !default; +$progress-bar-color : $white !default; +$progress-bar-bg : $dark !default; +$progress-bar-animation-timing: 1s linear infinite !default; +$progress-bar-transition : width .6s ease !default; + +$progress-xl-size: .8rem !default; +$progress-lg-size: .6rem !default; +$progress-sm-size: .2rem !default; + + +// List group + +$list-group-color : null !default; +$list-group-bg : $white !default; +$list-group-border-color : rgba($black, .125) !default; +$list-group-border-width : $border-width !default; +$list-group-border-radius: $border-radius !default; + +$list-group-sm-item-padding-y: .625rem !default; +$list-group-sm-item-padding-x: .875rem !default; + +$list-group-item-padding-y : $spacer * 0.5 !default; +$list-group-item-padding-x : $spacer !default; +$list-group-item-bg-level : -9 !default; +$list-group-item-color-level : 6 !default; +$list-group-item-border-radius: $border-radius !default; + +$list-group-hover-bg : $gray-100 !default; +$list-group-active-color : $component-active-color !default; +$list-group-active-bg : $component-active-bg !default; +$list-group-active-border-color: $list-group-active-bg !default; + +$list-group-disabled-color: $gray-600 !default; +$list-group-disabled-bg : $list-group-bg !default; + +$list-group-action-color : $gray-700 !default; +$list-group-action-hover-color: $list-group-action-color !default; + +$list-group-action-active-color: $body-color !default; +$list-group-action-active-bg : $gray-200 !default; + +// Image thumbnails + +$thumbnail-padding : .25rem !default; +$thumbnail-bg : $body-bg !default; +$thumbnail-border-width : $border-width !default; +$thumbnail-border-color : $gray-300 !default; +$thumbnail-border-radius: $border-radius !default; +$thumbnail-box-shadow : $box-shadow-sm !default; + + +// Figures + +$figure-caption-font-size: $small-font-size !default; +$figure-caption-color : $gray-600 !default; + + +// Breadcrumbs + +$breadcrumb-font-size : null !default; +$breadcrumb-padding-y : $spacer * 0.5 !default; +$breadcrumb-padding-x : $spacer !default; +$breadcrumb-item-padding-x: .5rem !default; +$breadcrumb-margin-bottom : 1rem !default; +$breadcrumb-bg : $gray-200 !default; +$breadcrumb-divider-color : $gray-600 !default; +$breadcrumb-active-color : $gray-600 !default; +$breadcrumb-divider : quote("/") !default; +$breadcrumb-border-radius : $border-radius !default; + +$breadcrumb-active-color : $white !default; +$breadcrumb-divider-color : $gray-700 !default; +$breadcrumb-item-color : $gray-700 !default; +$breadcrumb-font-weight : $font-weight-normal !default; +$breadcrumb-active-font-weight : $font-weight-normal !default; +$breadcrumb-item-light-color : $white !default; +$breadcrumb-divider-light-color: $white !default; + +// Carousel + +$carousel-control-color : $white !default; +$carousel-control-width : 15% !default; +$carousel-control-opacity : .5 !default; +$carousel-control-hover-opacity: .9 !default; +$carousel-control-transition : opacity .15s ease !default; + +$carousel-indicator-width : 30px !default; +$carousel-indicator-height : 3px !default; +$carousel-indicator-hit-area-height: 10px !default; +$carousel-indicator-spacer : 3px !default; +$carousel-indicator-opacity : .5 !default; +$carousel-indicator-active-bg : $white !default; +$carousel-indicator-active-opacity : 1 !default; +$carousel-indicator-transition : opacity .6s ease !default; + +$carousel-caption-width : 70% !default; +$carousel-caption-color : $white !default; +$carousel-caption-padding-y: 1.25rem !default; +$carousel-caption-spacer : 1.25rem !default; + +$carousel-control-icon-width: 20px !default; + +$carousel-control-prev-icon-bg: url("data:image/svg+xml,") !default; +$carousel-control-next-icon-bg: url("data:image/svg+xml,") !default; + +$carousel-transition-duration: .6s !default; +$carousel-transition : transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) + + +// Spinners + +$spinner-width : 2rem !default; +$spinner-height : $spinner-width !default; +$spinner-border-width : .25em !default; +$spinner-animation-speed: .75s !default; + +$spinner-width-sm : 1.2rem !default; +$spinner-height-sm : $spinner-width-sm !default; +$spinner-border-width-sm: .2em !default; + +// Datepicker + +$datepicker-border-radius : $border-radius-sm !default; +$datepicker-dropdown-padding: 20px 22px !default; + +$datepicker-cell-transition : $transition-base !default; +$datepicker-cell-hover-background: lighten($gray-400, 55%) !default; +$datepicker-cell-border-radius : 50% !default; +$datepicker-cell-width : 36px !default; +$datepicker-cell-height : 36px !default; + +$datepicker-disabled-cell-color : $gray-300 !default; +$datepicker-disabled-old-new-color: $gray-500 !default; + +$datepicker-header-cell-border-radius: $border-radius-sm !default; + +$datepicker-active-color : $white !default; +$datepicker-active-background: $secondary !default; +$datepicker-active-box-shadow: none !default; + +$datepicker-range-background : $secondary !default; +$datepicker-range-cell-focused-background: darken($datepicker-range-background, 5%) !default; +$datepicker-range-color : $white !default; +$datepicker-range-highlighted-bg : $gray-200 !default; + +$datepicker-dropdown-border: lighten($gray-400, 40%) !default; +$datepicker-dropdown-bg : $white !default; +$datepicker-highlighted-bg : $datepicker-active-background !default; + + +// Close + +$close-bg : transparent !default; +$close-hover-bg : transparent !default; +$close-color : rgba(0, 0, 0, .6) !default; +$close-hover-color: rgba(0, 0, 0, .9) !default; +$close-font-size : $font-size-base * 1.5 !default; +$close-font-weight: $font-weight-bold !default; +$close-color : $black !default; +$close-text-shadow: 0 1px 0 $white !default; + + + +// Code + +$code-font-size: $small-font-size !default; +$code-color : $pink !default; + +$kbd-padding-y: .2rem !default; +$kbd-padding-x: .4rem !default; +$kbd-font-size: $code-font-size !default; +$kbd-color : $white !default; +$kbd-bg : $gray-900 !default; + +$pre-color: null !default; + +// Avatars +$avatar-sm-y: 1.5rem !default; +$avatar-sm-x: 1.5rem !default; + +$avatar-y: 2rem !default; +$avatar-x: 2rem !default; + +$avatar-md-y: 3rem !default; +$avatar-md-x: 3rem !default; + +$avatar-lg-y: 4.5rem !default; +$avatar-lg-x: 4.5rem !default; + +$avatar-xl-y: 8rem !default; +$avatar-xl-x: 8rem !default; + +// Footer + +$footer-link-font-size : .85rem !default; +$footer-bg : theme-color("secondary") !default; +$footer-color : $gray-600 !default; +$footer-link-color : $gray-600 !default; +$footer-link-hover-color : $gray-700 !default; +$footer-heading-color : $gray-600 !default; +$footer-heading-font-size: $font-size-sm !default; +$padding-footer-sm : .125rem !default; +$padding-footer : .375rem !default; +$padding-footer-md : .625rem !default; +$padding-footer-general : .9375rem !default; +$padding-footer-big : 1.5rem !default; diff --git a/resources/volt/scss/volt/_vendor.scss b/resources/volt/scss/volt/_vendor.scss new file mode 100644 index 0000000..9d4f390 --- /dev/null +++ b/resources/volt/scss/volt/_vendor.scss @@ -0,0 +1,6 @@ +// Vendor +@import "vendor/headroom"; +@import "vendor/nouislider"; +@import "vendor/prism"; +@import "vendor/chartist/chartist"; +@import "vendor/datepicker"; diff --git a/resources/volt/scss/volt/components/_accordions.scss b/resources/volt/scss/volt/components/_accordions.scss new file mode 100755 index 0000000..5ea18f2 --- /dev/null +++ b/resources/volt/scss/volt/components/_accordions.scss @@ -0,0 +1,52 @@ +/** + * = Accordions +*/ + + +.accordion-button { + text-align: left; + &:not(.collapsed) { + &::after { + background-image: none; + @include transform(rotateZ(45deg)); + } + } + + // Accordion icon + &::after { + background-image: none; + content: '\f067'; + font-family: $font-awesome-5; + font-size: $font-size-base; + font-weight: 900; + } + + &:hover{ + background-color: $gray-200; + } +} + + +// Flush accordion items +// +// Remove borders and border-radius to keep accordion items edge-to-edge. + +.accordion-flush { + .accordion-button { + background-color: transparent; + &:not(.collapsed) { + color: $tertiary; + } + &:focus { + border-color: $gray-300; + box-shadow: none; + } + } + .accordion-collapse { + border: 0; + } +} + + + + diff --git a/resources/volt/scss/volt/components/_alerts.scss b/resources/volt/scss/volt/components/_alerts.scss new file mode 100644 index 0000000..6fd954d --- /dev/null +++ b/resources/volt/scss/volt/components/_alerts.scss @@ -0,0 +1,10 @@ +.alert-heading{ + font-weight: $font-weight-bold; +} + +.alert-icon{ + margin-bottom: .5rem; + span{ + font-size: $alert-icon-font-size; + } +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_animations.scss b/resources/volt/scss/volt/components/_animations.scss new file mode 100644 index 0000000..cfed042 --- /dev/null +++ b/resources/volt/scss/volt/components/_animations.scss @@ -0,0 +1,234 @@ + +/** + * = Animations + */ + + @for $size from 1 to 10 { + .animate-up-#{$size}, + .animate-right-#{$size}, + .animate-down-#{$size}, + .animate-left-#{$size}, + .scale-up-#{$size}, + .scale-down-#{$size} { + transition: $transition-base; + } + + .scale-up-#{$size} { + &:hover { + transform: scale($size * 0.5555555556); + } + } + + .scale-up-hover-#{$size} { + &:hover { + & .scale { + transform: scale($size * 0.5555555556); + } + } + } + + .scale-down-#{$size} { + &:hover { + transform: scale($size * 0.4); + } + } + + .animate-up-#{$size} { + &:hover, + .animate-hover:hover & { + @include translate(0, -#{$size}px); + } + } + .animate-right-#{$size} { + &:hover, + .animate-hover:hover & { + @include translate(#{$size}px, 0); + } + } + .animate-down-#{$size} { + &:hover, + .animate-hover:hover & { + @include translate(0, #{$size}px); + } + } + .animate-left-#{$size} { + &:hover, + .animate-hover:hover & { + @include translate(-#{$size}px, 0); + } + } +} + +// Keyframes +@keyframes show-navbar-collapse { + 0% { + opacity: 0; + transform: scale(.95); + transform-origin: 100% 0; + } + + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes hide-navbar-collapse { + from { + opacity: 1; + transform: scale(1); + transform-origin: 100% 0; + } + + to { + opacity: 0; + transform: scale(.95); + } +} + +@keyframes show-navbar-dropdown { + 0% { + opacity: 0; + transform: translate(0, 10px) perspective(200px) rotateX(-2deg); + transition: visibility 0.45s, opacity 0.45s, transform 0.45s; + } + + 100% { + transform: translate(0, 0); + opacity: 1; + } +} + +@keyframes hide-navbar-dropdown { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate(0, 10px); + } +} + +@keyframes show-dropdown { + 0% { + opacity: 0; + transform-origin: perspective(200px) rotateX(-2deg); + transition: visibility 0.45s, opacity .5s; + } + + 100% { + opacity: 1; + } +} + + +@keyframes hide-dropdown { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate(0, 10px); + } +} + +.bell-shake { + &.shaking { + animation: bellshake .5s cubic-bezier(.36,.07,.19,.97) both; + backface-visibility: hidden; + transform-origin: top right; + } +} + +:root { + --animate-duration: 1s; + --animate-delay: 1s; + --animate-repeat: 1; + } + +.animate__animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-duration: var(--animate-duration); + animation-duration: var(--animate-duration); + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + } + +.animate__jackInTheBox { + -webkit-animation-name: jackInTheBox; + animation-name: jackInTheBox; +} + +@keyframes bellshake { + 0% { transform: rotate(0); } + 15% { transform: rotate(5deg); } + 30% { transform: rotate(-5deg); } + 45% { transform: rotate(4deg); } + 60% { transform: rotate(-4deg); } + 75% { transform: rotate(2deg); } + 85% { transform: rotate(-2deg); } + 92% { transform: rotate(1deg); } + 100% { transform: rotate(0); } +} + +@-webkit-keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } + } + @keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } + } + .animate__jackInTheBox { + -webkit-animation-name: jackInTheBox; + animation-name: jackInTheBox; + } + +[class*=shadow] { + transition: all .2s ease; +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_avatars.scss b/resources/volt/scss/volt/components/_avatars.scss new file mode 100755 index 0000000..ff412b6 --- /dev/null +++ b/resources/volt/scss/volt/components/_avatars.scss @@ -0,0 +1,102 @@ +/** + * = Avatars + */ + + .avatar + .avatar-content { + display: inline-block; + margin-left: 0.75rem; +} + +.avatar-sm { + width: $avatar-sm-y; + height: $avatar-sm-x; + + img { + width: $avatar-sm-y; + height: $avatar-sm-x; + } +} + +.avatar { + width: $avatar-y; + height: $avatar-x; + + img { + width: $avatar-y; + height: $avatar-x; + } +} + +.avatar-md { + width: $avatar-md-y; + height: $avatar-md-x; + + img { + width: $avatar-md-y; + height: $avatar-md-x; + } +} + +.avatar-lg { + width: $avatar-lg-y; + height: $avatar-lg-x; + + img { + width: $avatar-lg-y; + height: $avatar-lg-x; + } +} + +.avatar-xl { + width: $avatar-xl-y; + height: $avatar-xl-x; + + @include media-breakpoint-down(lg) { + width: $avatar-lg-y; + height: $avatar-lg-x; + } + +} + + +.avatar-offline, +.avatar-online { + &::before { + position: absolute; + border: 2px solid $white; + background-color: $success; + display: block; + top: 2px; + left: 39px; + content: ""; + border-radius: 50%; + height: 10px; + width: 10px; + } +} + +.avatar-offline { + &::before { + background-color: $danger; + } +} + +// Overlapped avatars +.avatar-group { + .avatar { + position: relative; + z-index: 0; + + img { + border: 2px solid $white; + } + + &:hover { + z-index: 3; + } + } + + .avatar + .avatar { + margin-left: -1rem; + } +} diff --git a/resources/volt/scss/volt/components/_badge.scss b/resources/volt/scss/volt/components/_badge.scss new file mode 100755 index 0000000..db64b82 --- /dev/null +++ b/resources/volt/scss/volt/components/_badge.scss @@ -0,0 +1,98 @@ +/** + * = Badges + */ + +.badge { + font-size:$badge-font-size; + font-weight: $badge-font-weight; + + a { + color: $white; + } + + &.super-badge{ + vertical-align: super; + } +} + +// Variations +.badge-pill { + padding-right: $badge-pill-padding-x; + padding-left: $badge-pill-padding-x; +} + +// Multiple inline badges +.badge-inline { + margin-right: .625rem; + + & + span { + top: 2px; + position: relative; + + & > a { + text-decoration: underline; + } + } +} + +// Sizes +.badge-sm { + padding: .2rem .6rem; +} + +.badge-lg { + font-size: $font-size-lg; + padding: .35rem .85rem; +} + +//button badges + +.btn{ + .badge-corner{ + position: absolute; + top: -50%; + right: .5rem; + transform: translate(50%,50%); + margin: 0; + border: 3px solid; + padding-left: .5rem; + padding-right: .5rem; + } +} +//Tags +.wi-tags{ + a { + display: inline-block; + padding: 0.125rem 0.875rem; + margin: 0.25rem; + line-height: 2; + font-size: $font-size-sm; + box-shadow: $box-shadow-sm; + background-color: $white; + } +} + +.pixel-pro-badge{ + position: relative; + font-size: $font-size-sm; + text-transform: uppercase; + font-weight: $font-weight-bold; + right: -11px; + padding: 4px 12px; + top: -30px; + background: $white; + @include border-radius($border-radius-sm); + @include box-shadow($box-shadow-sm); + @include media-breakpoint-down(sm){ + font-size: $font-size-base; + right: -13px; + padding: 5px 10px; + top: -23px; + } +} + +.subscription-badge { + top: -19px; + right: -12px; + font-size: .75rem; +} diff --git a/resources/volt/scss/volt/components/_body.scss b/resources/volt/scss/volt/components/_body.scss new file mode 100644 index 0000000..002688a --- /dev/null +++ b/resources/volt/scss/volt/components/_body.scss @@ -0,0 +1,31 @@ +iframe { + border: 0; +} + +figcaption, +figure, +main { + display: block; + margin: 0; +} + +main { + overflow: hidden; +} + +img { + max-width: 100%; +} + +strong{ + font-weight: $font-weight-bold; +} + +button:focus { + outline: 0; +} + +label { + font-weight: $font-weight-bold; + margin-bottom:.5rem; +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_breadcrumb.scss b/resources/volt/scss/volt/components/_breadcrumb.scss new file mode 100755 index 0000000..38e72d6 --- /dev/null +++ b/resources/volt/scss/volt/components/_breadcrumb.scss @@ -0,0 +1,56 @@ +/** + * = Breadcrumbs + */ + +.breadcrumb-item { + font-size: $font-size-xs; + &, a { + color: $breadcrumb-item-color; + font-weight: $breadcrumb-font-weight; + font-size: $font-size-xs; + @include media-breakpoint-up(sm){ + font-size: $font-size-sm; + } + } + + &.active { + font-weight: $breadcrumb-active-font-weight; + } + +} + +.breadcrumb-transparent { + background: transparent; + padding: 0; +} + +@each $color, $value in $theme-colors { + .breadcrumb-#{$color} { + background: $value; + .breadcrumb-item{ + &.active { + color: $white; + } + } + &.breadcrumb-transparent { + background: transparent; + .breadcrumb-item { + &.active { + color: $value; + } + } + } + } +} + +.breadcrumb-text-light { + .breadcrumb-item { + &, a { + color: $breadcrumb-item-light-color; + } + + &:before { + color: $breadcrumb-divider-light-color; + } + } +} diff --git a/resources/volt/scss/volt/components/_buttons.scss b/resources/volt/scss/volt/components/_buttons.scss new file mode 100755 index 0000000..e45d369 --- /dev/null +++ b/resources/volt/scss/volt/components/_buttons.scss @@ -0,0 +1,86 @@ +/* +* = Buttons +*/ + +.btn { + &.btn-circle { + border-radius: $circle-radius; + } + &.btn-md{ + padding: 0.65rem 1.25rem; + } + &.btn-xs{ + padding: .2rem 0.35rem; + font-size: 0.55rem; + box-shadow: none; + } + &.large-form-btn{ + padding: 1.2rem 1rem; + } + &.dashed-outline { + border-style: dashed; + } +} + + +.btn-icon-only { + width: 2.575rem; + height: 2.575rem; + padding: 0; + @include display-flex(); + @include justify-content(center); + @include align-items(center); + + &.btn-xs { + width: 1.7rem; + height: 1.7rem; + } + &.btn-sm { + width: 2rem; + height: 2rem; + } +} + +.btn-upgrade-pro { + position: fixed; + bottom: 15px; + right: 15px; + width: 190px; + + @include media-breakpoint-up(md) { + left: 35px; + } +} + +// Fix for darken background color +@each $color, $value in $theme-colors { + .btn-#{$color} { + &:hover{ + background-color: darken( $value, 5% ); + border-color: darken( $value, 5% ); + } + } +} + +// Brand (social) buttons +@each $color, $value in $brand-colors { + .btn-#{$color} { + @include button-variant($value, $value); + + &.btn-link { + color: $value; + background: transparent; + box-shadow: none; + border:0; + border-style: none; + &:hover, + &:focus, + &.active { + background-color: transparent !important; + box-shadow: none; + border: 0; + color: $value; + } + } + } +} diff --git a/resources/volt/scss/volt/components/_card.scss b/resources/volt/scss/volt/components/_card.scss new file mode 100755 index 0000000..2e56166 --- /dev/null +++ b/resources/volt/scss/volt/components/_card.scss @@ -0,0 +1,149 @@ +/** + * = Cards + */ + +.card { + position: relative; + .card-header{ + background: transparent; + } + + &.hover-state{ + &:hover { + background-color: $soft; + } + } + + .profile-cover{ + @include background-image(no-repeat, cover); + height: 200px; + } + +} + +.message-wrapper, +.task-wrapper{ + .card{ + border:0; + } +} + +.customer-testimonial { + .content-wrapper{ + &:before { + content: ""; + position: absolute; + top: 25px; + left: -1px; + margin-left: .75rem; + border: 8px solid $black; + border-color: transparent #e0e6ec #e0e6ec transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + @include transform(rotate(135deg)); + @include box-shadow($box-shadow); + } + } +} + +.card-footer{ + background-color:transparent; +} + +.card-stats{ + padding-left:1.9rem; +} + + +// Card with blockquotes + +.card { + .card-blockquote { + position: relative; + padding: 2rem; + + .svg-bg { + display: block; + position: absolute; + width: 100%; + height: 95px; + top: -94px; + left: 0; + } + } +} + +// Animated cards + + +.page-preview { + + display: block; + position: relative; + + .show-on-hover { + position: absolute; + bottom: -0; + background: rgba($dark, .85); + padding: 10px 0; + width: 100%; + left: 0; + opacity: 0; + @include transition(.2s); + } + + &:hover { + z-index: 1; + + .show-on-hover { + opacity: 1; + } + } +} + +.theme-settings { + z-index: 99; + position: fixed; + right: 15px; + bottom: 0; + + &, .card-body { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } +} + +.theme-settings-close { + position: absolute; + top: 8px; + right: 8px; + font-size: .65rem; +} + +.btn-close { + + &.theme-settings-close{ + background: transparent escape-svg($btn-close-bg-white) center / $btn-close-width auto no-repeat; // include transparent for button elements + border: 0; // for button elements + @include border-radius(); + opacity: $btn-close-opacity; + } +} + +.theme-settings-expand { + right: 15px; + bottom: 0; + height: 0; + @include transition(.3s height); + + &.show { + height: 40px; + } + + &:hover { + background: $gray-600; + cursor: pointer; + } +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_carousel.scss b/resources/volt/scss/volt/components/_carousel.scss new file mode 100755 index 0000000..3da686b --- /dev/null +++ b/resources/volt/scss/volt/components/_carousel.scss @@ -0,0 +1,52 @@ +/** + * = Bootstrap carousels + */ + +.carousel-caption { + &, h5 { + color: $white; + } +} + +//Indicators + +.carousel-indicators { + li { + height: 10px; + width:10px; + border-radius:$circle-radius; + background:transparent; + border:2px solid $white; + } + .active { + opacity: 1; + background: $white; + } +} + +//Carousel Controls + +.carousel-control-prev-icon, +.carousel-control-next-icon { + width: auto; + height: auto; + font-weight: 900; +} + +.carousel-control-prev-icon { + background-image: none; + &::before{ + content: '\f060'; + font-family: $font-awesome-5; + font-size: $font-size-xxl; + } +} + +.carousel-control-next-icon { + background-image: none; + &:before{ + font-family: $font-awesome-5; + content: "\f061"; + font-size: $font-size-xxl; + } +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_charts.scss b/resources/volt/scss/volt/components/_charts.scss new file mode 100644 index 0000000..d95f812 --- /dev/null +++ b/resources/volt/scss/volt/components/_charts.scss @@ -0,0 +1,52 @@ +.ct-bar { + stroke-linecap: round; + stroke-width: 10px; +} +.ct-label { + fill: $body-color; + color: $body-color; + font-size: 0.75rem; + margin-top: 6px; + font-weight: $font-weight-bold; +} + +.ct-slice-pie { + stroke: $white; + stroke-width: 3px; +} + +.ct-chart-donut .ct-series { + stroke: $white; + stroke-width: 3px; +} + +.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { + font-size: 0.75rem; + font-weight: $font-weight-bold; +} + +.small-chart{ + margin-left:-1rem; +} + +//Label color Fix for pie chart + +.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { + color: #ffffff; + fill: #ffffff; + font-size: $font-size-base; + font-weight: $font-weight-bold; +} + +.ct-series-g{ + .ct-grid { + stroke: #F8BD7A; + stroke-width: 2px; + stroke-dasharray: 2px; + } + .ct-label.ct-horizontal.ct-end { + margin-left:-9px; + margin-top:10px; + color: $primary; + } +} diff --git a/resources/volt/scss/volt/components/_close.scss b/resources/volt/scss/volt/components/_close.scss new file mode 100755 index 0000000..8b56b91 --- /dev/null +++ b/resources/volt/scss/volt/components/_close.scss @@ -0,0 +1,33 @@ +/** + * = Close + */ + +.close { + @if $enable-transitions { + transition: $transition-base; + } + &>span:not(.sr-only) { + display: block; + height: 1.25rem; + width: 1.25rem; + background-color: $close-bg; + color: $close-color; + line-height: 17px; + border-radius: 50%; + font-size: 1.25rem; + @if $enable-transitions { + transition: $transition-base; + } + } + + &:hover, + &:focus { + background-color: $close-hover-bg; + color: $close-hover-color; + outline: none; + + span:not(.sr-only) { + background-color: $close-hover-bg; + } + } +} diff --git a/resources/volt/scss/volt/components/_custom-forms.scss b/resources/volt/scss/volt/components/_custom-forms.scss new file mode 100755 index 0000000..d2be88d --- /dev/null +++ b/resources/volt/scss/volt/components/_custom-forms.scss @@ -0,0 +1,103 @@ +/** + * = Custom forms + */ + + .custom-control-label { + // Background-color and (when enabled) gradient + &:before { + box-shadow: $custom-control-box-shadow; + @if $enable-transitions { + transition: $input-transition; + } + } + + span { + position: relative; + top: 2px; + } +} + +.custom-control-label { + margin-bottom: 0; +} + +.custom-control-input { + &:active~.custom-control-label::before { + border-color: $custom-control-indicator-active-border-color; + } +} + +// Custom File Input + +.custom-file-label { + background-color: #f3f3f5; + + &::after { + + background-color: #f3f3f5; + } +} + + +//Select +.custom-select{ + font-size: $input-btn-font-size; + box-shadow:none; + + &.custom-select-shadow { + box-shadow: $input-box-shadow; + transition: box-shadow .15s ease; + + &:focus { + box-shadow: $shadow-input-focus; + } + } + + &:hover { + cursor: pointer; + } +} + +// Inbox star +.rating-star { + &.star-lg{ + label{ + margin-bottom: .5rem; + &::before{ + font-size: $font-size-xl; + } + } + } + label { + position: relative; + margin-bottom: 0; + cursor: pointer; + color: $light; + &:before { + content: "\f005"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + transition: all .2s ease; + font-size: 1.0625rem; + } + } + input { + position: absolute; + z-index: -1; + opacity: 0; + } + + >input:checked~label { + color: $warning; + } + + >label { + &:hover { + color: $warning; + } + &:hover~label { + color: $warning; + } + } +} + diff --git a/resources/volt/scss/volt/components/_datepicker.scss b/resources/volt/scss/volt/components/_datepicker.scss new file mode 100755 index 0000000..02e2450 --- /dev/null +++ b/resources/volt/scss/volt/components/_datepicker.scss @@ -0,0 +1,13 @@ +/** + * = Datepickers + */ + + .datepicker { + + .datepicker-cell.selected, + .datepicker-cell.selected:hover { + background: $primary; + } + + } + \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_dropdown.scss b/resources/volt/scss/volt/components/_dropdown.scss new file mode 100755 index 0000000..6b87370 --- /dev/null +++ b/resources/volt/scss/volt/components/_dropdown.scss @@ -0,0 +1,68 @@ +.dropdown-menu { + .dropdown-header, + .dropdown-item { + padding: .5rem 1rem; + font-size: $dropdown-font-size; + .dropdown-icon{ + height: 1.25rem; + width: 1.25rem; + } + } + + .dropdown-header { + color: $dropdown-header-color; + font-weight: $dropdown-header-font-weight; + } + + .dropdown-item { + transition: $transition-base; + font-weight: $dropdown-item-font-weight; + + } + + .show & { + animation: show-dropdown .2s ease forwards; + } + + &.dropdown-menu-xs { + min-width: 120px; + max-width: 120px; + @include box-shadow($box-shadow-sm); + } + +} + +// Dropown sizes +.dropdown-menu-sm { + min-width: 100px; + border: $border-radius-lg; +} + +.dropdown-menu-md { + min-width: 180px; + border: $border-radius-lg; +} + +.dropdown-menu-lg { + min-width: 350px; + border-radius: $border-radius-lg; + @include media-breakpoint-down(sm) { + min-width: 300px; + } +} + + + +// this helps when not only the button should toggle a dropdown +[data-toggle]:hover { + cursor: pointer; +} + +// remove the caret from Bootstrap by default +.dropdown-toggle { + &:after, .dropend &:after, .dropstart &:before, .dropup &:after { + display: none; + } +} + + diff --git a/resources/volt/scss/volt/components/_icons.scss b/resources/volt/scss/volt/components/_icons.scss new file mode 100755 index 0000000..30d8ea9 --- /dev/null +++ b/resources/volt/scss/volt/components/_icons.scss @@ -0,0 +1,202 @@ +/** + * = Icon boxes + */ + + .icon { + height: $icon-size; + + &.icon-xxs { + height: $icon-size-xxs; + } + + &.icon-xs { + height: $icon-size-xs; + } + &.icon-sm { + height: $icon-size-sm; + } + &.icon-lg { + height: $icon-size-lg; + } + &.icon-xl { + height: $icon-size-xl; + } + &.icon-xxl { + height: $icon-size-xxl; + } + + &.active-dot { + svg { + height: 0.7rem; + } + } +} + +// Icons included in shapes +.icon-shape { + width: $icon-shape; + height: $icon-shape; + display: inline-flex; + align-items: center; + justify-content: center; + + svg { + height: $icon-size; + } + + &.icon-xxs { + width: $icon-shape-xxs; + height: $icon-shape-xxs; + svg { + height: $icon-size-xxs; + } + } + + &.icon-xs { + width: $icon-shape-xs; + height: $icon-shape-xs; + svg { + height: $icon-size-xs; + } + } + + &.icon-sm { + width: $icon-shape-sm; + height: $icon-shape-sm; + svg { + height: $icon-size-sm; + } + } + + &.icon-lg { + width: $icon-shape-lg; + height: $icon-shape-lg; + svg { + height: $icon-size-lg; + } + } + + &.icon-xl { + width: $icon-shape-xl; + height: $icon-shape-xl; + svg { + height: $icon-size-xl; + } + } + + &.icon-xxl { + width: $icon-shape-xxl; + height: $icon-shape-xxl; + svg { + height: $icon-size-xxl; + } + } +} + +// Inbox star Icons +.rating-star { + &:hover { + cursor: pointer; + color: $warning; + } +} + +.toggle-icon { + height: 1.875rem; +} + +//Icons inside table fixed width +.w--20 { + width: 20px; +} + +//Calendar Icon + +.calendar { + width: 3.125rem; + line-height: 1; + flex-direction: column; + text-align: center; + border-radius: $border-radius; + .calendar-month { + background-color: $danger; + color: $white; + border-radius: $border-radius $border-radius 0 0; + padding: 0.275rem; + font-weight: $font-weight-bold; + } + .calendar-day { + font-size: $font-size-xl; + padding: 0.25rem; + background-color: $gray-100; + border-top: 0; + border-radius: 0 0 $border-radius $border-radius; + color: $dark; + font-weight: $font-weight-bold; + } +} + +//Legend dot + +.dot { + width: 12px; + height: 12px; +} + +//Bell notification dot +.bell-dot { + display: inline-block; + position: absolute; + top: -11px; + right: 6px; + height: 10px; + width: 10px; + border: 2px solid $gray-100; +} + +.notification-bell.unread { + &::before { + position: absolute; + content: ""; + background-color: $danger; + right: 12px; + top: 7px; + height: 0.75rem; + width: 0.75rem; + border-radius: 50%; + border: 2px solid $gray-100; + } +} + +//Index Big Icon +.bootstrap-big-icon { + position: absolute; + opacity: 0.05; + transform: rotate(17deg); + @include media-breakpoint-up(lg) { + right: -20%; + bottom: 6%; + } + + @include media-breakpoint-up(xl) { + right: -10%; + bottom: 6%; + } +} + +.github-big-icon { + position: absolute; + right: 80px; + svg { + color: $gray-400; + height:800px; + opacity: 0.2; + } +} + +//Colors for icons, shapes and svg's +@each $color, $value in $theme-colors { + .icon-shape-#{$color} { + @include icon-shape-variant($value); + } +} diff --git a/resources/volt/scss/volt/components/_images.scss b/resources/volt/scss/volt/components/_images.scss new file mode 100644 index 0000000..a4cb8f7 --- /dev/null +++ b/resources/volt/scss/volt/components/_images.scss @@ -0,0 +1,67 @@ +/** + * = Images + */ + .image-xl { + height: 20rem; + img{ + height: 20rem; + } +} + +.image-lg { + height: 12rem; + img{ + height: 12rem; + } +} + +.image-md{ + height: 5.5rem; + img{ + height: 5.5rem; + } +} + +.image-sm { + height: 3rem; + img{ + height: 3rem; + } +} + +.image-xs { + height: 1.5rem; + img{ + height: 1.5rem; + } +} + +.image-small { + height: 1rem; + img{ + height: 1rem; + } +} + +.full-image{ + height:100%; +} + + +.language-flag{ + width: auto; + height: 1rem; + margin-right: 0.4rem; + position: relative; + top: -2px; +} + +.home-pattern{ + fill: $gray-100; +} + +.form-bg-image { + background-repeat: no-repeat!important; + background-position: top center!important; +} + diff --git a/resources/volt/scss/volt/components/_list-group.scss b/resources/volt/scss/volt/components/_list-group.scss new file mode 100755 index 0000000..160e468 --- /dev/null +++ b/resources/volt/scss/volt/components/_list-group.scss @@ -0,0 +1,96 @@ +/** + * = List groups + */ + +// Space list items +.list-group-space { + .list-group-item { + margin-bottom: 1.5rem; + @include border-radius($list-group-border-radius); + } +} + + +// List group components +.list-group-item{ + border:0; + &.active { + z-index: 2; // Place active items above their siblings for proper border styling + color: $list-group-active-color; + background-color: $list-group-active-bg; + border-color: $list-group-active-border-color; + } + + i{ + width: 1rem; + } +} + +.list-group-img { + width: 3rem; + height: 3rem; + border-radius: 50%; + vertical-align: top; + margin: -.1rem 1.2rem 0 -.2rem; +} +.list-group-content { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + min-width: 0; + + > p { + color: $gray-500; + line-height: 1.5; + margin: .2rem 0 0; + } +} +.list-group-heading { + font-size: $font-size-base; + color: $gray-800; + + > small { + float: right; + color: $gray-500; + font-weight: 500; + } +} + + +.list-group{ + &.simple-list{ + .list-group-item{ + background: transparent; + border: none; + padding: 0.375rem 0.125rem; + i{ + vertical-align: middle; + width: 35px; + display: inline-block; + } + } + } + +} + + +//News list for widgets + +.news-list{ + .row{ + > [class*='col']{ + padding: 0 $spacer/4; + } + } + + > li{ + &:not(:last-child){ + margin-bottom: .75rem; + } + } + + img{ + min-height: 100%; + object-fit: cover; + } +} diff --git a/resources/volt/scss/volt/components/_modal.scss b/resources/volt/scss/volt/components/_modal.scss new file mode 100755 index 0000000..5fe4bc7 --- /dev/null +++ b/resources/volt/scss/volt/components/_modal.scss @@ -0,0 +1,36 @@ +/** + * = Modals + */ + +.modal{ + &.static-example{ + position: relative; + display: block; + } +} + +.modal-content { + border: 0; + @if $enable-rounded { + border-radius: $modal-content-border-radius; + } @else { + border-radius: 0; + } +} + +.modal-fluid { + .modal-dialog { + margin-top: 0; + margin-bottom: 0; + } + .modal-content { + border-radius: 0; + } +} + +@each $color, $value in $theme-colors { + .modal-#{$color} { + @include modal-variant($value); + } +} + diff --git a/resources/volt/scss/volt/components/_nav.scss b/resources/volt/scss/volt/components/_nav.scss new file mode 100755 index 0000000..ab1907c --- /dev/null +++ b/resources/volt/scss/volt/components/_nav.scss @@ -0,0 +1,256 @@ +/** + * = Navs + */ + +.nav-link { + color: $nav-link-color; + + &:hover, + &.active { + color: $nav-link-hover-color; + + img { + opacity : inherit; + transition: $transition-base; + } + } + + span { + position: relative; + } +} + +//Tabs + +.nav-tabs { + .nav-item { + margin-bottom: 0; + } + + .nav-link { + border : 0; + padding : 1rem 1rem; + background-color: $white; + + &.active { + color : $white; + background-color: $primary; + } + } + + &.nav-dark { + .nav-link { + &.active { + color : $white; + background-color: #12358a; + } + } + } + + &.nav-light { + .nav-link { + &.active { + color : $black; + background-color: $light; + } + + &:hover { + color: $black; + } + } + } +} + +// Pills + +.nav-pills { + .nav-item:not(:last-child) { + padding-right: $nav-pills-space-x; + } + + .nav-link { + padding : $nav-pills-padding-y $nav-pills-padding-x; + transition: $transition-base; + box-shadow: $nav-link-shadow; + border : $nav-pills-border-width solid $nav-pills-border-color; + + &.avatar-link { + border: 0; + } + + &:hover { + color: $nav-pills-link-hover-color; + } + } + + .nav-link.active, + .show>.nav-link { + color : $nav-pills-link-active-color; + background-color: $nav-pills-link-active-bg; + border-color : $nav-pills-link-active-color; + } + + &.rounded { + .nav-link { + border-radius: 30px; + } + + &.vertical-tab { + .nav-link { + margin-bottom: .625rem; + min-width : 100px; + } + + .nav-item:not(:last-child) { + padding-right: 0; + } + } + } + + &.bordered-pill-md { + .nav-link { + border : $border-width-md solid $gray-200; + font-weight: $font-weight-bold; + } + } + + &.vertical-tab { + .nav-link { + margin-bottom: .625rem; + } + + .nav-item:not(:last-child) { + padding-right: 0; + } + } + + @include media-breakpoint-down(xs) { + .nav-item { + margin-bottom: $spacer; + } + } +} + +@include media-breakpoint-down(sm) { + .nav-pills:not(.nav-pills-circle) { + .nav-item { + padding-right: 0; + } + } +} + + +// Navs circle + +.nav-pill-circle { + .nav-link { + @include display-flex(); + text-align : center; + height : 80px; + width : 80px; + padding : 0; + box-shadow : $nav-link-shadow; + border-radius : $nav-pills-border-circle; + align-items : center; + justify-content: center; + + &.avatar-link { + box-shadow: none; + } + } + + &.vertical-tab { + .nav-link-icon { + + i, + svg { + font-size: 1.5rem; + } + } + + .nav-item:not(:last-child) { + padding-right: 0; + } + } + + .nav-link-icon { + + i, + svg { + font-size: 1.25rem; + margin : 0; + display : block; + } + } +} + +// Navs square + +.nav-pill-square { + .nav-link { + text-align: center; + min-width : 80px; + box-shadow: $nav-link-shadow; + @include display-flex(); + align-items : center; + justify-content: center; + } + + &.vertical-tab { + .nav-link { + margin-bottom: .625rem; + min-width : 100px; + } + + .nav-item:not(:last-child) { + padding-right: 0; + } + } + + .nav-link-icon { + + i, + svg { + font-size : 1.25rem; + margin : 0; + display : block; + line-height: 50px; + } + } +} + +// Nav wrapper +.nav-wrapper { + padding: 1rem 0; + @include border-top-radius($card-border-radius); + + +.card { + @include border-top-radius(0); + @include border-bottom-radius($card-border-radius); + } +} + +// Tabbable tabs +// +// Hide tabbable panes to start, show them when `.active` + +.tab-content { + >.tab-pane { + display: none; + + pre { + padding: 0; + margin : 0; + } + } + + >.active { + display: block; + } +} + +.nav-pills .nav-item { + @include media-breakpoint-up(lg) { + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_pagination.scss b/resources/volt/scss/volt/components/_pagination.scss new file mode 100755 index 0000000..106973b --- /dev/null +++ b/resources/volt/scss/volt/components/_pagination.scss @@ -0,0 +1,16 @@ +/** + * = Paginations + */ + .circle-pagination{ + .page-link, + span{ + @include display-flex(); + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + padding: 0; + @include border-radius($circle-radius); + } +} + diff --git a/resources/volt/scss/volt/components/_popover.scss b/resources/volt/scss/volt/components/_popover.scss new file mode 100755 index 0000000..520acd8 --- /dev/null +++ b/resources/volt/scss/volt/components/_popover.scss @@ -0,0 +1,19 @@ +/** + * = Popovers + */ + +.popover { + border: 0; +} + + +.popover-header { + font-weight: $font-weight-bold; +} + +// Alternative colors +@each $color, $value in $theme-colors { + .popover-#{$color} { + @include popover-variant($value); + } +} \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_progress.scss b/resources/volt/scss/volt/components/_progress.scss new file mode 100755 index 0000000..c974813 --- /dev/null +++ b/resources/volt/scss/volt/components/_progress.scss @@ -0,0 +1,116 @@ +/** + * = Progress bars + */ + +.progress-wrapper { + position: relative; +} + +.progress-bar { + box-shadow: none; + border-radius: 0; + height: auto; +} + +.progress { + height: 6px; + margin-bottom: $spacer; + overflow: hidden; + background-color: $progress-bg; + font-size: $font-size-xs; + font-weight: $font-weight-bold; + @include box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1)) +} + +.progress-xl { + height: $progress-xl-size; +} +.progress-lg { + height: $progress-lg-size; +} +.progress-sm { + height: $progress-sm-size; +} + +.progress-info{ + @include display-flex(); + @include align-items(center); + @include justify-content(space-between); + margin-bottom: .5rem; + + .progress-label { + span { + display: inline-block; + color: $primary; + font-size: $font-size-sm; + font-weight: $font-weight-bold; + } + } + + .progress-percentage { + text-align: right; + span { + display: inline-block; + color: $gray-500; + font-size: $font-size-xs; + font-weight: $font-weight-bold; + } + } +} + +.info-xl{ + .progress-label, + .progress-percentage { + span { + font-size: $font-size-sm; + } + } + + .progress-percentage { + text-align: right; + } + +} + +.progress-tooltip { + background: $primary; + color: $white; + font-weight: $font-weight-bold; + padding: .25rem .375rem; + line-height: 1; + font-size: $font-size-xs; + position: relative; + border-radius: $border-radius-sm; + + &:after { + content: " "; + position: absolute; + top: 100%; + left: 10px; + border: solid transparent; + height: 0; + width: 0; + pointer-events: none; + border-top-color: $gray; + border-width: 6px; + } +} + +@-webkit-keyframes animate-positive{ + 0% { width: 0%; } +} +@keyframes animate-positive{ + 0% { width: 0%; } +} + +//Tooltip arrow color +@each $color, +$value in $theme-colors { + .progress-info{ + .bg-#{$color} { + &::after{ + border-top-color: $value; + } + } + } +} diff --git a/resources/volt/scss/volt/components/_scrollbar.scss b/resources/volt/scss/volt/components/_scrollbar.scss new file mode 100644 index 0000000..e757b73 --- /dev/null +++ b/resources/volt/scss/volt/components/_scrollbar.scss @@ -0,0 +1,228 @@ +[data-simplebar] { + position: fixed; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; + } + + .simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; + } + + .simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; + } + + .simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; + } + + .simplebar-content-wrapper { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ + width: auto; + max-width: 100%; /* Not required for horizontal scroll to trigger */ + max-height: 100%; /* Needed for vertical scroll to trigger */ + scrollbar-width: none; + -ms-overflow-style: none; + } + + .simplebar-content-wrapper::-webkit-scrollbar, + .simplebar-hide-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; + } + + .simplebar-content:before, + .simplebar-content:after { + content: ' '; + display: table; + } + + .simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; + } + + .simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: 100%; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; + } + + .simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; + } + + .simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; + overflow: hidden; + } + + [data-simplebar].simplebar-dragging .simplebar-content { + pointer-events: none; + user-select: none; + -webkit-user-select: none; + } + + [data-simplebar].simplebar-dragging .simplebar-track { + pointer-events: all; + } + + .simplebar-scrollbar { + position: absolute; + left: 0; + right: 0; + min-height: 10px; + } + + .simplebar-scrollbar:before { + position: absolute; + content: ''; + background: black; + border-radius: 7px; + left: 2px; + right: 2px; + opacity: 0; + transition: opacity 0.2s 0.5s linear; + } + + .simplebar-scrolling .simplebar-scrollbar:before, + .simplebar-hover .simplebar-scrollbar:before, + .simplebar-mouse-entered .simplebar-scrollbar:before { + opacity: 0.5; + transition-delay: 0s; + transition-duration: 0s; + } + + .simplebar-scrollbar.simplebar-visible:before { + /* When hovered, remove all transitions from drag handle */ + opacity: 0.5; + transition-delay: 0s; + transition-duration: 0s; + } + + .simplebar-track.simplebar-vertical { + top: 0; + width: 11px; + } + + .simplebar-scrollbar:before { + top: 2px; + bottom: 2px; + left: 2px; + right: 2px; + } + + .simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; + } + + .simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto; + left: 0; + top: 0; + bottom: 0; + min-height: 0; + min-width: 10px; + width: auto; + } + + /* Rtl support */ + [data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; + } + + .simplebar-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; + -ms-overflow-style: scrollbar !important; + } + + .simplebar-dummy-scrollbar-size > div { + width: 200%; + height: 200%; + margin: 10px 0; + } + + .simplebar-hide-scrollbar { + position: fixed; + left: 0; + visibility: hidden; + overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; + } + + .simplebar-scrollbar::before { + background-color: darken($dark, 10%); + } + \ No newline at end of file diff --git a/resources/volt/scss/volt/components/_shapes.scss b/resources/volt/scss/volt/components/_shapes.scss new file mode 100755 index 0000000..160267f --- /dev/null +++ b/resources/volt/scss/volt/components/_shapes.scss @@ -0,0 +1,18 @@ +/** + * = Shapes + */ + +.avatar-sm { + width: $avatar-sm-y; + height: $avatar-sm-x; +} + +.avatar-md { + width: $avatar-md-y; + height: $avatar-md-x; +} + +.avatar-lg { + width: $avatar-lg-y; + height: $avatar-lg-x; +} diff --git a/resources/volt/scss/volt/components/_steps.scss b/resources/volt/scss/volt/components/_steps.scss new file mode 100755 index 0000000..33b71cd --- /dev/null +++ b/resources/volt/scss/volt/components/_steps.scss @@ -0,0 +1,61 @@ +/**steps + * = Accordions + */ + +.step{ + position: relative; + margin-bottom: 4rem; + border-radius: 6px; + + .step-shape{ + display: inline-flex; + width: $step-shape-size; + height: $step-shape-size; + text-align: center; + @include align-items(center); + @include justify-content(center); + + i, svg { + font-size: $icon-size; + } + + .step-number{ + position: absolute; + font-weight: $font-weight-bold; + top: -10px; + width: 32px; + height: 32px; + border-width: $step-border-width; + border-style: solid; + line-height: 1.7; + } + + &.bordered { + border-width: $step-border-width; + border-style: solid; + + .step-number { + background-color: $white; + top:-12px; + } + } + + &.rounded-circle{ + .step-number{ + margin-right:1.275rem; + } + } + } + + .icon-lg{ + font-size: $step-icon-size; + } + + .back-layer{ + @include display-flex(); + position: absolute; + font-size: $step-number-size; + z-index: 0; + top: 0; + } +} diff --git a/resources/volt/scss/volt/components/_tables.scss b/resources/volt/scss/volt/components/_tables.scss new file mode 100644 index 0000000..2aded49 --- /dev/null +++ b/resources/volt/scss/volt/components/_tables.scss @@ -0,0 +1,394 @@ +// General styles + +.table { + + thead th { + padding-top: $table-head-spacer-y; + padding-bottom: $table-head-spacer-y; + font-size: $table-head-font-size; + text-transform: $table-head-text-transform; + font-weight: $font-weight-bolder; + border-top: 0; + } + + th { + font-weight: $font-weight-bold; + padding:1rem; + } + + td { + .progress { + height: 3px; + width: 120px; + margin: 0; + } + } + + td, + th { + font-size: $table-body-font-size; + white-space: nowrap; + } + + // User Table + + &.user-table{ + thead th{ + border-top:0; + } + } + + // Vetical align table content + + &.align-items-center { + td, + th { + vertical-align: middle; + } + } + + + // Styles for dark table + + .thead-dark { + th { + background-color: $gray-800; + color: $white; + + a { + color: $dark; + } + } + } + + + // Styles for light table + + .thead-light { + th { + background-color: $gray-100; + color: $dark; + + a { + color: $dark; + } + } + } +} + + +// Add transition for hover state + +.table-hover { + tr { + @include transition($transition-base); + } +} + + +// Flush tables + +.table-flush { + td, + th { + border-left: 0; + border-right: 0; + } + + tbody { + tr { + &:first-child { + td, + th { + border-top: 0; + } + } + + &:last-child { + td, + th { + border-bottom: 0; + } + } + } + } +} + + +// Tables inside cards + +.card { + .table { + margin-bottom: 0; + + td, + th { + padding-left: $card-spacer-x; + padding-right: $card-spacer-x; + } + } +} + +.table { + [data-sort] { + cursor: pointer; + } + + .custom-toggle { + display: block; + } + + .thead-dark { + [data-sort] { + &::after { + content: str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); + margin-left: .25rem; + } + } + } + + .thead-light { + [data-sort] { + &::after { + content: str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); + margin-left: .25rem; + } + } + } +} + +.dataTables_wrapper { + + .dataTables_info{ + padding-left: 1.5rem; + } + + .dataTables_paginate{ + padding-right: 1.5rem; + } + + .dataTables_length { + label{ + padding-left:1.5rem; + } + } + + .dataTables_filter { + padding-right: 1.5rem; + } +} + +.dataTable-top, +.dataTable-bottom { + display: flex; + width: 100%; + justify-content: space-between; + + @include media-breakpoint-down(md) { + flex-direction: column; + + .dataTable-info { + margin-bottom: 1rem; + } + } +} + +.dataTable-top { + padding: 0 0 1rem 0; +} + +.dataTable-bottom { + padding: 1.5rem 0 0 0; +} + +.dataTable-pagination { + display: flex; + @include list-unstyled(); + + a { + padding: $pagination-padding-y $pagination-padding-x; + @include font-size(null); + } + + li { + @if $pagination-margin-left == (-$pagination-border-width) { + &:first-child { + a { + @include border-start-radius($pagination-border-radius); + } + } + + &:last-child { + a { + @include border-end-radius($pagination-border-radius); + } + } + } @else { + //Add border-radius to all pageLinks in case they have left margin + a { + @include border-radius($pagination-border-radius); + } + } + } + + > li { + &:not(:first-child) a { + margin-left: $pagination-margin-left; + } + + &.active a { + z-index: 3; + color: $pagination-active-color; + @include gradient-bg($pagination-active-bg); + border-color: $pagination-active-border-color; + } + + &.disabled a { + color: $pagination-disabled-color; + pointer-events: none; + background-color: $pagination-disabled-bg; + border-color: $pagination-disabled-border-color; + } + + a { + position: relative; + display: block; + color: $pagination-color; + text-decoration: if($link-decoration == none, null, none); + background-color: $pagination-bg; + border: $pagination-border-width solid $pagination-border-color; + + &:hover { + z-index: 2; + color: $pagination-hover-color; + text-decoration: if($link-hover-decoration == underline, none, null); + background-color: $pagination-hover-bg; + border-color: $pagination-hover-border-color; + } + + &:focus { + z-index: 3; + outline: $pagination-focus-outline; + box-shadow: $pagination-focus-box-shadow; + } + } + } +} + +.dataTable-selector { + display: inline-block; + width: auto; + height: $form-select-height; + padding: $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x; + font-family: $form-select-font-family; + @include font-size($form-select-font-size); + font-weight: $form-select-font-weight; + line-height: $form-select-line-height; + color: $form-select-color; + vertical-align: middle; + background-color: $form-select-bg; + background-image: escape-svg($form-select-indicator); + background-repeat: no-repeat; + background-position: $form-select-bg-position; + background-size: $form-select-bg-size; + border: $form-select-border-width solid $form-select-border-color; + @include border-radius($form-select-border-radius, 0); + @include box-shadow($form-select-box-shadow); + appearance: none; + + &:focus { + border-color: $form-select-focus-border-color; + outline: 0; + @if $enable-shadows { + @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); + } @else { + // Avoid using mixin so we can pass custom focus shadow properly + box-shadow: $form-select-focus-box-shadow; + } + + &::-ms-value { + // For visual consistency with other platforms/browsers, + // suppress the default white text on blue background highlight given to + // the selected option text when the (still closed) s in some browsers, due to the limited stylability of ` + + + +

+
+ +
+ + + + + diff --git a/routes/web.php b/routes/web.php index 83469ef..daac5b0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,3 +12,17 @@ use Illuminate\Support\Facades\Route; | be assigned to the "web" middleware group. Make something great! | */ + +Route::middleware('guest')->group(function () { + Route::get('login', [\App\Http\Controllers\AuthController::class, 'login'])->name('login'); + Route::middleware(['throttle:login'])->post('login', [\App\Http\Controllers\AuthController::class, 'authorization'])->name('authorization'); +}); +Route::middleware(['auth', 'verified'])->group(function () { + Route::post('logout', [\App\Http\Controllers\AuthController::class, 'logout'])->name('logout'); + Route::get('/', [\App\Http\Controllers\Private\DashboardController::class, 'index'])->name('home'); + Route::prefix('profile')->as('profile.') + ->group(function () { + Route::get('/', [\App\Http\Controllers\Private\ProfileController::class, 'profile'])->name('edit'); + Route::get('settings', [\App\Http\Controllers\Private\ProfileController::class, 'settings'])->name('settings'); + }); +}); -- 2.45.2 From 5d61ab425e9da291388e0abf61d1ff07165111d3 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 10:50:15 +0600 Subject: [PATCH 32/90] Extended rate limiting functionality within the RouteServiceProvider to limit the login requests. Now the application limits the number of requests both per IP address and per email. This will drastically improve security by minimizing automated spam and brute-force attack attempts. --- app/Providers/RouteServiceProvider.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 63b9098..f953b4c 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -42,7 +42,13 @@ class RouteServiceProvider extends ServiceProvider protected function configureRateLimiting(): void { RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + return Limit::perMinute(60)->by($request->user()?->id ?: $request->getClientIp()); + }); + RateLimiter::for('login', function (Request $request) { + return [ + Limit::perHour(config('rate_limiting.login_max_request', 50))->by($request->getClientIp()), + Limit::perHour(config('rate_limiting.login_max_email_request', 10))->by($request->getClientIp() . '-' . $request->input('email')), + ]; }); } } -- 2.45.2 From 00910831a432a18c004a6ea467bb87b6ddb8f8fa Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 19:50:22 +0600 Subject: [PATCH 33/90] The authorization method of the AuthController has been updated to specify a return type. This was done to ensure that the method always returns an instance of a RedirectResponse, thereby enhancing the code's readability and preventing unexpected return types. --- app/Http/Controllers/AuthController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 32fab44..1ac73c8 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -22,7 +22,7 @@ final class AuthController extends Controller return view('public/login'); } - public function authorization(AuthorizationRequest $request) + public function authorization(AuthorizationRequest $request): RedirectResponse { $authorization = $request->getDto(); $result = $this->authService->authorization($authorization); -- 2.45.2 From c18e7e54b7b9fd8a6805c67ddf8fd9abc19211f3 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 19:52:39 +0600 Subject: [PATCH 34/90] Modified the Middleware Kernel to use a new method for request throttling that uses Redis and created a new middleware to ensure that user email is verified. These changes allow for more efficient request throttling by utilizing Redis. The new EnsureUserIsVerified middleware improves security by validating that a user's email has been verified or if the user is active before granting access, returning a 403 error if the user fails these checks. --- app/Http/Kernel.php | 4 +- app/Http/Middleware/EnsureUserIsVerified.php | 43 ++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 app/Http/Middleware/EnsureUserIsVerified.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c34cdcf..2173a97 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -61,7 +61,7 @@ class Kernel extends HttpKernel '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, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class, + 'verified' => \App\Http\Middleware\EnsureUserIsVerified::class, ]; } diff --git a/app/Http/Middleware/EnsureUserIsVerified.php b/app/Http/Middleware/EnsureUserIsVerified.php new file mode 100644 index 0000000..1f81865 --- /dev/null +++ b/app/Http/Middleware/EnsureUserIsVerified.php @@ -0,0 +1,43 @@ +user()) { + return $request->expectsJson() + ? abort(403) + : Redirect::guest(URL::route($redirectToRoute ?: 'verification.notice')); + } + + + if ($request->user() instanceof MustVerifyEmail && ! $request->user()->hasVerifiedEmail()) { + return $request->expectsJson() + ? abort(403, 'Your email address is not verified.') + : Redirect::guest(URL::route($redirectToRoute ?: 'verification.notice')); + } + + if ($request->user()->is_active === false) { + return $request->expectsJson() + ? abort(403, 'User disabled.') + : Redirect::guest(URL::route($redirectToRoute ?: 'verification.notice')); + } + + return $next($request); + } +} -- 2.45.2 From 91810190b78a46f08f0fb70bd4bf34d9917ea013 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 21:54:10 +0600 Subject: [PATCH 35/90] Introduced a new class ServiceResultSuccess to distinctively handle successful service responses. Changes were made in AuthService and Service base class to replace ServiceResultArray with ServiceResultSuccess for successful operations. This provides a more accurate response type and improves code readability. --- app/ServiceResults/ServiceResultSuccess.php | 15 +++++++++++++++ app/Services/AuthService.php | 4 ++-- app/Services/Service.php | 5 +++-- 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 app/ServiceResults/ServiceResultSuccess.php diff --git a/app/ServiceResults/ServiceResultSuccess.php b/app/ServiceResults/ServiceResultSuccess.php new file mode 100644 index 0000000..7a6a3c6 --- /dev/null +++ b/app/ServiceResults/ServiceResultSuccess.php @@ -0,0 +1,15 @@ +message; + } +} diff --git a/app/Services/AuthService.php b/app/Services/AuthService.php index 03dc196..6542546 100644 --- a/app/Services/AuthService.php +++ b/app/Services/AuthService.php @@ -4,8 +4,8 @@ namespace App\Services; use App\Dto\Request\Authorization; use App\Repositories\UserRepository; -use App\ServiceResults\ServiceResultArray; use App\ServiceResults\ServiceResultError; +use App\ServiceResults\ServiceResultSuccess; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; @@ -15,7 +15,7 @@ final class AuthService extends Service private readonly UserRepository $userRepository ) { } - public function authorization(Authorization $authorization): ServiceResultError | ServiceResultArray + public function authorization(Authorization $authorization): ServiceResultError | ServiceResultSuccess { $user = $this->userRepository->getUserByEmail($authorization->getEmail()); if (is_null($user)) { diff --git a/app/Services/Service.php b/app/Services/Service.php index d844c35..f7bb5f9 100644 --- a/app/Services/Service.php +++ b/app/Services/Service.php @@ -5,6 +5,7 @@ namespace App\Services; use App\ServiceResults\ServiceResultArray; use App\ServiceResults\ServiceResultError; +use App\ServiceResults\ServiceResultSuccess; use Illuminate\Http\Response; abstract class Service @@ -39,9 +40,9 @@ abstract class Service return $this->error(Response::HTTP_UNAUTHORIZED, $message); } - final protected function ok(string $message = 'OK'): ServiceResultArray + final protected function ok(string $message = 'OK'): ServiceResultSuccess { - return $this->result(['message' => $message]); + return new ServiceResultSuccess($message); } final protected function result(array $data = []): ServiceResultArray -- 2.45.2 From 6dd24ac1d390cccbb70ea13259dac875f2a1c583 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 22:31:39 +0600 Subject: [PATCH 36/90] A new method 'isError' has been introduced to the ServiceResult interface and its implementation. This change was made to improve readability and logic. Now instead of checking if the result is not successful, we can directly check if it's an error using isError method. This improves the code clarity. --- app/Contracts/ServiceResult.php | 1 + app/ServiceResults/ServiceResult.php | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Contracts/ServiceResult.php b/app/Contracts/ServiceResult.php index 87f87f6..1af22ed 100644 --- a/app/Contracts/ServiceResult.php +++ b/app/Contracts/ServiceResult.php @@ -6,4 +6,5 @@ namespace App\Contracts; interface ServiceResult { public function isSuccess(): bool; + public function isError(): bool; } diff --git a/app/ServiceResults/ServiceResult.php b/app/ServiceResults/ServiceResult.php index 826d3a0..6a83939 100644 --- a/app/ServiceResults/ServiceResult.php +++ b/app/ServiceResults/ServiceResult.php @@ -10,6 +10,11 @@ abstract class ServiceResult implements ServiceResultContract { public function isSuccess(): bool { - return $this instanceof ServiceResultErrorContract !== true; + return $this->isError() === false; + } + + public function isError(): bool + { + return $this instanceof ServiceResultErrorContract === true; } } -- 2.45.2 From 92206a028a12432ad5049a85d1be92350bccd570 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 6 Jul 2023 22:32:29 +0600 Subject: [PATCH 37/90] Refactor error check in AuthController. Changed the error check in the AuthController from checking if the result is not successful to checking if the result has an error. This change was made to clarify the code and ensure that errors are handled properly. --- app/Http/Controllers/AuthController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 1ac73c8..096f082 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -26,7 +26,7 @@ final class AuthController extends Controller { $authorization = $request->getDto(); $result = $this->authService->authorization($authorization); - if (!$result->isSuccess()) { + if ($result->isError()) { if ($result->getCode() === Response::HTTP_UNAUTHORIZED) { Log::warning('Unauthorized ' . $authorization->getEmail() . ' [' . $request->getClientIp() . ']'); } -- 2.45.2 From 398f5e209729b6efbb1dda8c2e966d4283135a13 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Fri, 7 Jul 2023 00:03:03 +0600 Subject: [PATCH 38/90] Added necessary template files and view components for scaffolding of the private area of the application. This includes error and success message components for efficient handling of user feedback messages. Added navigation components and dashboard structure to the private layout. This will streamline the implementation of features in the private area and ensure a consistent user interface. --- app/View/Components/Private/Layout.php | 17 +++ .../views/private/layout/_errors.blade.php | 9 ++ .../private/layout/_navigation.blade.php | 18 +++ .../views/private/layout/_success.blade.php | 5 + resources/views/private/layout/app.blade.php | 125 ++++++++++++++++++ 5 files changed, 174 insertions(+) create mode 100644 app/View/Components/Private/Layout.php create mode 100644 resources/views/private/layout/_errors.blade.php create mode 100644 resources/views/private/layout/_navigation.blade.php create mode 100644 resources/views/private/layout/_success.blade.php create mode 100644 resources/views/private/layout/app.blade.php diff --git a/app/View/Components/Private/Layout.php b/app/View/Components/Private/Layout.php new file mode 100644 index 0000000..f4f561a --- /dev/null +++ b/app/View/Components/Private/Layout.php @@ -0,0 +1,17 @@ + + +
    + @foreach($errors as $error) +
  • {{ $error }}
  • + @endforeach +
+ + diff --git a/resources/views/private/layout/_navigation.blade.php b/resources/views/private/layout/_navigation.blade.php new file mode 100644 index 0000000..7dd830a --- /dev/null +++ b/resources/views/private/layout/_navigation.blade.php @@ -0,0 +1,18 @@ +
diff --git a/resources/views/private/layout/_success.blade.php b/resources/views/private/layout/_success.blade.php new file mode 100644 index 0000000..ecb41c9 --- /dev/null +++ b/resources/views/private/layout/_success.blade.php @@ -0,0 +1,5 @@ + diff --git a/resources/views/private/layout/app.blade.php b/resources/views/private/layout/app.blade.php new file mode 100644 index 0000000..bf3a2f7 --- /dev/null +++ b/resources/views/private/layout/app.blade.php @@ -0,0 +1,125 @@ + + + + + + + @yield('meta_title', '') + + + + @vite('resources/volt/scss/app.scss') + + + + + + + + + +
+ + + + @includeWhen($errors->any(), 'private.layout._errors', ['errors' => $errors->all()]) + @includeWhen(Session::has('success'), 'private.layout._success', ['success' => Session::get('success')]) + + {{ $slot }} + + +
+ + @vite('resources/volt/js/app.js') + + -- 2.45.2 From 24098415b5379246cfe620ed637509678ea21680 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Fri, 7 Jul 2023 00:03:57 +0600 Subject: [PATCH 39/90] Changed the way bootstrap is imported and added Chartist for charting functionality. This update provides wider access to Bootstrap features and integrates Chartist for better data representation. --- resources/volt/images/brand/dark.png | Bin 0 -> 1189 bytes resources/volt/images/brand/light.png | Bin 0 -> 1180 bytes resources/volt/js/volt.js | 4 +++- 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 resources/volt/images/brand/dark.png create mode 100644 resources/volt/images/brand/light.png diff --git a/resources/volt/images/brand/dark.png b/resources/volt/images/brand/dark.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5a026382e1982ad71d052a9323162edf62d7b1 GIT binary patch literal 1189 zcmV;W1X}xvP)_E@REOp+Oy9sUj)Q&QR@M zy@@|_pDpj?1@~B2v3fx^x&j>-0YX9r_a{2R7!N{v=K!SMK|uX_pbx7+W>U2^cDhm* z++$vy;syV1Tv65w65<442{Q}?43OR_*Q!lz?}KLE0`x%@N{0Yq#{lS)Ga$rmb-`jh ziSmLw#-kk<19Xc8kdin|#&OVwXF=|p1o<3RtC9gSF6=Zw3cn6)>18OCU$Rg~CI%xBj9tUH%Vgz%)pP4>KZxva z3NDk>mh+qs5*Z0V1LH6pw7^K%&H~wL0|pM1vDjqcfP0Bmm!Oe^(}}+GLE{t+BC8rq zi4Y`S>~Wy+=i8v1AFl(pbHJUG@!p1DL=(D$C(FlYLD=FJq_>ZN%p^eS(SbUM163;4 z!1?`S7z$cI5tsrjX*`{ShzTSPiiP5-{R*PKq`xc}vEP5T-m?}7 zC!+mVf--s__kXCKTTfm0H>h-%lGi>AwvR>-ORmCBc(XQV|2k^ZF0}}*D+GaC-FVVS zUIEIqr)xT9XnKbK#AFJxqXq29JL*QB;w@K;svbHS@n3+j3Q57UZ;$Q`lAUm{mI>Bdv$y9(bsf>$X7 zvEOdjMII?VrL@XZO1Ep59{%S+x{7{&>U@jwbrbvza*qh(lWs!N00000NkvXXu0mjf D#r!Fq literal 0 HcmV?d00001 diff --git a/resources/volt/images/brand/light.png b/resources/volt/images/brand/light.png new file mode 100644 index 0000000000000000000000000000000000000000..f0eb3cd33b8b4514eddad824ee1776f494a7f3b2 GIT binary patch literal 1180 zcmV;N1Y`S&P)bri=BNJDXi28or(mJ4I-hC@&^*A~OLKzG1g ziUMiPAWYO?gi?uS4F+4_S||{32@nvt!3}x4KnM)tUbwtW-a+03mxbYYQF;5e=V@H- z1s=E%^xeMy{m%L9{LXov-yvG9J{xII;?Cplz1V7l4+t-s@Au^KK)Xs5ClJ>p?!yUK;9{ahu*c+fKSh(<_E?S$F3& znftVpLq<9`*!*ngngQqA{9Fe&c+cm}>jt*)ZQ=&+{i0#H1Ug#`VR0f9hrdb(|2q*5 zU5LbshC7xATVAZ=23rMIa0R}gtpol=F(U3hL(>o-e>ezXO*&$vxd;$-1cj_9ge5K40}@N@=}&ifEVRzpWme{t}k zuxxIyO;o~SL4t@9h*~8`l;xu9$rxL0$M7hUYb6*MpTXc$;Cg8yvf7Fu2rpS2Y#S@& z1`D#o<_DPZ-EcX-99gY*kX~Pgxaus#{Vry!WPptOM<)?enTf)lVtkoj0n@|B7J{Ag znA{w4Z*nHxoioY-4xzay=qX~8W;W*_v-wxttVl!u*pvdCAk9H;S0Q^Qzq<(bp*iz^ zC^O{I{ysN20D83h_#@?@<1yuILdNmZOq6srp?_>z0WH1Xg0y>L#Tmw~(PgS&(~lm~ zd2FF2wLhp*Imk7t3__U*sd5R@>VH!J71hdeRiKRBVk=a^2fk&#mSx0Gict1aQA*2qAN3z zB)@~2!3Qk3Z*&qVatY#P*$}tqvCzbZV!Y#fV-EU~*>mz}UZTIV3W63{UaC|4I5uvE z|Ls4}J2HWIX}Y4<8I7fi%9#m|lm1(|t562*&AM~o{a0k{i>HVp~Cr~b@t7D|cqjZEMWk^@g+BZ7;bvGz^w z#(VxE=)P>M3T1B0AtRPnEbk#BGCkF?>SvJmY5VGzLFfD++GL=ZaJ8+oeS(gZ1k$P% z1WmI2DUV1)eJIl&{;gc~Cz(s0qpz?Vrn=w**Q)8IGs$z5(v>mskeUZZy-CA3k0ZvEY4Fhw>|1$1U~JFTmNphZsk u*NErYMLe%Aa* Date: Fri, 7 Jul 2023 00:05:38 +0600 Subject: [PATCH 40/90] This commit adds two new components for handling form inputs in the private section of the site. 'Form.php' provides a base class for forms with methods for retrieving request names. 'Input.php' extends this to handle input fields specifically, allowing title, name, type, and value to be specified. An associated Blade view 'input.blade.php' has been added to render these inputs in views. This helps in reusability and maintainability. --- app/View/Components/Private/Forms/Form.php | 32 ++++++++++++ app/View/Components/Private/Forms/Input.php | 50 +++++++++++++++++++ .../private/components/forms/input.blade.php | 7 +++ 3 files changed, 89 insertions(+) create mode 100644 app/View/Components/Private/Forms/Form.php create mode 100644 app/View/Components/Private/Forms/Input.php create mode 100644 resources/views/private/components/forms/input.blade.php diff --git a/app/View/Components/Private/Forms/Form.php b/app/View/Components/Private/Forms/Form.php new file mode 100644 index 0000000..f4fd689 --- /dev/null +++ b/app/View/Components/Private/Forms/Form.php @@ -0,0 +1,32 @@ +requestName)) { + return $this->requestName; + } + + $this->requestName = Str::of($this->getName()) + ->replace( + ['.', '[', ']'], + ['_', '.', ''], + ) + ->rtrim('.') + ->value(); + + return $this->requestName; + } +} diff --git a/app/View/Components/Private/Forms/Input.php b/app/View/Components/Private/Forms/Input.php new file mode 100644 index 0000000..2e3c0af --- /dev/null +++ b/app/View/Components/Private/Forms/Input.php @@ -0,0 +1,50 @@ +name; + } + + protected function getTitle(): string + { + return Str::ucfirst($this->title); + } + + protected function getType(): string + { + return $this->type; + } + + protected function getValue(): string + { + return (string) old($this->getRequestName(), $this->value); + } + + /** + * @inheritDoc + */ + public function render(): View + { + return view('private.components.forms.input', [ + 'title' => $this->getTitle(), + 'name' => $this->getName(), + 'requestName' => $this->getRequestName(), + 'type' => $this->getType(), + 'value' => $this->getValue() + ]); + } +} diff --git a/resources/views/private/components/forms/input.blade.php b/resources/views/private/components/forms/input.blade.php new file mode 100644 index 0000000..2550e3a --- /dev/null +++ b/resources/views/private/components/forms/input.blade.php @@ -0,0 +1,7 @@ +
+ + + @error($name) + {{ $message }} + @enderror +
-- 2.45.2 From 00a0624eea9ddbb9c6ad8ebece6fae904dd6b26d Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Fri, 7 Jul 2023 00:07:19 +0600 Subject: [PATCH 41/90] This commit adds update functionality to user profiles. New routes, views, and controller methods have been created to facilitate this along with form requests for validation. Significant changes include new methods in the ProfileController, addition of an UpdateRequest class for validation purposes and the creation of a profile update view. These changes allow users to edit and update their profile information on the application. --- app/Dto/Request/Private/Profile/Update.php | 17 ++++++++++ app/Http/Controllers/Private/Controller.php | 13 +++++++ .../Controllers/Private/ProfileController.php | 29 +++++++++++++--- .../Private/Profile/UpdateRequest.php | 25 ++++++++++++++ app/Services/Private/ProfileService.php | 31 +++++++++++++++++ lang/en.json | 9 ++++- lang/ru.json | 9 ++++- .../views/private/profile/profile.blade.php | 34 +++++++++++++++++++ routes/web.php | 2 ++ 9 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 app/Dto/Request/Private/Profile/Update.php create mode 100644 app/Http/Controllers/Private/Controller.php create mode 100644 app/Http/Requests/Private/Profile/UpdateRequest.php create mode 100644 app/Services/Private/ProfileService.php create mode 100644 resources/views/private/profile/profile.blade.php diff --git a/app/Dto/Request/Private/Profile/Update.php b/app/Dto/Request/Private/Profile/Update.php new file mode 100644 index 0000000..3ea10b4 --- /dev/null +++ b/app/Dto/Request/Private/Profile/Update.php @@ -0,0 +1,17 @@ +name; + } +} diff --git a/app/Http/Controllers/Private/Controller.php b/app/Http/Controllers/Private/Controller.php new file mode 100644 index 0000000..0d678f1 --- /dev/null +++ b/app/Http/Controllers/Private/Controller.php @@ -0,0 +1,13 @@ + Auth::user() + 'user' => $request->user() ]); } - public function settings(): View + public function settings(Request $request): View { return view('private/profile/settings', [ - 'user' => Auth::user() + 'user' => $request->user() ]); } + + public function update(UpdateRequest $request): RedirectResponse + { + $data = $request->getDto(); + $user = $request->user(); + + $result = $this->profileService->update($data, $user); + if ($result->isError()) { + return redirect()->back()->withInput()->withErrors($result->getMessage()); + } + return redirect()->route('profile.edit')->withSuccess($result->getMessage()); + } } diff --git a/app/Http/Requests/Private/Profile/UpdateRequest.php b/app/Http/Requests/Private/Profile/UpdateRequest.php new file mode 100644 index 0000000..8dcaadb --- /dev/null +++ b/app/Http/Requests/Private/Profile/UpdateRequest.php @@ -0,0 +1,25 @@ + ['required', 'max:255'], + ]; + } + + public function getDto(): Update + { + return new Update(name: $this->input('name')); + } +} diff --git a/app/Services/Private/ProfileService.php b/app/Services/Private/ProfileService.php new file mode 100644 index 0000000..080c090 --- /dev/null +++ b/app/Services/Private/ProfileService.php @@ -0,0 +1,31 @@ + $update->getName() + ]; + $this->userCommandHandler->handleUpdate($user, $data); + } catch (\Throwable $e) { + report($e->getMessage()); + return $this->errService($e->getMessage()); + } + return $this->ok(__('Profile saved successfully')); + } +} diff --git a/lang/en.json b/lang/en.json index b7e847e..803e73b 100644 --- a/lang/en.json +++ b/lang/en.json @@ -37,5 +37,12 @@ "Your Email": "Your Email", "Your Password": "Your Password", "Remember me": "Remember me", - "Sign in": "Sign in" + "Sign in": "Sign in", + "Toggle navigation": "Toggle navigation", + "Hello": "Hello", + "My Profile": "My Profile", + "Settings": "Settings", + "Dashboard": "Dashboard", + "Save": "Save", + "Profile saved successfully": "Profile saved successfully" } diff --git a/lang/ru.json b/lang/ru.json index 16231f6..8602520 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -37,5 +37,12 @@ "Your Email": "Ваш Email", "Your Password": "Ваш пароль", "Remember me": "Запомнить", - "Sign in": "Войти" + "Sign in": "Войти", + "Toggle navigation": "Переключение навигации", + "Hello": "Здравствуйте", + "My Profile": "Мой профиль", + "Settings": "Настройки", + "Dashboard": "Dashboard", + "Save": "Сохранить", + "Profile saved successfully": "Профиль успешно сохранен" } diff --git a/resources/views/private/profile/profile.blade.php b/resources/views/private/profile/profile.blade.php new file mode 100644 index 0000000..608c13a --- /dev/null +++ b/resources/views/private/profile/profile.blade.php @@ -0,0 +1,34 @@ +@section('meta_title', __('My Profile')) +@section('h1', __('My Profile')) + +
+
+
+
+
+ @csrf + @method('PUT') + + + + +
+
+
+
+
+
+
+
+
+ @csrf + @method('PUT') + + + + +
+
+
+
+
diff --git a/routes/web.php b/routes/web.php index daac5b0..48ce5e0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -23,6 +23,8 @@ Route::middleware(['auth', 'verified'])->group(function () { Route::prefix('profile')->as('profile.') ->group(function () { Route::get('/', [\App\Http\Controllers\Private\ProfileController::class, 'profile'])->name('edit'); + Route::put('/', [\App\Http\Controllers\Private\ProfileController::class, 'update'])->name('update'); + Route::put('password', [\App\Http\Controllers\Private\ProfileController::class, 'updatePassword'])->name('update-password'); Route::get('settings', [\App\Http\Controllers\Private\ProfileController::class, 'settings'])->name('settings'); }); }); -- 2.45.2 From 39eae7f196075d0ed48ebd11f938849242a0b97d Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Fri, 7 Jul 2023 18:08:14 +0600 Subject: [PATCH 42/90] Added a new feature to allow users to update their passwords. --- .../Private/Profile/UpdatePassword.php | 17 ++++++++++++ .../Controllers/Private/ProfileController.php | 13 ++++++++++ .../Private/Profile/UpdatePasswordRequest.php | 26 +++++++++++++++++++ app/Services/Private/ProfileService.php | 12 +++++++++ lang/en.json | 3 ++- lang/ru.json | 3 ++- .../views/private/profile/profile.blade.php | 2 +- 7 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 app/Dto/Request/Private/Profile/UpdatePassword.php create mode 100644 app/Http/Requests/Private/Profile/UpdatePasswordRequest.php diff --git a/app/Dto/Request/Private/Profile/UpdatePassword.php b/app/Dto/Request/Private/Profile/UpdatePassword.php new file mode 100644 index 0000000..8f6fe23 --- /dev/null +++ b/app/Dto/Request/Private/Profile/UpdatePassword.php @@ -0,0 +1,17 @@ +password; + } +} diff --git a/app/Http/Controllers/Private/ProfileController.php b/app/Http/Controllers/Private/ProfileController.php index be63f7f..3f3eea9 100644 --- a/app/Http/Controllers/Private/ProfileController.php +++ b/app/Http/Controllers/Private/ProfileController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Private; +use App\Http\Requests\Private\Profile\UpdatePasswordRequest; use App\Http\Requests\Private\Profile\UpdateRequest; use App\Services\Private\ProfileService; use Illuminate\Http\RedirectResponse; @@ -39,4 +40,16 @@ final class ProfileController extends Controller } return redirect()->route('profile.edit')->withSuccess($result->getMessage()); } + + public function updatePassword(UpdatePasswordRequest $request): RedirectResponse + { + $data = $request->getDto(); + $user = $request->user(); + + $result = $this->profileService->updatePassword($data, $user); + if ($result->isError()) { + return redirect()->back()->withInput()->withErrors($result->getMessage()); + } + return redirect()->route('profile.edit')->withSuccess($result->getMessage()); + } } diff --git a/app/Http/Requests/Private/Profile/UpdatePasswordRequest.php b/app/Http/Requests/Private/Profile/UpdatePasswordRequest.php new file mode 100644 index 0000000..bb7a12e --- /dev/null +++ b/app/Http/Requests/Private/Profile/UpdatePasswordRequest.php @@ -0,0 +1,26 @@ + ['required', 'confirmed', Password::default()], + ]; + } + + public function getDto(): UpdatePassword + { + return new UpdatePassword(password: $this->input('password')); + } +} diff --git a/app/Services/Private/ProfileService.php b/app/Services/Private/ProfileService.php index 080c090..4a71184 100644 --- a/app/Services/Private/ProfileService.php +++ b/app/Services/Private/ProfileService.php @@ -3,6 +3,7 @@ namespace App\Services\Private; use App\Dto\Request\Private\Profile\Update; +use App\Dto\Request\Private\Profile\UpdatePassword; use App\Models\User; use App\ServiceResults\ServiceResultError; use App\ServiceResults\ServiceResultSuccess; @@ -28,4 +29,15 @@ final class ProfileService extends Service } return $this->ok(__('Profile saved successfully')); } + + public function updatePassword(UpdatePassword $update, User $user): ServiceResultError | ServiceResultSuccess + { + try { + $this->userCommandHandler->handleUpdatePassword($user, $update->getPassword()); + } catch (\Throwable $e) { + report($e->getMessage()); + return $this->errService($e->getMessage()); + } + return $this->ok(__('The password has been changed')); + } } diff --git a/lang/en.json b/lang/en.json index 803e73b..6431b8a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -44,5 +44,6 @@ "Settings": "Settings", "Dashboard": "Dashboard", "Save": "Save", - "Profile saved successfully": "Profile saved successfully" + "Profile saved successfully": "Profile saved successfully", + "The password has been changed": "The password has been changed" } diff --git a/lang/ru.json b/lang/ru.json index 8602520..da44446 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -44,5 +44,6 @@ "Settings": "Настройки", "Dashboard": "Dashboard", "Save": "Сохранить", - "Profile saved successfully": "Профиль успешно сохранен" + "Profile saved successfully": "Профиль успешно сохранен", + "The password has been changed": "Пароль был изменен" } diff --git a/resources/views/private/profile/profile.blade.php b/resources/views/private/profile/profile.blade.php index 608c13a..838f10c 100644 --- a/resources/views/private/profile/profile.blade.php +++ b/resources/views/private/profile/profile.blade.php @@ -20,7 +20,7 @@
-
+ @csrf @method('PUT') -- 2.45.2 From e5d0cac07d3c3baf69c97450f008d5b25fbe6145 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sat, 8 Jul 2023 15:12:10 +0600 Subject: [PATCH 43/90] Changed the data type and default value of 'locale' and 'timezone' fields in the users table. Instead of using strings, we are now using unsigned integers. !!! Since the project has not yet been launched, therefore, I do not create a new migration, but change the current one. !!! --- database/migrations/2014_10_12_000000_create_users_table.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 28d52cf..423c777 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -19,8 +19,8 @@ return new class extends Migration $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); - $table->string('locale', 2)->default('ru'); - $table->string('timezone')->nullable(); + $table->unsignedInteger('locale')->nullable(); + $table->unsignedInteger('timezone')->nullable(); $table->timestamps(); $table->softDeletes(); }); -- 2.45.2 From 524bf569e3e1429273b7279bb91461789581078d Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 9 Jul 2023 19:31:42 +0600 Subject: [PATCH 44/90] The 'locale' column in the users table migration was renamed to 'lang'. This change was made to improve the clarity and consistency of naming conventions across the database. The term 'lang' is more universally recognized and thus provides better code readability. !!! Since the project has not yet been launched, therefore, I do not create a new migration, but change the current one. !!! --- database/migrations/2014_10_12_000000_create_users_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 423c777..813e874 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -19,7 +19,7 @@ return new class extends Migration $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); - $table->unsignedInteger('locale')->nullable(); + $table->unsignedInteger('lang')->nullable(); $table->unsignedInteger('timezone')->nullable(); $table->timestamps(); $table->softDeletes(); -- 2.45.2 From 79112680bd6c7423301336129f78340c3e2c38ac Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 9 Jul 2023 19:39:37 +0600 Subject: [PATCH 45/90] Updated the visibility of getTitle, getType, and getValue methods in the Input class from protected to private. This was done to limit and control access to these methods to only within the class, enhancing encapsulation and improving security. --- app/View/Components/Private/Forms/Input.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/View/Components/Private/Forms/Input.php b/app/View/Components/Private/Forms/Input.php index 2e3c0af..a1a0ee7 100644 --- a/app/View/Components/Private/Forms/Input.php +++ b/app/View/Components/Private/Forms/Input.php @@ -19,17 +19,17 @@ final class Input extends Form return $this->name; } - protected function getTitle(): string + private function getTitle(): string { return Str::ucfirst($this->title); } - protected function getType(): string + private function getType(): string { return $this->type; } - protected function getValue(): string + private function getValue(): string { return (string) old($this->getRequestName(), $this->value); } -- 2.45.2 From b1c9dac3ccb60bd9c0ebfcc5e57129f958eafc66 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 10 Jul 2023 21:39:40 +0600 Subject: [PATCH 46/90] The type for 'timezone' in the 'users' table was previously assigned as an unsigned integer. For flexible usage and to support a larger range of timezones, it has been altered to a string. The maximum length is set to 50 characters. This change ensures a more universal and user-friendly handling of various timezone situations. !!! Since the project has not yet been launched, therefore, I do not create a new migration, but change the current one. !!! --- database/migrations/2014_10_12_000000_create_users_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 813e874..153717c 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -20,7 +20,7 @@ return new class extends Migration $table->string('password'); $table->rememberToken(); $table->unsignedInteger('lang')->nullable(); - $table->unsignedInteger('timezone')->nullable(); + $table->string('timezone', 50)->nullable(); $table->timestamps(); $table->softDeletes(); }); -- 2.45.2 From 907bac558617b36a2b163ad3256568e0d6966abc Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 10 Jul 2023 21:42:55 +0600 Subject: [PATCH 47/90] Added the ability to save user settings. --- .env.example | 4 ++ .../Private/Profile/UpdateSettings.php | 24 +++++++++ app/Enums/Lang.php | 46 ++++++++++++++++ app/Helpers/Helpers.php | 24 +++++++++ .../Controllers/Private/ProfileController.php | 19 ++++++- .../Private/Profile/UpdateSettingsRequest.php | 38 +++++++++++++ app/Models/User.php | 6 ++- app/Services/Private/ProfileService.php | 16 ++++++ app/View/Components/Private/Forms/Select.php | 54 +++++++++++++++++++ config/app.php | 5 +- lang/en.json | 4 +- lang/en/validation.php | 2 + lang/ru.json | 4 +- lang/ru/validation.php | 2 + .../private/components/forms/select.blade.php | 12 +++++ .../views/private/profile/settings.blade.php | 23 ++++++++ routes/web.php | 3 +- 17 files changed, 278 insertions(+), 8 deletions(-) create mode 100644 app/Dto/Request/Private/Profile/UpdateSettings.php create mode 100644 app/Enums/Lang.php create mode 100644 app/Helpers/Helpers.php create mode 100644 app/Http/Requests/Private/Profile/UpdateSettingsRequest.php create mode 100644 app/View/Components/Private/Forms/Select.php create mode 100644 resources/views/private/components/forms/select.blade.php create mode 100644 resources/views/private/profile/settings.blade.php diff --git a/.env.example b/.env.example index f0a2039..34962e9 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,10 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_DEFAULT_USER_TIMEZONE=UTC +# Valid languages: ru | en +APP_DEFAULT_LOCALE=ru + LOG_CHANNEL=daily LOG_DEPRECATIONS_CHANNEL=deprecations LOG_LEVEL=debug diff --git a/app/Dto/Request/Private/Profile/UpdateSettings.php b/app/Dto/Request/Private/Profile/UpdateSettings.php new file mode 100644 index 0000000..464b390 --- /dev/null +++ b/app/Dto/Request/Private/Profile/UpdateSettings.php @@ -0,0 +1,24 @@ +lang; + } + + public function getTimezone(): ?string + { + return $this->timezone; + } +} diff --git a/app/Enums/Lang.php b/app/Enums/Lang.php new file mode 100644 index 0000000..76f3f62 --- /dev/null +++ b/app/Enums/Lang.php @@ -0,0 +1,46 @@ + 'Русский', + self::En => 'English' + }; + } + + public function getLocale(): string + { + return match ($this) { + self::Ru => 'ru', + self::En => 'en' + }; + } + + public static function toArray(): array + { + $choices = []; + foreach (self::cases() as $lang) { + $choices[] = [ + 'name' => $lang->name, + 'value' => $lang->value, + 'title' => $lang->getTitle(), + 'locale' => $lang->getLocale() + ]; + } + return $choices; + } + + public static function toCollection(): Collection + { + return collect(self::toArray()); + } +} diff --git a/app/Helpers/Helpers.php b/app/Helpers/Helpers.php new file mode 100644 index 0000000..fd28ac2 --- /dev/null +++ b/app/Helpers/Helpers.php @@ -0,0 +1,24 @@ + $value) { + $timezone[$value] = $value . ' (UTC ' . now($value)->format('P') . ')'; + } + return collect($timezone)->sortKeys(); + }); + } + + public static function getUserTimeZone() { + return auth()->user()?->timezone ?? config('app.user_timezone'); + } +} diff --git a/app/Http/Controllers/Private/ProfileController.php b/app/Http/Controllers/Private/ProfileController.php index 3f3eea9..50b9785 100644 --- a/app/Http/Controllers/Private/ProfileController.php +++ b/app/Http/Controllers/Private/ProfileController.php @@ -2,8 +2,11 @@ namespace App\Http\Controllers\Private; +use App\Enums\Lang; +use App\Helpers\Helpers; use App\Http\Requests\Private\Profile\UpdatePasswordRequest; use App\Http\Requests\Private\Profile\UpdateRequest; +use App\Http\Requests\Private\Profile\UpdateSettingsRequest; use App\Services\Private\ProfileService; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; @@ -25,7 +28,9 @@ final class ProfileController extends Controller public function settings(Request $request): View { return view('private/profile/settings', [ - 'user' => $request->user() + 'user' => $request->user(), + 'languages' => Lang::toCollection()->pluck(value: 'title', key: 'value')->toArray(), + 'timezone' => Helpers::getTimeZoneList()->toArray(), ]); } @@ -52,4 +57,16 @@ final class ProfileController extends Controller } return redirect()->route('profile.edit')->withSuccess($result->getMessage()); } + + public function updateSettings(UpdateSettingsRequest $request): RedirectResponse + { + $data = $request->getDto(); + $user = $request->user(); + + $result = $this->profileService->updateSettings($data, $user); + if ($result->isError()) { + return redirect()->back()->withInput()->withErrors($result->getMessage()); + } + return redirect()->route('profile.settings')->withSuccess($result->getMessage()); + } } diff --git a/app/Http/Requests/Private/Profile/UpdateSettingsRequest.php b/app/Http/Requests/Private/Profile/UpdateSettingsRequest.php new file mode 100644 index 0000000..68f7ada --- /dev/null +++ b/app/Http/Requests/Private/Profile/UpdateSettingsRequest.php @@ -0,0 +1,38 @@ + ['nullable', new Enum(Lang::class)], + 'timezone' => ['nullable', Rule::in(Helpers::getTimeZoneList()->keys()->toArray())] + ]; + } + + public function getDto(): UpdateSettings + { + $lang = $this->input('lang', null); + if (!is_null($lang)) { + $lang = Lang::from((int) $lang); + } + + return new UpdateSettings( + lang: $lang, + timezone: $this->input('timezone', null), + ); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 1145d40..973a42a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,6 +3,7 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; +use App\Enums\Lang; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\SoftDeletes; @@ -34,7 +35,7 @@ final class User extends Authenticatable 'password', 'timezone', 'is_active', - 'locale', + 'lang', ]; /** @@ -54,7 +55,8 @@ final class User extends Authenticatable */ protected $casts = [ 'email_verified_at' => 'datetime', - 'is_active' => 'boolean' + 'is_active' => 'boolean', + 'lang' => Lang::class, ]; /** diff --git a/app/Services/Private/ProfileService.php b/app/Services/Private/ProfileService.php index 4a71184..6cae92a 100644 --- a/app/Services/Private/ProfileService.php +++ b/app/Services/Private/ProfileService.php @@ -4,6 +4,7 @@ namespace App\Services\Private; use App\Dto\Request\Private\Profile\Update; use App\Dto\Request\Private\Profile\UpdatePassword; +use App\Dto\Request\Private\Profile\UpdateSettings; use App\Models\User; use App\ServiceResults\ServiceResultError; use App\ServiceResults\ServiceResultSuccess; @@ -40,4 +41,19 @@ final class ProfileService extends Service } return $this->ok(__('The password has been changed')); } + + public function updateSettings(UpdateSettings $update, User $user): ServiceResultError | ServiceResultSuccess + { + try { + $data = [ + 'lang' => $update->getLang(), + 'timezone' => $update->getTimezone(), + ]; + $this->userCommandHandler->handleUpdate($user, $data); + } catch (\Throwable $e) { + report($e->getMessage()); + return $this->errService($e->getMessage()); + } + return $this->ok(__('The settings have been saved')); + } } diff --git a/app/View/Components/Private/Forms/Select.php b/app/View/Components/Private/Forms/Select.php new file mode 100644 index 0000000..7fc96c8 --- /dev/null +++ b/app/View/Components/Private/Forms/Select.php @@ -0,0 +1,54 @@ + value], ... ] + * @param null|string $value + */ + public function __construct( + private readonly string $title, + private readonly string $name, + private readonly array $list, + private readonly ?string $value = '' + ) { } + + protected function getName(): string + { + return $this->name; + } + + private function getTitle(): string + { + return Str::ucfirst($this->title); + } + + private function getValue(): string + { + return (string) old($this->getRequestName(), $this->value); + } + + private function getList(): array + { + return $this->list; + } + + public function render(): View + { + return view('private.components.forms.select', [ + 'title' => $this->getTitle(), + 'name' => $this->getName(), + 'requestName' => $this->getRequestName(), + 'list' => $this->getList(), + 'value' => $this->getValue() + ]); + } + +} diff --git a/config/app.php b/config/app.php index 15f6c33..cf96293 100644 --- a/config/app.php +++ b/config/app.php @@ -70,6 +70,7 @@ return [ */ 'timezone' => 'UTC', + 'user_timezone' => env('APP_DEFAULT_USER_TIMEZONE', 'UTC'), /* |-------------------------------------------------------------------------- @@ -82,7 +83,7 @@ return [ | */ - 'locale' => 'ru', + 'locale' => env('APP_DEFAULT_LOCALE', 'ru'), /* |-------------------------------------------------------------------------- @@ -209,7 +210,7 @@ return [ */ 'aliases' => Facade::defaultAliases()->merge([ - // 'ExampleClass' => App\Example\ExampleClass::class, + 'Helpers' => \App\Helpers\Helpers::class, ])->toArray(), ]; diff --git a/lang/en.json b/lang/en.json index 6431b8a..9aea158 100644 --- a/lang/en.json +++ b/lang/en.json @@ -45,5 +45,7 @@ "Dashboard": "Dashboard", "Save": "Save", "Profile saved successfully": "Profile saved successfully", - "The password has been changed": "The password has been changed" + "The password has been changed": "The password has been changed", + "Default": "default", + "The settings have been saved": "The settings have been saved" } diff --git a/lang/en/validation.php b/lang/en/validation.php index c470d1c..bfda1c8 100644 --- a/lang/en/validation.php +++ b/lang/en/validation.php @@ -213,5 +213,7 @@ return [ 'updated_at' => 'updated at', 'username' => 'username', 'year' => 'year', + 'lang' => 'language', + 'timezone' => 'timezone', ], ]; diff --git a/lang/ru.json b/lang/ru.json index da44446..0fbc0e1 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -45,5 +45,7 @@ "Dashboard": "Dashboard", "Save": "Сохранить", "Profile saved successfully": "Профиль успешно сохранен", - "The password has been changed": "Пароль был изменен" + "The password has been changed": "Пароль был изменен", + "Default": "По умолчанию", + "The settings have been saved": "Настройки были сохранены" } diff --git a/lang/ru/validation.php b/lang/ru/validation.php index 2af40fd..670d101 100644 --- a/lang/ru/validation.php +++ b/lang/ru/validation.php @@ -213,5 +213,7 @@ return [ 'updated_at' => 'обновлено в', 'username' => 'никнейм', 'year' => 'год', + 'lang' => 'язык', + 'timezone' => 'часовой пояс', ], ]; diff --git a/resources/views/private/components/forms/select.blade.php b/resources/views/private/components/forms/select.blade.php new file mode 100644 index 0000000..341fde5 --- /dev/null +++ b/resources/views/private/components/forms/select.blade.php @@ -0,0 +1,12 @@ +
+ + + @error($name) + {{ $message }} + @enderror +
diff --git a/resources/views/private/profile/settings.blade.php b/resources/views/private/profile/settings.blade.php new file mode 100644 index 0000000..18b55ea --- /dev/null +++ b/resources/views/private/profile/settings.blade.php @@ -0,0 +1,23 @@ +@section('meta_title', __('Settings')) +@section('h1', __('Settings')) + +
+
+
+
+ + @csrf + @method('PUT') + + + + + + + + +
+
+
+
+
diff --git a/routes/web.php b/routes/web.php index 48ce5e0..5077d13 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,7 +17,7 @@ Route::middleware('guest')->group(function () { Route::get('login', [\App\Http\Controllers\AuthController::class, 'login'])->name('login'); Route::middleware(['throttle:login'])->post('login', [\App\Http\Controllers\AuthController::class, 'authorization'])->name('authorization'); }); -Route::middleware(['auth', 'verified'])->group(function () { +Route::middleware(['auth', 'verified', 'user.locale'])->group(function () { Route::post('logout', [\App\Http\Controllers\AuthController::class, 'logout'])->name('logout'); Route::get('/', [\App\Http\Controllers\Private\DashboardController::class, 'index'])->name('home'); Route::prefix('profile')->as('profile.') @@ -26,5 +26,6 @@ Route::middleware(['auth', 'verified'])->group(function () { Route::put('/', [\App\Http\Controllers\Private\ProfileController::class, 'update'])->name('update'); Route::put('password', [\App\Http\Controllers\Private\ProfileController::class, 'updatePassword'])->name('update-password'); Route::get('settings', [\App\Http\Controllers\Private\ProfileController::class, 'settings'])->name('settings'); + Route::put('settings', [\App\Http\Controllers\Private\ProfileController::class, 'updateSettings'])->name('update-settings'); }); }); -- 2.45.2 From 9319c2d92d4c53eb7da1028c0f2079ce89dbdd44 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 10 Jul 2023 21:44:00 +0600 Subject: [PATCH 48/90] A new middleware `UserLocale.php` has been added. This middleware sets the language locale based on each user's preference. It operates by checking if the user's preferred language is set during the request cycle and if so, it changes the app's locale accordingly. This feature facilitates personalization by displaying the app in a user's preferred language. Also, registering the middleware in the `Kernel.php` allows it to be used throughout the application --- app/Http/Kernel.php | 1 + app/Http/Middleware/UserLocale.php | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 app/Http/Middleware/UserLocale.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 2173a97..47fa9de 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -63,5 +63,6 @@ class Kernel extends HttpKernel 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class, 'verified' => \App\Http\Middleware\EnsureUserIsVerified::class, + 'user.locale' => \App\Http\Middleware\UserLocale::class, ]; } diff --git a/app/Http/Middleware/UserLocale.php b/app/Http/Middleware/UserLocale.php new file mode 100644 index 0000000..89d7f47 --- /dev/null +++ b/app/Http/Middleware/UserLocale.php @@ -0,0 +1,19 @@ +user() && $request->user()->lang) { + App::setLocale($request->user()->lang->getLocale()); + } + + return $next($request); + } +} -- 2.45.2 From a3fa96664321c87d945e7c71baefef73a2583305 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 10 Jul 2023 23:12:38 +0600 Subject: [PATCH 49/90] Adjusted padding in sidebar for large screens. --- resources/views/private/layout/app.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/private/layout/app.blade.php b/resources/views/private/layout/app.blade.php index bf3a2f7..90cd9ff 100644 --- a/resources/views/private/layout/app.blade.php +++ b/resources/views/private/layout/app.blade.php @@ -26,7 +26,7 @@ -
+
-

{{ __('Hello') }}, {{ auth()->user()->name }}

+

{{ __('Hello') }}, {{ auth()->user()->name ?? '' }}

@csrf +@endcanany diff --git a/resources/views/private/captcha_tokens/_top.blade.php b/resources/views/private/captcha_tokens/_top.blade.php new file mode 100644 index 0000000..01bcf37 --- /dev/null +++ b/resources/views/private/captcha_tokens/_top.blade.php @@ -0,0 +1,8 @@ +@can('create', \App\Models\CaptchaToken::class) + +@endcan diff --git a/resources/views/private/captcha_tokens/create.blade.php b/resources/views/private/captcha_tokens/create.blade.php new file mode 100644 index 0000000..ad2abbe --- /dev/null +++ b/resources/views/private/captcha_tokens/create.blade.php @@ -0,0 +1,16 @@ +@section('meta_title', __('sections.Captcha tokens')) +@section('h1', __('sections.Captcha tokens')) + + @include('private.captcha_tokens._top') +
+
+
+
+ + @include('private.captcha_tokens._from') + +
+
+
+
+
diff --git a/resources/views/private/captcha_tokens/edit.blade.php b/resources/views/private/captcha_tokens/edit.blade.php new file mode 100644 index 0000000..e04c5e1 --- /dev/null +++ b/resources/views/private/captcha_tokens/edit.blade.php @@ -0,0 +1,19 @@ +@section('meta_title', __('sections.Captcha tokens')) +@section('h1', __('sections.Captcha tokens')) + + @include('private.captcha_tokens._top') +
+
+
+
+
+ @method('PUT') + + + @include('private.captcha_tokens._from') + +
+
+
+
+
diff --git a/resources/views/private/captcha_tokens/index.blade.php b/resources/views/private/captcha_tokens/index.blade.php new file mode 100644 index 0000000..896307b --- /dev/null +++ b/resources/views/private/captcha_tokens/index.blade.php @@ -0,0 +1,50 @@ +@section('meta_title', __('sections.Captcha tokens')) +@section('h1', __('sections.Captcha tokens')) + + @include('private.captcha_tokens._top') +
+
+
+ + + + + + + + + @foreach($captchaTokens as $captchaToken) + + + + + @endforeach + +
{{ __('validation.attributes.title') }}
+ + + + + {{ $captchaToken->title }} + + + @can('delete', $captchaToken) +
+ @csrf + @method('DELETE') + +
+ @endcan +
+ +
+
+
+ @push('scripts') + @include('private._scripts._click-confirm', ['alert' => __('Do you want to delete?')]) + @endpush +
diff --git a/resources/views/private/dashboard/index.blade.php b/resources/views/private/dashboard/index.blade.php new file mode 100644 index 0000000..057ac8b --- /dev/null +++ b/resources/views/private/dashboard/index.blade.php @@ -0,0 +1,5 @@ +@section('meta_title', __('sections.Dashboard')) +@section('h1', __('sections.Dashboard')) + + + diff --git a/resources/views/private/layout/_navigation.blade.php b/resources/views/private/layout/_navigation.blade.php index 85594ff..17f9e92 100644 --- a/resources/views/private/layout/_navigation.blade.php +++ b/resources/views/private/layout/_navigation.blade.php @@ -19,6 +19,20 @@ + @can('viewAny', \App\Models\CaptchaToken::class) +
  • request()->route()->named('captcha-tokens.*'), + ])> + + + + + {{ __('sections.Captcha tokens') }} + +
  • + @endcan + @can('viewAny', \App\Models\User::class)
  • group(function () { Route::put('users/{id}/password', [\App\Http\Controllers\Private\UsersController::class, 'updatePassword'])->name('users.update-password')->where(['id' => '[0-9]+']); Route::resource('roles', \App\Http\Controllers\Private\RolesController::class)->only(['index', 'create', 'store', 'edit', 'update', 'destroy'])->where(['role' => '[0-9]+']); + Route::resource('captcha-tokens', \App\Http\Controllers\Private\CaptchaTokensController::class)->only(['index', 'create', 'store', 'edit', 'update', 'destroy'])->where(['captcha_token' => '[0-9]+']); }); -- 2.45.2 From 9bfd3fef1aff2992d61f70285c12c82365a011f9 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 23 Aug 2023 01:02:56 +0600 Subject: [PATCH 68/90] Add Swagger API documentation and proxy routing. Added Swagger as a new service in the docker-compose file for generating the API documentation. The new API documentation is provided via an OpenAPI file located at `public/swagger.json`. Changes in routing were done to handle /api-docs requests and redirect them to the running Swagger UI instance. This will make API easier to understand and debug. --- docker-compose.yml | 9 ++ docker/dev/angie/config/default.conf | 12 +- public/swagger.json | 226 +++++++++++++++++++++++++++ 3 files changed, 245 insertions(+), 2 deletions(-) create mode 100644 public/swagger.json diff --git a/docker-compose.yml b/docker-compose.yml index eff1f1f..d1e1558 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -40,6 +40,15 @@ services: volumes: - ./docker/dev/db:/var/lib/mysql - ./docker/dev/my.cnf:/etc/mysql/conf.d/my.cnf + swagger: + image: swaggerapi/swagger-ui + environment: + URLS: "[ { url: '/swagger.json', name: '/swagger.json' } ]" + BASE_URL: /api-docs + ports: + - "8080" +# volumes: +# - ./docker/swagger:/swagger adminer: image: adminer #restart: always diff --git a/docker/dev/angie/config/default.conf b/docker/dev/angie/config/default.conf index c2de888..3063a8a 100644 --- a/docker/dev/angie/config/default.conf +++ b/docker/dev/angie/config/default.conf @@ -8,8 +8,16 @@ server { root /var/www/html/public; location / { - # try to serve file directly, fallback to index.php - try_files $uri /index.php$is_args$args; + location /api-docs { + proxy_pass http://swagger:8080; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Real-IP $remote_addr; + } + location / { + # try to serve file directly, fallback to index.php + try_files $uri /index.php$is_args$args; + } } location ~ ^/index\.php(/|$) { diff --git a/public/swagger.json b/public/swagger.json new file mode 100644 index 0000000..29a45f2 --- /dev/null +++ b/public/swagger.json @@ -0,0 +1,226 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Captcha service - API", + "description": "API Documentation.", + "version": "1.0.0" + }, + "servers": [ + { + "url": "/api/v1" + } + ], + "tags": [ + { + "name": "captcha", + "description": "Operations about captcha" + } + ], + "paths": { + "/captcha": { + "get": { + "tags": [ + "captcha" + ], + "summary": "Captcha generation", + "description": "", + "operationId": "captchaGeneration", + "parameters": [ + { + "name": "public_token", + "in": "header", + "description": "Public token for captcha generation", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Captcha" + } + } + } + } + }, + "403": { + "description": "Invalid public token value" + } + } + }, + "post": { + "tags": [ + "captcha" + ], + "summary": "Checking captcha", + "description": "", + "operationId": "captchaChecking", + "parameters": [ + { + "name": "public_token", + "in": "header", + "description": "Public token for captcha generation", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaptchaChecking" + } + } + } + } + }, + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaptchaVerification" + } + } + } + } + }, + "403": { + "description": "Invalid public token value" + } + } + } + }, + "/captcha/{captcha_key}": { + "get": { + "tags": [ + "captcha" + ], + "summary": "Verification Information", + "description": "", + "operationId": "CaptchaKeyInfo", + "parameters": [ + { + "name": "private_token", + "in": "header", + "description": "Private token for captcha verification", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "captcha_key", + "in": "path", + "description": "The key that we received when generating the captcha", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CaptchaKeyInfo" + } + } + } + } + }, + "403": { + "description": "Invalid private token value" + }, + "404": { + "description": "Captcha key not found" + } + } + } + } + }, + "components": { + "schemas": { + "Captcha": { + "type": "object", + "properties": { + "image_base64": { + "type": "string", + "format": "byte" + }, + "image_text_base64": { + "type": "string", + "format": "byte" + }, + "captcha_key": { + "type": "string" + } + }, + "required": [ + "image_base64", "image_text_base64", "captcha_key" + ] + }, + "CaptchaVerification": { + "type": "object", + "properties": { + "status": { + "type": "boolean" + }, + "message": { + "type": "string" + } + }, + "required": [ + "status", "message" + ] + }, + "CaptchaChecking": { + "type": "object", + "properties": { + "captcha_key": { + "type": "string" + }, + "verification": { + "type": "array", + "example": [{"x": 10, "y": 20}, {"x": 30, "y": 30}, {"x": 60, "y": 50}] + } + }, + "required": [ + "captcha_key", "verification" + ] + }, + "CaptchaKeyInfo": { + "type": "object", + "properties": { + "status": { + "type": "boolean" + }, + "message": { + "type": "string" + } + }, + "required": [ + "status", "message" + ] + } + } + } +} -- 2.45.2 From d72d6ff61496cb265dc5446cd0534da03cfa6d22 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 23 Aug 2023 21:56:06 +0600 Subject: [PATCH 69/90] Update swagger.json for accurate API path. The "servers" section was deleted and the "/api/v1" part was added to "paths" values for a more refined URL structure. This change makes it more clear that the API version is part of the API route. --- public/swagger.json | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/public/swagger.json b/public/swagger.json index 29a45f2..37c1f3c 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -5,11 +5,6 @@ "description": "API Documentation.", "version": "1.0.0" }, - "servers": [ - { - "url": "/api/v1" - } - ], "tags": [ { "name": "captcha", @@ -17,7 +12,7 @@ } ], "paths": { - "/captcha": { + "/api/v1/captcha": { "get": { "tags": [ "captcha" @@ -105,7 +100,7 @@ } } }, - "/captcha/{captcha_key}": { + "/api/v1/captcha/{captcha_key}": { "get": { "tags": [ "captcha" -- 2.45.2 From 61cc272e2ffa9fa54987e7ab3662062de87af7e3 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Wed, 23 Aug 2023 23:45:57 +0600 Subject: [PATCH 70/90] Rename parameter names in Swagger API documentation. In our Swagger API documentation, the parameter names 'public_token' and 'private_token' have been renamed to match our established naming conventions. The hyphenated form ('public-token' and 'private-token') is more consistent with other parameters. --- public/swagger.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/swagger.json b/public/swagger.json index 37c1f3c..760f09c 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -22,7 +22,7 @@ "operationId": "captchaGeneration", "parameters": [ { - "name": "public_token", + "name": "public-token", "in": "header", "description": "Public token for captcha generation", "required": true, @@ -59,7 +59,7 @@ "operationId": "captchaChecking", "parameters": [ { - "name": "public_token", + "name": "public-token", "in": "header", "description": "Public token for captcha generation", "required": true, @@ -110,7 +110,7 @@ "operationId": "CaptchaKeyInfo", "parameters": [ { - "name": "private_token", + "name": "private-token", "in": "header", "description": "Private token for captcha verification", "required": true, -- 2.45.2 From d8bf5dd11668185888141745d0528849cc1a56df Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 27 Aug 2023 22:25:09 +0600 Subject: [PATCH 71/90] Remove commented volumes from docker-compose.yml. The lines setting up volumes for the 'swagger' service were commented out and redundant, leading to potential confusion. This commit removes those lines to clean up and simplify the file. --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d1e1558..af15a79 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -47,8 +47,6 @@ services: BASE_URL: /api-docs ports: - "8080" -# volumes: -# - ./docker/swagger:/swagger adminer: image: adminer #restart: always -- 2.45.2 From 56cd409301fc4ad0885c18ca1c3197004097e86b Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 19 Sep 2023 14:21:56 +0600 Subject: [PATCH 72/90] The return comment of the getCoordinators method has been changed. --- app/Captcha/Dto/ImageBody.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Captcha/Dto/ImageBody.php b/app/Captcha/Dto/ImageBody.php index 1a99d5a..dae1198 100644 --- a/app/Captcha/Dto/ImageBody.php +++ b/app/Captcha/Dto/ImageBody.php @@ -18,7 +18,7 @@ final readonly class ImageBody } /** - * @return Coordinators + * @return array */ public function getCoordinators(): array { -- 2.45.2 From 27046e66742d33658e0fa3d929cc55af0378c8eb Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 19 Sep 2023 14:27:33 +0600 Subject: [PATCH 73/90] Revived API /api/v1/captcha. Now a new captcha is created to check for a bot. --- app/Dto/HttpUserData.php | 27 ++++++ .../Api/V1/Captcha/CaptchaPublicToken.php | 25 +++++ app/Enums/CaptchaLogType.php | 8 ++ .../DataCaptchaRepositoryException.php | 8 ++ .../Controllers/Api/V1/CaptchaController.php | 7 +- .../Api/V1/Captcha/CaptchaRequest.php | 57 ++++++++++++ app/Http/Resources/Api/V1/Captcha.php | 14 ++- app/Models/Captcha.php | 37 ++++++++ app/Models/CaptchaLog.php | 37 ++++++++ app/Models/CaptchaToken.php | 6 ++ app/Providers/AppServiceProvider.php | 6 +- app/Repositories/CaptchaTokenRepository.php | 5 + app/Repositories/DataCaptchaRepository.php | 31 +++++++ .../Api/V1/CaptchaGenerateService/Captcha.php | 25 +++++ .../Api/V1/CaptchaService/Captcha.php | 22 ++--- .../Api/V1/CaptchaGenerateService.php | 89 ++++++++++++++++++ app/Services/Api/V1/CaptchaService.php | 91 ++++--------------- app/Services/Captcha/CaptchaHandler.php | 28 ++++++ app/Services/CaptchaLog/CaptchaLogHandler.php | 22 +++++ config/captcha.php | 1 + .../2023_08_27_163058_create_captcha.php | 44 +++++++++ public/swagger.json | 36 ++++++-- 22 files changed, 525 insertions(+), 101 deletions(-) create mode 100644 app/Dto/HttpUserData.php create mode 100644 app/Dto/Request/Api/V1/Captcha/CaptchaPublicToken.php create mode 100644 app/Enums/CaptchaLogType.php create mode 100644 app/Exceptions/Repositories/DataCaptchaRepositoryException.php create mode 100644 app/Http/Requests/Api/V1/Captcha/CaptchaRequest.php create mode 100644 app/Models/Captcha.php create mode 100644 app/Models/CaptchaLog.php create mode 100644 app/Repositories/DataCaptchaRepository.php create mode 100644 app/ServiceResults/Api/V1/CaptchaGenerateService/Captcha.php create mode 100644 app/Services/Api/V1/CaptchaGenerateService.php create mode 100644 app/Services/Captcha/CaptchaHandler.php create mode 100644 app/Services/CaptchaLog/CaptchaLogHandler.php create mode 100644 database/migrations/2023_08_27_163058_create_captcha.php diff --git a/app/Dto/HttpUserData.php b/app/Dto/HttpUserData.php new file mode 100644 index 0000000..0e2b977 --- /dev/null +++ b/app/Dto/HttpUserData.php @@ -0,0 +1,27 @@ +clientIp; + } + + public function getUserAgent(): ?string + { + return $this->userAgent; + } + + public function getReferer(): ?string + { + return $this->referer; + } +} diff --git a/app/Dto/Request/Api/V1/Captcha/CaptchaPublicToken.php b/app/Dto/Request/Api/V1/Captcha/CaptchaPublicToken.php new file mode 100644 index 0000000..26175f0 --- /dev/null +++ b/app/Dto/Request/Api/V1/Captcha/CaptchaPublicToken.php @@ -0,0 +1,25 @@ +captchaToken; + } + + public function getHttpUserData(): HttpUserData + { + return $this->httpUserData; + } +} diff --git a/app/Enums/CaptchaLogType.php b/app/Enums/CaptchaLogType.php new file mode 100644 index 0000000..34f2dc2 --- /dev/null +++ b/app/Enums/CaptchaLogType.php @@ -0,0 +1,8 @@ +captchaService->generate(); + $captchaPublicToken = $request->getDto(); + $expires = now()->addSeconds(config('captcha.waiting_for_captcha_verification_in_seconds')); + $result = $this->captchaService->createKeyWithCaptcha($captchaPublicToken, $expires); if (!$result->isSuccess()) { return response()->json($result->getData())->setStatusCode($result->getCode()); } diff --git a/app/Http/Requests/Api/V1/Captcha/CaptchaRequest.php b/app/Http/Requests/Api/V1/Captcha/CaptchaRequest.php new file mode 100644 index 0000000..fa8c7ca --- /dev/null +++ b/app/Http/Requests/Api/V1/Captcha/CaptchaRequest.php @@ -0,0 +1,57 @@ +hasHeader('public-token')) { + return false; + } + $captchaToken = $captchaTokenRepository->getCaptchaTokenByPublicToken($this->header('public-token')); + if (is_null($captchaToken)) { + return false; + } + + $this->captchaToken = $captchaToken; + + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + + ]; + } + + public function getDto(): CaptchaPublicToken + { + $httpUserData = new HttpUserData( + $this->getClientIp(), + $this->userAgent(), + $this->header('referer') + ); + + return new CaptchaPublicToken( + $this->captchaToken, + $httpUserData + ); + } +} diff --git a/app/Http/Resources/Api/V1/Captcha.php b/app/Http/Resources/Api/V1/Captcha.php index ef9cd4a..6bdf182 100644 --- a/app/Http/Resources/Api/V1/Captcha.php +++ b/app/Http/Resources/Api/V1/Captcha.php @@ -23,9 +23,17 @@ final class Captcha extends JsonResource public function toArray(Request $request): array { return [ - 'image_base64' => $this->resource->getImageBase64(), - 'image_text_base64' => $this->resource->getImageTextBase64(), - 'captcha_key' => $this->resource->getKey() + 'image_head' => [ + 'base64' => $this->resource->getImageHead()->getImageBase64(), + 'width' => $this->resource->getImageHead()->getWidth(), + 'height' => $this->resource->getImageHead()->getHeight(), + ], + 'image_body' => [ + 'base64' => $this->resource->getImageBody()->getImageBase64(), + 'width' => $this->resource->getImageBody()->getWidth(), + 'height' => $this->resource->getImageBody()->getHeight(), + ], + 'captcha_key' => $this->resource->getKey() ]; } } diff --git a/app/Models/Captcha.php b/app/Models/Captcha.php new file mode 100644 index 0000000..37ed7a9 --- /dev/null +++ b/app/Models/Captcha.php @@ -0,0 +1,37 @@ + + */ + protected $hidden = [ + 'uuid', + ]; + + public function captchaLogs(): HasMany + { + return $this->hasMany(CaptchaLog::class); + } +} diff --git a/app/Models/CaptchaLog.php b/app/Models/CaptchaLog.php new file mode 100644 index 0000000..1689454 --- /dev/null +++ b/app/Models/CaptchaLog.php @@ -0,0 +1,37 @@ + CaptchaLogType::class, + ]; +} diff --git a/app/Models/CaptchaToken.php b/app/Models/CaptchaToken.php index 71544be..b837307 100644 --- a/app/Models/CaptchaToken.php +++ b/app/Models/CaptchaToken.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; final class CaptchaToken extends Model @@ -30,4 +31,9 @@ final class CaptchaToken extends Model 'public_token', 'private_token', ]; + + public function captchas(): HasMany + { + return $this->hasMany(Captcha::class); + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index f9a56fd..7900e94 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -10,7 +10,7 @@ use App\Captcha\Images\Body; use App\Captcha\Images\Head; use App\Captcha\Images\ImageManager; use App\Captcha\Images\Lines; -use App\Services\Api\V1\CaptchaService; +use App\Services\Api\V1\CaptchaGenerateService; use App\Services\CaptchaToken\CaptchaTokenHandler; use App\Services\GenerateTokenCommand\GenerateTokenUlidCommand; use App\Services\GenerateTokenCommand\GenerateTokenUuidCommand; @@ -39,8 +39,8 @@ final class AppServiceProvider extends ServiceProvider return new CreateSearchInstanceCommand(Search::class); }); - $this->app->bind(CaptchaService::class, function (Application $app) { - return new CaptchaService( + $this->app->bind(CaptchaGenerateService::class, function (Application $app) { + return new CaptchaGenerateService( config: config('captcha', []), imageHead: $app->make(ImageHead::class), imageBody: $app->make(ImageBody::class) diff --git a/app/Repositories/CaptchaTokenRepository.php b/app/Repositories/CaptchaTokenRepository.php index d09f7ce..9328ee1 100644 --- a/app/Repositories/CaptchaTokenRepository.php +++ b/app/Repositories/CaptchaTokenRepository.php @@ -36,4 +36,9 @@ final readonly class CaptchaTokenRepository return $this->createSearchInstanceCommand->execute($query); } + + public function getCaptchaTokenByPublicToken(string $token): ?CaptchaToken + { + return CaptchaToken::query()->where('public_token', '=', $token)->first(); + } } diff --git a/app/Repositories/DataCaptchaRepository.php b/app/Repositories/DataCaptchaRepository.php new file mode 100644 index 0000000..464eaf8 --- /dev/null +++ b/app/Repositories/DataCaptchaRepository.php @@ -0,0 +1,31 @@ +generateTokenUlidCommand->execute() . '_' . time(); + $data = [ + 'id' => $captcha->id, + 'coordinators' => $coordinators + ]; + + if (!Cache::driver('redis')->add($key, $data, $expires) ) { + throw new DataCaptchaRepositoryException('Could not create cache for captcha: ' . $captcha->id . ' key: ' . $key); + } + + return $key; + } +} diff --git a/app/ServiceResults/Api/V1/CaptchaGenerateService/Captcha.php b/app/ServiceResults/Api/V1/CaptchaGenerateService/Captcha.php new file mode 100644 index 0000000..53ccc8b --- /dev/null +++ b/app/ServiceResults/Api/V1/CaptchaGenerateService/Captcha.php @@ -0,0 +1,25 @@ +imageHead; + } + + public function getImageBody(): ImageBody + { + return $this->imageBody; + } +} diff --git a/app/ServiceResults/Api/V1/CaptchaService/Captcha.php b/app/ServiceResults/Api/V1/CaptchaService/Captcha.php index 79edf7c..fba355d 100644 --- a/app/ServiceResults/Api/V1/CaptchaService/Captcha.php +++ b/app/ServiceResults/Api/V1/CaptchaService/Captcha.php @@ -2,35 +2,27 @@ namespace App\ServiceResults\Api\V1\CaptchaService; +use App\Captcha\Dto\Image; use App\ServiceResults\ServiceResult; final class Captcha extends ServiceResult { public function __construct( - private readonly string $imageBase64, - private readonly string $imageTextBase64, + private readonly Image $imageHead, + private readonly Image $imageBody, private readonly string $key ) { } - /** - * @return string - */ - public function getImageBase64(): string + public function getImageHead(): Image { - return $this->imageBase64; + return $this->imageHead; } - /** - * @return string - */ - public function getImageTextBase64(): string + public function getImageBody(): Image { - return $this->imageTextBase64; + return $this->imageBody; } - /** - * @return string - */ public function getKey(): string { return $this->key; diff --git a/app/Services/Api/V1/CaptchaGenerateService.php b/app/Services/Api/V1/CaptchaGenerateService.php new file mode 100644 index 0000000..e2fa96f --- /dev/null +++ b/app/Services/Api/V1/CaptchaGenerateService.php @@ -0,0 +1,89 @@ +config['types'] ?? []; + if (empty($types)) { + $error = __('No captcha type settings!'); + report($error); + return $this->errService($error); + } + + try { + $type = Arr::random($types); + + /** @var Type $captcha */ + $typeCaptcha = new $type['class']( + $type['params'] ?? [] + ); + $symbols = $typeCaptcha->getSymbols(); + + $imageHeadConfig = $this->makeImageHeadConfig($this->config['image_head'] ?? []); + $imageHead = $this->imageHead->processing($symbols, $imageHeadConfig); + unset($imageHeadConfig); + + $imageBodyConfig = $this->makeImageBodyConfig($this->config['image_body'] ?? []); + $imageBody = $this->imageBody->processing($symbols, $imageBodyConfig); + unset($imageBodyConfig); + } catch (\Throwable $e) { + report($e); + return $this->errService('Captcha service error!'); + } + + return new Captcha( + imageHead: $imageHead, + imageBody: $imageBody + ); + } + + private function makeImageHeadConfig(array $params): ImageHeadConfig + { + return new ImageHeadConfig( + backgrounds: $params['backgrounds'] ?? [], + fonts: $params['fonts'] ?? [], + fontColors: $params['font_colors'] ?? [], + width: $params['width'] ?? 150, + height: $params['height'] ?? 40, + textPaddingTop: $params['text_padding_top'] ?? 5, + textPaddingLeft: $params['text_padding_left'] ?? 10, + angle: $params['angle'] ?? 20, + numberLines: $params['number_lines'] ?? 3, + lineColors: $params['line_colors'] ?? [] + ); + } + + private function makeImageBodyConfig(array $params): ImageBodyConfig + { + return new ImageBodyConfig( + backgrounds: $params['backgrounds'] ?? [], + fonts: $params['fonts'] ?? [], + fontColors: $params['font_colors'] ?? [], + width: $params['width'] ?? 300, + height: $params['height'] ?? 240, + angle: $params['angle'] ?? 20, + fontSize: $params['font_size'] ?? [20, 50], + numberLines: $params['number_lines'] ?? 3, + lineColors: $params['line_colors'] ?? [] + ); + } +} diff --git a/app/Services/Api/V1/CaptchaService.php b/app/Services/Api/V1/CaptchaService.php index 33553d2..008e41a 100644 --- a/app/Services/Api/V1/CaptchaService.php +++ b/app/Services/Api/V1/CaptchaService.php @@ -2,96 +2,45 @@ namespace App\Services\Api\V1; -use App\Captcha\Contracts\ImageBody; -use App\Captcha\Contracts\ImageHead; -use App\Captcha\Contracts\Type; +use App\Dto\Request\Api\V1\Captcha\CaptchaPublicToken; +use App\Repositories\DataCaptchaRepository; use App\ServiceResults\Api\V1\CaptchaService\Captcha; use App\ServiceResults\ServiceResultError; +use App\Services\Captcha\CaptchaHandler; use App\Services\Service; -use Illuminate\Support\Arr; -use App\Captcha\Config\ImageHead as ImageHeadConfig; -use App\Captcha\Config\ImageBody as ImageBodyConfig; +use Carbon\Carbon; +use Illuminate\Support\Facades\DB; final class CaptchaService extends Service { public function __construct( - private readonly array $config, - private readonly ImageHead $imageHead, - private readonly ImageBody $imageBody + private readonly CaptchaGenerateService $captchaGenerateService, + private readonly CaptchaHandler $captchaHandler, + private readonly DataCaptchaRepository $dataCaptchaRepository, ) { } - public function generate(): ServiceResultError | Captcha + public function createKeyWithCaptcha(CaptchaPublicToken $captchaPublicToken, Carbon $expires): ServiceResultError | Captcha { - $types = $this->config['types'] ?? []; - if (empty($types)) { - $error = __('No captcha type settings!'); - report($error); - return $this->errService($error); - } - try { - $type = Arr::random($types); + $captcha = $this->captchaGenerateService->generate(); + if ($captcha->isError()) { + return $captcha; + } - /** @var Type $captcha */ - $typeCaptcha = new $type['class']( - $type['params'] ?? [] - ); - $symbols = $typeCaptcha->getSymbols(); + $modelCaptcha = DB::transaction(function () use ($captchaPublicToken) { + return $this->captchaHandler->handleStore($captchaPublicToken->getCaptchaToken(), $captchaPublicToken->getHttpUserData()); + }); - $imageHeadConfig = $this->makeImageHeadConfig($this->config['image_head'] ?? []); - $imageHead = $this->imageHead->processing($symbols, $imageHeadConfig); - unset($imageHeadConfig); - - $imageBodyConfig = $this->makeImageBodyConfig($this->config['image_body'] ?? []); - $imageBody = $this->imageBody->processing($symbols, $imageBodyConfig); - unset($imageBodyConfig); - - - dd($imageHead, $imageBody); + $captchaKey = $this->dataCaptchaRepository->store($modelCaptcha, $captcha->getImageBody()->getCoordinators(), $expires); } catch (\Throwable $e) { report($e); return $this->errService('Captcha service error!'); } - - - - return new Captcha( - imageBase64: $imageHead->getImage()->getImageBase64(), - imageTextBase64: $imageBody->getImage()->getImageBase64(), - key: 'dddd' - ); - } - - private function makeImageHeadConfig(array $params): ImageHeadConfig - { - return new ImageHeadConfig( - backgrounds: $params['backgrounds'] ?? [], - fonts: $params['fonts'] ?? [], - fontColors: $params['font_colors'] ?? [], - width: $params['width'] ?? 150, - height: $params['height'] ?? 40, - textPaddingTop: $params['text_padding_top'] ?? 5, - textPaddingLeft: $params['text_padding_left'] ?? 10, - angle: $params['angle'] ?? 20, - numberLines: $params['number_lines'] ?? 3, - lineColors: $params['line_colors'] ?? [] - ); - } - - private function makeImageBodyConfig(array $params): ImageBodyConfig - { - return new ImageBodyConfig( - backgrounds: $params['backgrounds'] ?? [], - fonts: $params['fonts'] ?? [], - fontColors: $params['font_colors'] ?? [], - width: $params['width'] ?? 300, - height: $params['height'] ?? 240, - angle: $params['angle'] ?? 20, - fontSize: $params['font_size'] ?? [20, 50], - numberLines: $params['number_lines'] ?? 3, - lineColors: $params['line_colors'] ?? [] + imageHead: $captcha->getImageHead()->getImage(), + imageBody: $captcha->getImageBody()->getImage(), + key: $captchaKey ); } } diff --git a/app/Services/Captcha/CaptchaHandler.php b/app/Services/Captcha/CaptchaHandler.php new file mode 100644 index 0000000..12fd273 --- /dev/null +++ b/app/Services/Captcha/CaptchaHandler.php @@ -0,0 +1,28 @@ +captchas()->create([ + 'uuid' => $this->uuidCommand->unique($captchaToken->captchas()->getQuery(), 'uuid') + ]); + $this->captchaLogHandler->handleStore($captcha, CaptchaLogType::Created, $httpUserData); + + return $captcha; + } +} diff --git a/app/Services/CaptchaLog/CaptchaLogHandler.php b/app/Services/CaptchaLog/CaptchaLogHandler.php new file mode 100644 index 0000000..c0cc2cf --- /dev/null +++ b/app/Services/CaptchaLog/CaptchaLogHandler.php @@ -0,0 +1,22 @@ +captchaLogs()->create([ + 'type' => $captchaLogType, + 'ip' => $httpUserData->getClientIp(), + 'user_agent' => Str::limit($httpUserData->getUserAgent(), 255, ''), + 'referer' => Str::limit($httpUserData->getReferer(), 10000, ''), + ]); + } +} diff --git a/config/captcha.php b/config/captcha.php index 8c45fa3..162db3d 100644 --- a/config/captcha.php +++ b/config/captcha.php @@ -1,6 +1,7 @@ env('WAITING_FOR_CAPTCHA_VERIFICATION_IN_SECONDS', 900), 'imageClass' => \App\Captcha\Images\Image::class, 'types' => [ 'string' => [ diff --git a/database/migrations/2023_08_27_163058_create_captcha.php b/database/migrations/2023_08_27_163058_create_captcha.php new file mode 100644 index 0000000..ed62bc4 --- /dev/null +++ b/database/migrations/2023_08_27_163058_create_captcha.php @@ -0,0 +1,44 @@ +id(); + $table->uuid('uuid'); + $table->unsignedBigInteger('captcha_token_id')->index(); + $table->foreign('captcha_token_id')->references('id')->on('captcha_tokens'); + $table->timestamps(); + $table->index('created_at'); + $table->unique(['uuid', 'captcha_token_id']); + }); + Schema::create('captcha_logs', function (Blueprint $table) { + $table->id(); + $table->unsignedBigInteger('captcha_id')->index(); + $table->foreign('captcha_id')->references('id')->on('captchas'); + $table->unsignedInteger('type')->index(); + $table->ipAddress('ip')->nullable(); + $table->string('user_agent')->nullable(); + $table->text('referer')->nullable(); + $table->timestamp('created_at')->index(); + $table->index(['captcha_id', 'type']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('captcha_logs'); + Schema::dropIfExists('captchas'); + } +}; diff --git a/public/swagger.json b/public/swagger.json index 760f09c..6d41a88 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -157,20 +157,42 @@ "Captcha": { "type": "object", "properties": { - "image_base64": { - "type": "string", - "format": "byte" + "image_head": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Image", + } }, - "image_text_base64": { - "type": "string", - "format": "byte" + "image_body": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Image" + } }, "captcha_key": { "type": "string" } }, "required": [ - "image_base64", "image_text_base64", "captcha_key" + "image_head", "image_body", "captcha_key" + ] + }, + "Image": { + "type": "object", + "properties": { + "base64": { + "type": "string", + "format": "byte" + }, + "width": { + "type": "integer" + }, + "height": { + "type": "integer" + } + }, + "required": [ + "base64", "width", "height" ] }, "CaptchaVerification": { -- 2.45.2 From c3e4c68a41866ea372a6b35f8acf54625202682b Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 19 Sep 2023 14:29:01 +0600 Subject: [PATCH 74/90] Add CryptographyContract and its implementation Added a new CryptographyContract interface and CryptographyString class that implements this contract. The CryptographyContract encapsulates the encryption and decryption of strings, enforcing these operations to be standardized across the application. The CryptographyString class uses Laravel's native crypt facades to perform these actions. In the AppServiceProvider, CryptographyContract is now bound to CryptographyString class, allowing the container to automatically resolve the dependencies wherever the interface is type hinted. --- app/Contracts/CryptographyContract.php | 9 +++++++++ app/Providers/AppServiceProvider.php | 4 ++++ app/Services/CryptographyString.php | 19 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 app/Contracts/CryptographyContract.php create mode 100644 app/Services/CryptographyString.php diff --git a/app/Contracts/CryptographyContract.php b/app/Contracts/CryptographyContract.php new file mode 100644 index 0000000..90f5e8a --- /dev/null +++ b/app/Contracts/CryptographyContract.php @@ -0,0 +1,9 @@ +app->bind(ImageBody::class, Body::class); $this->app->bind(ImageLines::class, Lines::class); + $this->app->bind(CryptographyContract::class, CryptographyString::class); + $this->app->bind(CreateSearchInstanceCommand::class, function () { return new CreateSearchInstanceCommand(Search::class); }); diff --git a/app/Services/CryptographyString.php b/app/Services/CryptographyString.php new file mode 100644 index 0000000..b5febf6 --- /dev/null +++ b/app/Services/CryptographyString.php @@ -0,0 +1,19 @@ + Date: Tue, 19 Sep 2023 15:19:48 +0600 Subject: [PATCH 75/90] Add CaptchaToken to permissions language files This commit adds 'CaptchaToken' key to both English and Russian versions of the permissions language files. The addition of the 'CaptchaToken' key was necessary to provide translations for tokens used in captcha creation. The lack of these labels was causing readability issues in UI. --- lang/en/permissions.php | 1 + lang/ru/permissions.php | 1 + 2 files changed, 2 insertions(+) diff --git a/lang/en/permissions.php b/lang/en/permissions.php index 2029569..df5b906 100644 --- a/lang/en/permissions.php +++ b/lang/en/permissions.php @@ -3,6 +3,7 @@ return [ 'Role' => 'User group', 'User' => 'Users', + 'CaptchaToken' => 'Tokens for creating captcha', 'Allowed to watch' => 'Allowed to watch', 'Allowed to create' => 'Allowed to create', 'Allowed to edit' => 'Allowed to edit', diff --git a/lang/ru/permissions.php b/lang/ru/permissions.php index a64c97f..ccd21bb 100644 --- a/lang/ru/permissions.php +++ b/lang/ru/permissions.php @@ -3,6 +3,7 @@ return [ 'Role' => 'Группа пользователей', 'User' => 'Пользователи', + 'CaptchaToken' => 'Токены для создания капчи', 'Allowed to watch' => 'Разрешено смотреть', 'Allowed to create' => 'Разрешено создать', 'Allowed to edit' => 'Разрешено редактировать', -- 2.45.2 From 17fcc6e9762824666671fefb6a10d3247e2ff6b7 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 19 Sep 2023 17:26:26 +0600 Subject: [PATCH 76/90] Removed unnecessary copying in Docker for development. --- docker/dev/php/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/dev/php/Dockerfile b/docker/dev/php/Dockerfile index 83273c2..f30b0b2 100644 --- a/docker/dev/php/Dockerfile +++ b/docker/dev/php/Dockerfile @@ -72,10 +72,10 @@ RUN groupadd -g 1000 www RUN useradd -u 1000 -ms /bin/bash -g www www # Copy existing application directory contents -COPY . /var/www +#COPY . /var/www # Copy existing application directory permissions -COPY --chown=www:www . /var/www +#COPY --chown=www:www . /var/www # Change current user to www USER www -- 2.45.2 From 18899c81f277e4efaccc310e874a77eaaabb8e5b Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Thu, 23 Nov 2023 00:26:47 +0600 Subject: [PATCH 77/90] Increase captcha image dimensions The dimensions for both the 'image_head' and 'image_body' captcha images have been increased to provide a clearer and more readable captcha for users. 'Image_head' has been updated from 150x40 to 500x75, and 'image_body' from 300x240 to 500x500. --- config/captcha.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/captcha.php b/config/captcha.php index 162db3d..a640364 100644 --- a/config/captcha.php +++ b/config/captcha.php @@ -28,8 +28,8 @@ return [ ], ], 'image_head' => [ - 'width' => 150, - 'height' => 40, + 'width' => 500, + 'height' => 75, 'text_padding_top' => 5, 'text_padding_left' => 10, 'backgrounds' => [ @@ -86,8 +86,8 @@ return [ 'line_colors' => [], ], 'image_body' => [ - 'width' => 300, - 'height' => 240, + 'width' => 500, + 'height' => 500, 'backgrounds' => [ resource_path('captcha/backgrounds-body/1.jpg'), resource_path('captcha/backgrounds-body/2.jpg'), -- 2.45.2 From 520a3ba068982ada7bcf6b123ecc0203ac695df7 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 26 Nov 2023 15:09:42 +0600 Subject: [PATCH 78/90] Revived API POST /api/v1/captcha. Captcha validation has been adjusted. --- .../DataCaptchaRepository/DataCaptcha.php | 21 ++++++ .../Request/Api/V1/Captcha/CheckingDto.php | 29 ++++++++ app/Enums/CaptchaLogType.php | 2 + .../Controllers/Api/V1/CaptchaController.php | 14 ++++ .../Api/V1/Captcha/CheckingRequest.php | 68 +++++++++++++++++++ app/Http/Resources/Api/V1/CaptchaVerified.php | 28 ++++++++ app/Models/CaptchaLog.php | 1 + app/Providers/RouteServiceProvider.php | 5 ++ app/Repositories/CaptchaLogRepository.php | 20 ++++++ app/Repositories/CaptchaRepository.php | 13 ++++ app/Repositories/DataCaptchaRepository.php | 19 ++++++ .../CaptchaService/CaptchaVerifiedResult.php | 17 +++++ app/Services/Api/V1/CaptchaService.php | 47 +++++++++++++ app/Services/Captcha/CaptchaHandler.php | 2 +- app/Services/Captcha/CheckingCommand.php | 53 +++++++++++++++ app/Services/CaptchaLog/CaptchaLogHandler.php | 19 ++++-- config/captcha.php | 1 + lang/en.json | 5 +- lang/ru.json | 5 +- public/swagger.json | 7 +- routes/api-v1.php | 1 + 21 files changed, 365 insertions(+), 12 deletions(-) create mode 100644 app/Dto/Repository/DataCaptchaRepository/DataCaptcha.php create mode 100644 app/Dto/Request/Api/V1/Captcha/CheckingDto.php create mode 100644 app/Http/Requests/Api/V1/Captcha/CheckingRequest.php create mode 100644 app/Http/Resources/Api/V1/CaptchaVerified.php create mode 100644 app/Repositories/CaptchaLogRepository.php create mode 100644 app/Repositories/CaptchaRepository.php create mode 100644 app/ServiceResults/Api/V1/CaptchaService/CaptchaVerifiedResult.php create mode 100644 app/Services/Captcha/CheckingCommand.php diff --git a/app/Dto/Repository/DataCaptchaRepository/DataCaptcha.php b/app/Dto/Repository/DataCaptchaRepository/DataCaptcha.php new file mode 100644 index 0000000..8007dd8 --- /dev/null +++ b/app/Dto/Repository/DataCaptchaRepository/DataCaptcha.php @@ -0,0 +1,21 @@ +captchaId; + } + + public function getCoordinators(): array + { + return $this->coordinators; + } +} diff --git a/app/Dto/Request/Api/V1/Captcha/CheckingDto.php b/app/Dto/Request/Api/V1/Captcha/CheckingDto.php new file mode 100644 index 0000000..81b31d9 --- /dev/null +++ b/app/Dto/Request/Api/V1/Captcha/CheckingDto.php @@ -0,0 +1,29 @@ +captchaPublicToken; + } + + public function getCaptchaKey(): string + { + return $this->captchaKey; + } + + public function getCoordinators(): array + { + return $this->coordinators; + } +} diff --git a/app/Enums/CaptchaLogType.php b/app/Enums/CaptchaLogType.php index 34f2dc2..6ccfefc 100644 --- a/app/Enums/CaptchaLogType.php +++ b/app/Enums/CaptchaLogType.php @@ -5,4 +5,6 @@ namespace App\Enums; enum CaptchaLogType: int { case Created = 1; + case Error = 2; + case Verified = 3; } diff --git a/app/Http/Controllers/Api/V1/CaptchaController.php b/app/Http/Controllers/Api/V1/CaptchaController.php index 989c759..070a06c 100644 --- a/app/Http/Controllers/Api/V1/CaptchaController.php +++ b/app/Http/Controllers/Api/V1/CaptchaController.php @@ -3,7 +3,9 @@ namespace App\Http\Controllers\Api\V1; use App\Http\Requests\Api\V1\Captcha\CaptchaRequest; +use App\Http\Requests\Api\V1\Captcha\CheckingRequest; use App\Http\Resources\Api\V1\Captcha; +use App\Http\Resources\Api\V1\CaptchaVerified; use App\Services\Api\V1\CaptchaService; use Illuminate\Http\JsonResponse; @@ -24,4 +26,16 @@ final class CaptchaController extends Controller return response()->json(new Captcha($result)); } + + public function checking(CheckingRequest $request): JsonResponse + { + $maxCountError = config('captcha.validate_max_count_errors'); + $params = $request->getDto(); + $result = $this->captchaService->checking($params, $maxCountError); + if (!$result->isSuccess()) { + return response()->json($result->getData())->setStatusCode($result->getCode()); + } + + return response()->json(new CaptchaVerified($result)); + } } diff --git a/app/Http/Requests/Api/V1/Captcha/CheckingRequest.php b/app/Http/Requests/Api/V1/Captcha/CheckingRequest.php new file mode 100644 index 0000000..5601d60 --- /dev/null +++ b/app/Http/Requests/Api/V1/Captcha/CheckingRequest.php @@ -0,0 +1,68 @@ +hasHeader('public-token')) { + return false; + } + $captchaToken = $captchaTokenRepository->getCaptchaTokenByPublicToken($this->header('public-token')); + if (is_null($captchaToken)) { + return false; + } + + $this->captchaToken = $captchaToken; + + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'captcha_key' => ['required', 'string', 'max:75'], + 'verification' => ['required', 'array'], + 'verification.*' => ['required', 'array', 'size:2'], + 'verification.*.x' => ['required', 'numeric', 'min:0'], + 'verification.*.y' => ['required', 'numeric', 'min:0'], + ]; + } + + public function getDto(): CheckingDto + { + $httpUserData = new HttpUserData( + $this->getClientIp(), + $this->userAgent(), + $this->header('referer') + ); + + $captchaPublicToken = new CaptchaPublicToken( + $this->captchaToken, + $httpUserData + ); + + return new CheckingDto( + captchaPublicToken: $captchaPublicToken, + captchaKey: $this->input('captcha_key'), + coordinators: $this->input('verification'), + ); + } +} diff --git a/app/Http/Resources/Api/V1/CaptchaVerified.php b/app/Http/Resources/Api/V1/CaptchaVerified.php new file mode 100644 index 0000000..febee6d --- /dev/null +++ b/app/Http/Resources/Api/V1/CaptchaVerified.php @@ -0,0 +1,28 @@ + $this->resource->getKey() + ]; + } +} diff --git a/app/Models/CaptchaLog.php b/app/Models/CaptchaLog.php index 1689454..a2f564b 100644 --- a/app/Models/CaptchaLog.php +++ b/app/Models/CaptchaLog.php @@ -20,6 +20,7 @@ final class CaptchaLog extends Model * @var array */ protected $fillable = [ + 'captcha_id', 'type', 'ip', 'user_agent', diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index f953b4c..284cff4 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -50,5 +50,10 @@ class RouteServiceProvider extends ServiceProvider Limit::perHour(config('rate_limiting.login_max_email_request', 10))->by($request->getClientIp() . '-' . $request->input('email')), ]; }); + RateLimiter::for('captcha-checking', function (Request $request) { + return [ + Limit::perMinute(config('captcha.validate_max_count_errors', 5))->by($request->input('captcha_key', null)), + ]; + }); } } diff --git a/app/Repositories/CaptchaLogRepository.php b/app/Repositories/CaptchaLogRepository.php new file mode 100644 index 0000000..6be864d --- /dev/null +++ b/app/Repositories/CaptchaLogRepository.php @@ -0,0 +1,20 @@ +when($captchaId, function (Builder $query, int $captchaId) { + $query->where('id', $captchaId); + }) + ->where('type', '=', $type) + ->count(); + } +} diff --git a/app/Repositories/CaptchaRepository.php b/app/Repositories/CaptchaRepository.php new file mode 100644 index 0000000..18f6184 --- /dev/null +++ b/app/Repositories/CaptchaRepository.php @@ -0,0 +1,13 @@ +where('id', $id)->first(); + } +} diff --git a/app/Repositories/DataCaptchaRepository.php b/app/Repositories/DataCaptchaRepository.php index 464eaf8..570d362 100644 --- a/app/Repositories/DataCaptchaRepository.php +++ b/app/Repositories/DataCaptchaRepository.php @@ -2,6 +2,7 @@ namespace App\Repositories; +use App\Dto\Repository\DataCaptchaRepository\DataCaptcha; use App\Exceptions\Repositories\DataCaptchaRepositoryException; use App\Models\Captcha; use App\Services\GenerateTokenCommand\GenerateTokenUlidCommand; @@ -28,4 +29,22 @@ final readonly class DataCaptchaRepository return $key; } + + public function getByKey(string $key): ?DataCaptcha + { + $dataCaptcha = Cache::driver('redis')->get($key); + if (is_null($dataCaptcha)) { + return null; + } + + return new DataCaptcha( + captchaId: $dataCaptcha['id'], + coordinators: $dataCaptcha['coordinators'], + ); + } + + public function destroy(string $key): void + { + Cache::driver('redis')->delete($key); + } } diff --git a/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerifiedResult.php b/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerifiedResult.php new file mode 100644 index 0000000..de9d62c --- /dev/null +++ b/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerifiedResult.php @@ -0,0 +1,17 @@ +key; + } +} diff --git a/app/Services/Api/V1/CaptchaService.php b/app/Services/Api/V1/CaptchaService.php index 008e41a..a64172a 100644 --- a/app/Services/Api/V1/CaptchaService.php +++ b/app/Services/Api/V1/CaptchaService.php @@ -3,10 +3,17 @@ namespace App\Services\Api\V1; use App\Dto\Request\Api\V1\Captcha\CaptchaPublicToken; +use App\Dto\Request\Api\V1\Captcha\CheckingDto; +use App\Enums\CaptchaLogType; +use App\Repositories\CaptchaLogRepository; +use App\Repositories\CaptchaRepository; use App\Repositories\DataCaptchaRepository; use App\ServiceResults\Api\V1\CaptchaService\Captcha; +use App\ServiceResults\Api\V1\CaptchaService\CaptchaVerifiedResult; use App\ServiceResults\ServiceResultError; use App\Services\Captcha\CaptchaHandler; +use App\Services\Captcha\CheckingCommand; +use App\Services\CaptchaLog\CaptchaLogHandler; use App\Services\Service; use Carbon\Carbon; use Illuminate\Support\Facades\DB; @@ -16,7 +23,11 @@ final class CaptchaService extends Service public function __construct( private readonly CaptchaGenerateService $captchaGenerateService, private readonly CaptchaHandler $captchaHandler, + private readonly CaptchaLogHandler $captchaLogHandler, private readonly DataCaptchaRepository $dataCaptchaRepository, + private readonly CaptchaLogRepository $captchaLogRepository, + private readonly CaptchaRepository $captchaRepository, + private readonly CheckingCommand $checkingCommand, ) { } public function createKeyWithCaptcha(CaptchaPublicToken $captchaPublicToken, Carbon $expires): ServiceResultError | Captcha @@ -43,4 +54,40 @@ final class CaptchaService extends Service key: $captchaKey ); } + + public function checking(CheckingDto $checkingDto, int $maxCountError): ServiceResultError | CaptchaVerifiedResult + { + try { + $captchaData = $this->dataCaptchaRepository->getByKey($checkingDto->getCaptchaKey()); + if (is_null($captchaData)) { + return $this->errValidate(__('Captcha not found or verification period has expired. Please try to refresh the captcha.')); + } + if (!$this->checkingCommand->execute($captchaData->getCoordinators(), $checkingDto->getCoordinators())) { + $this->captchaLogHandler->handleStore($captchaData->getCaptchaId(), CaptchaLogType::Error, $checkingDto->getCaptchaPublicToken()->getHttpUserData()); + return $this->errValidate(__('CAPTCHA validation failed. Please try again.')); + } + $result = DB::transaction(function () use ($checkingDto, $captchaData, $maxCountError) { + $errorCount = $this->captchaLogRepository->countByType(CaptchaLogType::Error, $captchaData->getCaptchaId()); + if ($errorCount > $maxCountError) { + $this->dataCaptchaRepository->destroy($checkingDto->getCaptchaKey()); + return $this->errValidate(__('You have exceeded the number of attempts. Please refresh the captcha.')); + } + + $this->captchaLogHandler->handleStore($captchaData->getCaptchaId(), CaptchaLogType::Verified, $checkingDto->getCaptchaPublicToken()->getHttpUserData()); + $this->dataCaptchaRepository->destroy($checkingDto->getCaptchaKey()); + + $modelCaptcha = $this->captchaRepository->getCaptchaById($captchaData->getCaptchaId()); + if (is_null($modelCaptcha)) { + return $this->errValidate(__('Captcha not found or verification period has expired. Please try to refresh the captcha.')); + } + + return new CaptchaVerifiedResult(key: $modelCaptcha->uuid); + }); + } catch (\Throwable $e) { + report($e); + return $this->errService('Captcha service error!'); + } + + return $result; + } } diff --git a/app/Services/Captcha/CaptchaHandler.php b/app/Services/Captcha/CaptchaHandler.php index 12fd273..43aa1ce 100644 --- a/app/Services/Captcha/CaptchaHandler.php +++ b/app/Services/Captcha/CaptchaHandler.php @@ -21,7 +21,7 @@ final readonly class CaptchaHandler $captcha = $captchaToken->captchas()->create([ 'uuid' => $this->uuidCommand->unique($captchaToken->captchas()->getQuery(), 'uuid') ]); - $this->captchaLogHandler->handleStore($captcha, CaptchaLogType::Created, $httpUserData); + $this->captchaLogHandler->handleStore($captcha->id, CaptchaLogType::Created, $httpUserData); return $captcha; } diff --git a/app/Services/Captcha/CheckingCommand.php b/app/Services/Captcha/CheckingCommand.php new file mode 100644 index 0000000..286db18 --- /dev/null +++ b/app/Services/Captcha/CheckingCommand.php @@ -0,0 +1,53 @@ + $coordinators) { + /** + * @var Coordinators $coordinators + */ + + if (empty($userCoordinators[$index]) || !isset($userCoordinators[$index]['x']) || !isset($userCoordinators[$index]['y'])) { + return false; + } + + if (!$this->isInside($coordinators, $userCoordinators[$index])) { + return false; + } + } + + return true; + } + + private function isInside(Coordinators $captchaCoordinators, array $userCoordinators): bool + { + $xMin = min($captchaCoordinators->getX1(), $captchaCoordinators->getX2(), $captchaCoordinators->getX3(), $captchaCoordinators->getX4()); + $xMax = max($captchaCoordinators->getX1(), $captchaCoordinators->getX2(), $captchaCoordinators->getX3(), $captchaCoordinators->getX4()); + + $yMin = min($captchaCoordinators->getY1(), $captchaCoordinators->getY2(), $captchaCoordinators->getY3(), $captchaCoordinators->getY4()); + $yMax = max($captchaCoordinators->getY1(), $captchaCoordinators->getY2(), $captchaCoordinators->getY3(), $captchaCoordinators->getY4()); + + if ( + $xMin > $userCoordinators['x'] + || $xMax < $userCoordinators['x'] + || $yMin > $userCoordinators['y'] + || $yMax < $userCoordinators['y'] + ) { + return false; + } + + return true; + } +} diff --git a/app/Services/CaptchaLog/CaptchaLogHandler.php b/app/Services/CaptchaLog/CaptchaLogHandler.php index c0cc2cf..bba2f51 100644 --- a/app/Services/CaptchaLog/CaptchaLogHandler.php +++ b/app/Services/CaptchaLog/CaptchaLogHandler.php @@ -10,13 +10,24 @@ use Illuminate\Support\Str; final readonly class CaptchaLogHandler { - public function handleStore(Captcha $captcha, CaptchaLogType $captchaLogType, HttpUserData $httpUserData): CaptchaLog + public function handleStore(int $captchaId, CaptchaLogType $captchaLogType, HttpUserData $httpUserData): CaptchaLog { - return $captcha->captchaLogs()->create([ + $userAgent = $httpUserData->getUserAgent(); + if (!is_null($userAgent)) { + $userAgent = Str::limit($userAgent, 255, ''); + } + + $referer = $httpUserData->getReferer(); + if (!is_null($referer)) { + $referer = Str::limit($referer, 10000, ''); + } + + return CaptchaLog::create([ + 'captcha_id' => $captchaId, 'type' => $captchaLogType, 'ip' => $httpUserData->getClientIp(), - 'user_agent' => Str::limit($httpUserData->getUserAgent(), 255, ''), - 'referer' => Str::limit($httpUserData->getReferer(), 10000, ''), + 'user_agent' => $userAgent, + 'referer' => $referer, ]); } } diff --git a/config/captcha.php b/config/captcha.php index a640364..4943a2f 100644 --- a/config/captcha.php +++ b/config/captcha.php @@ -2,6 +2,7 @@ return [ 'waiting_for_captcha_verification_in_seconds' => env('WAITING_FOR_CAPTCHA_VERIFICATION_IN_SECONDS', 900), + 'validate_max_count_errors' => env('CAPTCHA_VALIDATE_MAX_COUNT_ERRORS', 3), 'imageClass' => \App\Captcha\Images\Image::class, 'types' => [ 'string' => [ diff --git a/lang/en.json b/lang/en.json index c9cf9e4..25d656a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -62,5 +62,8 @@ "Captcha token created successfully": "Captcha token created successfully", "Captcha token updated successfully": "Captcha token updated successfully", "The captcha token has been removed": "The captcha token has been removed", - "Failed to generate token.": "Failed to generate token." + "Failed to generate token.": "Failed to generate token.", + "Captcha not found or verification period has expired. Please try to refresh the captcha.": "Captcha not found or verification period has expired. Please try to refresh the captcha.", + "CAPTCHA validation failed. Please try again.": "CAPTCHA validation failed. Please try again.", + "You have exceeded the number of attempts. Please refresh the captcha.": "You have exceeded the number of attempts. Please refresh the captcha." } diff --git a/lang/ru.json b/lang/ru.json index 81b8482..6a9f7ad 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -62,5 +62,8 @@ "Captcha token created successfully": "Токен капчи успешно создан", "Captcha token updated successfully": "Токен капчи успешно обновлен", "The captcha token has been removed": "Токен капчи был удален", - "Failed to generate token.": "Не удалось сгенерировать токен." + "Failed to generate token.": "Не удалось сгенерировать токен.", + "Captcha not found or verification period has expired. Please try to refresh the captcha.": "Капча не найдена или истёк срок проверки. По пробуйтн обновить капчу.", + "CAPTCHA validation failed. Please try again.": "Не удалось пройти проверку CAPTCHA. Пожалуйста, попробуйте еще раз.", + "You have exceeded the number of attempts. Please refresh the captcha.": "Вы превысили количество попыток. Обновите каптчу." } diff --git a/public/swagger.json b/public/swagger.json index 6d41a88..0b2aad4 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -198,15 +198,12 @@ "CaptchaVerification": { "type": "object", "properties": { - "status": { - "type": "boolean" - }, - "message": { + "captcha_key": { "type": "string" } }, "required": [ - "status", "message" + "captcha_key" ] }, "CaptchaChecking": { diff --git a/routes/api-v1.php b/routes/api-v1.php index a6295b9..fcbfb6b 100644 --- a/routes/api-v1.php +++ b/routes/api-v1.php @@ -15,3 +15,4 @@ use Illuminate\Support\Facades\Route; */ Route::get('/captcha', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'getCaptcha']); +Route::middleware(['throttle:captcha-checking'])->post('/captcha', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'checking']); -- 2.45.2 From 10425db5e016c7062fad6d6ea77468c61f1e94a6 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 26 Nov 2023 15:25:36 +0600 Subject: [PATCH 79/90] Fixed a bug where two identical symbols appeared in a captcha. The commit fixes an issue where wrong variable was passed as second argument to randomSymbols method. Previously it was using an uninitialized variable 'fakes' which was supposed to be populated by 'success' variable. The 'success' variable already has the set of valid symbols which should be used to generate fake symbols for captcha. --- app/Captcha/Types/StringType.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Captcha/Types/StringType.php b/app/Captcha/Types/StringType.php index 121993a..a69c1cd 100644 --- a/app/Captcha/Types/StringType.php +++ b/app/Captcha/Types/StringType.php @@ -19,7 +19,7 @@ final class StringType extends Type $success = $this->randomSymbols($lengthSymbols); $fakes = []; if (!empty($lengthFakeSymbols)) { - $fakes = $this->randomSymbols($lengthFakeSymbols, $fakes); + $fakes = $this->randomSymbols($lengthFakeSymbols, $success); } return new Symbols( -- 2.45.2 From 9221e089dd86afc75a8622f27917c0a4b509c012 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 26 Nov 2023 22:42:22 +0600 Subject: [PATCH 80/90] Revived API POST /captcha/{captcha_uuid}. Receiving captcha information for validation. --- .../V1/Captcha/VerificationInformationDto.php | 31 ++++++++++ app/Enums/CaptchaLogType.php | 1 + .../Controllers/Api/V1/CaptchaController.php | 16 +++++ .../VerificationInformationRequest.php | 58 +++++++++++++++++++ .../Api/V1/CaptchaVerificationInformation.php | 30 ++++++++++ app/Models/CaptchaLog.php | 6 ++ app/Providers/RouteServiceProvider.php | 7 ++- app/Repositories/CaptchaLogRepository.php | 17 +++++- app/Repositories/CaptchaRepository.php | 6 ++ app/Repositories/CaptchaTokenRepository.php | 5 ++ .../CaptchaVerificationInformationResult.php | 23 ++++++++ app/Services/Api/V1/CaptchaService.php | 53 +++++++++++++++++ config/captcha.php | 2 + lang/en.json | 8 ++- lang/ru.json | 8 ++- public/swagger.json | 22 ++++++- routes/api-v1.php | 2 + 17 files changed, 290 insertions(+), 5 deletions(-) create mode 100644 app/Dto/Request/Api/V1/Captcha/VerificationInformationDto.php create mode 100644 app/Http/Requests/Api/V1/Captcha/VerificationInformationRequest.php create mode 100644 app/Http/Resources/Api/V1/CaptchaVerificationInformation.php create mode 100644 app/ServiceResults/Api/V1/CaptchaService/CaptchaVerificationInformationResult.php diff --git a/app/Dto/Request/Api/V1/Captcha/VerificationInformationDto.php b/app/Dto/Request/Api/V1/Captcha/VerificationInformationDto.php new file mode 100644 index 0000000..d39a1fc --- /dev/null +++ b/app/Dto/Request/Api/V1/Captcha/VerificationInformationDto.php @@ -0,0 +1,31 @@ +captchaToken; + } + + public function getUserAgent(): ?string + { + return $this->userAgent; + } + + public function getHttpUserData(): HttpUserData + { + return $this->httpUserData; + } +} diff --git a/app/Enums/CaptchaLogType.php b/app/Enums/CaptchaLogType.php index 6ccfefc..8d9147d 100644 --- a/app/Enums/CaptchaLogType.php +++ b/app/Enums/CaptchaLogType.php @@ -7,4 +7,5 @@ enum CaptchaLogType: int case Created = 1; case Error = 2; case Verified = 3; + case ReadVerified = 4; } diff --git a/app/Http/Controllers/Api/V1/CaptchaController.php b/app/Http/Controllers/Api/V1/CaptchaController.php index 070a06c..80f6bb1 100644 --- a/app/Http/Controllers/Api/V1/CaptchaController.php +++ b/app/Http/Controllers/Api/V1/CaptchaController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers\Api\V1; use App\Http\Requests\Api\V1\Captcha\CaptchaRequest; use App\Http\Requests\Api\V1\Captcha\CheckingRequest; +use App\Http\Requests\Api\V1\Captcha\VerificationInformationRequest; use App\Http\Resources\Api\V1\Captcha; +use App\Http\Resources\Api\V1\CaptchaVerificationInformation; use App\Http\Resources\Api\V1\CaptchaVerified; use App\Services\Api\V1\CaptchaService; use Illuminate\Http\JsonResponse; @@ -38,4 +40,18 @@ final class CaptchaController extends Controller return response()->json(new CaptchaVerified($result)); } + + public function verificationInformation(string $captchaUuid, VerificationInformationRequest $request): JsonResponse + { + $params = $request->getDto(); + $expiresMinutes = config('captcha.verification_data_view_limit_in_minutes'); + $maxInfoDisplayCount = config('captcha.max_info_display_count'); + $result = $this->captchaService->verificationInformation($captchaUuid, $params, $expiresMinutes, $maxInfoDisplayCount); + + if (!$result->isSuccess()) { + return response()->json($result->getData())->setStatusCode($result->getCode()); + } + + return response()->json(new CaptchaVerificationInformation($result)); + } } diff --git a/app/Http/Requests/Api/V1/Captcha/VerificationInformationRequest.php b/app/Http/Requests/Api/V1/Captcha/VerificationInformationRequest.php new file mode 100644 index 0000000..7733812 --- /dev/null +++ b/app/Http/Requests/Api/V1/Captcha/VerificationInformationRequest.php @@ -0,0 +1,58 @@ +hasHeader('private-token')) { + return false; + } + $captchaToken = $captchaTokenRepository->getCaptchaTokenByPrivateToken($this->header('private-token')); + if (is_null($captchaToken)) { + return false; + } + + $this->captchaToken = $captchaToken; + + return true; + } + + /** + * Get the validation rules that apply to the request. + */ + public function rules(): array + { + return [ + 'user_agent' => ['nullable', 'string'], + ]; + } + + public function getDto(): VerificationInformationDto + { + $httpUserData = new HttpUserData( + $this->getClientIp(), + $this->userAgent(), + $this->header('referer') + ); + + return new VerificationInformationDto( + captchaToken: $this->captchaToken, + httpUserData: $httpUserData, + userAgent: $this->input('user_agent', null), + ); + } +} diff --git a/app/Http/Resources/Api/V1/CaptchaVerificationInformation.php b/app/Http/Resources/Api/V1/CaptchaVerificationInformation.php new file mode 100644 index 0000000..a19d68a --- /dev/null +++ b/app/Http/Resources/Api/V1/CaptchaVerificationInformation.php @@ -0,0 +1,30 @@ + $this->resource->isStatus(), + 'message' => $this->resource->getMessage(), + ]; + } +} diff --git a/app/Models/CaptchaLog.php b/app/Models/CaptchaLog.php index a2f564b..80c0bdf 100644 --- a/app/Models/CaptchaLog.php +++ b/app/Models/CaptchaLog.php @@ -3,6 +3,7 @@ namespace App\Models; use App\Enums\CaptchaLogType; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -35,4 +36,9 @@ final class CaptchaLog extends Model protected $casts = [ 'type' => CaptchaLogType::class, ]; + + public function scopeLatest(Builder $query): Builder + { + return $query->orderBy('created_at', 'desc'); + } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 284cff4..751b319 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -52,8 +52,13 @@ class RouteServiceProvider extends ServiceProvider }); RateLimiter::for('captcha-checking', function (Request $request) { return [ - Limit::perMinute(config('captcha.validate_max_count_errors', 5))->by($request->input('captcha_key', null)), + Limit::perMinute(config('captcha.validate_max_count_errors', 5))->by($request->getClientIp() . '-' . $request->input('captcha_key', 'key')), ]; }); + RateLimiter::for('captcha-verification-information', function (Request $request) { + return [ + Limit::perMinute(config('captcha.max_info_display_count', 5))->by($request->getClientIp() . '-' . $request->route('captcha_uuid', 'uuid')), + ]; + }); } } diff --git a/app/Repositories/CaptchaLogRepository.php b/app/Repositories/CaptchaLogRepository.php index 6be864d..a778315 100644 --- a/app/Repositories/CaptchaLogRepository.php +++ b/app/Repositories/CaptchaLogRepository.php @@ -5,6 +5,7 @@ namespace App\Repositories; use App\Enums\CaptchaLogType; use App\Models\CaptchaLog; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Collection; final class CaptchaLogRepository { @@ -12,9 +13,23 @@ final class CaptchaLogRepository { return CaptchaLog::query() ->when($captchaId, function (Builder $query, int $captchaId) { - $query->where('id', $captchaId); + $query->where('captcha_id', $captchaId); }) ->where('type', '=', $type) ->count(); } + + public function getCaptchaLogsByTypes(array $types, ?int $captchaId = null, ?int $limit = null): Collection + { + return CaptchaLog::query() + ->when($captchaId, function (Builder $query, int $captchaId) { + $query->where('captcha_id', $captchaId); + }) + ->when($limit, function (Builder $query, int $limit) { + $query->limit($limit); + }) + ->whereIn('type', $types) + ->latest() + ->get(); + } } diff --git a/app/Repositories/CaptchaRepository.php b/app/Repositories/CaptchaRepository.php index 18f6184..9a3d9a4 100644 --- a/app/Repositories/CaptchaRepository.php +++ b/app/Repositories/CaptchaRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories; use App\Models\Captcha; +use App\Models\CaptchaToken; final class CaptchaRepository { @@ -10,4 +11,9 @@ final class CaptchaRepository { return Captcha::query()->where('id', $id)->first(); } + + public function getCaptchaByUuid(CaptchaToken $captchaToken, string $uuid): ?Captcha + { + return $captchaToken->captchas()->where('uuid', $uuid)->first(); + } } diff --git a/app/Repositories/CaptchaTokenRepository.php b/app/Repositories/CaptchaTokenRepository.php index 9328ee1..b86491a 100644 --- a/app/Repositories/CaptchaTokenRepository.php +++ b/app/Repositories/CaptchaTokenRepository.php @@ -41,4 +41,9 @@ final readonly class CaptchaTokenRepository { return CaptchaToken::query()->where('public_token', '=', $token)->first(); } + + public function getCaptchaTokenByPrivateToken(string $token): ?CaptchaToken + { + return CaptchaToken::query()->where('private_token', '=', $token)->first(); + } } diff --git a/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerificationInformationResult.php b/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerificationInformationResult.php new file mode 100644 index 0000000..a41312d --- /dev/null +++ b/app/ServiceResults/Api/V1/CaptchaService/CaptchaVerificationInformationResult.php @@ -0,0 +1,23 @@ +status; + } + + public function getMessage(): string + { + return $this->message; + } +} diff --git a/app/Services/Api/V1/CaptchaService.php b/app/Services/Api/V1/CaptchaService.php index a64172a..7331365 100644 --- a/app/Services/Api/V1/CaptchaService.php +++ b/app/Services/Api/V1/CaptchaService.php @@ -4,11 +4,13 @@ namespace App\Services\Api\V1; use App\Dto\Request\Api\V1\Captcha\CaptchaPublicToken; use App\Dto\Request\Api\V1\Captcha\CheckingDto; +use App\Dto\Request\Api\V1\Captcha\VerificationInformationDto; use App\Enums\CaptchaLogType; use App\Repositories\CaptchaLogRepository; use App\Repositories\CaptchaRepository; use App\Repositories\DataCaptchaRepository; use App\ServiceResults\Api\V1\CaptchaService\Captcha; +use App\ServiceResults\Api\V1\CaptchaService\CaptchaVerificationInformationResult; use App\ServiceResults\Api\V1\CaptchaService\CaptchaVerifiedResult; use App\ServiceResults\ServiceResultError; use App\Services\Captcha\CaptchaHandler; @@ -17,6 +19,7 @@ use App\Services\CaptchaLog\CaptchaLogHandler; use App\Services\Service; use Carbon\Carbon; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Str; final class CaptchaService extends Service { @@ -90,4 +93,54 @@ final class CaptchaService extends Service return $result; } + + public function verificationInformation(string $captchaUuid, VerificationInformationDto $verificationInformationDto, int $expiresMinutes, int $maxInfoDisplayCount = 1): ServiceResultError | CaptchaVerificationInformationResult + { + try { + $captcha = $this->captchaRepository->getCaptchaByUuid($verificationInformationDto->getCaptchaToken(), $captchaUuid); + if (is_null($captcha)) { + return $this->errNotFound(__('Captcha not found')); + } + + $captchaLogs = $this->captchaLogRepository->getCaptchaLogsByTypes([CaptchaLogType::Verified, CaptchaLogType::ReadVerified], $captcha->id); + $this->captchaLogHandler->handleStore($captcha->id, CaptchaLogType::ReadVerified, $verificationInformationDto->getHttpUserData()); + + $captchaVerificationLog = $captchaLogs->firstWhere('type', CaptchaLogType::Verified); + if (is_null($captchaVerificationLog)) { + return new CaptchaVerificationInformationResult( + status: false, + message: __('Captcha does not pass verification'), + ); + } + + if (!is_null($verificationInformationDto->getUserAgent()) && Str::limit($verificationInformationDto->getUserAgent(), 255, '') !== $captchaVerificationLog->user_agent) { + return new CaptchaVerificationInformationResult( + status: false, + message: __('Captcha User Agent does not match'), + ); + } + + if (now()->diffInMinutes($captchaVerificationLog->created_at) > $expiresMinutes) { + return new CaptchaVerificationInformationResult( + status: false, + message: __('The time for captcha verification has passed'), + ); + } + + if ($captchaLogs->where('type', CaptchaLogType::ReadVerified)->count() >= $maxInfoDisplayCount) { + return new CaptchaVerificationInformationResult( + status: false, + message: __('Captcha verification status view count exceeded'), + ); + } + } catch (\Throwable $e) { + report($e); + return $this->errService('Captcha service error!'); + } + + return new CaptchaVerificationInformationResult( + status: true, + message: __('Captcha Verified'), + ); + } } diff --git a/config/captcha.php b/config/captcha.php index 4943a2f..c06af38 100644 --- a/config/captcha.php +++ b/config/captcha.php @@ -3,6 +3,8 @@ return [ 'waiting_for_captcha_verification_in_seconds' => env('WAITING_FOR_CAPTCHA_VERIFICATION_IN_SECONDS', 900), 'validate_max_count_errors' => env('CAPTCHA_VALIDATE_MAX_COUNT_ERRORS', 3), + 'max_info_display_count' => env('CAPTCHA_MAX_INFO_DISPLAY_COUNT', 1), + 'verification_data_view_limit_in_minutes' => env('CAPTCHA_VERIFICATION_DATA_VIEW_LIMIT_IN_MINUTES', 60), 'imageClass' => \App\Captcha\Images\Image::class, 'types' => [ 'string' => [ diff --git a/lang/en.json b/lang/en.json index 25d656a..cbc886a 100644 --- a/lang/en.json +++ b/lang/en.json @@ -65,5 +65,11 @@ "Failed to generate token.": "Failed to generate token.", "Captcha not found or verification period has expired. Please try to refresh the captcha.": "Captcha not found or verification period has expired. Please try to refresh the captcha.", "CAPTCHA validation failed. Please try again.": "CAPTCHA validation failed. Please try again.", - "You have exceeded the number of attempts. Please refresh the captcha.": "You have exceeded the number of attempts. Please refresh the captcha." + "You have exceeded the number of attempts. Please refresh the captcha.": "You have exceeded the number of attempts. Please refresh the captcha.", + "Captcha not found": "Captcha not found.", + "Captcha Verified": "Captcha Verified.", + "Captcha verification status view count exceeded": "Captcha verification status view count exceeded!", + "Captcha User Agent does not match": "The CAPTCHA verification state has been rejected because the User Agent does not match. Please check and ensure that you are using the same User Agent.", + "The time for captcha verification has passed": "The time for captcha verification has passed.", + "Captcha does not pass verification": "Captcha does not pass verification.", } diff --git a/lang/ru.json b/lang/ru.json index 6a9f7ad..9f4001c 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -65,5 +65,11 @@ "Failed to generate token.": "Не удалось сгенерировать токен.", "Captcha not found or verification period has expired. Please try to refresh the captcha.": "Капча не найдена или истёк срок проверки. По пробуйтн обновить капчу.", "CAPTCHA validation failed. Please try again.": "Не удалось пройти проверку CAPTCHA. Пожалуйста, попробуйте еще раз.", - "You have exceeded the number of attempts. Please refresh the captcha.": "Вы превысили количество попыток. Обновите каптчу." + "You have exceeded the number of attempts. Please refresh the captcha.": "Вы превысили количество попыток. Обновите каптчу.", + "Captcha not found": "Капча не найдена.", + "Captcha Verified": "Капча проверена.", + "Captcha verification status view count exceeded": "Количество просмотра статуса проверки капчи превышено!", + "Captcha User Agent does not match": "Отклонено состояние проверки CAPTCHA, так как User Agent не совпадает. Пожалуйста, проверьте и убедитесь, что вы используете тот же User Agent.", + "The time for captcha verification has passed": "Время верификации капчи прошло.", + "Captcha does not pass verification": "Капча не проходит проверку." } diff --git a/public/swagger.json b/public/swagger.json index 0b2aad4..0c6f504 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -101,7 +101,7 @@ } }, "/api/v1/captcha/{captcha_key}": { - "get": { + "post": { "tags": [ "captcha" ], @@ -128,6 +128,18 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GetCaptchaKeyInfo" + } + } + } + } + }, "responses": { "200": { "description": "successful operation", @@ -234,6 +246,14 @@ "required": [ "status", "message" ] + }, + "GetCaptchaKeyInfo": { + "type": "object", + "properties": { + "user_ageng": { + "type": "string" + } + } } } } diff --git a/routes/api-v1.php b/routes/api-v1.php index fcbfb6b..1044c10 100644 --- a/routes/api-v1.php +++ b/routes/api-v1.php @@ -16,3 +16,5 @@ use Illuminate\Support\Facades\Route; Route::get('/captcha', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'getCaptcha']); Route::middleware(['throttle:captcha-checking'])->post('/captcha', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'checking']); +Route::middleware(['throttle:captcha-verification-information'])->post('/captcha/{captcha_uuid}', [\App\Http\Controllers\Api\V1\CaptchaController::class, 'verificationInformation']) + ->where(['captcha_uuid' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}']); -- 2.45.2 From 2a7aaed0dbc62e25f30719495d15aa782b16da6c Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Sun, 3 Dec 2023 00:57:33 +0600 Subject: [PATCH 81/90] Correct typo in swagger.json Fixed a typo in the 'user_agent' variable of the 'GetCaptchaKeyInfo' object in swagger.json. This was important to rectify in order to achieve accuracy and prevent potential errors during API documentation generation. --- public/swagger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/swagger.json b/public/swagger.json index 0c6f504..29e16a0 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -250,7 +250,7 @@ "GetCaptchaKeyInfo": { "type": "object", "properties": { - "user_ageng": { + "user_agent": { "type": "string" } } -- 2.45.2 From fcb8532b9d3f9d43eff4b6f64d7ee7379cc7439d Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 4 Dec 2023 22:41:23 +0600 Subject: [PATCH 82/90] Added file LICENSE. --- LICENSE.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..3f3a98e --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2023 Leonid Nikitin (kor-elf) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- 2.45.2 From 630c316aaf588aea42bb7a3d7e5c55582e1bf3b9 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 4 Dec 2023 22:42:35 +0600 Subject: [PATCH 83/90] Added service-captcha-gui. --- public/captcha/images/refresh.png | Bin 0 -> 355 bytes public/captcha/script.js | 5 +++++ public/captcha/style.css | 5 +++++ 3 files changed, 10 insertions(+) create mode 100644 public/captcha/images/refresh.png create mode 100644 public/captcha/script.js create mode 100644 public/captcha/style.css diff --git a/public/captcha/images/refresh.png b/public/captcha/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..a8eb150a0aff4094c98834d3a1690e19f6963287 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?- zG7x6;t5)LxG9*h}BT9nv(@M${i&7cN%ggmL^RkPR6AM!H@{7`Ezq647Dth4Q;uvDl zyY%u#FK0uMV;|#_MN2Pk{J}Tv(UQpz6q0)return null;r.innerHTML='
    ',fetch(n+"/api/v1/captcha",{headers:{"Content-Type":"application/json",Accept:"application/json","public-token":c}}).then(e=>e.json()).then(function(t){let l=t.image_body.width,d=t.image_body.height;r.innerHTML=`

    Выберите значение в том порядке, на котором на картинке выше:

    `;let s=r.querySelector("div.window-captcha__content__body__coordinator"),p=s.querySelector("img");p.addEventListener("click",function(t){let n=e.createElement("div");n.style.left=t.offsetX/p.width*100+"%",n.style.top=t.offsetY/p.height*100+"%",n.classList.add("pointer");let c=t.offsetX*(l/p.width),a=t.offsetY*(d/p.height),o=s.querySelectorAll(".pointer").length+1;n.innerHTML=`${o}`,n.addEventListener("click",function(){n.remove(),s.querySelectorAll(".pointer").forEach(function(e,t){e.querySelector("span.pounter__number").textContent=t+1})}),s.appendChild(n)}),r.querySelector(".window-captcha__content__body__button").addEventListener("click",function(){(function t(n,c,o,i,r){let l=n.querySelector("button.window-captcha__content__body__button");if(l.querySelectorAll(".loading").length>0)return null;let d=e.createElement("span");d.classList.add("loading"),l.appendChild(d);let s={captcha_key:n.querySelector(".captcha_key").value,verification:[]};n.querySelectorAll(".pointer").forEach(function(e){s.verification.push({x:e.querySelector(".x").value,y:e.querySelector(".y").value})}),fetch(c+"/api/v1/captcha",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","public-token":o},body:JSON.stringify(s)}).then(e=>{if(429===e.status){a("Вы превысили количество попыток. Обновите каптчу.",l);return}return e.json()}).then(function(t){if(void 0!==t.errors){let n="";for(let c in t.errors)n+=t.errors[c]+"
    ";""===n&&(n=t.message),a(n,l);return}if(void 0===t.captcha_key){a("Произошла ошибка!",l);return}i.querySelector("button.button-open-window-captcha").remove();let o=e.createElement("div");o.innerHTML=`Ура!!! Проверку прошли!`,i.appendChild(o),i.querySelector(".window-captcha").remove();let d=e.createElement("input");d.name=r.getAttribute("data-captcha-verified-name"),d.value=t.captcha_key,d.type="hidden",r.appendChild(d)}).catch(e=>{a("Произошла ошибка!",l)}).finally(function(){d.remove()})})(r,n,c,o,i)})}).catch(e=>{r.innerHTML=`
    Произошла ошибка, сервис с каптчей не ответил. Попробуйте ещё раз!
    `})}function a(t,n){let c=e.createElement("div");c.classList.add("error-message"),c.innerHTML=t,n.before(c),setTimeout(function(){c.remove()},3e3)}t.forEach(function(t){let a=t.attachShadow({mode:"closed"}),o=e.createElement("button"),i=e.createElement("link"),r=t.getAttribute("data-domain"),l=t.getAttribute("data-token"),d=t.getAttribute("data-static-path"),s=null;i.rel="stylesheet",i.type="text/css",i.href=d+"/style.css",a.appendChild(i),o.textContent="Я не робот!",o.type="button",o.classList.add("button-open-window-captcha"),a.appendChild(o),o.addEventListener("click",function(){null===s&&(s=function t(a,o,i,r){let l=e.createElement("div");return l.classList.add("window-captcha"),l.innerHTML=`
    Я не робот!
    `,a.appendChild(l),l.addEventListener("click",function(e){if(e.target!==l)return null;n(l)}),l.querySelector("button.window-captcha__close").addEventListener("click",function(){n(l)}),l.querySelector("button.window-captcha__reload").addEventListener("click",function(){c(l,o,i,a,r)}),l}(a,r,l,t)),s.style.display="block",c(s,r,l,a,t)})})}(document); diff --git a/public/captcha/style.css b/public/captcha/style.css new file mode 100644 index 0000000..c180588 --- /dev/null +++ b/public/captcha/style.css @@ -0,0 +1,5 @@ +/* + * Copyright (C) 2023 Leonid Nikitin (kor-elf) + * https://git.kor-elf.net/kor-elf/service-captcha-gui/src/branch/main/LICENSE.md + */ +.button-open-window-captcha:hover,.window-captcha__close:hover,.window-captcha__content__body__button:hover{opacity:.8}.captcha-verified{background:#1d8100;border:1px solid #ddd;border-radius:90px;padding:10px 20px;color:#000;font-size:18px;font-weight:700;font-family:serif;display:inline-block;vertical-align:top}.button-open-window-captcha,.window-captcha__content__body__button{background:#68aaff;border:1px solid #ddd;border-radius:90px;padding:10px 20px;cursor:pointer;color:#000;font-size:18px;font-weight:700;font-family:serif}.window-captcha__content__body__button{border-radius:0;width:100%;padding:20px 0;border:0;position:relative}.window-captcha__content__body__button .loading{background:rgba(255,255,255,.48)}.window-captcha{background:rgba(0,0,0,.48);position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;display:none}.window-captcha__close{background:#961b1b;position:absolute;top:0;right:0;padding:15px;font-size:20px;font-weight:700;font-family:serif;color:#fff;border:0;cursor:pointer}.window-captcha__content{background:#fff;border-radius:3px;margin:20px auto;max-width:600px;box-shadow:3px 3px 10px rgba(0,0,0,.33)}.window-captcha__content__header{position:relative;font-size:20px;font-weight:700;color:#000;font-family:serif;padding:14px 40px 7px 20px;border-bottom:2px solid #ccc}.window-captcha__content__body .error-message,.window-captcha__content__body__error{color:#961b1b;font-size:16px;font-weight:700;padding:20px}.window-captcha__reload{background:url('images/refresh.png') center center no-repeat;width:32px;height:32px;border:1px solid #ddd;border-radius:90px;cursor:pointer;vertical-align:middle;margin-left:10px}.window-captcha__content__reload:hover{background-color:rgba(0,0,0,.15)}.window-captcha__content__body{min-height:400px;position:relative}.window-captcha__content__body .loading{position:absolute;left:0;top:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center}.window-captcha__content__body .loading:before{width:40px;height:40px;border:4px solid #ddd;border-top:4px solid #2e93e6;border-radius:50%;animation:.8s linear infinite sp-anime;display:flex;justify-content:center;align-items:center;content:' '}.window-captcha__content__body p{font-size:20px;font-weight:700;padding:5px 20px;font-family:serif}.window-captcha__content__body__coordinator{cursor:pointer;position:relative}.window-captcha__content__body__coordinator .pointer{background:#fff;position:absolute;border-radius:90px;border:1px solid #961b1b;width:30px;height:30px;margin:-15px 0 0 -15px;display:flex;align-items:center;justify-content:center;font-weight:700;font-family:serif;font-size:16px}.window-captcha__content__body__coordinator .pointer:hover span{font-size:0}.window-captcha__content__body__coordinator .pointer:hover span:after{content:"X";font-size:16px;color:#961b1b}.window-captcha__content__body__error{border:1px solid #961b1b;margin:20px}@keyframes sp-anime{100%{transform:rotate(360deg)}} \ No newline at end of file -- 2.45.2 From 63d3c8cc6e949c7766c9f8293c7ca6ba08c22fc9 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 4 Dec 2023 22:44:40 +0600 Subject: [PATCH 84/90] Add captcha code integration instructions to edit page. In the captcha tokens edit page, a new section has been added to provide instructions for integrating the captcha code in user's website. This aims to facilitate ease of integration for users, by providing them a readily available code snippet. --- lang/en.json | 1 + lang/ru.json | 3 ++- resources/views/private/captcha_tokens/edit.blade.php | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lang/en.json b/lang/en.json index cbc886a..12af7a9 100644 --- a/lang/en.json +++ b/lang/en.json @@ -72,4 +72,5 @@ "Captcha User Agent does not match": "The CAPTCHA verification state has been rejected because the User Agent does not match. Please check and ensure that you are using the same User Agent.", "The time for captcha verification has passed": "The time for captcha verification has passed.", "Captcha does not pass verification": "Captcha does not pass verification.", + "Add code to the site": "Add code to the site" } diff --git a/lang/ru.json b/lang/ru.json index 9f4001c..c1fc059 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -71,5 +71,6 @@ "Captcha verification status view count exceeded": "Количество просмотра статуса проверки капчи превышено!", "Captcha User Agent does not match": "Отклонено состояние проверки CAPTCHA, так как User Agent не совпадает. Пожалуйста, проверьте и убедитесь, что вы используете тот же User Agent.", "The time for captcha verification has passed": "Время верификации капчи прошло.", - "Captcha does not pass verification": "Капча не проходит проверку." + "Captcha does not pass verification": "Капча не проходит проверку.", + "Add code to the site": "Добавьте код на сайт" } diff --git a/resources/views/private/captcha_tokens/edit.blade.php b/resources/views/private/captcha_tokens/edit.blade.php index e04c5e1..f23d381 100644 --- a/resources/views/private/captcha_tokens/edit.blade.php +++ b/resources/views/private/captcha_tokens/edit.blade.php @@ -16,4 +16,14 @@
  • +
    +
    +
    +
    +

    {{ __('Add code to the site') }}:

    + +
    +
    +
    +
    -- 2.45.2 From ebc2dfd94471293f68c9bc2b6f49b42109fbd2f3 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Mon, 4 Dec 2023 22:46:37 +0600 Subject: [PATCH 85/90] Update copyright link in footer. The copyright link in the footer of the private layout app has been updated in this revision. Previously, it was pointing to a Github account, kor-elf. It is now pointing to the actual repository, which now resides on git.kor-elf.net. In addition to this, the full name of the owner, Leonid Nikitin (kor-elf), has been added for better transparency and clarity. --- resources/views/private/layout/app.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/private/layout/app.blade.php b/resources/views/private/layout/app.blade.php index 8256d5f..53a050b 100644 --- a/resources/views/private/layout/app.blade.php +++ b/resources/views/private/layout/app.blade.php @@ -106,7 +106,7 @@
    -

    Copyright © 2023- Kor-Elf

    +

    Copyright © 2023- Leonid Nikitin (kor-elf)

    -- 2.45.2 From b5db913c249d59455fd307b1f1b93b1213bb5362 Mon Sep 17 00:00:00 2001 From: Leonid Nikitin Date: Tue, 5 Dec 2023 00:53:04 +0600 Subject: [PATCH 86/90] Add demo mode restrictions to user operations. Added functionalities to restrict certain user operations like update, password change, and deletion in demo mode. This is done to prevent demo users from modifying crucial data. Helper methods are created for standard re-usable checks. Also, Blade directive is added for frontend UI demo checks. --- .env.example | 4 ++++ app/Helpers/Helpers.php | 15 +++++++++++++++ app/Providers/AppServiceProvider.php | 6 ++++++ app/Services/Private/ProfileService.php | 9 +++++++++ app/Services/Private/UserService.php | 13 +++++++++++++ config/app.php | 12 ++++++++++++ lang/en.json | 3 ++- lang/ru.json | 3 ++- resources/views/private/layout/app.blade.php | 2 +- resources/views/public/login.blade.php | 5 +++-- 10 files changed, 67 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 34962e9..b4cc4a0 100644 --- a/.env.example +++ b/.env.example @@ -4,6 +4,10 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_DEMO_MODE=false +APP_DEMO_EMAIL= +APP_DEMO_PASSWORD= + APP_DEFAULT_USER_TIMEZONE=UTC # Valid languages: ru | en APP_DEFAULT_LOCALE=ru diff --git a/app/Helpers/Helpers.php b/app/Helpers/Helpers.php index fd28ac2..6f70ee6 100644 --- a/app/Helpers/Helpers.php +++ b/app/Helpers/Helpers.php @@ -2,6 +2,7 @@ namespace App\Helpers; +use App\Models\User; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Collection; @@ -21,4 +22,18 @@ final readonly class Helpers public static function getUserTimeZone() { return auth()->user()?->timezone ?? config('app.user_timezone'); } + + public static function isDemoMode(): bool + { + return config('app.demo_mode', false); + } + + public static function isDemoModeAndUserDenyUpdate(User $user): bool + { + if (self::isDemoMode() !== true) { + return false; + } + + return $user->email === config('app.demo_email'); + } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 4ad927e..cf4eb71 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -11,6 +11,7 @@ use App\Captcha\Images\Head; use App\Captcha\Images\ImageManager; use App\Captcha\Images\Lines; use App\Contracts\CryptographyContract; +use App\Helpers\Helpers; use App\Services\Api\V1\CaptchaGenerateService; use App\Services\CaptchaToken\CaptchaTokenHandler; use App\Services\CryptographyString; @@ -20,6 +21,7 @@ use App\Services\Search\CreateSearchInstanceCommand; use App\Services\Search\Search; use Illuminate\Contracts\Foundation\Application; use Illuminate\Pagination\Paginator; +use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; use Illuminate\Validation\Rules\Password; @@ -64,6 +66,10 @@ final class AppServiceProvider extends ServiceProvider */ public function boot(): void { + Blade::if('demo', function () { + return Helpers::isDemoMode(); + }); + Password::defaults(function () { $rule = Password::min(8); diff --git a/app/Services/Private/ProfileService.php b/app/Services/Private/ProfileService.php index b1248f4..4860e81 100644 --- a/app/Services/Private/ProfileService.php +++ b/app/Services/Private/ProfileService.php @@ -5,6 +5,7 @@ namespace App\Services\Private; use App\Dto\Request\Private\Profile\Update; use App\Dto\Request\Private\Profile\UpdateSettings; use App\Dto\Request\Private\User\UpdatePassword; +use App\Helpers\Helpers; use App\Models\User; use App\ServiceResults\ServiceResultError; use App\ServiceResults\ServiceResultSuccess; @@ -19,6 +20,10 @@ final class ProfileService extends Service public function update(Update $update, User $user): ServiceResultError | ServiceResultSuccess { + if (Helpers::isDemoModeAndUserDenyUpdate($user)) { + return $this->errValidate(__('Demo Mode')); + } + try { $data = [ 'name' => $update->getName() @@ -33,6 +38,10 @@ final class ProfileService extends Service public function updatePassword(UpdatePassword $update, User $user): ServiceResultError | ServiceResultSuccess { + if (Helpers::isDemoModeAndUserDenyUpdate($user)) { + return $this->errValidate(__('Demo Mode')); + } + try { $this->userCommandHandler->handleUpdatePassword($user, $update->getPassword()); } catch (\Throwable $e) { diff --git a/app/Services/Private/UserService.php b/app/Services/Private/UserService.php index f79a17e..d7d9c9b 100644 --- a/app/Services/Private/UserService.php +++ b/app/Services/Private/UserService.php @@ -5,6 +5,7 @@ namespace App\Services\Private; use App\Dto\Builder\User as UserBuilderDto; use App\Dto\Request\Private\User\StoreUpdate; use App\Dto\Request\Private\User\UpdatePassword; +use App\Helpers\Helpers; use App\Models\User; use App\Dto\QuerySettingsDto; use App\Repositories\RoleRepository; @@ -120,6 +121,10 @@ final class UserService extends Service return $this->errFobidden(__('Access is denied')); } + if (Helpers::isDemoModeAndUserDenyUpdate($modelUser)) { + return $this->errValidate(__('Demo Mode')); + } + if ($this->userRepository->isExistsEmail($data->getEmail(), $modelUser->id)) { return $this->errValidate( __('validation.unique', ['attribute' => __('validation.attributes.email')]), @@ -156,6 +161,10 @@ final class UserService extends Service return $this->errFobidden(__('Access is denied')); } + if (Helpers::isDemoModeAndUserDenyUpdate($modelUser)) { + return $this->errValidate(__('Demo Mode')); + } + try { $this->userCommandHandler->handleUpdatePassword($modelUser, $data->getPassword()); } catch (\Throwable $e) { @@ -178,6 +187,10 @@ final class UserService extends Service return $this->errFobidden(__('Access is denied')); } + if (Helpers::isDemoModeAndUserDenyUpdate($modelUser)) { + return $this->errValidate(__('Demo Mode')); + } + try { DB::transaction(function () use ($modelUser) { $this->userCommandHandler->handleDestroy($modelUser); diff --git a/config/app.php b/config/app.php index cf96293..9fd6d96 100644 --- a/config/app.php +++ b/config/app.php @@ -30,6 +30,18 @@ return [ 'env' => env('APP_ENV', 'production'), + /* + |-------------------------------------------------------------------------- + | Application Demo Mode + |-------------------------------------------------------------------------- + | + | Enables or disables Demo mode. + | When Demo mode is enabled, it disables the ability to change user. + */ + 'demo_mode' => (bool) env('APP_DEMO_MODE', false), + 'demo_email' => env('APP_DEMO_EMAIL', false), + 'demo_password' => env('APP_DEMO_PASSWORD', false), + /* |-------------------------------------------------------------------------- | Application Debug Mode diff --git a/lang/en.json b/lang/en.json index 12af7a9..b1013aa 100644 --- a/lang/en.json +++ b/lang/en.json @@ -72,5 +72,6 @@ "Captcha User Agent does not match": "The CAPTCHA verification state has been rejected because the User Agent does not match. Please check and ensure that you are using the same User Agent.", "The time for captcha verification has passed": "The time for captcha verification has passed.", "Captcha does not pass verification": "Captcha does not pass verification.", - "Add code to the site": "Add code to the site" + "Add code to the site": "Add code to the site", + "Demo Mode": "!!! Demo Mode !!!" } diff --git a/lang/ru.json b/lang/ru.json index c1fc059..04d4e89 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -72,5 +72,6 @@ "Captcha User Agent does not match": "Отклонено состояние проверки CAPTCHA, так как User Agent не совпадает. Пожалуйста, проверьте и убедитесь, что вы используете тот же User Agent.", "The time for captcha verification has passed": "Время верификации капчи прошло.", "Captcha does not pass verification": "Капча не проходит проверку.", - "Add code to the site": "Добавьте код на сайт" + "Add code to the site": "Добавьте код на сайт", + "Demo Mode": "!!! Включён демо режим !!!" } diff --git a/resources/views/private/layout/app.blade.php b/resources/views/private/layout/app.blade.php index 53a050b..e486185 100644 --- a/resources/views/private/layout/app.blade.php +++ b/resources/views/private/layout/app.blade.php @@ -56,7 +56,7 @@
    - + @demo

    {{ __('Demo Mode') }}

    @endif