From 9c54bd3ac771a0c6fdbb9cef92a9a86edd20665c Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 4 Sep 2026 14:54:13 -0300 Subject: [PATCH] First Commit --- .env | 123 + .htaccess | 3 + LICENSE | 10 + README.md | 152 + .../Command/GenerateApiKeysCommand.php | 65 + app/Console/Command/GenerateAppKeyCommand.php | 54 + .../Command/MigrateCrudExampleCommand.php | 85 + app/Console/Command/SayHelloCommand.php | 23 + app/Controllers/CrudExampleController.php | 174 + app/Controllers/HomeController.php | 127 + app/Controllers/IndexController.php | 23 + app/Controllers/TesteController.php | 29 + app/Controllers/TwigExampleController.php | 184 + app/Models/CrudExample.php | 27 + app/Models/TwigExample.php | 27 + app/Services/BaseController.php | 18 + app/Services/Sanitizer.php | 39 + bin/console | 19 + bootstrap/app.php | 26 + bootstrap/csrf.php | 30 + bootstrap/helpers.php | 409 + ...7ce10c031ed037031e0e52c6e8c42aab5be.bladec | 52 + ...7646c3322691eb28ea32da0d08678d50545.bladec | 52 + ...fc0a7016af4026f3385ceba60150a67c43e.bladec | 46 + ...53a28d7fa64a3baa9da79321256182f4d8c.bladec | 46 + ...9ce3cc500f2bbcbc8483a73a7ac0a94593a.bladec | 50 + ...e09a1fc8a0d775ef4fd1ce34c3f16625ea8.bladec | 26 + ...04ba2a3d0b502efda2772c5288d077416b6.bladec | 52 + ...d4f2472192950b28dbb814a8f861875162a.bladec | 90 + ...7c6d9a4153b3d55ca4a2f92c837320dfb67.bladec | 68 + ...c7bb688a77a0c233084d3ba55644863b74b.bladec | 63 + ...a5ee92224e8b6ecdf53388e6a7fc6386309.bladec | 84 + ...e6d1fce588c9467a65bb5a9924d7a6f75df.bladec | 156 + ...fd4006a715d4beab35500ce0daa0e44194d.bladec | 41 + ...2851ff825a1ddc807e6acd0a7c0d1db8730.bladec | 52 + ...928d2626bc19d159b63a2840fcd5dc5fc90.bladec | 87 + ...cc9acc88bff03fde36dfe633a1bfbc6aaca.bladec | 87 + ...cca6a65237ff4814aca14e321d0b6401e37.bladec | 87 + ...44973bfff9e6c00c452396225fce53b9d55.bladec | 97 + ...5cce8d73fa5a4bdd25fd2592bba4196d57c.bladec | 97 + ...3c0958e134a30d03f96711e91b560ce4860.bladec | 97 + composer.json | 48 + composer.lock | 5179 + config/container.php | 47 + config/database.php | 24 + config/envread.php | 45 + config/paths.php | 6 + config/templateengine.php | 10 + database/crudexample.sql | 13 + logs/app.log | 2212 + public/.htaccess | 5 + public/consent/cookieconsent.min.css | 6 + public/consent/cookieconsent.min.js | 1 + public/consent/termosdeuso.html | 60 + public/css/bootstrap-grid.css | 3872 + public/css/bootstrap-grid.css.map | 1 + public/css/bootstrap-grid.min.css | 7 + public/css/bootstrap-grid.min.css.map | 1 + public/css/bootstrap-reboot.css | 325 + public/css/bootstrap-reboot.css.map | 1 + public/css/bootstrap-reboot.min.css | 8 + public/css/bootstrap-reboot.min.css.map | 1 + public/css/bootstrap.css | 10332 ++ public/css/bootstrap.css.map | 1 + public/css/bootstrap.min.css | 7 + public/css/bootstrap.min.css.map | 1 + public/css/jumbotron.css | 4 + public/images/1.jpg | Bin 0 -> 80647 bytes public/images/2.jpg | Bin 0 -> 96630 bytes public/images/3.jpg | Bin 0 -> 70650 bytes public/images/4.jpg | Bin 0 -> 95046 bytes public/images/5.jpg | Bin 0 -> 46637 bytes public/images/6.jpg | Bin 0 -> 36579 bytes public/index.php | 57 + public/js/bootstrap.bundle.js | 6971 + public/js/bootstrap.bundle.js.map | 1 + public/js/bootstrap.bundle.min.js | 7 + public/js/bootstrap.bundle.min.js.map | 1 + public/js/bootstrap.js | 4356 + public/js/bootstrap.js.map | 1 + public/js/bootstrap.min.js | 7 + public/js/bootstrap.min.js.map | 1 + resources/views/crudexample/create.blade.php | 49 + resources/views/crudexample/delete.blade.php | 24 + resources/views/crudexample/edit.blade.php | 50 + resources/views/crudexample/index.blade.php | 43 + resources/views/crudexample/show.blade.php | 48 + resources/views/errors/403.html | 57 + resources/views/errors/404.html | 57 + resources/views/home.blade.php | 85 + resources/views/home/about.blade.php | 24 + .../views/home/app-development.blade.php | 50 + resources/views/home/console-cli.blade.php | 88 + resources/views/home/database.blade.php | 66 + .../views/home/dependency-injection.blade.php | 65 + resources/views/home/details.blade.php | 82 + resources/views/home/readme.blade.php | 154 + resources/views/home/security.blade.php | 39 + .../views/home/templates-blade.blade.php | 50 + resources/views/layout.blade.php | 97 + resources/views/layout.twig | 95 + resources/views/layout.twig.php | 95 + resources/views/test.blade.php | 11 + resources/views/twigexample/create.twig | 50 + resources/views/twigexample/create.twig.php | 50 + resources/views/twigexample/edit.twig | 44 + resources/views/twigexample/edit.twig.php | 44 + resources/views/twigexample/index.twig | 43 + resources/views/twigexample/index.twig.php | 43 + resources/views/twigexample/show.twig | 45 + resources/views/twigexample/show.twig.php | 45 + routes/api.php | 0 routes/auth.php | 0 routes/web.php | 259 + vendor/autoload.php | 25 + vendor/bin/bladeonecli | 18 + vendor/bin/carbon | 119 + vendor/bin/generate-defuse-key | 119 + vendor/bin/phinx | 119 + vendor/cakephp/core/App.php | 269 + vendor/cakephp/core/BasePlugin.php | 305 + vendor/cakephp/core/ClassLoader.php | 139 + vendor/cakephp/core/Configure.php | 498 + .../core/Configure/ConfigEngineInterface.php | 44 + .../core/Configure/Engine/IniConfig.php | 203 + .../core/Configure/Engine/JsonConfig.php | 115 + .../core/Configure/Engine/PhpConfig.php | 114 + .../core/Configure/FileConfigTrait.php | 72 + .../core/ConsoleApplicationInterface.php | 42 + vendor/cakephp/core/Container.php | 28 + .../core/ContainerApplicationInterface.php | 45 + vendor/cakephp/core/ContainerInterface.php | 32 + vendor/cakephp/core/ConventionsTrait.php | 156 + .../cakephp/core/Exception/CakeException.php | 123 + vendor/cakephp/core/Exception/Exception.php | 21 + .../core/Exception/MissingPluginException.php | 26 + .../cakephp/core/HttpApplicationInterface.php | 43 + vendor/cakephp/core/InstanceConfigTrait.php | 312 + vendor/cakephp/core/LICENSE.txt | 22 + vendor/cakephp/core/ObjectRegistry.php | 416 + vendor/cakephp/core/Plugin.php | 136 + .../core/PluginApplicationInterface.php | 75 + vendor/cakephp/core/PluginCollection.php | 363 + vendor/cakephp/core/PluginInterface.php | 135 + vendor/cakephp/core/README.md | 37 + vendor/cakephp/core/Retry/CommandRetry.php | 94 + .../core/Retry/RetryStrategyInterface.php | 35 + vendor/cakephp/core/ServiceConfig.php | 50 + vendor/cakephp/core/ServiceProvider.php | 132 + vendor/cakephp/core/StaticConfigTrait.php | 325 + .../core/TestSuite/ContainerStubTrait.php | 181 + vendor/cakephp/core/composer.json | 44 + vendor/cakephp/core/functions.php | 340 + vendor/cakephp/core/functions_global.php | 190 + vendor/cakephp/database/Connection.php | 1197 + .../cakephp/database/ConstraintsInterface.php | 49 + vendor/cakephp/database/Driver.php | 559 + vendor/cakephp/database/Driver/Mysql.php | 345 + vendor/cakephp/database/Driver/Postgres.php | 348 + .../database/Driver/SqlDialectTrait.php | 315 + vendor/cakephp/database/Driver/Sqlite.php | 385 + vendor/cakephp/database/Driver/Sqlserver.php | 569 + .../Driver/TupleComparisonTranslatorTrait.php | 113 + vendor/cakephp/database/DriverInterface.php | 336 + vendor/cakephp/database/Exception.php | 10 + .../database/Exception/DatabaseException.php | 37 + .../Exception/MissingConnectionException.php | 30 + .../Exception/MissingDriverException.php | 30 + .../Exception/MissingExtensionException.php | 31 + .../NestedTransactionRollbackException.php | 41 + .../Expression/AggregateExpression.php | 253 + .../database/Expression/BetweenExpression.php | 144 + .../database/Expression/CaseExpression.php | 251 + .../Expression/CaseExpressionTrait.php | 109 + .../Expression/CaseStatementExpression.php | 597 + .../Expression/CommonTableExpression.php | 239 + .../database/Expression/Comparison.php | 7 + .../Expression/ComparisonExpression.php | 324 + .../database/Expression/FieldInterface.php | 39 + .../database/Expression/FieldTrait.php | 51 + .../Expression/FunctionExpression.php | 178 + .../Expression/IdentifierExpression.php | 119 + .../database/Expression/OrderByExpression.php | 88 + .../Expression/OrderClauseExpression.php | 90 + .../database/Expression/QueryExpression.php | 876 + .../database/Expression/StringExpression.php | 87 + .../database/Expression/TupleComparison.php | 231 + .../database/Expression/UnaryExpression.php | 118 + .../database/Expression/ValuesExpression.php | 325 + .../Expression/WhenThenExpression.php | 350 + .../database/Expression/WindowExpression.php | 335 + .../database/Expression/WindowInterface.php | 163 + .../cakephp/database/ExpressionInterface.php | 44 + .../cakephp/database/FieldTypeConverter.php | 140 + vendor/cakephp/database/FunctionsBuilder.php | 376 + vendor/cakephp/database/IdentifierQuoter.php | 269 + vendor/cakephp/database/LICENSE.txt | 22 + vendor/cakephp/database/Log/LoggedQuery.php | 176 + .../cakephp/database/Log/LoggingStatement.php | 219 + vendor/cakephp/database/Log/QueryLogger.php | 57 + vendor/cakephp/database/PostgresCompiler.php | 93 + vendor/cakephp/database/Query.php | 2516 + vendor/cakephp/database/Query/DeleteQuery.php | 222 + vendor/cakephp/database/Query/InsertQuery.php | 322 + vendor/cakephp/database/Query/SelectQuery.php | 127 + vendor/cakephp/database/Query/UpdateQuery.php | 182 + vendor/cakephp/database/QueryCompiler.php | 462 + vendor/cakephp/database/README.md | 358 + .../database/Retry/ErrorCodeWaitStrategy.php | 69 + .../database/Retry/ReconnectStrategy.php | 124 + vendor/cakephp/database/Schema/BaseSchema.php | 10 + .../database/Schema/CachedCollection.php | 131 + vendor/cakephp/database/Schema/Collection.php | 168 + .../database/Schema/CollectionInterface.php | 54 + .../cakephp/database/Schema/MysqlSchema.php | 10 + .../database/Schema/MysqlSchemaDialect.php | 669 + .../database/Schema/PostgresSchema.php | 10 + .../database/Schema/PostgresSchemaDialect.php | 704 + .../cakephp/database/Schema/SchemaDialect.php | 346 + .../database/Schema/SqlGeneratorInterface.php | 72 + .../cakephp/database/Schema/SqliteSchema.php | 10 + .../database/Schema/SqliteSchemaDialect.php | 649 + .../database/Schema/SqlserverSchema.php | 10 + .../Schema/SqlserverSchemaDialect.php | 707 + .../cakephp/database/Schema/TableSchema.php | 793 + .../Schema/TableSchemaAwareInterface.php | 38 + .../database/Schema/TableSchemaInterface.php | 283 + vendor/cakephp/database/SchemaCache.php | 114 + vendor/cakephp/database/SqlDialectTrait.php | 10 + vendor/cakephp/database/SqliteCompiler.php | 33 + vendor/cakephp/database/SqlserverCompiler.php | 167 + .../database/Statement/BufferResultsTrait.php | 45 + .../database/Statement/BufferedStatement.php | 361 + .../database/Statement/CallbackStatement.php | 77 + .../database/Statement/MysqlStatement.php | 46 + .../database/Statement/PDOStatement.php | 176 + .../database/Statement/SqliteStatement.php | 70 + .../database/Statement/SqlserverStatement.php | 53 + .../database/Statement/StatementDecorator.php | 373 + .../cakephp/database/StatementInterface.php | 203 + vendor/cakephp/database/Type.php | 9 + vendor/cakephp/database/Type/BaseType.php | 80 + .../database/Type/BatchCastingInterface.php | 37 + vendor/cakephp/database/Type/BinaryType.php | 92 + .../cakephp/database/Type/BinaryUuidType.php | 145 + vendor/cakephp/database/Type/BoolType.php | 126 + .../Type/ColumnSchemaAwareInterface.php | 29 + .../database/Type/DateTimeFractionalType.php | 42 + .../database/Type/DateTimeTimezoneType.php | 44 + vendor/cakephp/database/Type/DateTimeType.php | 563 + vendor/cakephp/database/Type/DateType.php | 174 + vendor/cakephp/database/Type/DecimalType.php | 190 + .../Type/ExpressionTypeCasterTrait.php | 80 + .../database/Type/ExpressionTypeInterface.php | 36 + vendor/cakephp/database/Type/FloatType.php | 171 + vendor/cakephp/database/Type/IntegerType.php | 129 + vendor/cakephp/database/Type/JsonType.php | 124 + .../Type/OptionalConvertInterface.php | 32 + vendor/cakephp/database/Type/StringType.php | 110 + vendor/cakephp/database/Type/TimeType.php | 52 + vendor/cakephp/database/Type/UuidType.php | 67 + .../cakephp/database/TypeConverterTrait.php | 66 + vendor/cakephp/database/TypeFactory.php | 171 + vendor/cakephp/database/TypeInterface.php | 91 + vendor/cakephp/database/TypeMap.php | 160 + vendor/cakephp/database/TypeMapTrait.php | 89 + .../cakephp/database/TypedResultInterface.php | 38 + vendor/cakephp/database/TypedResultTrait.php | 53 + vendor/cakephp/database/ValueBinder.php | 163 + vendor/cakephp/database/composer.json | 40 + .../datasource/ConnectionInterface.php | 154 + .../cakephp/datasource/ConnectionManager.php | 216 + .../cakephp/datasource/ConnectionRegistry.php | 104 + vendor/cakephp/datasource/EntityInterface.php | 288 + vendor/cakephp/datasource/EntityTrait.php | 1304 + .../Exception/InvalidPrimaryKeyException.php | 26 + .../MissingDatasourceConfigException.php | 28 + .../Exception/MissingDatasourceException.php | 28 + .../Exception/MissingModelException.php | 30 + .../Exception/PageOutOfBoundsException.php | 10 + .../Exception/RecordNotFoundException.php | 26 + vendor/cakephp/datasource/FactoryLocator.php | 103 + .../cakephp/datasource/FixtureInterface.php | 73 + .../datasource/InvalidPropertyInterface.php | 61 + vendor/cakephp/datasource/LICENSE.txt | 22 + .../datasource/Locator/AbstractLocator.php | 115 + .../datasource/Locator/LocatorInterface.php | 68 + vendor/cakephp/datasource/ModelAwareTrait.php | 241 + vendor/cakephp/datasource/Paginator.php | 10 + .../cakephp/datasource/PaginatorInterface.php | 10 + .../Exception/PageOutOfBoundsException.php | 35 + .../datasource/Paging/NumericPaginator.php | 734 + .../datasource/Paging/PaginatorInterface.php | 50 + .../datasource/Paging/SimplePaginator.php | 49 + vendor/cakephp/datasource/QueryCacher.php | 137 + vendor/cakephp/datasource/QueryInterface.php | 407 + vendor/cakephp/datasource/QueryTrait.php | 1465 + vendor/cakephp/datasource/README.md | 82 + .../datasource/RepositoryInterface.php | 252 + .../cakephp/datasource/ResultSetDecorator.php | 61 + .../cakephp/datasource/ResultSetInterface.php | 30 + vendor/cakephp/datasource/RuleInvoker.php | 142 + vendor/cakephp/datasource/RulesAwareTrait.php | 120 + vendor/cakephp/datasource/RulesChecker.php | 330 + vendor/cakephp/datasource/SchemaInterface.php | 166 + vendor/cakephp/datasource/SimplePaginator.php | 10 + vendor/cakephp/datasource/composer.json | 42 + vendor/cakephp/utility/CookieCryptTrait.php | 192 + vendor/cakephp/utility/Crypto/OpenSsl.php | 79 + .../utility/Exception/XmlException.php | 25 + vendor/cakephp/utility/Hash.php | 1274 + vendor/cakephp/utility/Inflector.php | 524 + vendor/cakephp/utility/LICENSE.txt | 22 + .../cakephp/utility/MergeVariablesTrait.php | 118 + vendor/cakephp/utility/README.md | 91 + vendor/cakephp/utility/Security.php | 309 + vendor/cakephp/utility/Text.php | 1180 + vendor/cakephp/utility/Xml.php | 502 + vendor/cakephp/utility/bootstrap.php | 21 + vendor/cakephp/utility/composer.json | 43 + .../carbonphp/carbon-doctrine-types/LICENSE | 21 + .../carbonphp/carbon-doctrine-types/README.md | 14 + .../carbon-doctrine-types/composer.json | 36 + .../Carbon/Doctrine/CarbonDoctrineType.php | 16 + .../Carbon/Doctrine/CarbonImmutableType.php | 9 + .../src/Carbon/Doctrine/CarbonType.php | 9 + .../Carbon/Doctrine/CarbonTypeConverter.php | 131 + .../Doctrine/DateTimeDefaultPrecision.php | 30 + .../Carbon/Doctrine/DateTimeImmutableType.php | 32 + .../src/Carbon/Doctrine/DateTimeType.php | 24 + vendor/composer/ClassLoader.php | 579 + vendor/composer/InstalledVersions.php | 359 + vendor/composer/LICENSE | 21 + vendor/composer/autoload_classmap.php | 17 + vendor/composer/autoload_files.php | 29 + vendor/composer/autoload_namespaces.php | 9 + vendor/composer/autoload_psr4.php | 80 + vendor/composer/autoload_real.php | 50 + vendor/composer/autoload_static.php | 465 + vendor/composer/installed.json | 5394 + vendor/composer/installed.php | 782 + vendor/composer/platform_check.php | 26 + vendor/defuse/php-encryption/LICENSE | 21 + vendor/defuse/php-encryption/README.md | 121 + .../php-encryption/bin/generate-defuse-key | 14 + vendor/defuse/php-encryption/composer.json | 35 + vendor/defuse/php-encryption/dist/Makefile | 39 + vendor/defuse/php-encryption/dist/box.json | 22 + .../dist/phar-testing-autoload.php | 4 + .../php-encryption/dist/signingkey-new.asc | 53 + .../dist/signingkey-new.asc.sig | Bin 0 -> 566 bytes .../defuse/php-encryption/dist/signingkey.asc | 52 + .../php-encryption/docs/CryptoDetails.md | 64 + vendor/defuse/php-encryption/docs/FAQ.md | 51 + .../docs/InstallingAndVerifying.md | 53 + .../docs/InternalDeveloperDocs.md | 166 + vendor/defuse/php-encryption/docs/Tutorial.md | 314 + .../php-encryption/docs/UpgradingFromV1.2.md | 51 + .../php-encryption/docs/classes/Crypto.md | 280 + .../php-encryption/docs/classes/File.md | 486 + .../defuse/php-encryption/docs/classes/Key.md | 117 + .../docs/classes/KeyProtectedByPassword.md | 259 + vendor/defuse/php-encryption/src/Core.php | 470 + vendor/defuse/php-encryption/src/Crypto.php | 477 + .../defuse/php-encryption/src/DerivedKeys.php | 50 + vendor/defuse/php-encryption/src/Encoding.php | 277 + .../src/Exception/BadFormatException.php | 7 + .../src/Exception/CryptoException.php | 7 + .../EnvironmentIsBrokenException.php | 7 + .../src/Exception/IOException.php | 7 + .../WrongKeyOrModifiedCiphertextException.php | 7 + vendor/defuse/php-encryption/src/File.php | 835 + vendor/defuse/php-encryption/src/Key.php | 101 + .../php-encryption/src/KeyOrPassword.php | 156 + .../src/KeyProtectedByPassword.php | 159 + .../php-encryption/src/RuntimeTests.php | 228 + vendor/delight-im/auth/.editorconfig | 13 + vendor/delight-im/auth/.gitignore | 6 + vendor/delight-im/auth/Database/MySQL.sql | 72 + .../delight-im/auth/Database/PostgreSQL.sql | 58 + vendor/delight-im/auth/Database/SQLite.sql | 60 + vendor/delight-im/auth/LICENSE | 21 + vendor/delight-im/auth/Migration.md | 220 + vendor/delight-im/auth/README.md | 1337 + vendor/delight-im/auth/composer.json | 20 + vendor/delight-im/auth/composer.lock | 180 + vendor/delight-im/auth/src/Administration.php | 575 + .../auth/src/AmbiguousUsernameException.php | 11 + .../auth/src/AttemptCancelledException.php | 11 + vendor/delight-im/auth/src/Auth.php | 1963 + vendor/delight-im/auth/src/AuthError.php | 12 + vendor/delight-im/auth/src/AuthException.php | 12 + .../auth/src/ConfirmationRequestNotFound.php | 11 + vendor/delight-im/auth/src/DatabaseError.php | 11 + .../auth/src/DuplicateUsernameException.php | 11 + .../auth/src/EmailNotVerifiedException.php | 11 + .../auth/src/EmailOrUsernameRequiredError.php | 11 + .../auth/src/HeadersAlreadySentError.php | 11 + .../auth/src/InvalidEmailException.php | 11 + .../auth/src/InvalidPasswordException.php | 11 + .../src/InvalidSelectorTokenPairException.php | 11 + .../auth/src/MissingCallbackError.php | 11 + .../auth/src/NotLoggedInException.php | 11 + .../auth/src/ResetDisabledException.php | 11 + vendor/delight-im/auth/src/Role.php | 79 + vendor/delight-im/auth/src/Status.php | 20 + .../auth/src/TokenExpiredException.php | 11 + .../auth/src/TooManyRequestsException.php | 11 + .../auth/src/UnknownIdException.php | 11 + .../auth/src/UnknownUsernameException.php | 11 + .../auth/src/UserAlreadyExistsException.php | 11 + vendor/delight-im/auth/src/UserManager.php | 454 + vendor/delight-im/auth/tests/index.php | 1086 + vendor/delight-im/base64/.editorconfig | 13 + vendor/delight-im/base64/.gitignore | 6 + vendor/delight-im/base64/LICENSE | 21 + vendor/delight-im/base64/README.md | 87 + vendor/delight-im/base64/composer.json | 16 + vendor/delight-im/base64/composer.lock | 19 + vendor/delight-im/base64/src/Base64.php | 132 + .../base64/src/Throwable/DecodingError.php | 12 + .../base64/src/Throwable/EncodingError.php | 12 + .../delight-im/base64/src/Throwable/Error.php | 12 + .../base64/src/Throwable/Exception.php | 12 + vendor/delight-im/base64/tests/index.php | 34 + vendor/delight-im/cookie/.editorconfig | 17 + vendor/delight-im/cookie/.gitignore | 6 + vendor/delight-im/cookie/.travis-ci-apache | 9 + vendor/delight-im/cookie/.travis.yml | 29 + vendor/delight-im/cookie/LICENSE | 21 + vendor/delight-im/cookie/Migration.md | 17 + vendor/delight-im/cookie/README.md | 203 + vendor/delight-im/cookie/composer.json | 17 + vendor/delight-im/cookie/composer.lock | 56 + vendor/delight-im/cookie/src/Cookie.php | 584 + vendor/delight-im/cookie/src/Session.php | 170 + vendor/delight-im/cookie/tests/index.php | 320 + vendor/delight-im/db/.editorconfig | 13 + vendor/delight-im/db/.gitignore | 6 + vendor/delight-im/db/LICENSE | 21 + vendor/delight-im/db/README.md | 316 + vendor/delight-im/db/composer.json | 17 + vendor/delight-im/db/composer.lock | 21 + vendor/delight-im/db/src/DataSource.php | 21 + vendor/delight-im/db/src/Database.php | 244 + vendor/delight-im/db/src/Dsn.php | 12 + vendor/delight-im/db/src/ErrorHandler.php | 92 + vendor/delight-im/db/src/Measurement.php | 42 + vendor/delight-im/db/src/PdoDataSource.php | 289 + vendor/delight-im/db/src/PdoDatabase.php | 615 + vendor/delight-im/db/src/PdoDsn.php | 61 + vendor/delight-im/db/src/Profiler.php | 51 + .../delight-im/db/src/SimpleMeasurement.php | 54 + vendor/delight-im/db/src/SimpleProfiler.php | 89 + .../BeginTransactionFailureException.php | 12 + .../CommitTransactionFailureException.php | 12 + .../src/Throwable/DatabaseNotFoundError.php | 12 + .../db/src/Throwable/EmptyValueListError.php | 12 + .../src/Throwable/EmptyWhereClauseError.php | 20 + vendor/delight-im/db/src/Throwable/Error.php | 12 + .../delight-im/db/src/Throwable/Exception.php | 12 + .../IntegrityConstraintViolationException.php | 18 + .../src/Throwable/NoDatabaseSelectedError.php | 12 + .../RollBackTransactionFailureException.php | 12 + .../db/src/Throwable/SyntaxError.php | 12 + .../db/src/Throwable/TableNotFoundError.php | 12 + .../Throwable/TransactionFailureException.php | 12 + .../db/src/Throwable/UnknownColumnError.php | 12 + .../src/Throwable/WrongCredentialsError.php | 12 + vendor/delight-im/db/tests/index.php | 28 + vendor/delight-im/http/.editorconfig | 13 + vendor/delight-im/http/.gitignore | 6 + vendor/delight-im/http/LICENSE | 21 + vendor/delight-im/http/Migration.md | 9 + vendor/delight-im/http/README.md | 69 + vendor/delight-im/http/composer.json | 16 + vendor/delight-im/http/composer.lock | 20 + vendor/delight-im/http/src/ResponseHeader.php | 165 + vendor/delight-im/http/tests/index.php | 231 + vendor/doctrine/inflector/LICENSE | 19 + vendor/doctrine/inflector/README.md | 7 + vendor/doctrine/inflector/composer.json | 41 + vendor/doctrine/inflector/docs/en/index.rst | 226 + .../Inflector/CachedWordInflector.php | 24 + .../GenericLanguageInflectorFactory.php | 66 + .../lib/Doctrine/Inflector/Inflector.php | 507 + .../Doctrine/Inflector/InflectorFactory.php | 52 + .../lib/Doctrine/Inflector/Language.php | 19 + .../Inflector/LanguageInflectorFactory.php | 33 + .../Doctrine/Inflector/NoopWordInflector.php | 13 + .../Inflector/Rules/English/Inflectible.php | 184 + .../Rules/English/InflectorFactory.php | 21 + .../Inflector/Rules/English/Rules.php | 31 + .../Inflector/Rules/English/Uninflected.php | 189 + .../Inflector/Rules/French/Inflectible.php | 44 + .../Rules/French/InflectorFactory.php | 21 + .../Doctrine/Inflector/Rules/French/Rules.php | 31 + .../Inflector/Rules/French/Uninflected.php | 28 + .../Rules/NorwegianBokmal/Inflectible.php | 34 + .../NorwegianBokmal/InflectorFactory.php | 21 + .../Inflector/Rules/NorwegianBokmal/Rules.php | 31 + .../Rules/NorwegianBokmal/Uninflected.php | 30 + .../lib/Doctrine/Inflector/Rules/Pattern.php | 42 + .../lib/Doctrine/Inflector/Rules/Patterns.php | 34 + .../Rules/Portuguese/Inflectible.php | 98 + .../Rules/Portuguese/InflectorFactory.php | 21 + .../Inflector/Rules/Portuguese/Rules.php | 31 + .../Rules/Portuguese/Uninflected.php | 32 + .../lib/Doctrine/Inflector/Rules/Ruleset.php | 39 + .../Inflector/Rules/Spanish/Inflectible.php | 47 + .../Rules/Spanish/InflectorFactory.php | 21 + .../Inflector/Rules/Spanish/Rules.php | 31 + .../Inflector/Rules/Spanish/Uninflected.php | 30 + .../Doctrine/Inflector/Rules/Substitution.php | 30 + .../Inflector/Rules/Substitutions.php | 57 + .../Inflector/Rules/Transformation.php | 39 + .../Inflector/Rules/Transformations.php | 29 + .../Inflector/Rules/Turkish/Inflectible.php | 34 + .../Rules/Turkish/InflectorFactory.php | 21 + .../Inflector/Rules/Turkish/Rules.php | 31 + .../Inflector/Rules/Turkish/Uninflected.php | 30 + .../lib/Doctrine/Inflector/Rules/Word.php | 21 + .../Doctrine/Inflector/RulesetInflector.php | 56 + .../lib/Doctrine/Inflector/WordInflector.php | 10 + vendor/doctrine/lexer/LICENSE | 19 + vendor/doctrine/lexer/README.md | 9 + vendor/doctrine/lexer/UPGRADE.md | 22 + vendor/doctrine/lexer/composer.json | 55 + vendor/doctrine/lexer/src/AbstractLexer.php | 328 + vendor/doctrine/lexer/src/Token.php | 56 + vendor/eftec/bladeone/LICENSE | 21 + vendor/eftec/bladeone/composer.json | 49 + vendor/eftec/bladeone/lib/BladeOne.php | 4675 + vendor/eftec/bladeone/lib/BladeOneCache.php | 333 + .../eftec/bladeone/lib/BladeOneCacheRedis.php | 160 + vendor/eftec/bladeone/lib/BladeOneCustom.php | 59 + vendor/eftec/bladeone/lib/bladeonecli | 29 + vendor/eftec/bladeonehtml/LICENSE | 21 + vendor/eftec/bladeonehtml/README.md | 983 + vendor/eftec/bladeonehtml/composer.json | 39 + .../eftec/bladeonehtml/lib/BladeOneHtml.php | 1226 + vendor/eftec/bladeonehtml/test/bootstrap.php | 3 + vendor/eftec/bladeonehtml/test/clientTest.php | 282 + vendor/eftec/messagecontainer/LICENSE | 21 + vendor/eftec/messagecontainer/README.md | 864 + vendor/eftec/messagecontainer/composer.json | 28 + .../messagecontainer/lib/MessageContainer.php | 758 + .../messagecontainer/lib/MessageLocker.php | 570 + .../egulias/email-validator/CONTRIBUTING.md | 153 + vendor/egulias/email-validator/LICENSE | 19 + vendor/egulias/email-validator/composer.json | 37 + .../email-validator/src/EmailLexer.php | 329 + .../email-validator/src/EmailParser.php | 90 + .../email-validator/src/EmailValidator.php | 67 + .../email-validator/src/MessageIDParser.php | 91 + vendor/egulias/email-validator/src/Parser.php | 78 + .../email-validator/src/Parser/Comment.php | 102 + .../CommentStrategy/CommentStrategy.php | 22 + .../Parser/CommentStrategy/DomainComment.php | 33 + .../Parser/CommentStrategy/LocalComment.php | 38 + .../src/Parser/DomainLiteral.php | 210 + .../email-validator/src/Parser/DomainPart.php | 327 + .../src/Parser/DoubleQuote.php | 91 + .../src/Parser/FoldingWhiteSpace.php | 87 + .../email-validator/src/Parser/IDLeftPart.php | 15 + .../src/Parser/IDRightPart.php | 29 + .../email-validator/src/Parser/LocalPart.php | 162 + .../email-validator/src/Parser/PartParser.php | 63 + .../src/Result/InvalidEmail.php | 49 + .../src/Result/MultipleErrors.php | 56 + .../src/Result/Reason/AtextAfterCFWS.php | 16 + .../src/Result/Reason/CRLFAtTheEnd.php | 19 + .../src/Result/Reason/CRLFX2.php | 16 + .../src/Result/Reason/CRNoLF.php | 16 + .../src/Result/Reason/CharNotAllowed.php | 16 + .../src/Result/Reason/CommaInDomain.php | 16 + .../src/Result/Reason/CommentsInIDRight.php | 16 + .../src/Result/Reason/ConsecutiveAt.php | 17 + .../src/Result/Reason/ConsecutiveDot.php | 16 + .../src/Result/Reason/DetailedReason.php | 13 + .../src/Result/Reason/DomainAcceptsNoMail.php | 16 + .../src/Result/Reason/DomainHyphened.php | 16 + .../src/Result/Reason/DomainTooLong.php | 16 + .../src/Result/Reason/DotAtEnd.php | 16 + .../src/Result/Reason/DotAtStart.php | 16 + .../src/Result/Reason/EmptyReason.php | 16 + .../src/Result/Reason/ExceptionFound.php | 26 + .../src/Result/Reason/ExpectingATEXT.php | 16 + .../src/Result/Reason/ExpectingCTEXT.php | 16 + .../src/Result/Reason/ExpectingDTEXT.php | 16 + .../Reason/ExpectingDomainLiteralClose.php | 16 + .../src/Result/Reason/LabelTooLong.php | 16 + .../Result/Reason/LocalOrReservedDomain.php | 16 + .../src/Result/Reason/NoDNSRecord.php | 16 + .../src/Result/Reason/NoDomainPart.php | 16 + .../src/Result/Reason/NoLocalPart.php | 16 + .../src/Result/Reason/RFCWarnings.php | 16 + .../src/Result/Reason/Reason.php | 16 + .../src/Result/Reason/SpoofEmail.php | 17 + .../src/Result/Reason/UnOpenedComment.php | 16 + .../Result/Reason/UnableToGetDNSRecord.php | 19 + .../src/Result/Reason/UnclosedComment.php | 16 + .../Result/Reason/UnclosedQuotedString.php | 16 + .../src/Result/Reason/UnusualElements.php | 26 + .../email-validator/src/Result/Result.php | 27 + .../email-validator/src/Result/SpoofEmail.php | 13 + .../email-validator/src/Result/ValidEmail.php | 27 + .../src/Validation/DNSCheckValidation.php | 211 + .../src/Validation/DNSGetRecordWrapper.php | 30 + .../src/Validation/DNSRecords.php | 27 + .../src/Validation/EmailValidation.php | 34 + .../Exception/EmptyValidationList.php | 16 + .../Validation/Extra/SpoofCheckValidation.php | 46 + .../src/Validation/MessageIDValidation.php | 55 + .../Validation/MultipleValidationWithAnd.php | 105 + .../Validation/NoRFCWarningsValidation.php | 41 + .../src/Validation/RFCValidation.php | 54 + .../src/Warning/AddressLiteral.php | 14 + .../src/Warning/CFWSNearAt.php | 13 + .../src/Warning/CFWSWithFWS.php | 13 + .../email-validator/src/Warning/Comment.php | 13 + .../src/Warning/DeprecatedComment.php | 13 + .../src/Warning/DomainLiteral.php | 14 + .../src/Warning/EmailTooLong.php | 15 + .../src/Warning/IPV6BadChar.php | 14 + .../src/Warning/IPV6ColonEnd.php | 14 + .../src/Warning/IPV6ColonStart.php | 14 + .../src/Warning/IPV6Deprecated.php | 14 + .../src/Warning/IPV6DoubleColon.php | 14 + .../src/Warning/IPV6GroupCount.php | 14 + .../src/Warning/IPV6MaxGroups.php | 14 + .../src/Warning/LocalTooLong.php | 15 + .../src/Warning/NoDNSMXRecord.php | 14 + .../src/Warning/ObsoleteDTEXT.php | 14 + .../src/Warning/QuotedPart.php | 27 + .../src/Warning/QuotedString.php | 17 + .../email-validator/src/Warning/TLD.php | 13 + .../email-validator/src/Warning/Warning.php | 53 + vendor/fakerphp/faker/CHANGELOG.md | 209 + vendor/fakerphp/faker/LICENSE | 22 + vendor/fakerphp/faker/README.md | 114 + vendor/fakerphp/faker/composer.json | 56 + vendor/fakerphp/faker/rector-migrate.php | 161 + .../faker/src/Faker/Calculator/Ean.php | 50 + .../faker/src/Faker/Calculator/Iban.php | 69 + .../faker/src/Faker/Calculator/Inn.php | 42 + .../faker/src/Faker/Calculator/Isbn.php | 60 + .../faker/src/Faker/Calculator/Luhn.php | 72 + .../faker/src/Faker/Calculator/TCNo.php | 43 + .../faker/src/Faker/ChanceGenerator.php | 60 + .../faker/src/Faker/Container/Container.php | 139 + .../src/Faker/Container/ContainerBuilder.php | 68 + .../Faker/Container/ContainerException.php | 14 + .../Faker/Container/ContainerInterface.php | 9 + .../Container/NotInContainerException.php | 14 + .../fakerphp/faker/src/Faker/Core/Barcode.php | 52 + .../fakerphp/faker/src/Faker/Core/Blood.php | 42 + .../fakerphp/faker/src/Faker/Core/Color.php | 177 + .../faker/src/Faker/Core/Coordinates.php | 78 + .../faker/src/Faker/Core/DateTime.php | 217 + vendor/fakerphp/faker/src/Faker/Core/File.php | 564 + .../fakerphp/faker/src/Faker/Core/Number.php | 83 + vendor/fakerphp/faker/src/Faker/Core/Uuid.php | 65 + .../fakerphp/faker/src/Faker/Core/Version.php | 69 + .../faker/src/Faker/DefaultGenerator.php | 49 + .../fakerphp/faker/src/Faker/Documentor.php | 70 + .../src/Faker/Extension/AddressExtension.php | 39 + .../src/Faker/Extension/BarcodeExtension.php | 41 + .../src/Faker/Extension/BloodExtension.php | 30 + .../src/Faker/Extension/ColorExtension.php | 63 + .../src/Faker/Extension/CompanyExtension.php | 21 + .../src/Faker/Extension/CountryExtension.php | 14 + .../src/Faker/Extension/DateTimeExtension.php | 242 + .../faker/src/Faker/Extension/Extension.php | 14 + .../src/Faker/Extension/ExtensionNotFound.php | 12 + .../src/Faker/Extension/FileExtension.php | 28 + .../Extension/GeneratorAwareExtension.php | 20 + .../GeneratorAwareExtensionTrait.php | 30 + .../faker/src/Faker/Extension/Helper.php | 106 + .../src/Faker/Extension/NumberExtension.php | 53 + .../src/Faker/Extension/PersonExtension.php | 52 + .../Faker/Extension/PhoneNumberExtension.php | 19 + .../src/Faker/Extension/UuidExtension.php | 16 + .../src/Faker/Extension/VersionExtension.php | 21 + vendor/fakerphp/faker/src/Faker/Factory.php | 71 + vendor/fakerphp/faker/src/Faker/Generator.php | 985 + .../fakerphp/faker/src/Faker/Guesser/Name.php | 180 + .../Faker/ORM/CakePHP/ColumnTypeGuesser.php | 79 + .../src/Faker/ORM/CakePHP/EntityPopulator.php | 173 + .../faker/src/Faker/ORM/CakePHP/Populator.php | 113 + .../Faker/ORM/Doctrine/ColumnTypeGuesser.php | 91 + .../Faker/ORM/Doctrine/EntityPopulator.php | 248 + .../src/Faker/ORM/Doctrine/Populator.php | 126 + .../ORM/Doctrine/backward-compatibility.php | 11 + .../Faker/ORM/Mandango/ColumnTypeGuesser.php | 57 + .../Faker/ORM/Mandango/EntityPopulator.php | 123 + .../src/Faker/ORM/Mandango/Populator.php | 63 + .../Faker/ORM/Propel/ColumnTypeGuesser.php | 109 + .../src/Faker/ORM/Propel/EntityPopulator.php | 204 + .../faker/src/Faker/ORM/Propel/Populator.php | 90 + .../Faker/ORM/Propel2/ColumnTypeGuesser.php | 112 + .../src/Faker/ORM/Propel2/EntityPopulator.php | 207 + .../faker/src/Faker/ORM/Propel2/Populator.php | 93 + .../src/Faker/ORM/Spot/ColumnTypeGuesser.php | 84 + .../src/Faker/ORM/Spot/EntityPopulator.php | 199 + .../faker/src/Faker/ORM/Spot/Populator.php | 89 + .../faker/src/Faker/Provider/Address.php | 166 + .../faker/src/Faker/Provider/Barcode.php | 107 + .../faker/src/Faker/Provider/Base.php | 710 + .../faker/src/Faker/Provider/Biased.php | 65 + .../faker/src/Faker/Provider/Color.php | 158 + .../faker/src/Faker/Provider/Company.php | 50 + .../faker/src/Faker/Provider/DateTime.php | 389 + .../faker/src/Faker/Provider/File.php | 610 + .../faker/src/Faker/Provider/HtmlLorem.php | 307 + .../faker/src/Faker/Provider/Image.php | 196 + .../faker/src/Faker/Provider/Internet.php | 407 + .../faker/src/Faker/Provider/Lorem.php | 228 + .../faker/src/Faker/Provider/Medical.php | 34 + .../src/Faker/Provider/Miscellaneous.php | 342 + .../faker/src/Faker/Provider/Payment.php | 312 + .../faker/src/Faker/Provider/Person.php | 147 + .../faker/src/Faker/Provider/PhoneNumber.php | 270 + .../faker/src/Faker/Provider/Text.php | 202 + .../faker/src/Faker/Provider/UserAgent.php | 219 + .../faker/src/Faker/Provider/Uuid.php | 59 + .../src/Faker/Provider/ar_EG/Address.php | 217 + .../faker/src/Faker/Provider/ar_EG/Color.php | 65 + .../src/Faker/Provider/ar_EG/Company.php | 85 + .../src/Faker/Provider/ar_EG/Internet.php | 93 + .../src/Faker/Provider/ar_EG/Payment.php | 16 + .../faker/src/Faker/Provider/ar_EG/Person.php | 107 + .../faker/src/Faker/Provider/ar_EG/Text.php | 31 + .../src/Faker/Provider/ar_JO/Address.php | 152 + .../src/Faker/Provider/ar_JO/Company.php | 66 + .../src/Faker/Provider/ar_JO/Internet.php | 55 + .../faker/src/Faker/Provider/ar_JO/Person.php | 108 + .../faker/src/Faker/Provider/ar_JO/Text.php | 272 + .../src/Faker/Provider/ar_SA/Address.php | 146 + .../faker/src/Faker/Provider/ar_SA/Color.php | 81 + .../src/Faker/Provider/ar_SA/Company.php | 78 + .../src/Faker/Provider/ar_SA/Internet.php | 55 + .../src/Faker/Provider/ar_SA/Payment.php | 22 + .../faker/src/Faker/Provider/ar_SA/Person.php | 121 + .../faker/src/Faker/Provider/ar_SA/Text.php | 272 + .../src/Faker/Provider/at_AT/Payment.php | 11 + .../src/Faker/Provider/bg_BG/Internet.php | 9 + .../src/Faker/Provider/bg_BG/Payment.php | 46 + .../faker/src/Faker/Provider/bg_BG/Person.php | 117 + .../src/Faker/Provider/bg_BG/PhoneNumber.php | 20 + .../src/Faker/Provider/bn_BD/Address.php | 310 + .../src/Faker/Provider/bn_BD/Company.php | 28 + .../faker/src/Faker/Provider/bn_BD/Person.php | 36 + .../src/Faker/Provider/bn_BD/PhoneNumber.php | 14 + .../faker/src/Faker/Provider/bn_BD/Utils.php | 14 + .../src/Faker/Provider/cs_CZ/Address.php | 149 + .../src/Faker/Provider/cs_CZ/Company.php | 125 + .../src/Faker/Provider/cs_CZ/DateTime.php | 65 + .../src/Faker/Provider/cs_CZ/Internet.php | 9 + .../src/Faker/Provider/cs_CZ/Payment.php | 22 + .../faker/src/Faker/Provider/cs_CZ/Person.php | 538 + .../src/Faker/Provider/cs_CZ/PhoneNumber.php | 14 + .../faker/src/Faker/Provider/cs_CZ/Text.php | 7186 + .../src/Faker/Provider/da_DK/Address.php | 284 + .../src/Faker/Provider/da_DK/Company.php | 67 + .../src/Faker/Provider/da_DK/Internet.php | 27 + .../src/Faker/Provider/da_DK/Payment.php | 22 + .../faker/src/Faker/Provider/da_DK/Person.php | 195 + .../src/Faker/Provider/da_DK/PhoneNumber.php | 18 + .../src/Faker/Provider/de_AT/Address.php | 143 + .../src/Faker/Provider/de_AT/Company.php | 13 + .../src/Faker/Provider/de_AT/Internet.php | 9 + .../src/Faker/Provider/de_AT/Payment.php | 42 + .../faker/src/Faker/Provider/de_AT/Person.php | 154 + .../src/Faker/Provider/de_AT/PhoneNumber.php | 23 + .../faker/src/Faker/Provider/de_AT/Text.php | 7 + .../src/Faker/Provider/de_CH/Address.php | 197 + .../src/Faker/Provider/de_CH/Company.php | 15 + .../src/Faker/Provider/de_CH/Internet.php | 17 + .../src/Faker/Provider/de_CH/Payment.php | 22 + .../faker/src/Faker/Provider/de_CH/Person.php | 119 + .../src/Faker/Provider/de_CH/PhoneNumber.php | 47 + .../faker/src/Faker/Provider/de_CH/Text.php | 2038 + .../src/Faker/Provider/de_DE/Address.php | 126 + .../src/Faker/Provider/de_DE/Company.php | 24 + .../src/Faker/Provider/de_DE/Internet.php | 26 + .../src/Faker/Provider/de_DE/Payment.php | 60 + .../faker/src/Faker/Provider/de_DE/Person.php | 132 + .../src/Faker/Provider/de_DE/PhoneNumber.php | 127 + .../faker/src/Faker/Provider/de_DE/Text.php | 2038 + .../src/Faker/Provider/el_CY/Address.php | 55 + .../src/Faker/Provider/el_CY/Company.php | 18 + .../src/Faker/Provider/el_CY/Internet.php | 9 + .../src/Faker/Provider/el_CY/Payment.php | 50 + .../faker/src/Faker/Provider/el_CY/Person.php | 100 + .../src/Faker/Provider/el_CY/PhoneNumber.php | 32 + .../src/Faker/Provider/el_GR/Address.php | 61 + .../src/Faker/Provider/el_GR/Company.php | 84 + .../src/Faker/Provider/el_GR/Payment.php | 22 + .../faker/src/Faker/Provider/el_GR/Person.php | 181 + .../src/Faker/Provider/el_GR/PhoneNumber.php | 324 + .../faker/src/Faker/Provider/el_GR/Text.php | 2582 + .../src/Faker/Provider/en_AU/Address.php | 112 + .../src/Faker/Provider/en_AU/Internet.php | 9 + .../src/Faker/Provider/en_AU/PhoneNumber.php | 56 + .../src/Faker/Provider/en_CA/Address.php | 72 + .../src/Faker/Provider/en_CA/PhoneNumber.php | 18 + .../src/Faker/Provider/en_GB/Address.php | 174 + .../src/Faker/Provider/en_GB/Company.php | 130 + .../src/Faker/Provider/en_GB/Internet.php | 9 + .../src/Faker/Provider/en_GB/Payment.php | 22 + .../faker/src/Faker/Provider/en_GB/Person.php | 113 + .../src/Faker/Provider/en_GB/PhoneNumber.php | 49 + .../src/Faker/Provider/en_HK/Address.php | 239 + .../src/Faker/Provider/en_HK/Internet.php | 14 + .../src/Faker/Provider/en_HK/PhoneNumber.php | 41 + .../src/Faker/Provider/en_IN/Address.php | 188 + .../src/Faker/Provider/en_IN/Internet.php | 9 + .../faker/src/Faker/Provider/en_IN/Person.php | 125 + .../src/Faker/Provider/en_IN/PhoneNumber.php | 37 + .../src/Faker/Provider/en_NG/Address.php | 98 + .../src/Faker/Provider/en_NG/Internet.php | 8 + .../faker/src/Faker/Provider/en_NG/Person.php | 90 + .../src/Faker/Provider/en_NG/PhoneNumber.php | 133 + .../src/Faker/Provider/en_NZ/Address.php | 88 + .../src/Faker/Provider/en_NZ/Internet.php | 17 + .../src/Faker/Provider/en_NZ/PhoneNumber.php | 102 + .../src/Faker/Provider/en_PH/Address.php | 417 + .../src/Faker/Provider/en_PH/PhoneNumber.php | 59 + .../src/Faker/Provider/en_SG/Address.php | 125 + .../faker/src/Faker/Provider/en_SG/Person.php | 74 + .../src/Faker/Provider/en_SG/PhoneNumber.php | 105 + .../src/Faker/Provider/en_UG/Address.php | 101 + .../src/Faker/Provider/en_UG/Internet.php | 9 + .../faker/src/Faker/Provider/en_UG/Person.php | 133 + .../src/Faker/Provider/en_UG/PhoneNumber.php | 17 + .../src/Faker/Provider/en_US/Address.php | 97 + .../src/Faker/Provider/en_US/Company.php | 119 + .../src/Faker/Provider/en_US/Payment.php | 36 + .../faker/src/Faker/Provider/en_US/Person.php | 133 + .../src/Faker/Provider/en_US/PhoneNumber.php | 135 + .../faker/src/Faker/Provider/en_US/Text.php | 3721 + .../src/Faker/Provider/en_ZA/Address.php | 70 + .../src/Faker/Provider/en_ZA/Company.php | 26 + .../src/Faker/Provider/en_ZA/Internet.php | 23 + .../faker/src/Faker/Provider/en_ZA/Person.php | 182 + .../src/Faker/Provider/en_ZA/PhoneNumber.php | 116 + .../src/Faker/Provider/es_AR/Address.php | 68 + .../src/Faker/Provider/es_AR/Company.php | 68 + .../faker/src/Faker/Provider/es_AR/Person.php | 90 + .../src/Faker/Provider/es_AR/PhoneNumber.php | 42 + .../src/Faker/Provider/es_ES/Address.php | 101 + .../faker/src/Faker/Provider/es_ES/Color.php | 24 + .../src/Faker/Provider/es_ES/Company.php | 82 + .../src/Faker/Provider/es_ES/Internet.php | 9 + .../src/Faker/Provider/es_ES/Payment.php | 42 + .../faker/src/Faker/Provider/es_ES/Person.php | 149 + .../src/Faker/Provider/es_ES/PhoneNumber.php | 47 + .../faker/src/Faker/Provider/es_ES/Text.php | 688 + .../src/Faker/Provider/es_PE/Address.php | 65 + .../src/Faker/Provider/es_PE/Company.php | 88 + .../faker/src/Faker/Provider/es_PE/Person.php | 105 + .../src/Faker/Provider/es_PE/PhoneNumber.php | 17 + .../src/Faker/Provider/es_VE/Address.php | 72 + .../src/Faker/Provider/es_VE/Company.php | 42 + .../src/Faker/Provider/es_VE/Internet.php | 9 + .../faker/src/Faker/Provider/es_VE/Person.php | 176 + .../src/Faker/Provider/es_VE/PhoneNumber.php | 29 + .../faker/src/Faker/Provider/et_EE/Person.php | 84 + .../src/Faker/Provider/fa_IR/Address.php | 100 + .../src/Faker/Provider/fa_IR/Company.php | 60 + .../src/Faker/Provider/fa_IR/Internet.php | 102 + .../faker/src/Faker/Provider/fa_IR/Person.php | 210 + .../src/Faker/Provider/fa_IR/PhoneNumber.php | 76 + .../faker/src/Faker/Provider/fa_IR/Text.php | 551 + .../src/Faker/Provider/fi_FI/Address.php | 85 + .../src/Faker/Provider/fi_FI/Company.php | 66 + .../src/Faker/Provider/fi_FI/Internet.php | 9 + .../src/Faker/Provider/fi_FI/Payment.php | 22 + .../faker/src/Faker/Provider/fi_FI/Person.php | 154 + .../src/Faker/Provider/fi_FI/PhoneNumber.php | 101 + .../src/Faker/Provider/fr_BE/Address.php | 72 + .../faker/src/Faker/Provider/fr_BE/Color.php | 7 + .../src/Faker/Provider/fr_BE/Company.php | 13 + .../src/Faker/Provider/fr_BE/Internet.php | 9 + .../src/Faker/Provider/fr_BE/Payment.php | 42 + .../faker/src/Faker/Provider/fr_BE/Person.php | 49 + .../src/Faker/Provider/fr_BE/PhoneNumber.php | 20 + .../src/Faker/Provider/fr_CA/Address.php | 125 + .../faker/src/Faker/Provider/fr_CA/Color.php | 7 + .../src/Faker/Provider/fr_CA/Company.php | 7 + .../faker/src/Faker/Provider/fr_CA/Person.php | 82 + .../faker/src/Faker/Provider/fr_CA/Text.php | 2446 + .../src/Faker/Provider/fr_CH/Address.php | 150 + .../faker/src/Faker/Provider/fr_CH/Color.php | 7 + .../src/Faker/Provider/fr_CH/Company.php | 15 + .../src/Faker/Provider/fr_CH/Internet.php | 9 + .../src/Faker/Provider/fr_CH/Payment.php | 22 + .../faker/src/Faker/Provider/fr_CH/Person.php | 114 + .../src/Faker/Provider/fr_CH/PhoneNumber.php | 43 + .../faker/src/Faker/Provider/fr_CH/Text.php | 7 + .../src/Faker/Provider/fr_FR/Address.php | 151 + .../faker/src/Faker/Provider/fr_FR/Color.php | 40 + .../src/Faker/Provider/fr_FR/Company.php | 481 + .../src/Faker/Provider/fr_FR/Internet.php | 9 + .../src/Faker/Provider/fr_FR/Payment.php | 49 + .../faker/src/Faker/Provider/fr_FR/Person.php | 130 + .../src/Faker/Provider/fr_FR/PhoneNumber.php | 168 + .../faker/src/Faker/Provider/fr_FR/Text.php | 15532 ++ .../src/Faker/Provider/he_IL/Address.php | 122 + .../src/Faker/Provider/he_IL/Company.php | 14 + .../src/Faker/Provider/he_IL/Payment.php | 22 + .../faker/src/Faker/Provider/he_IL/Person.php | 132 + .../src/Faker/Provider/he_IL/PhoneNumber.php | 14 + .../src/Faker/Provider/hr_HR/Address.php | 68 + .../src/Faker/Provider/hr_HR/Company.php | 25 + .../src/Faker/Provider/hr_HR/Payment.php | 22 + .../faker/src/Faker/Provider/hr_HR/Person.php | 27 + .../src/Faker/Provider/hr_HR/PhoneNumber.php | 14 + .../src/Faker/Provider/hu_HU/Address.php | 148 + .../src/Faker/Provider/hu_HU/Company.php | 13 + .../src/Faker/Provider/hu_HU/Payment.php | 22 + .../faker/src/Faker/Provider/hu_HU/Person.php | 101 + .../src/Faker/Provider/hu_HU/PhoneNumber.php | 14 + .../faker/src/Faker/Provider/hu_HU/Text.php | 3407 + .../src/Faker/Provider/hy_AM/Address.php | 132 + .../faker/src/Faker/Provider/hy_AM/Color.php | 12 + .../src/Faker/Provider/hy_AM/Company.php | 56 + .../src/Faker/Provider/hy_AM/Internet.php | 9 + .../faker/src/Faker/Provider/hy_AM/Person.php | 110 + .../src/Faker/Provider/hy_AM/PhoneNumber.php | 36 + .../src/Faker/Provider/id_ID/Address.php | 319 + .../faker/src/Faker/Provider/id_ID/Color.php | 40 + .../src/Faker/Provider/id_ID/Company.php | 64 + .../src/Faker/Provider/id_ID/Internet.php | 25 + .../faker/src/Faker/Provider/id_ID/Person.php | 343 + .../src/Faker/Provider/id_ID/PhoneNumber.php | 55 + .../src/Faker/Provider/is_IS/Address.php | 175 + .../src/Faker/Provider/is_IS/Company.php | 50 + .../src/Faker/Provider/is_IS/Internet.php | 20 + .../src/Faker/Provider/is_IS/Payment.php | 22 + .../faker/src/Faker/Provider/is_IS/Person.php | 142 + .../src/Faker/Provider/is_IS/PhoneNumber.php | 17 + .../src/Faker/Provider/it_CH/Address.php | 149 + .../src/Faker/Provider/it_CH/Company.php | 15 + .../src/Faker/Provider/it_CH/Internet.php | 9 + .../src/Faker/Provider/it_CH/Payment.php | 22 + .../faker/src/Faker/Provider/it_CH/Person.php | 102 + .../src/Faker/Provider/it_CH/PhoneNumber.php | 43 + .../faker/src/Faker/Provider/it_CH/Text.php | 7 + .../src/Faker/Provider/it_IT/Address.php | 97 + .../src/Faker/Provider/it_IT/Company.php | 95 + .../src/Faker/Provider/it_IT/Internet.php | 9 + .../src/Faker/Provider/it_IT/Payment.php | 22 + .../faker/src/Faker/Provider/it_IT/Person.php | 113 + .../src/Faker/Provider/it_IT/PhoneNumber.php | 21 + .../faker/src/Faker/Provider/it_IT/Text.php | 2079 + .../src/Faker/Provider/ja_JP/Address.php | 137 + .../src/Faker/Provider/ja_JP/Company.php | 17 + .../src/Faker/Provider/ja_JP/Internet.php | 93 + .../faker/src/Faker/Provider/ja_JP/Person.php | 147 + .../src/Faker/Provider/ja_JP/PhoneNumber.php | 19 + .../faker/src/Faker/Provider/ja_JP/Text.php | 640 + .../src/Faker/Provider/ka_GE/Address.php | 139 + .../faker/src/Faker/Provider/ka_GE/Color.php | 16 + .../src/Faker/Provider/ka_GE/Company.php | 53 + .../src/Faker/Provider/ka_GE/DateTime.php | 43 + .../src/Faker/Provider/ka_GE/Internet.php | 15 + .../src/Faker/Provider/ka_GE/Payment.php | 55 + .../faker/src/Faker/Provider/ka_GE/Person.php | 63 + .../src/Faker/Provider/ka_GE/PhoneNumber.php | 14 + .../faker/src/Faker/Provider/ka_GE/Text.php | 1000 + .../src/Faker/Provider/kk_KZ/Address.php | 105 + .../faker/src/Faker/Provider/kk_KZ/Color.php | 12 + .../src/Faker/Provider/kk_KZ/Company.php | 72 + .../src/Faker/Provider/kk_KZ/Internet.php | 9 + .../src/Faker/Provider/kk_KZ/Payment.php | 35 + .../faker/src/Faker/Provider/kk_KZ/Person.php | 265 + .../src/Faker/Provider/kk_KZ/PhoneNumber.php | 16 + .../faker/src/Faker/Provider/kk_KZ/Text.php | 492 + .../src/Faker/Provider/ko_KR/Address.php | 96 + .../src/Faker/Provider/ko_KR/Company.php | 31 + .../src/Faker/Provider/ko_KR/Internet.php | 86 + .../faker/src/Faker/Provider/ko_KR/Person.php | 54 + .../src/Faker/Provider/ko_KR/PhoneNumber.php | 40 + .../faker/src/Faker/Provider/ko_KR/Text.php | 1725 + .../src/Faker/Provider/lt_LT/Address.php | 209 + .../src/Faker/Provider/lt_LT/Company.php | 15 + .../src/Faker/Provider/lt_LT/Internet.php | 18 + .../src/Faker/Provider/lt_LT/Payment.php | 22 + .../faker/src/Faker/Provider/lt_LT/Person.php | 390 + .../src/Faker/Provider/lt_LT/PhoneNumber.php | 17 + .../src/Faker/Provider/lv_LV/Address.php | 117 + .../faker/src/Faker/Provider/lv_LV/Color.php | 19 + .../src/Faker/Provider/lv_LV/Internet.php | 9 + .../src/Faker/Provider/lv_LV/Payment.php | 22 + .../faker/src/Faker/Provider/lv_LV/Person.php | 173 + .../src/Faker/Provider/lv_LV/PhoneNumber.php | 15 + .../src/Faker/Provider/me_ME/Address.php | 119 + .../src/Faker/Provider/me_ME/Company.php | 49 + .../src/Faker/Provider/me_ME/Payment.php | 22 + .../faker/src/Faker/Provider/me_ME/Person.php | 102 + .../src/Faker/Provider/me_ME/PhoneNumber.php | 15 + .../faker/src/Faker/Provider/mn_MN/Person.php | 102 + .../src/Faker/Provider/mn_MN/PhoneNumber.php | 13 + .../src/Faker/Provider/ms_MY/Address.php | 710 + .../src/Faker/Provider/ms_MY/Company.php | 105 + .../Faker/Provider/ms_MY/Miscellaneous.php | 169 + .../src/Faker/Provider/ms_MY/Payment.php | 244 + .../faker/src/Faker/Provider/ms_MY/Person.php | 812 + .../src/Faker/Provider/ms_MY/PhoneNumber.php | 217 + .../src/Faker/Provider/nb_NO/Address.php | 197 + .../src/Faker/Provider/nb_NO/Company.php | 57 + .../src/Faker/Provider/nb_NO/Payment.php | 22 + .../faker/src/Faker/Provider/nb_NO/Person.php | 335 + .../src/Faker/Provider/nb_NO/PhoneNumber.php | 41 + .../src/Faker/Provider/ne_NP/Address.php | 131 + .../src/Faker/Provider/ne_NP/Internet.php | 32 + .../src/Faker/Provider/ne_NP/Payment.php | 316 + .../faker/src/Faker/Provider/ne_NP/Person.php | 121 + .../src/Faker/Provider/ne_NP/PhoneNumber.php | 19 + .../src/Faker/Provider/nl_BE/Address.php | 124 + .../src/Faker/Provider/nl_BE/Company.php | 13 + .../src/Faker/Provider/nl_BE/Internet.php | 9 + .../src/Faker/Provider/nl_BE/Payment.php | 49 + .../faker/src/Faker/Provider/nl_BE/Person.php | 108 + .../src/Faker/Provider/nl_BE/PhoneNumber.php | 20 + .../faker/src/Faker/Provider/nl_BE/Text.php | 25348 ++++ .../src/Faker/Provider/nl_NL/Address.php | 153 + .../faker/src/Faker/Provider/nl_NL/Color.php | 36 + .../src/Faker/Provider/nl_NL/Company.php | 122 + .../src/Faker/Provider/nl_NL/Internet.php | 9 + .../src/Faker/Provider/nl_NL/Payment.php | 22 + .../faker/src/Faker/Provider/nl_NL/Person.php | 353 + .../src/Faker/Provider/nl_NL/PhoneNumber.php | 39 + .../faker/src/Faker/Provider/nl_NL/Text.php | 3933 + .../src/Faker/Provider/pl_PL/Address.php | 209 + .../faker/src/Faker/Provider/pl_PL/Color.php | 40 + .../src/Faker/Provider/pl_PL/Company.php | 90 + .../src/Faker/Provider/pl_PL/Internet.php | 9 + .../src/Faker/Provider/pl_PL/LicensePlate.php | 545 + .../src/Faker/Provider/pl_PL/Payment.php | 120 + .../faker/src/Faker/Provider/pl_PL/Person.php | 243 + .../src/Faker/Provider/pl_PL/PhoneNumber.php | 18 + .../faker/src/Faker/Provider/pl_PL/Text.php | 2867 + .../src/Faker/Provider/pt_BR/Address.php | 154 + .../src/Faker/Provider/pt_BR/Company.php | 36 + .../src/Faker/Provider/pt_BR/Internet.php | 9 + .../src/Faker/Provider/pt_BR/Payment.php | 148 + .../faker/src/Faker/Provider/pt_BR/Person.php | 159 + .../src/Faker/Provider/pt_BR/PhoneNumber.php | 150 + .../faker/src/Faker/Provider/pt_BR/Text.php | 3427 + .../src/Faker/Provider/pt_BR/check_digit.php | 39 + .../src/Faker/Provider/pt_PT/Address.php | 130 + .../src/Faker/Provider/pt_PT/Company.php | 16 + .../src/Faker/Provider/pt_PT/Internet.php | 9 + .../src/Faker/Provider/pt_PT/Payment.php | 22 + .../faker/src/Faker/Provider/pt_PT/Person.php | 147 + .../src/Faker/Provider/pt_PT/PhoneNumber.php | 50 + .../src/Faker/Provider/ro_MD/Address.php | 125 + .../src/Faker/Provider/ro_MD/Payment.php | 22 + .../faker/src/Faker/Provider/ro_MD/Person.php | 91 + .../src/Faker/Provider/ro_MD/PhoneNumber.php | 33 + .../faker/src/Faker/Provider/ro_MD/Text.php | 2465 + .../src/Faker/Provider/ro_RO/Address.php | 153 + .../src/Faker/Provider/ro_RO/Payment.php | 22 + .../faker/src/Faker/Provider/ro_RO/Person.php | 251 + .../src/Faker/Provider/ro_RO/PhoneNumber.php | 62 + .../faker/src/Faker/Provider/ro_RO/Text.php | 155 + .../src/Faker/Provider/ru_RU/Address.php | 139 + .../faker/src/Faker/Provider/ru_RU/Color.php | 23 + .../src/Faker/Provider/ru_RU/Company.php | 178 + .../src/Faker/Provider/ru_RU/Internet.php | 9 + .../src/Faker/Provider/ru_RU/Payment.php | 812 + .../faker/src/Faker/Provider/ru_RU/Person.php | 188 + .../src/Faker/Provider/ru_RU/PhoneNumber.php | 14 + .../faker/src/Faker/Provider/ru_RU/Text.php | 4551 + .../src/Faker/Provider/sk_SK/Address.php | 343 + .../src/Faker/Provider/sk_SK/Company.php | 66 + .../src/Faker/Provider/sk_SK/Internet.php | 9 + .../src/Faker/Provider/sk_SK/Payment.php | 22 + .../faker/src/Faker/Provider/sk_SK/Person.php | 171 + .../src/Faker/Provider/sk_SK/PhoneNumber.php | 15 + .../src/Faker/Provider/sl_SI/Address.php | 106 + .../src/Faker/Provider/sl_SI/Company.php | 14 + .../src/Faker/Provider/sl_SI/Internet.php | 10 + .../src/Faker/Provider/sl_SI/Payment.php | 22 + .../faker/src/Faker/Provider/sl_SI/Person.php | 149 + .../src/Faker/Provider/sl_SI/PhoneNumber.php | 18 + .../src/Faker/Provider/sr_Cyrl_RS/Address.php | 58 + .../src/Faker/Provider/sr_Cyrl_RS/Payment.php | 22 + .../src/Faker/Provider/sr_Cyrl_RS/Person.php | 242 + .../src/Faker/Provider/sr_Latn_RS/Address.php | 58 + .../src/Faker/Provider/sr_Latn_RS/Payment.php | 22 + .../src/Faker/Provider/sr_Latn_RS/Person.php | 213 + .../src/Faker/Provider/sr_RS/Address.php | 58 + .../src/Faker/Provider/sr_RS/Payment.php | 22 + .../faker/src/Faker/Provider/sr_RS/Person.php | 143 + .../src/Faker/Provider/sv_SE/Address.php | 151 + .../src/Faker/Provider/sv_SE/Company.php | 26 + .../src/Faker/Provider/sv_SE/Municipality.php | 27 + .../src/Faker/Provider/sv_SE/Payment.php | 22 + .../faker/src/Faker/Provider/sv_SE/Person.php | 170 + .../src/Faker/Provider/sv_SE/PhoneNumber.php | 64 + .../src/Faker/Provider/th_TH/Address.php | 141 + .../faker/src/Faker/Provider/th_TH/Color.php | 16 + .../src/Faker/Provider/th_TH/Company.php | 32 + .../src/Faker/Provider/th_TH/Internet.php | 8 + .../src/Faker/Provider/th_TH/Payment.php | 44 + .../faker/src/Faker/Provider/th_TH/Person.php | 87 + .../src/Faker/Provider/th_TH/PhoneNumber.php | 39 + .../src/Faker/Provider/tr_TR/Address.php | 94 + .../faker/src/Faker/Provider/tr_TR/Color.php | 58 + .../src/Faker/Provider/tr_TR/Company.php | 100 + .../src/Faker/Provider/tr_TR/DateTime.php | 48 + .../src/Faker/Provider/tr_TR/Internet.php | 9 + .../src/Faker/Provider/tr_TR/Payment.php | 22 + .../faker/src/Faker/Provider/tr_TR/Person.php | 159 + .../src/Faker/Provider/tr_TR/PhoneNumber.php | 186 + .../src/Faker/Provider/uk_UA/Address.php | 364 + .../faker/src/Faker/Provider/uk_UA/Color.php | 23 + .../src/Faker/Provider/uk_UA/Company.php | 74 + .../src/Faker/Provider/uk_UA/Internet.php | 9 + .../src/Faker/Provider/uk_UA/Payment.php | 41 + .../faker/src/Faker/Provider/uk_UA/Person.php | 101 + .../src/Faker/Provider/uk_UA/PhoneNumber.php | 72 + .../faker/src/Faker/Provider/uk_UA/Text.php | 4512 + .../src/Faker/Provider/vi_VN/Address.php | 170 + .../faker/src/Faker/Provider/vi_VN/Color.php | 36 + .../src/Faker/Provider/vi_VN/Internet.php | 8 + .../faker/src/Faker/Provider/vi_VN/Person.php | 186 + .../src/Faker/Provider/vi_VN/PhoneNumber.php | 61 + .../src/Faker/Provider/zh_CN/Address.php | 148 + .../faker/src/Faker/Provider/zh_CN/Color.php | 66 + .../src/Faker/Provider/zh_CN/Company.php | 235 + .../src/Faker/Provider/zh_CN/DateTime.php | 48 + .../src/Faker/Provider/zh_CN/Internet.php | 24 + .../src/Faker/Provider/zh_CN/Payment.php | 43 + .../faker/src/Faker/Provider/zh_CN/Person.php | 83 + .../src/Faker/Provider/zh_CN/PhoneNumber.php | 23 + .../src/Faker/Provider/zh_TW/Address.php | 421 + .../faker/src/Faker/Provider/zh_TW/Color.php | 66 + .../src/Faker/Provider/zh_TW/Company.php | 268 + .../src/Faker/Provider/zh_TW/DateTime.php | 48 + .../src/Faker/Provider/zh_TW/Internet.php | 28 + .../src/Faker/Provider/zh_TW/Payment.php | 21 + .../faker/src/Faker/Provider/zh_TW/Person.php | 201 + .../src/Faker/Provider/zh_TW/PhoneNumber.php | 19 + .../faker/src/Faker/Provider/zh_TW/Text.php | 900 + .../faker/src/Faker/UniqueGenerator.php | 87 + .../faker/src/Faker/ValidGenerator.php | 78 + vendor/fakerphp/faker/src/autoload.php | 29 + vendor/google/recaptcha/LICENSE | 29 + vendor/google/recaptcha/README.md | 147 + vendor/google/recaptcha/app.yaml | 8 + vendor/google/recaptcha/composer.json | 39 + .../recaptcha/src/ReCaptcha/ReCaptcha.php | 275 + .../recaptcha/src/ReCaptcha/RequestMethod.php | 49 + .../src/ReCaptcha/RequestMethod/Curl.php | 81 + .../src/ReCaptcha/RequestMethod/CurlPost.php | 104 + .../src/ReCaptcha/RequestMethod/Post.php | 88 + .../src/ReCaptcha/RequestMethod/Socket.php | 112 + .../ReCaptcha/RequestMethod/SocketPost.php | 110 + .../src/ReCaptcha/RequestParameters.php | 111 + .../recaptcha/src/ReCaptcha/Response.php | 218 + vendor/google/recaptcha/src/autoload.php | 69 + vendor/guzzlehttp/guzzle/CHANGELOG.md | 1664 + vendor/guzzlehttp/guzzle/LICENSE | 27 + vendor/guzzlehttp/guzzle/README.md | 94 + vendor/guzzlehttp/guzzle/UPGRADING.md | 1253 + vendor/guzzlehttp/guzzle/composer.json | 131 + .../guzzlehttp/guzzle/src/BodySummarizer.php | 28 + .../guzzle/src/BodySummarizerInterface.php | 13 + vendor/guzzlehttp/guzzle/src/Client.php | 483 + .../guzzlehttp/guzzle/src/ClientInterface.php | 84 + vendor/guzzlehttp/guzzle/src/ClientTrait.php | 241 + .../guzzle/src/Cookie/CookieJar.php | 307 + .../guzzle/src/Cookie/CookieJarInterface.php | 80 + .../guzzle/src/Cookie/FileCookieJar.php | 101 + .../guzzle/src/Cookie/SessionCookieJar.php | 77 + .../guzzle/src/Cookie/SetCookie.php | 488 + .../src/Exception/BadResponseException.php | 39 + .../guzzle/src/Exception/ClientException.php | 10 + .../guzzle/src/Exception/ConnectException.php | 56 + .../guzzle/src/Exception/GuzzleException.php | 9 + .../Exception/InvalidArgumentException.php | 7 + .../guzzle/src/Exception/RequestException.php | 150 + .../guzzle/src/Exception/ServerException.php | 10 + .../Exception/TooManyRedirectsException.php | 7 + .../src/Exception/TransferException.php | 7 + .../guzzle/src/Handler/CurlFactory.php | 736 + .../src/Handler/CurlFactoryInterface.php | 25 + .../guzzle/src/Handler/CurlHandler.php | 49 + .../guzzle/src/Handler/CurlMultiHandler.php | 284 + .../guzzle/src/Handler/EasyHandle.php | 112 + .../guzzle/src/Handler/HeaderProcessor.php | 42 + .../guzzle/src/Handler/MockHandler.php | 212 + .../guzzlehttp/guzzle/src/Handler/Proxy.php | 51 + .../guzzle/src/Handler/StreamHandler.php | 621 + vendor/guzzlehttp/guzzle/src/HandlerStack.php | 275 + .../guzzle/src/MessageFormatter.php | 199 + .../guzzle/src/MessageFormatterInterface.php | 18 + vendor/guzzlehttp/guzzle/src/Middleware.php | 268 + vendor/guzzlehttp/guzzle/src/Pool.php | 125 + .../guzzle/src/PrepareBodyMiddleware.php | 105 + .../guzzle/src/RedirectMiddleware.php | 228 + .../guzzlehttp/guzzle/src/RequestOptions.php | 274 + .../guzzlehttp/guzzle/src/RetryMiddleware.php | 119 + .../guzzlehttp/guzzle/src/TransferStats.php | 133 + vendor/guzzlehttp/guzzle/src/Utils.php | 384 + vendor/guzzlehttp/guzzle/src/functions.php | 167 + .../guzzle/src/functions_include.php | 6 + vendor/guzzlehttp/promises/CHANGELOG.md | 166 + vendor/guzzlehttp/promises/LICENSE | 24 + vendor/guzzlehttp/promises/README.md | 559 + vendor/guzzlehttp/promises/composer.json | 58 + .../promises/src/AggregateException.php | 19 + .../promises/src/CancellationException.php | 12 + vendor/guzzlehttp/promises/src/Coroutine.php | 162 + vendor/guzzlehttp/promises/src/Create.php | 79 + vendor/guzzlehttp/promises/src/Each.php | 81 + .../guzzlehttp/promises/src/EachPromise.php | 248 + .../promises/src/FulfilledPromise.php | 89 + vendor/guzzlehttp/promises/src/Is.php | 40 + vendor/guzzlehttp/promises/src/Promise.php | 281 + .../promises/src/PromiseInterface.php | 91 + .../promises/src/PromisorInterface.php | 16 + .../promises/src/RejectedPromise.php | 95 + .../promises/src/RejectionException.php | 49 + vendor/guzzlehttp/promises/src/TaskQueue.php | 71 + .../promises/src/TaskQueueInterface.php | 24 + vendor/guzzlehttp/promises/src/Utils.php | 261 + vendor/guzzlehttp/psr7/CHANGELOG.md | 465 + vendor/guzzlehttp/psr7/LICENSE | 26 + vendor/guzzlehttp/psr7/README.md | 887 + vendor/guzzlehttp/psr7/composer.json | 93 + vendor/guzzlehttp/psr7/src/AppendStream.php | 248 + vendor/guzzlehttp/psr7/src/BufferStream.php | 147 + vendor/guzzlehttp/psr7/src/CachingStream.php | 153 + vendor/guzzlehttp/psr7/src/DroppingStream.php | 49 + .../src/Exception/MalformedUriException.php | 14 + vendor/guzzlehttp/psr7/src/FnStream.php | 180 + vendor/guzzlehttp/psr7/src/Header.php | 134 + vendor/guzzlehttp/psr7/src/HttpFactory.php | 94 + vendor/guzzlehttp/psr7/src/InflateStream.php | 37 + vendor/guzzlehttp/psr7/src/LazyOpenStream.php | 49 + vendor/guzzlehttp/psr7/src/LimitStream.php | 157 + vendor/guzzlehttp/psr7/src/Message.php | 246 + vendor/guzzlehttp/psr7/src/MessageTrait.php | 265 + vendor/guzzlehttp/psr7/src/MimeType.php | 1259 + .../guzzlehttp/psr7/src/MultipartStream.php | 165 + vendor/guzzlehttp/psr7/src/NoSeekStream.php | 28 + vendor/guzzlehttp/psr7/src/PumpStream.php | 179 + vendor/guzzlehttp/psr7/src/Query.php | 118 + vendor/guzzlehttp/psr7/src/Request.php | 159 + vendor/guzzlehttp/psr7/src/Response.php | 161 + vendor/guzzlehttp/psr7/src/Rfc7230.php | 23 + vendor/guzzlehttp/psr7/src/ServerRequest.php | 340 + vendor/guzzlehttp/psr7/src/Stream.php | 283 + .../psr7/src/StreamDecoratorTrait.php | 156 + vendor/guzzlehttp/psr7/src/StreamWrapper.php | 207 + vendor/guzzlehttp/psr7/src/UploadedFile.php | 211 + vendor/guzzlehttp/psr7/src/Uri.php | 743 + vendor/guzzlehttp/psr7/src/UriComparator.php | 52 + vendor/guzzlehttp/psr7/src/UriNormalizer.php | 220 + vendor/guzzlehttp/psr7/src/UriResolver.php | 211 + vendor/guzzlehttp/psr7/src/Utils.php | 477 + vendor/illuminate/collections/Arr.php | 747 + vendor/illuminate/collections/Collection.php | 1672 + vendor/illuminate/collections/Enumerable.php | 1027 + .../HigherOrderCollectionProxy.php | 63 + .../collections/HigherOrderWhenProxy.php | 63 + .../collections/ItemNotFoundException.php | 9 + vendor/illuminate/collections/LICENSE.md | 21 + .../illuminate/collections/LazyCollection.php | 1585 + .../MultipleItemsFoundException.php | 9 + .../collections/Traits/EnumeratesValues.php | 1116 + vendor/illuminate/collections/composer.json | 41 + vendor/illuminate/collections/helpers.php | 186 + vendor/illuminate/container/BoundMethod.php | 204 + vendor/illuminate/container/Container.php | 1471 + .../container/ContextualBindingBuilder.php | 98 + .../container/EntryNotFoundException.php | 11 + vendor/illuminate/container/LICENSE.md | 21 + .../container/RewindableGenerator.php | 62 + vendor/illuminate/container/Util.php | 73 + vendor/illuminate/container/composer.json | 38 + .../contracts/Auth/Access/Authorizable.php | 15 + .../illuminate/contracts/Auth/Access/Gate.php | 150 + .../contracts/Auth/Authenticatable.php | 49 + .../contracts/Auth/CanResetPassword.php | 21 + vendor/illuminate/contracts/Auth/Factory.php | 22 + vendor/illuminate/contracts/Auth/Guard.php | 50 + .../Auth/Middleware/AuthenticatesRequests.php | 8 + .../contracts/Auth/MustVerifyEmail.php | 34 + .../contracts/Auth/PasswordBroker.php | 61 + .../contracts/Auth/PasswordBrokerFactory.php | 14 + .../contracts/Auth/StatefulGuard.php | 63 + .../contracts/Auth/SupportsBasicAuth.php | 24 + .../contracts/Auth/UserProvider.php | 49 + .../contracts/Broadcasting/Broadcaster.php | 33 + .../contracts/Broadcasting/Factory.php | 14 + .../Broadcasting/HasBroadcastChannel.php | 20 + .../Broadcasting/ShouldBroadcast.php | 13 + .../Broadcasting/ShouldBroadcastNow.php | 8 + .../illuminate/contracts/Bus/Dispatcher.php | 66 + .../contracts/Bus/QueueingDispatcher.php | 30 + vendor/illuminate/contracts/Cache/Factory.php | 14 + vendor/illuminate/contracts/Cache/Lock.php | 44 + .../contracts/Cache/LockProvider.php | 25 + .../contracts/Cache/LockTimeoutException.php | 10 + .../illuminate/contracts/Cache/Repository.php | 108 + vendor/illuminate/contracts/Cache/Store.php | 92 + .../contracts/Config/Repository.php | 57 + .../contracts/Console/Application.php | 23 + .../illuminate/contracts/Console/Kernel.php | 64 + .../Container/BindingResolutionException.php | 11 + .../Container/CircularDependencyException.php | 11 + .../contracts/Container/Container.php | 183 + .../Container/ContextualBindingBuilder.php | 30 + .../illuminate/contracts/Cookie/Factory.php | 47 + .../contracts/Cookie/QueueingFactory.php | 30 + .../contracts/Database/Eloquent/Castable.php | 15 + .../Database/Eloquent/CastsAttributes.php | 28 + .../Eloquent/CastsInboundAttributes.php | 17 + .../Eloquent/DeviatesCastableAttributes.php | 28 + .../Eloquent/SerializesCastableAttributes.php | 17 + .../Eloquent/SupportsPartialRelations.php | 30 + .../Database/Events/MigrationEvent.php | 8 + .../contracts/Database/ModelIdentifier.php | 53 + .../contracts/Debug/ExceptionHandler.php | 46 + .../contracts/Encryption/DecryptException.php | 10 + .../contracts/Encryption/EncryptException.php | 10 + .../contracts/Encryption/Encrypter.php | 28 + .../contracts/Encryption/StringEncrypter.php | 26 + .../contracts/Events/Dispatcher.php | 82 + .../illuminate/contracts/Filesystem/Cloud.php | 14 + .../contracts/Filesystem/Factory.php | 14 + .../Filesystem/FileExistsException.php | 10 + .../Filesystem/FileNotFoundException.php | 10 + .../contracts/Filesystem/Filesystem.php | 198 + .../Filesystem/LockTimeoutException.php | 10 + .../contracts/Foundation/Application.php | 215 + .../Foundation/CachesConfiguration.php | 27 + .../contracts/Foundation/CachesRoutes.php | 20 + .../illuminate/contracts/Hashing/Hasher.php | 42 + vendor/illuminate/contracts/Http/Kernel.php | 37 + vendor/illuminate/contracts/LICENSE.md | 21 + vendor/illuminate/contracts/Mail/Factory.php | 14 + .../illuminate/contracts/Mail/MailQueue.php | 25 + vendor/illuminate/contracts/Mail/Mailable.php | 76 + vendor/illuminate/contracts/Mail/Mailer.php | 48 + .../contracts/Notifications/Dispatcher.php | 24 + .../contracts/Notifications/Factory.php | 32 + .../contracts/Pagination/CursorPaginator.php | 117 + .../Pagination/LengthAwarePaginator.php | 29 + .../contracts/Pagination/Paginator.php | 124 + vendor/illuminate/contracts/Pipeline/Hub.php | 15 + .../contracts/Pipeline/Pipeline.php | 40 + .../contracts/Queue/ClearableQueue.php | 14 + .../Queue/EntityNotFoundException.php | 22 + .../contracts/Queue/EntityResolver.php | 15 + vendor/illuminate/contracts/Queue/Factory.php | 14 + vendor/illuminate/contracts/Queue/Job.php | 166 + vendor/illuminate/contracts/Queue/Monitor.php | 30 + vendor/illuminate/contracts/Queue/Queue.php | 99 + .../contracts/Queue/QueueableCollection.php | 34 + .../contracts/Queue/QueueableEntity.php | 27 + .../contracts/Queue/ShouldBeEncrypted.php | 8 + .../contracts/Queue/ShouldBeUnique.php | 8 + .../Queue/ShouldBeUniqueUntilProcessing.php | 8 + .../contracts/Queue/ShouldQueue.php | 8 + .../illuminate/contracts/Redis/Connection.php | 35 + .../illuminate/contracts/Redis/Connector.php | 25 + vendor/illuminate/contracts/Redis/Factory.php | 14 + .../Redis/LimiterTimeoutException.php | 10 + .../contracts/Routing/BindingRegistrar.php | 23 + .../contracts/Routing/Registrar.php | 105 + .../contracts/Routing/ResponseFactory.php | 155 + .../contracts/Routing/UrlGenerator.php | 79 + .../contracts/Routing/UrlRoutable.php | 39 + .../illuminate/contracts/Session/Session.php | 204 + .../contracts/Support/Arrayable.php | 13 + .../Support/CanBeEscapedWhenCastToString.php | 14 + .../contracts/Support/DeferrableProvider.php | 13 + .../Support/DeferringDisplayableValue.php | 13 + .../illuminate/contracts/Support/Htmlable.php | 13 + .../illuminate/contracts/Support/Jsonable.php | 14 + .../contracts/Support/MessageBag.php | 102 + .../contracts/Support/MessageProvider.php | 13 + .../contracts/Support/Renderable.php | 13 + .../contracts/Support/Responsable.php | 14 + .../contracts/Support/ValidatedData.php | 11 + .../Translation/HasLocalePreference.php | 13 + .../contracts/Translation/Loader.php | 40 + .../contracts/Translation/Translator.php | 42 + .../contracts/Validation/DataAwareRule.php | 14 + .../contracts/Validation/Factory.php | 46 + .../contracts/Validation/ImplicitRule.php | 8 + .../illuminate/contracts/Validation/Rule.php | 22 + .../Validation/UncompromisedVerifier.php | 14 + .../Validation/ValidatesWhenResolved.php | 13 + .../contracts/Validation/Validator.php | 65 + .../Validation/ValidatorAwareRule.php | 14 + vendor/illuminate/contracts/View/Engine.php | 15 + vendor/illuminate/contracts/View/Factory.php | 79 + vendor/illuminate/contracts/View/View.php | 31 + vendor/illuminate/contracts/composer.json | 35 + .../illuminate/database/Capsule/Manager.php | 202 + .../database/ClassMorphViolationException.php | 29 + .../database/Concerns/BuildsQueries.php | 496 + .../database/Concerns/ExplainsQueries.php | 24 + .../database/Concerns/ManagesTransactions.php | 334 + .../database/ConfigurationUrlParser.php | 10 + vendor/illuminate/database/Connection.php | 1476 + .../database/ConnectionInterface.php | 170 + .../database/ConnectionResolver.php | 92 + .../database/ConnectionResolverInterface.php | 29 + .../database/Connectors/ConnectionFactory.php | 289 + .../database/Connectors/Connector.php | 139 + .../Connectors/ConnectorInterface.php | 14 + .../database/Connectors/MySqlConnector.php | 208 + .../database/Connectors/PostgresConnector.php | 210 + .../database/Connectors/SQLiteConnector.php | 39 + .../Connectors/SqlServerConnector.php | 205 + .../illuminate/database/Console/DbCommand.php | 219 + .../database/Console/DumpCommand.php | 86 + .../Console/Factories/FactoryMakeCommand.php | 143 + .../Console/Factories/stubs/factory.stub | 20 + .../Console/Migrations/BaseCommand.php | 51 + .../Console/Migrations/FreshCommand.php | 116 + .../Console/Migrations/InstallCommand.php | 70 + .../Console/Migrations/MigrateCommand.php | 181 + .../Console/Migrations/MigrateMakeCommand.php | 135 + .../Console/Migrations/RefreshCommand.php | 159 + .../Console/Migrations/ResetCommand.php | 91 + .../Console/Migrations/RollbackCommand.php | 91 + .../Console/Migrations/StatusCommand.php | 115 + .../Console/Migrations/TableGuesser.php | 37 + .../database/Console/PruneCommand.php | 165 + .../database/Console/Seeds/SeedCommand.php | 138 + .../Console/Seeds/SeederMakeCommand.php | 88 + .../database/Console/Seeds/stubs/seeder.stub | 18 + .../database/Console/WipeCommand.php | 112 + .../database/DBAL/TimestampType.php | 110 + .../illuminate/database/DatabaseManager.php | 444 + .../database/DatabaseServiceProvider.php | 109 + .../database/DatabaseTransactionRecord.php | 73 + .../database/DatabaseTransactionsManager.php | 96 + .../database/DetectsConcurrencyErrors.php | 37 + .../database/DetectsLostConnections.php | 62 + .../BroadcastableModelEventOccurred.php | 137 + .../database/Eloquent/BroadcastsEvents.php | 197 + .../illuminate/database/Eloquent/Builder.php | 1740 + .../database/Eloquent/Casts/ArrayObject.php | 41 + .../database/Eloquent/Casts/AsArrayObject.php | 36 + .../database/Eloquent/Casts/AsCollection.php | 32 + .../Eloquent/Casts/AsEncryptedArrayObject.php | 45 + .../Eloquent/Casts/AsEncryptedCollection.php | 41 + .../database/Eloquent/Casts/AsStringable.php | 32 + .../database/Eloquent/Casts/Attribute.php | 74 + .../database/Eloquent/Collection.php | 750 + .../Eloquent/Concerns/GuardsAttributes.php | 257 + .../Eloquent/Concerns/HasAttributes.php | 2129 + .../database/Eloquent/Concerns/HasEvents.php | 415 + .../Eloquent/Concerns/HasGlobalScopes.php | 71 + .../Eloquent/Concerns/HasRelationships.php | 875 + .../Eloquent/Concerns/HasTimestamps.php | 149 + .../Eloquent/Concerns/HidesAttributes.php | 126 + .../Concerns/QueriesRelationships.php | 758 + .../Factories/BelongsToManyRelationship.php | 61 + .../Factories/BelongsToRelationship.php | 80 + .../Eloquent/Factories/CrossJoinSequence.php | 26 + .../database/Eloquent/Factories/Factory.php | 836 + .../Eloquent/Factories/HasFactory.php | 31 + .../Eloquent/Factories/Relationship.php | 62 + .../database/Eloquent/Factories/Sequence.php | 63 + .../Eloquent/HigherOrderBuilderProxy.php | 50 + .../Eloquent/InvalidCastException.php | 48 + .../Eloquent/JsonEncodingException.php | 49 + .../Eloquent/MassAssignmentException.php | 10 + .../database/Eloquent/MassPrunable.php | 48 + vendor/illuminate/database/Eloquent/Model.php | 2198 + .../Eloquent/ModelNotFoundException.php | 66 + .../illuminate/database/Eloquent/Prunable.php | 67 + .../database/Eloquent/QueueEntityResolver.php | 29 + .../Eloquent/RelationNotFoundException.php | 46 + .../database/Eloquent/Relations/BelongsTo.php | 383 + .../Eloquent/Relations/BelongsToMany.php | 1435 + .../Eloquent/Relations/Concerns/AsPivot.php | 332 + .../Relations/Concerns/CanBeOneOfMany.php | 313 + .../Concerns/ComparesRelatedModels.php | 77 + .../Concerns/InteractsWithDictionary.php | 35 + .../Concerns/InteractsWithPivotTable.php | 686 + .../Concerns/SupportsDefaultModels.php | 63 + .../database/Eloquent/Relations/HasMany.php | 49 + .../Eloquent/Relations/HasManyThrough.php | 718 + .../database/Eloquent/Relations/HasOne.php | 137 + .../Eloquent/Relations/HasOneOrMany.php | 438 + .../Eloquent/Relations/HasOneThrough.php | 77 + .../database/Eloquent/Relations/MorphMany.php | 62 + .../database/Eloquent/Relations/MorphOne.php | 137 + .../Eloquent/Relations/MorphOneOrMany.php | 127 + .../Eloquent/Relations/MorphPivot.php | 184 + .../database/Eloquent/Relations/MorphTo.php | 396 + .../Eloquent/Relations/MorphToMany.php | 209 + .../database/Eloquent/Relations/Pivot.php | 25 + .../database/Eloquent/Relations/Relation.php | 493 + vendor/illuminate/database/Eloquent/Scope.php | 15 + .../database/Eloquent/SoftDeletes.php | 214 + .../database/Eloquent/SoftDeletingScope.php | 131 + .../database/Events/ConnectionEvent.php | 32 + .../database/Events/DatabaseRefreshed.php | 10 + .../database/Events/MigrationEnded.php | 8 + .../database/Events/MigrationEvent.php | 36 + .../database/Events/MigrationStarted.php | 8 + .../database/Events/MigrationsEnded.php | 8 + .../database/Events/MigrationsEvent.php | 26 + .../database/Events/MigrationsStarted.php | 8 + .../database/Events/ModelsPruned.php | 33 + .../database/Events/NoPendingMigrations.php | 24 + .../database/Events/QueryExecuted.php | 59 + .../database/Events/SchemaDumped.php | 41 + .../database/Events/SchemaLoaded.php | 41 + .../database/Events/StatementPrepared.php | 33 + .../database/Events/TransactionBeginning.php | 8 + .../database/Events/TransactionCommitted.php | 8 + .../database/Events/TransactionRolledBack.php | 8 + vendor/illuminate/database/Grammar.php | 221 + vendor/illuminate/database/LICENSE.md | 21 + .../LazyLoadingViolationException.php | 39 + .../database/MigrationServiceProvider.php | 226 + .../DatabaseMigrationRepository.php | 224 + .../database/Migrations/Migration.php | 30 + .../database/Migrations/MigrationCreator.php | 236 + .../MigrationRepositoryInterface.php | 88 + .../database/Migrations/Migrator.php | 744 + .../Migrations/stubs/migration.create.stub | 31 + .../database/Migrations/stubs/migration.stub | 28 + .../Migrations/stubs/migration.update.stub | 32 + .../MultipleRecordsFoundException.php | 10 + .../illuminate/database/MySqlConnection.php | 93 + .../PDO/Concerns/ConnectsToDatabase.php | 27 + vendor/illuminate/database/PDO/Connection.php | 182 + .../illuminate/database/PDO/MySqlDriver.php | 11 + .../database/PDO/PostgresDriver.php | 11 + .../illuminate/database/PDO/SQLiteDriver.php | 11 + .../database/PDO/SqlServerConnection.php | 152 + .../database/PDO/SqlServerDriver.php | 18 + .../database/PostgresConnection.php | 109 + vendor/illuminate/database/Query/Builder.php | 3540 + .../illuminate/database/Query/Expression.php | 44 + .../database/Query/Grammars/Grammar.php | 1331 + .../database/Query/Grammars/MySqlGrammar.php | 329 + .../Query/Grammars/PostgresGrammar.php | 640 + .../database/Query/Grammars/SQLiteGrammar.php | 342 + .../Query/Grammars/SqlServerGrammar.php | 584 + .../illuminate/database/Query/JoinClause.php | 146 + .../Query/Processors/MySqlProcessor.php | 19 + .../Query/Processors/PostgresProcessor.php | 45 + .../database/Query/Processors/Processor.php | 49 + .../Query/Processors/SQLiteProcessor.php | 19 + .../Query/Processors/SqlServerProcessor.php | 70 + vendor/illuminate/database/QueryException.php | 79 + vendor/illuminate/database/README.md | 69 + .../database/RecordsNotFoundException.php | 10 + .../illuminate/database/SQLiteConnection.php | 117 + .../illuminate/database/Schema/Blueprint.php | 1711 + vendor/illuminate/database/Schema/Builder.php | 433 + .../database/Schema/ColumnDefinition.php | 38 + .../Schema/ForeignIdColumnDefinition.php | 52 + .../database/Schema/ForeignKeyDefinition.php | 66 + .../database/Schema/Grammars/ChangeColumn.php | 248 + .../database/Schema/Grammars/Grammar.php | 340 + .../database/Schema/Grammars/MySqlGrammar.php | 1153 + .../Schema/Grammars/PostgresGrammar.php | 1073 + .../database/Schema/Grammars/RenameColumn.php | 84 + .../Schema/Grammars/SQLiteGrammar.php | 925 + .../Schema/Grammars/SqlServerGrammar.php | 934 + .../database/Schema/MySqlBuilder.php | 140 + .../database/Schema/MySqlSchemaState.php | 163 + .../database/Schema/PostgresBuilder.php | 203 + .../database/Schema/PostgresSchemaState.php | 83 + .../database/Schema/SQLiteBuilder.php | 78 + .../database/Schema/SchemaState.php | 122 + .../database/Schema/SqlServerBuilder.php | 54 + .../database/Schema/SqliteSchemaState.php | 93 + vendor/illuminate/database/Seeder.php | 152 + .../database/SqlServerConnection.php | 125 + vendor/illuminate/database/composer.json | 50 + vendor/illuminate/macroable/LICENSE.md | 21 + .../illuminate/macroable/Traits/Macroable.php | 126 + vendor/illuminate/macroable/composer.json | 33 + .../support/AggregateServiceProvider.php | 52 + vendor/illuminate/support/Carbon.php | 18 + vendor/illuminate/support/Composer.php | 110 + .../support/ConfigurationUrlParser.php | 193 + vendor/illuminate/support/DateFactory.php | 231 + vendor/illuminate/support/Env.php | 103 + vendor/illuminate/support/Facades/App.php | 64 + vendor/illuminate/support/Facades/Artisan.php | 29 + vendor/illuminate/support/Facades/Auth.php | 65 + vendor/illuminate/support/Facades/Blade.php | 46 + .../illuminate/support/Facades/Broadcast.php | 27 + vendor/illuminate/support/Facades/Bus.php | 74 + vendor/illuminate/support/Facades/Cache.php | 40 + vendor/illuminate/support/Facades/Config.php | 26 + vendor/illuminate/support/Facades/Cookie.php | 46 + vendor/illuminate/support/Facades/Crypt.php | 27 + vendor/illuminate/support/Facades/DB.php | 50 + vendor/illuminate/support/Facades/Date.php | 120 + vendor/illuminate/support/Facades/Event.php | 114 + vendor/illuminate/support/Facades/Facade.php | 263 + vendor/illuminate/support/Facades/File.php | 62 + vendor/illuminate/support/Facades/Gate.php | 40 + vendor/illuminate/support/Facades/Hash.php | 25 + vendor/illuminate/support/Facades/Http.php | 67 + vendor/illuminate/support/Facades/Lang.php | 26 + vendor/illuminate/support/Facades/Log.php | 36 + vendor/illuminate/support/Facades/Mail.php | 61 + .../support/Facades/Notification.php | 61 + .../support/Facades/ParallelTesting.php | 26 + .../illuminate/support/Facades/Password.php | 65 + vendor/illuminate/support/Facades/Queue.php | 63 + .../support/Facades/RateLimiter.php | 30 + .../illuminate/support/Facades/Redirect.php | 35 + vendor/illuminate/support/Facades/Redis.php | 24 + vendor/illuminate/support/Facades/Request.php | 103 + .../illuminate/support/Facades/Response.php | 36 + vendor/illuminate/support/Facades/Route.php | 62 + vendor/illuminate/support/Facades/Schema.php | 51 + vendor/illuminate/support/Facades/Session.php | 45 + vendor/illuminate/support/Facades/Storage.php | 103 + vendor/illuminate/support/Facades/URL.php | 38 + .../illuminate/support/Facades/Validator.php | 26 + vendor/illuminate/support/Facades/View.php | 30 + vendor/illuminate/support/Fluent.php | 197 + .../support/HigherOrderTapProxy.php | 38 + vendor/illuminate/support/HtmlString.php | 66 + .../illuminate/support/InteractsWithTime.php | 64 + vendor/illuminate/support/Js.php | 145 + vendor/illuminate/support/LICENSE.md | 21 + vendor/illuminate/support/Manager.php | 193 + vendor/illuminate/support/MessageBag.php | 418 + .../support/MultipleInstanceManager.php | 191 + .../support/NamespacedItemResolver.php | 112 + vendor/illuminate/support/Optional.php | 135 + vendor/illuminate/support/Pluralizer.php | 142 + vendor/illuminate/support/ProcessUtils.php | 69 + vendor/illuminate/support/Reflector.php | 142 + vendor/illuminate/support/ServiceProvider.php | 437 + vendor/illuminate/support/Str.php | 1033 + vendor/illuminate/support/Stringable.php | 1026 + .../Testing/Fakes/BatchRepositoryFake.php | 142 + .../support/Testing/Fakes/BusFake.php | 739 + .../support/Testing/Fakes/EventFake.php | 325 + .../support/Testing/Fakes/MailFake.php | 445 + .../Testing/Fakes/NotificationFake.php | 327 + .../Testing/Fakes/PendingBatchFake.php | 39 + .../Testing/Fakes/PendingChainFake.php | 56 + .../support/Testing/Fakes/PendingMailFake.php | 42 + .../support/Testing/Fakes/QueueFake.php | 414 + vendor/illuminate/support/Timebox.php | 70 + .../support/Traits/CapsuleManagerTrait.php | 69 + .../support/Traits/Conditionable.php | 44 + .../support/Traits/ForwardsCalls.php | 75 + .../illuminate/support/Traits/Localizable.php | 34 + .../support/Traits/ReflectsClosures.php | 88 + vendor/illuminate/support/Traits/Tappable.php | 17 + vendor/illuminate/support/ValidatedInput.php | 219 + vendor/illuminate/support/ViewErrorBag.php | 131 + vendor/illuminate/support/composer.json | 55 + vendor/illuminate/support/helpers.php | 379 + vendor/intervention/image/LICENSE | 9 + vendor/intervention/image/composer.json | 47 + vendor/intervention/image/provides.json | 11 + .../src/Intervention/Image/AbstractColor.php | 229 + .../Intervention/Image/AbstractDecoder.php | 364 + .../src/Intervention/Image/AbstractDriver.php | 140 + .../Intervention/Image/AbstractEncoder.php | 271 + .../src/Intervention/Image/AbstractFont.php | 295 + .../src/Intervention/Image/AbstractShape.php | 71 + .../Image/Commands/AbstractCommand.php | 81 + .../Intervention/Image/Commands/Argument.php | 225 + .../Image/Commands/ChecksumCommand.php | 29 + .../Image/Commands/CircleCommand.php | 35 + .../Image/Commands/EllipseCommand.php | 36 + .../Image/Commands/ExifCommand.php | 61 + .../Image/Commands/IptcCommand.php | 68 + .../Image/Commands/LineCommand.php | 36 + .../Image/Commands/OrientateCommand.php | 48 + .../Image/Commands/PolygonCommand.php | 49 + .../Image/Commands/PsrResponseCommand.php | 45 + .../Image/Commands/RectangleCommand.php | 36 + .../Image/Commands/ResponseCommand.php | 26 + .../Image/Commands/StreamCommand.php | 39 + .../Image/Commands/TextCommand.php | 34 + .../src/Intervention/Image/Constraint.php | 92 + .../Image/Exception/ImageException.php | 8 + .../Exception/InvalidArgumentException.php | 8 + .../Exception/MissingDependencyException.php | 8 + .../Image/Exception/NotFoundException.php | 8 + .../Image/Exception/NotReadableException.php | 8 + .../Image/Exception/NotSupportedException.php | 8 + .../Image/Exception/NotWritableException.php | 8 + .../Image/Exception/RuntimeException.php | 8 + .../src/Intervention/Image/Facades/Image.php | 19 + .../image/src/Intervention/Image/File.php | 92 + .../Intervention/Image/Filters/DemoFilter.php | 44 + .../Image/Filters/FilterInterface.php | 16 + .../image/src/Intervention/Image/Gd/Color.php | 227 + .../Image/Gd/Commands/BackupCommand.php | 25 + .../Image/Gd/Commands/BlurCommand.php | 25 + .../Image/Gd/Commands/BrightnessCommand.php | 21 + .../Image/Gd/Commands/ColorizeCommand.php | 29 + .../Image/Gd/Commands/ContrastCommand.php | 21 + .../Image/Gd/Commands/CropCommand.php | 40 + .../Image/Gd/Commands/DestroyCommand.php | 27 + .../Image/Gd/Commands/FillCommand.php | 69 + .../Image/Gd/Commands/FitCommand.php | 32 + .../Image/Gd/Commands/FlipCommand.php | 37 + .../Image/Gd/Commands/GammaCommand.php | 21 + .../Image/Gd/Commands/GetSizeCommand.php | 25 + .../Image/Gd/Commands/GreyscaleCommand.php | 19 + .../Image/Gd/Commands/HeightenCommand.php | 28 + .../Image/Gd/Commands/InsertCommand.php | 34 + .../Image/Gd/Commands/InterlaceCommand.php | 23 + .../Image/Gd/Commands/InvertCommand.php | 19 + .../Image/Gd/Commands/LimitColorsCommand.php | 53 + .../Image/Gd/Commands/MaskCommand.php | 83 + .../Image/Gd/Commands/OpacityCommand.php | 31 + .../Image/Gd/Commands/PickColorCommand.php | 37 + .../Image/Gd/Commands/PixelCommand.php | 25 + .../Image/Gd/Commands/PixelateCommand.php | 21 + .../Image/Gd/Commands/ResetCommand.php | 39 + .../Image/Gd/Commands/ResizeCanvasCommand.php | 83 + .../Image/Gd/Commands/ResizeCommand.php | 84 + .../Image/Gd/Commands/RotateCommand.php | 30 + .../Image/Gd/Commands/SharpenCommand.php | 34 + .../Image/Gd/Commands/TrimCommand.php | 176 + .../Image/Gd/Commands/WidenCommand.php | 28 + .../src/Intervention/Image/Gd/Decoder.php | 171 + .../src/Intervention/Image/Gd/Driver.php | 89 + .../src/Intervention/Image/Gd/Encoder.php | 180 + .../image/src/Intervention/Image/Gd/Font.php | 277 + .../Image/Gd/Shapes/CircleShape.php | 40 + .../Image/Gd/Shapes/EllipseShape.php | 65 + .../Image/Gd/Shapes/LineShape.php | 90 + .../Image/Gd/Shapes/PolygonShape.php | 49 + .../Image/Gd/Shapes/RectangleShape.php | 76 + .../image/src/Intervention/Image/Image.php | 370 + .../src/Intervention/Image/ImageManager.php | 142 + .../Intervention/Image/ImageManagerStatic.php | 88 + .../Image/ImageServiceProvider.php | 87 + .../Image/ImageServiceProviderLaravel4.php | 112 + .../ImageServiceProviderLaravelRecent.php | 106 + .../Image/ImageServiceProviderLeague.php | 42 + .../Image/ImageServiceProviderLumen.php | 34 + .../src/Intervention/Image/Imagick/Color.php | 279 + .../Image/Imagick/Commands/BackupCommand.php | 25 + .../Image/Imagick/Commands/BlurCommand.php | 21 + .../Imagick/Commands/BrightnessCommand.php | 21 + .../Imagick/Commands/ColorizeCommand.php | 44 + .../Imagick/Commands/ContrastCommand.php | 21 + .../Image/Imagick/Commands/CropCommand.php | 45 + .../Image/Imagick/Commands/DestroyCommand.php | 27 + .../Image/Imagick/Commands/ExifCommand.php | 63 + .../Image/Imagick/Commands/FillCommand.php | 105 + .../Image/Imagick/Commands/FitCommand.php | 42 + .../Image/Imagick/Commands/FlipCommand.php | 27 + .../Image/Imagick/Commands/GammaCommand.php | 21 + .../Image/Imagick/Commands/GetSizeCommand.php | 28 + .../Imagick/Commands/GreyscaleCommand.php | 19 + .../Imagick/Commands/HeightenCommand.php | 28 + .../Image/Imagick/Commands/InsertCommand.php | 33 + .../Imagick/Commands/InterlaceCommand.php | 29 + .../Image/Imagick/Commands/InvertCommand.php | 19 + .../Imagick/Commands/LimitColorsCommand.php | 59 + .../Image/Imagick/Commands/MaskCommand.php | 60 + .../Image/Imagick/Commands/OpacityCommand.php | 23 + .../Imagick/Commands/PickColorCommand.php | 30 + .../Image/Imagick/Commands/PixelCommand.php | 31 + .../Imagick/Commands/PixelateCommand.php | 27 + .../Image/Imagick/Commands/ResetCommand.php | 40 + .../Imagick/Commands/ResizeCanvasCommand.php | 91 + .../Image/Imagick/Commands/ResizeCommand.php | 29 + .../Image/Imagick/Commands/RotateCommand.php | 30 + .../Image/Imagick/Commands/SharpenCommand.php | 21 + .../Image/Imagick/Commands/TrimCommand.php | 121 + .../Image/Imagick/Commands/WidenCommand.php | 28 + .../Intervention/Image/Imagick/Decoder.php | 124 + .../src/Intervention/Image/Imagick/Driver.php | 74 + .../Intervention/Image/Imagick/Encoder.php | 239 + .../src/Intervention/Image/Imagick/Font.php | 122 + .../Image/Imagick/Shapes/CircleShape.php | 40 + .../Image/Imagick/Shapes/EllipseShape.php | 66 + .../Image/Imagick/Shapes/LineShape.php | 94 + .../Image/Imagick/Shapes/PolygonShape.php | 81 + .../Image/Imagick/Shapes/RectangleShape.php | 84 + .../image/src/Intervention/Image/Point.php | 64 + .../image/src/Intervention/Image/Response.php | 78 + .../image/src/Intervention/Image/Size.php | 374 + .../intervention/image/src/config/config.php | 20 + .../laravel/serializable-closure/LICENSE.md | 21 + vendor/laravel/serializable-closure/README.md | 73 + .../serializable-closure/composer.json | 53 + .../src/Contracts/Serializable.php | 20 + .../src/Contracts/Signer.php | 22 + .../Exceptions/InvalidSignatureException.php | 19 + .../Exceptions/MissingSecretKeyException.php | 19 + .../PhpVersionNotSupportedException.php | 19 + .../src/SerializableClosure.php | 126 + .../src/Serializers/Native.php | 526 + .../src/Serializers/Signed.php | 91 + .../serializable-closure/src/Signers/Hmac.php | 53 + .../src/Support/ClosureScope.php | 22 + .../src/Support/ClosureStream.php | 181 + .../src/Support/ReflectionClosure.php | 1184 + .../src/Support/SelfReference.php | 24 + .../src/UnsignedSerializableClosure.php | 69 + vendor/league/flysystem/CODE_OF_CONDUCT.md | 76 + vendor/league/flysystem/LICENSE | 19 + vendor/league/flysystem/SECURITY.md | 16 + vendor/league/flysystem/composer.json | 68 + vendor/league/flysystem/deprecations.md | 19 + .../flysystem/src/Adapter/AbstractAdapter.php | 72 + .../src/Adapter/AbstractFtpAdapter.php | 705 + .../src/Adapter/CanOverwriteFiles.php | 12 + vendor/league/flysystem/src/Adapter/Ftp.php | 584 + vendor/league/flysystem/src/Adapter/Ftpd.php | 48 + vendor/league/flysystem/src/Adapter/Local.php | 533 + .../flysystem/src/Adapter/NullAdapter.php | 144 + .../Polyfill/NotSupportingVisibilityTrait.php | 33 + .../Adapter/Polyfill/StreamedCopyTrait.php | 51 + .../Adapter/Polyfill/StreamedReadingTrait.php | 44 + .../src/Adapter/Polyfill/StreamedTrait.php | 9 + .../Adapter/Polyfill/StreamedWritingTrait.php | 60 + .../flysystem/src/Adapter/SynologyFtp.php | 8 + .../league/flysystem/src/AdapterInterface.php | 118 + vendor/league/flysystem/src/Config.php | 107 + .../league/flysystem/src/ConfigAwareTrait.php | 49 + .../src/ConnectionErrorException.php | 9 + .../src/ConnectionRuntimeException.php | 9 + .../flysystem/src/CorruptedPathDetected.php | 17 + vendor/league/flysystem/src/Directory.php | 31 + vendor/league/flysystem/src/Exception.php | 8 + vendor/league/flysystem/src/File.php | 205 + .../flysystem/src/FileExistsException.php | 37 + .../flysystem/src/FileNotFoundException.php | 37 + vendor/league/flysystem/src/Filesystem.php | 409 + .../flysystem/src/FilesystemException.php | 7 + .../flysystem/src/FilesystemInterface.php | 284 + .../src/FilesystemNotFoundException.php | 12 + vendor/league/flysystem/src/Handler.php | 137 + .../flysystem/src/InvalidRootException.php | 9 + vendor/league/flysystem/src/MountManager.php | 648 + .../flysystem/src/NotSupportedException.php | 37 + .../flysystem/src/Plugin/AbstractPlugin.php | 24 + .../league/flysystem/src/Plugin/EmptyDir.php | 34 + .../flysystem/src/Plugin/ForcedCopy.php | 44 + .../flysystem/src/Plugin/ForcedRename.php | 44 + .../flysystem/src/Plugin/GetWithMetadata.php | 51 + .../league/flysystem/src/Plugin/ListFiles.php | 35 + .../league/flysystem/src/Plugin/ListPaths.php | 36 + .../league/flysystem/src/Plugin/ListWith.php | 60 + .../flysystem/src/Plugin/PluggableTrait.php | 97 + .../src/Plugin/PluginNotFoundException.php | 10 + .../league/flysystem/src/PluginInterface.php | 20 + vendor/league/flysystem/src/ReadInterface.php | 88 + .../flysystem/src/RootViolationException.php | 10 + vendor/league/flysystem/src/SafeStorage.php | 39 + .../flysystem/src/UnreadableFileException.php | 18 + vendor/league/flysystem/src/Util.php | 354 + .../src/Util/ContentListingFormatter.php | 122 + vendor/league/flysystem/src/Util/MimeType.php | 80 + .../flysystem/src/Util/StreamHasher.php | 36 + .../league/mime-type-detection/CHANGELOG.md | 64 + vendor/league/mime-type-detection/LICENSE | 19 + .../league/mime-type-detection/composer.json | 34 + .../src/EmptyExtensionToMimeTypeMap.php | 13 + .../src/ExtensionLookup.php | 14 + .../src/ExtensionMimeTypeDetector.php | 56 + .../src/ExtensionToMimeTypeMap.php | 10 + .../src/FinfoMimeTypeDetector.php | 106 + .../src/GeneratedExtensionToMimeTypeMap.php | 2310 + .../src/MimeTypeDetector.php | 19 + .../src/OverridingExtensionToMimeTypeMap.php | 30 + vendor/monolog/monolog/CHANGELOG.md | 641 + vendor/monolog/monolog/LICENSE | 19 + vendor/monolog/monolog/README.md | 112 + vendor/monolog/monolog/UPGRADE.md | 72 + vendor/monolog/monolog/composer.json | 81 + .../Monolog/Attribute/AsMonologProcessor.php | 46 + .../monolog/src/Monolog/DateTimeImmutable.php | 51 + .../monolog/src/Monolog/ErrorHandler.php | 307 + .../Monolog/Formatter/ChromePHPFormatter.php | 83 + .../Monolog/Formatter/ElasticaFormatter.php | 89 + .../Formatter/ElasticsearchFormatter.php | 89 + .../Monolog/Formatter/FlowdockFormatter.php | 112 + .../Monolog/Formatter/FluentdFormatter.php | 88 + .../Monolog/Formatter/FormatterInterface.php | 42 + .../Formatter/GelfMessageFormatter.php | 175 + .../Formatter/GoogleCloudLoggingFormatter.php | 40 + .../src/Monolog/Formatter/HtmlFormatter.php | 142 + .../src/Monolog/Formatter/JsonFormatter.php | 228 + .../src/Monolog/Formatter/LineFormatter.php | 246 + .../src/Monolog/Formatter/LogglyFormatter.php | 45 + .../Monolog/Formatter/LogmaticFormatter.php | 66 + .../Monolog/Formatter/LogstashFormatter.php | 101 + .../Monolog/Formatter/MongoDBFormatter.php | 162 + .../Monolog/Formatter/NormalizerFormatter.php | 290 + .../src/Monolog/Formatter/ScalarFormatter.php | 51 + .../Monolog/Formatter/WildfireFormatter.php | 139 + .../src/Monolog/Handler/AbstractHandler.php | 112 + .../Handler/AbstractProcessingHandler.php | 69 + .../Monolog/Handler/AbstractSyslogHandler.php | 106 + .../src/Monolog/Handler/AmqpHandler.php | 171 + .../Monolog/Handler/BrowserConsoleHandler.php | 308 + .../src/Monolog/Handler/BufferHandler.php | 167 + .../src/Monolog/Handler/ChromePHPHandler.php | 196 + .../src/Monolog/Handler/CouchDBHandler.php | 77 + .../src/Monolog/Handler/CubeHandler.php | 167 + .../monolog/src/Monolog/Handler/Curl/Util.php | 71 + .../Monolog/Handler/DeduplicationHandler.php | 186 + .../Handler/DoctrineCouchDBHandler.php | 47 + .../src/Monolog/Handler/DynamoDbHandler.php | 104 + .../src/Monolog/Handler/ElasticaHandler.php | 129 + .../Monolog/Handler/ElasticsearchHandler.php | 219 + .../src/Monolog/Handler/ErrorLogHandler.php | 91 + .../Monolog/Handler/FallbackGroupHandler.php | 71 + .../src/Monolog/Handler/FilterHandler.php | 212 + .../ActivationStrategyInterface.php | 29 + .../ChannelLevelActivationStrategy.php | 77 + .../ErrorLevelActivationStrategy.php | 46 + .../Monolog/Handler/FingersCrossedHandler.php | 252 + .../src/Monolog/Handler/FirePHPHandler.php | 180 + .../src/Monolog/Handler/FleepHookHandler.php | 135 + .../src/Monolog/Handler/FlowdockHandler.php | 133 + .../Handler/FormattableHandlerInterface.php | 37 + .../Handler/FormattableHandlerTrait.php | 60 + .../src/Monolog/Handler/GelfHandler.php | 57 + .../src/Monolog/Handler/GroupHandler.php | 132 + .../monolog/src/Monolog/Handler/Handler.php | 62 + .../src/Monolog/Handler/HandlerInterface.php | 85 + .../src/Monolog/Handler/HandlerWrapper.php | 136 + .../src/Monolog/Handler/IFTTTHandler.php | 74 + .../src/Monolog/Handler/InsightOpsHandler.php | 76 + .../src/Monolog/Handler/LogEntriesHandler.php | 70 + .../src/Monolog/Handler/LogglyHandler.php | 160 + .../src/Monolog/Handler/LogmaticHandler.php | 106 + .../src/Monolog/Handler/MailHandler.php | 95 + .../src/Monolog/Handler/MandrillHandler.php | 83 + .../Handler/MissingExtensionException.php | 21 + .../src/Monolog/Handler/MongoDBHandler.php | 86 + .../Monolog/Handler/NativeMailerHandler.php | 174 + .../src/Monolog/Handler/NewRelicHandler.php | 199 + .../src/Monolog/Handler/NoopHandler.php | 40 + .../src/Monolog/Handler/NullHandler.php | 60 + .../src/Monolog/Handler/OverflowHandler.php | 149 + .../src/Monolog/Handler/PHPConsoleHandler.php | 263 + .../src/Monolog/Handler/ProcessHandler.php | 191 + .../Handler/ProcessableHandlerInterface.php | 44 + .../Handler/ProcessableHandlerTrait.php | 77 + .../src/Monolog/Handler/PsrHandler.php | 95 + .../src/Monolog/Handler/PushoverHandler.php | 246 + .../src/Monolog/Handler/RedisHandler.php | 101 + .../Monolog/Handler/RedisPubSubHandler.php | 67 + .../src/Monolog/Handler/RollbarHandler.php | 131 + .../Monolog/Handler/RotatingFileHandler.php | 212 + .../src/Monolog/Handler/SamplingHandler.php | 132 + .../src/Monolog/Handler/SendGridHandler.php | 102 + .../src/Monolog/Handler/Slack/SlackRecord.php | 387 + .../src/Monolog/Handler/SlackHandler.php | 256 + .../Monolog/Handler/SlackWebhookHandler.php | 130 + .../src/Monolog/Handler/SocketHandler.php | 448 + .../src/Monolog/Handler/SqsHandler.php | 62 + .../src/Monolog/Handler/StreamHandler.php | 256 + .../Monolog/Handler/SwiftMailerHandler.php | 115 + .../Monolog/Handler/SymfonyMailerHandler.php | 111 + .../src/Monolog/Handler/SyslogHandler.php | 68 + .../Monolog/Handler/SyslogUdp/UdpSocket.php | 88 + .../src/Monolog/Handler/SyslogUdpHandler.php | 150 + .../Monolog/Handler/TelegramBotHandler.php | 274 + .../src/Monolog/Handler/TestHandler.php | 231 + .../Handler/WebRequestRecognizerTrait.php | 24 + .../Handler/WhatFailureGroupHandler.php | 81 + .../Monolog/Handler/ZendMonitorHandler.php | 101 + .../monolog/monolog/src/Monolog/LogRecord.php | 34 + vendor/monolog/monolog/src/Monolog/Logger.php | 762 + .../src/Monolog/Processor/GitProcessor.php | 77 + .../Monolog/Processor/HostnameProcessor.php | 36 + .../Processor/IntrospectionProcessor.php | 123 + .../Processor/MemoryPeakUsageProcessor.php | 37 + .../src/Monolog/Processor/MemoryProcessor.php | 61 + .../Processor/MemoryUsageProcessor.php | 37 + .../Monolog/Processor/MercurialProcessor.php | 77 + .../Monolog/Processor/ProcessIdProcessor.php | 30 + .../Monolog/Processor/ProcessorInterface.php | 30 + .../Processor/PsrLogMessageProcessor.php | 88 + .../src/Monolog/Processor/TagProcessor.php | 61 + .../src/Monolog/Processor/UidProcessor.php | 59 + .../src/Monolog/Processor/WebProcessor.php | 111 + .../monolog/monolog/src/Monolog/Registry.php | 134 + .../src/Monolog/ResettableInterface.php | 34 + .../monolog/src/Monolog/SignalHandler.php | 120 + .../monolog/src/Monolog/Test/TestCase.php | 85 + vendor/monolog/monolog/src/Monolog/Utils.php | 284 + vendor/nesbot/carbon/LICENSE | 19 + vendor/nesbot/carbon/bin/carbon | 23 + vendor/nesbot/carbon/bin/carbon.bat | 4 + vendor/nesbot/carbon/composer.json | 127 + vendor/nesbot/carbon/extension.neon | 5 + .../MessageFormatterMapperStrongType.php | 28 + .../MessageFormatterMapperWeakType.php | 36 + .../Carbon/PHPStan/AbstractMacroBuiltin.php | 36 + .../Carbon/PHPStan/AbstractMacroStatic.php | 45 + .../lazy/Carbon/PHPStan/MacroStrongType.php | 45 + .../lazy/Carbon/PHPStan/MacroWeakType.php | 51 + .../lazy/Carbon/TranslatorStrongType.php | 52 + .../carbon/lazy/Carbon/TranslatorWeakType.php | 32 + vendor/nesbot/carbon/readme.md | 176 + vendor/nesbot/carbon/sponsors.php | 129 + .../carbon/src/Carbon/AbstractTranslator.php | 400 + vendor/nesbot/carbon/src/Carbon/Carbon.php | 523 + .../src/Carbon/CarbonConverterInterface.php | 19 + .../carbon/src/Carbon/CarbonImmutable.php | 582 + .../carbon/src/Carbon/CarbonInterface.php | 5143 + .../carbon/src/Carbon/CarbonInterval.php | 3054 + .../nesbot/carbon/src/Carbon/CarbonPeriod.php | 2742 + .../src/Carbon/CarbonPeriodImmutable.php | 40 + .../carbon/src/Carbon/CarbonTimeZone.php | 320 + .../nesbot/carbon/src/Carbon/Cli/Invoker.php | 38 + .../Exceptions/BadComparisonUnitException.php | 48 + .../BadFluentConstructorException.php | 49 + .../Exceptions/BadFluentSetterException.php | 49 + .../Exceptions/BadMethodCallException.php | 17 + .../Exceptions/EndLessPeriodException.php | 19 + .../src/Carbon/Exceptions/Exception.php | 17 + .../Carbon/Exceptions/ImmutableException.php | 48 + .../Exceptions/InvalidArgumentException.php | 17 + .../Exceptions/InvalidCastException.php | 19 + .../Exceptions/InvalidDateException.php | 67 + .../Exceptions/InvalidFormatException.php | 19 + .../Exceptions/InvalidIntervalException.php | 19 + .../Exceptions/InvalidPeriodDateException.php | 19 + .../InvalidPeriodParameterException.php | 19 + .../Exceptions/InvalidTimeZoneException.php | 19 + .../Exceptions/InvalidTypeException.php | 19 + .../Exceptions/NotACarbonClassException.php | 50 + .../Carbon/Exceptions/NotAPeriodException.php | 19 + .../Exceptions/NotLocaleAwareException.php | 32 + .../Carbon/Exceptions/OutOfRangeException.php | 101 + .../Carbon/Exceptions/ParseErrorException.php | 88 + .../Carbon/Exceptions/RuntimeException.php | 17 + .../src/Carbon/Exceptions/UnitException.php | 19 + .../Exceptions/UnitNotConfiguredException.php | 48 + .../Exceptions/UnknownGetterException.php | 49 + .../Exceptions/UnknownMethodException.php | 49 + .../Exceptions/UnknownSetterException.php | 49 + .../Exceptions/UnknownUnitException.php | 48 + .../Exceptions/UnreachableException.php | 19 + vendor/nesbot/carbon/src/Carbon/Factory.php | 326 + .../carbon/src/Carbon/FactoryImmutable.php | 259 + vendor/nesbot/carbon/src/Carbon/Lang/aa.php | 15 + .../nesbot/carbon/src/Carbon/Lang/aa_DJ.php | 44 + .../nesbot/carbon/src/Carbon/Lang/aa_ER.php | 28 + .../carbon/src/Carbon/Lang/aa_ER@saaho.php | 28 + .../nesbot/carbon/src/Carbon/Lang/aa_ET.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/af.php | 79 + .../nesbot/carbon/src/Carbon/Lang/af_NA.php | 28 + .../nesbot/carbon/src/Carbon/Lang/af_ZA.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/agq.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/agr.php | 15 + .../nesbot/carbon/src/Carbon/Lang/agr_PE.php | 44 + vendor/nesbot/carbon/src/Carbon/Lang/ak.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ak_GH.php | 40 + vendor/nesbot/carbon/src/Carbon/Lang/am.php | 15 + .../nesbot/carbon/src/Carbon/Lang/am_ET.php | 58 + vendor/nesbot/carbon/src/Carbon/Lang/an.php | 15 + .../nesbot/carbon/src/Carbon/Lang/an_ES.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/anp.php | 15 + .../nesbot/carbon/src/Carbon/Lang/anp_IN.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ar.php | 93 + .../nesbot/carbon/src/Carbon/Lang/ar_AE.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_BH.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_DJ.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_DZ.php | 92 + .../nesbot/carbon/src/Carbon/Lang/ar_EG.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_EH.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_ER.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_IL.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_IN.php | 26 + .../nesbot/carbon/src/Carbon/Lang/ar_IQ.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_JO.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_KM.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_KW.php | 95 + .../nesbot/carbon/src/Carbon/Lang/ar_LB.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_LY.php | 92 + .../nesbot/carbon/src/Carbon/Lang/ar_MA.php | 92 + .../nesbot/carbon/src/Carbon/Lang/ar_MR.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_OM.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_PS.php | 18 + .../nesbot/carbon/src/Carbon/Lang/ar_QA.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_SA.php | 94 + .../nesbot/carbon/src/Carbon/Lang/ar_SD.php | 29 + .../nesbot/carbon/src/Carbon/Lang/ar_SO.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_SS.php | 27 + .../nesbot/carbon/src/Carbon/Lang/ar_SY.php | 29 + .../carbon/src/Carbon/Lang/ar_Shakl.php | 95 + .../nesbot/carbon/src/Carbon/Lang/ar_TD.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ar_TN.php | 91 + .../nesbot/carbon/src/Carbon/Lang/ar_YE.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/as.php | 15 + .../nesbot/carbon/src/Carbon/Lang/as_IN.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/asa.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ast.php | 59 + .../nesbot/carbon/src/Carbon/Lang/ast_ES.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ayc.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ayc_PE.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/az.php | 128 + .../nesbot/carbon/src/Carbon/Lang/az_AZ.php | 21 + .../nesbot/carbon/src/Carbon/Lang/az_Cyrl.php | 20 + .../nesbot/carbon/src/Carbon/Lang/az_IR.php | 27 + .../nesbot/carbon/src/Carbon/Lang/az_Latn.php | 29 + vendor/nesbot/carbon/src/Carbon/Lang/bas.php | 32 + vendor/nesbot/carbon/src/Carbon/Lang/be.php | 172 + .../nesbot/carbon/src/Carbon/Lang/be_BY.php | 22 + .../carbon/src/Carbon/Lang/be_BY@latin.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/bem.php | 15 + .../nesbot/carbon/src/Carbon/Lang/bem_ZM.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/ber.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ber_DZ.php | 27 + .../nesbot/carbon/src/Carbon/Lang/ber_MA.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/bez.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/bg.php | 114 + .../nesbot/carbon/src/Carbon/Lang/bg_BG.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/bhb.php | 15 + .../nesbot/carbon/src/Carbon/Lang/bhb_IN.php | 26 + vendor/nesbot/carbon/src/Carbon/Lang/bho.php | 15 + .../nesbot/carbon/src/Carbon/Lang/bho_IN.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/bi.php | 15 + .../nesbot/carbon/src/Carbon/Lang/bi_VU.php | 53 + vendor/nesbot/carbon/src/Carbon/Lang/bm.php | 70 + vendor/nesbot/carbon/src/Carbon/Lang/bn.php | 100 + .../nesbot/carbon/src/Carbon/Lang/bn_BD.php | 27 + .../nesbot/carbon/src/Carbon/Lang/bn_IN.php | 26 + vendor/nesbot/carbon/src/Carbon/Lang/bo.php | 71 + .../nesbot/carbon/src/Carbon/Lang/bo_CN.php | 12 + .../nesbot/carbon/src/Carbon/Lang/bo_IN.php | 29 + vendor/nesbot/carbon/src/Carbon/Lang/br.php | 76 + .../nesbot/carbon/src/Carbon/Lang/br_FR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/brx.php | 15 + .../nesbot/carbon/src/Carbon/Lang/brx_IN.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/bs.php | 97 + .../nesbot/carbon/src/Carbon/Lang/bs_BA.php | 12 + .../nesbot/carbon/src/Carbon/Lang/bs_Cyrl.php | 28 + .../nesbot/carbon/src/Carbon/Lang/bs_Latn.php | 13 + vendor/nesbot/carbon/src/Carbon/Lang/byn.php | 15 + .../nesbot/carbon/src/Carbon/Lang/byn_ER.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ca.php | 117 + .../nesbot/carbon/src/Carbon/Lang/ca_AD.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ca_ES.php | 12 + .../carbon/src/Carbon/Lang/ca_ES_Valencia.php | 23 + .../nesbot/carbon/src/Carbon/Lang/ca_FR.php | 13 + .../nesbot/carbon/src/Carbon/Lang/ca_IT.php | 13 + vendor/nesbot/carbon/src/Carbon/Lang/ccp.php | 27 + .../nesbot/carbon/src/Carbon/Lang/ccp_IN.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/ce.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ce_RU.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/cgg.php | 31 + vendor/nesbot/carbon/src/Carbon/Lang/chr.php | 15 + .../nesbot/carbon/src/Carbon/Lang/chr_US.php | 58 + vendor/nesbot/carbon/src/Carbon/Lang/ckb.php | 89 + vendor/nesbot/carbon/src/Carbon/Lang/cmn.php | 15 + .../nesbot/carbon/src/Carbon/Lang/cmn_TW.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/crh.php | 15 + .../nesbot/carbon/src/Carbon/Lang/crh_UA.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/cs.php | 123 + .../nesbot/carbon/src/Carbon/Lang/cs_CZ.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/csb.php | 15 + .../nesbot/carbon/src/Carbon/Lang/csb_PL.php | 41 + vendor/nesbot/carbon/src/Carbon/Lang/cu.php | 52 + vendor/nesbot/carbon/src/Carbon/Lang/cv.php | 65 + .../nesbot/carbon/src/Carbon/Lang/cv_RU.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/cy.php | 79 + .../nesbot/carbon/src/Carbon/Lang/cy_GB.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/da.php | 81 + .../nesbot/carbon/src/Carbon/Lang/da_DK.php | 12 + .../nesbot/carbon/src/Carbon/Lang/da_GL.php | 19 + vendor/nesbot/carbon/src/Carbon/Lang/dav.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/de.php | 117 + .../nesbot/carbon/src/Carbon/Lang/de_AT.php | 27 + .../nesbot/carbon/src/Carbon/Lang/de_BE.php | 20 + .../nesbot/carbon/src/Carbon/Lang/de_CH.php | 20 + .../nesbot/carbon/src/Carbon/Lang/de_DE.php | 16 + .../nesbot/carbon/src/Carbon/Lang/de_IT.php | 16 + .../nesbot/carbon/src/Carbon/Lang/de_LI.php | 12 + .../nesbot/carbon/src/Carbon/Lang/de_LU.php | 20 + vendor/nesbot/carbon/src/Carbon/Lang/dje.php | 40 + vendor/nesbot/carbon/src/Carbon/Lang/doi.php | 15 + .../nesbot/carbon/src/Carbon/Lang/doi_IN.php | 31 + vendor/nesbot/carbon/src/Carbon/Lang/dsb.php | 15 + .../nesbot/carbon/src/Carbon/Lang/dsb_DE.php | 60 + vendor/nesbot/carbon/src/Carbon/Lang/dua.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/dv.php | 89 + .../nesbot/carbon/src/Carbon/Lang/dv_MV.php | 87 + vendor/nesbot/carbon/src/Carbon/Lang/dyo.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/dz.php | 15 + .../nesbot/carbon/src/Carbon/Lang/dz_BT.php | 43 + vendor/nesbot/carbon/src/Carbon/Lang/ebu.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ee.php | 56 + .../nesbot/carbon/src/Carbon/Lang/ee_TG.php | 19 + vendor/nesbot/carbon/src/Carbon/Lang/el.php | 93 + .../nesbot/carbon/src/Carbon/Lang/el_CY.php | 19 + .../nesbot/carbon/src/Carbon/Lang/el_GR.php | 19 + vendor/nesbot/carbon/src/Carbon/Lang/en.php | 87 + .../nesbot/carbon/src/Carbon/Lang/en_001.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_150.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_AG.php | 21 + .../nesbot/carbon/src/Carbon/Lang/en_AI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_AS.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_AT.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_AU.php | 31 + .../nesbot/carbon/src/Carbon/Lang/en_BB.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_BE.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_BI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_BM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_BS.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_BW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_BZ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_CA.php | 29 + .../nesbot/carbon/src/Carbon/Lang/en_CC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_CH.php | 22 + .../nesbot/carbon/src/Carbon/Lang/en_CK.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_CM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_CX.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_CY.php | 28 + .../nesbot/carbon/src/Carbon/Lang/en_DE.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_DG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_DK.php | 22 + .../nesbot/carbon/src/Carbon/Lang/en_DM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_ER.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_FI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_FJ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_FK.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_FM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GB.php | 30 + .../nesbot/carbon/src/Carbon/Lang/en_GD.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GH.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_GU.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_GY.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_HK.php | 18 + .../nesbot/carbon/src/Carbon/Lang/en_IE.php | 31 + .../nesbot/carbon/src/Carbon/Lang/en_IL.php | 29 + .../nesbot/carbon/src/Carbon/Lang/en_IM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_IN.php | 26 + .../nesbot/carbon/src/Carbon/Lang/en_IO.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_ISO.php | 21 + .../nesbot/carbon/src/Carbon/Lang/en_JE.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_JM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_KE.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_KI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_KN.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_KY.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_LC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_LR.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_LS.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MH.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_MO.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_MP.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MS.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MT.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_MU.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MW.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_MY.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NA.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NF.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NG.php | 18 + .../nesbot/carbon/src/Carbon/Lang/en_NL.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NR.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NU.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_NZ.php | 31 + .../nesbot/carbon/src/Carbon/Lang/en_PG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_PH.php | 18 + .../nesbot/carbon/src/Carbon/Lang/en_PK.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_PN.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_PR.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_PW.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_RW.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SB.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SD.php | 15 + .../nesbot/carbon/src/Carbon/Lang/en_SE.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SG.php | 24 + .../nesbot/carbon/src/Carbon/Lang/en_SH.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SI.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SL.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SS.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SX.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_SZ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_TC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_TK.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_TO.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_TT.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_TV.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_TZ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_UG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_UM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_US.php | 12 + .../carbon/src/Carbon/Lang/en_US_Posix.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_VC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_VG.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_VI.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_VU.php | 14 + .../nesbot/carbon/src/Carbon/Lang/en_WS.php | 12 + .../nesbot/carbon/src/Carbon/Lang/en_ZA.php | 26 + .../nesbot/carbon/src/Carbon/Lang/en_ZM.php | 22 + .../nesbot/carbon/src/Carbon/Lang/en_ZW.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/eo.php | 77 + vendor/nesbot/carbon/src/Carbon/Lang/es.php | 121 + .../nesbot/carbon/src/Carbon/Lang/es_419.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_AR.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_BO.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_BR.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_BZ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_CL.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_CO.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_CR.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_CU.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_DO.php | 31 + .../nesbot/carbon/src/Carbon/Lang/es_EA.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_EC.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_ES.php | 16 + .../nesbot/carbon/src/Carbon/Lang/es_GQ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_GT.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_HN.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_IC.php | 14 + .../nesbot/carbon/src/Carbon/Lang/es_MX.php | 20 + .../nesbot/carbon/src/Carbon/Lang/es_NI.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_PA.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_PE.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_PH.php | 22 + .../nesbot/carbon/src/Carbon/Lang/es_PR.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_PY.php | 19 + .../nesbot/carbon/src/Carbon/Lang/es_SV.php | 20 + .../nesbot/carbon/src/Carbon/Lang/es_US.php | 38 + .../nesbot/carbon/src/Carbon/Lang/es_UY.php | 21 + .../nesbot/carbon/src/Carbon/Lang/es_VE.php | 19 + vendor/nesbot/carbon/src/Carbon/Lang/et.php | 93 + .../nesbot/carbon/src/Carbon/Lang/et_EE.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/eu.php | 67 + .../nesbot/carbon/src/Carbon/Lang/eu_ES.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ewo.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/fa.php | 84 + .../nesbot/carbon/src/Carbon/Lang/fa_AF.php | 21 + .../nesbot/carbon/src/Carbon/Lang/fa_IR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ff.php | 60 + .../nesbot/carbon/src/Carbon/Lang/ff_CM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ff_GN.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ff_MR.php | 21 + .../nesbot/carbon/src/Carbon/Lang/ff_SN.php | 16 + vendor/nesbot/carbon/src/Carbon/Lang/fi.php | 88 + .../nesbot/carbon/src/Carbon/Lang/fi_FI.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/fil.php | 15 + .../nesbot/carbon/src/Carbon/Lang/fil_PH.php | 62 + vendor/nesbot/carbon/src/Carbon/Lang/fo.php | 69 + .../nesbot/carbon/src/Carbon/Lang/fo_DK.php | 19 + .../nesbot/carbon/src/Carbon/Lang/fo_FO.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/fr.php | 123 + .../nesbot/carbon/src/Carbon/Lang/fr_BE.php | 18 + .../nesbot/carbon/src/Carbon/Lang/fr_BF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_BI.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_BJ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_BL.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_CA.php | 25 + .../nesbot/carbon/src/Carbon/Lang/fr_CD.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_CF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_CG.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_CH.php | 24 + .../nesbot/carbon/src/Carbon/Lang/fr_CI.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_CM.php | 14 + .../nesbot/carbon/src/Carbon/Lang/fr_DJ.php | 22 + .../nesbot/carbon/src/Carbon/Lang/fr_DZ.php | 23 + .../nesbot/carbon/src/Carbon/Lang/fr_FR.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_GA.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_GF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_GN.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_GP.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_GQ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_HT.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_KM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_LU.php | 21 + .../nesbot/carbon/src/Carbon/Lang/fr_MA.php | 15 + .../nesbot/carbon/src/Carbon/Lang/fr_MC.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_MF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_MG.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_ML.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_MQ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_MR.php | 21 + .../nesbot/carbon/src/Carbon/Lang/fr_MU.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_NC.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_NE.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_PF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_PM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_RE.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_RW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_SC.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_SN.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_SY.php | 23 + .../nesbot/carbon/src/Carbon/Lang/fr_TD.php | 21 + .../nesbot/carbon/src/Carbon/Lang/fr_TG.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_TN.php | 22 + .../nesbot/carbon/src/Carbon/Lang/fr_VU.php | 21 + .../nesbot/carbon/src/Carbon/Lang/fr_WF.php | 12 + .../nesbot/carbon/src/Carbon/Lang/fr_YT.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/fur.php | 15 + .../nesbot/carbon/src/Carbon/Lang/fur_IT.php | 39 + vendor/nesbot/carbon/src/Carbon/Lang/fy.php | 76 + .../nesbot/carbon/src/Carbon/Lang/fy_DE.php | 27 + .../nesbot/carbon/src/Carbon/Lang/fy_NL.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ga.php | 77 + .../nesbot/carbon/src/Carbon/Lang/ga_IE.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/gd.php | 75 + .../nesbot/carbon/src/Carbon/Lang/gd_GB.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/gez.php | 15 + .../nesbot/carbon/src/Carbon/Lang/gez_ER.php | 56 + .../nesbot/carbon/src/Carbon/Lang/gez_ET.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/gl.php | 98 + .../nesbot/carbon/src/Carbon/Lang/gl_ES.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/gom.php | 15 + .../carbon/src/Carbon/Lang/gom_Latn.php | 79 + vendor/nesbot/carbon/src/Carbon/Lang/gsw.php | 49 + .../nesbot/carbon/src/Carbon/Lang/gsw_CH.php | 12 + .../nesbot/carbon/src/Carbon/Lang/gsw_FR.php | 20 + .../nesbot/carbon/src/Carbon/Lang/gsw_LI.php | 20 + vendor/nesbot/carbon/src/Carbon/Lang/gu.php | 82 + .../nesbot/carbon/src/Carbon/Lang/gu_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/guz.php | 47 + vendor/nesbot/carbon/src/Carbon/Lang/gv.php | 15 + .../nesbot/carbon/src/Carbon/Lang/gv_GB.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ha.php | 60 + .../nesbot/carbon/src/Carbon/Lang/ha_GH.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ha_NE.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ha_NG.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/hak.php | 15 + .../nesbot/carbon/src/Carbon/Lang/hak_TW.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/haw.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/he.php | 86 + .../nesbot/carbon/src/Carbon/Lang/he_IL.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/hi.php | 82 + .../nesbot/carbon/src/Carbon/Lang/hi_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/hif.php | 15 + .../nesbot/carbon/src/Carbon/Lang/hif_FJ.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/hne.php | 15 + .../nesbot/carbon/src/Carbon/Lang/hne_IN.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/hr.php | 111 + .../nesbot/carbon/src/Carbon/Lang/hr_BA.php | 32 + .../nesbot/carbon/src/Carbon/Lang/hr_HR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/hsb.php | 15 + .../nesbot/carbon/src/Carbon/Lang/hsb_DE.php | 60 + vendor/nesbot/carbon/src/Carbon/Lang/ht.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ht_HT.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/hu.php | 118 + .../nesbot/carbon/src/Carbon/Lang/hu_HU.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/hy.php | 95 + .../nesbot/carbon/src/Carbon/Lang/hy_AM.php | 24 + vendor/nesbot/carbon/src/Carbon/Lang/i18n.php | 23 + vendor/nesbot/carbon/src/Carbon/Lang/ia.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ia_FR.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/id.php | 92 + .../nesbot/carbon/src/Carbon/Lang/id_ID.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ig.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ig_NG.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ii.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ik.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ik_CA.php | 50 + vendor/nesbot/carbon/src/Carbon/Lang/in.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/is.php | 55 + .../nesbot/carbon/src/Carbon/Lang/is_IS.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/it.php | 115 + .../nesbot/carbon/src/Carbon/Lang/it_CH.php | 20 + .../nesbot/carbon/src/Carbon/Lang/it_IT.php | 16 + .../nesbot/carbon/src/Carbon/Lang/it_SM.php | 12 + .../nesbot/carbon/src/Carbon/Lang/it_VA.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/iu.php | 15 + .../nesbot/carbon/src/Carbon/Lang/iu_CA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/iw.php | 58 + vendor/nesbot/carbon/src/Carbon/Lang/ja.php | 102 + .../nesbot/carbon/src/Carbon/Lang/ja_JP.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/jgo.php | 13 + vendor/nesbot/carbon/src/Carbon/Lang/jmc.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/jv.php | 71 + vendor/nesbot/carbon/src/Carbon/Lang/ka.php | 204 + .../nesbot/carbon/src/Carbon/Lang/ka_GE.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/kab.php | 15 + .../nesbot/carbon/src/Carbon/Lang/kab_DZ.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/kam.php | 50 + vendor/nesbot/carbon/src/Carbon/Lang/kde.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/kea.php | 49 + vendor/nesbot/carbon/src/Carbon/Lang/khq.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ki.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/kk.php | 103 + .../nesbot/carbon/src/Carbon/Lang/kk_KZ.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/kkj.php | 13 + vendor/nesbot/carbon/src/Carbon/Lang/kl.php | 15 + .../nesbot/carbon/src/Carbon/Lang/kl_GL.php | 64 + vendor/nesbot/carbon/src/Carbon/Lang/kln.php | 31 + vendor/nesbot/carbon/src/Carbon/Lang/km.php | 71 + .../nesbot/carbon/src/Carbon/Lang/km_KH.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/kn.php | 75 + .../nesbot/carbon/src/Carbon/Lang/kn_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ko.php | 91 + .../nesbot/carbon/src/Carbon/Lang/ko_KP.php | 14 + .../nesbot/carbon/src/Carbon/Lang/ko_KR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/kok.php | 15 + .../nesbot/carbon/src/Carbon/Lang/kok_IN.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ks.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ks_IN.php | 51 + .../src/Carbon/Lang/ks_IN@devanagari.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ksb.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ksf.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ksh.php | 57 + vendor/nesbot/carbon/src/Carbon/Lang/ku.php | 40 + .../nesbot/carbon/src/Carbon/Lang/ku_TR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/kw.php | 15 + .../nesbot/carbon/src/Carbon/Lang/kw_GB.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ky.php | 106 + .../nesbot/carbon/src/Carbon/Lang/ky_KG.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/lag.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/lb.php | 88 + .../nesbot/carbon/src/Carbon/Lang/lb_LU.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/lg.php | 15 + .../nesbot/carbon/src/Carbon/Lang/lg_UG.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/li.php | 15 + .../nesbot/carbon/src/Carbon/Lang/li_NL.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/lij.php | 15 + .../nesbot/carbon/src/Carbon/Lang/lij_IT.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/lkt.php | 41 + vendor/nesbot/carbon/src/Carbon/Lang/ln.php | 60 + .../nesbot/carbon/src/Carbon/Lang/ln_AO.php | 17 + .../nesbot/carbon/src/Carbon/Lang/ln_CD.php | 16 + .../nesbot/carbon/src/Carbon/Lang/ln_CF.php | 17 + .../nesbot/carbon/src/Carbon/Lang/ln_CG.php | 17 + vendor/nesbot/carbon/src/Carbon/Lang/lo.php | 62 + .../nesbot/carbon/src/Carbon/Lang/lo_LA.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/lrc.php | 17 + .../nesbot/carbon/src/Carbon/Lang/lrc_IQ.php | 13 + vendor/nesbot/carbon/src/Carbon/Lang/lt.php | 135 + .../nesbot/carbon/src/Carbon/Lang/lt_LT.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/lu.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/luo.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/luy.php | 57 + vendor/nesbot/carbon/src/Carbon/Lang/lv.php | 183 + .../nesbot/carbon/src/Carbon/Lang/lv_LV.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/lzh.php | 15 + .../nesbot/carbon/src/Carbon/Lang/lzh_TW.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/mag.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mag_IN.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/mai.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mai_IN.php | 51 + vendor/nesbot/carbon/src/Carbon/Lang/mas.php | 51 + .../nesbot/carbon/src/Carbon/Lang/mas_TZ.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/mer.php | 43 + vendor/nesbot/carbon/src/Carbon/Lang/mfe.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mfe_MU.php | 53 + vendor/nesbot/carbon/src/Carbon/Lang/mg.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mg_MG.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/mgh.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/mgo.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/mhr.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mhr_RU.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/mi.php | 66 + .../nesbot/carbon/src/Carbon/Lang/mi_NZ.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/miq.php | 15 + .../nesbot/carbon/src/Carbon/Lang/miq_NI.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/mjw.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mjw_IN.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/mk.php | 116 + .../nesbot/carbon/src/Carbon/Lang/mk_MK.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ml.php | 76 + .../nesbot/carbon/src/Carbon/Lang/ml_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/mn.php | 116 + .../nesbot/carbon/src/Carbon/Lang/mn_MN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/mni.php | 15 + .../nesbot/carbon/src/Carbon/Lang/mni_IN.php | 35 + vendor/nesbot/carbon/src/Carbon/Lang/mo.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/mr.php | 86 + .../nesbot/carbon/src/Carbon/Lang/mr_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ms.php | 104 + .../nesbot/carbon/src/Carbon/Lang/ms_BN.php | 22 + .../nesbot/carbon/src/Carbon/Lang/ms_MY.php | 18 + .../nesbot/carbon/src/Carbon/Lang/ms_SG.php | 22 + vendor/nesbot/carbon/src/Carbon/Lang/mt.php | 65 + .../nesbot/carbon/src/Carbon/Lang/mt_MT.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/mua.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/my.php | 70 + .../nesbot/carbon/src/Carbon/Lang/my_MM.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/mzn.php | 25 + vendor/nesbot/carbon/src/Carbon/Lang/nan.php | 15 + .../nesbot/carbon/src/Carbon/Lang/nan_TW.php | 55 + .../carbon/src/Carbon/Lang/nan_TW@latin.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/naq.php | 52 + vendor/nesbot/carbon/src/Carbon/Lang/nb.php | 84 + .../nesbot/carbon/src/Carbon/Lang/nb_NO.php | 12 + .../nesbot/carbon/src/Carbon/Lang/nb_SJ.php | 18 + vendor/nesbot/carbon/src/Carbon/Lang/nd.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/nds.php | 15 + .../nesbot/carbon/src/Carbon/Lang/nds_DE.php | 60 + .../nesbot/carbon/src/Carbon/Lang/nds_NL.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ne.php | 82 + .../nesbot/carbon/src/Carbon/Lang/ne_IN.php | 25 + .../nesbot/carbon/src/Carbon/Lang/ne_NP.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/nhn.php | 15 + .../nesbot/carbon/src/Carbon/Lang/nhn_MX.php | 50 + vendor/nesbot/carbon/src/Carbon/Lang/niu.php | 15 + .../nesbot/carbon/src/Carbon/Lang/niu_NU.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/nl.php | 113 + .../nesbot/carbon/src/Carbon/Lang/nl_AW.php | 27 + .../nesbot/carbon/src/Carbon/Lang/nl_BE.php | 27 + .../nesbot/carbon/src/Carbon/Lang/nl_BQ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/nl_CW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/nl_NL.php | 24 + .../nesbot/carbon/src/Carbon/Lang/nl_SR.php | 12 + .../nesbot/carbon/src/Carbon/Lang/nl_SX.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/nmg.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/nn.php | 78 + .../nesbot/carbon/src/Carbon/Lang/nn_NO.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/nnh.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/no.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/nr.php | 15 + .../nesbot/carbon/src/Carbon/Lang/nr_ZA.php | 26 + vendor/nesbot/carbon/src/Carbon/Lang/nso.php | 15 + .../nesbot/carbon/src/Carbon/Lang/nso_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/nus.php | 36 + vendor/nesbot/carbon/src/Carbon/Lang/nyn.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/oc.php | 100 + .../nesbot/carbon/src/Carbon/Lang/oc_FR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/om.php | 60 + .../nesbot/carbon/src/Carbon/Lang/om_ET.php | 12 + .../nesbot/carbon/src/Carbon/Lang/om_KE.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/or.php | 15 + .../nesbot/carbon/src/Carbon/Lang/or_IN.php | 51 + vendor/nesbot/carbon/src/Carbon/Lang/os.php | 15 + .../nesbot/carbon/src/Carbon/Lang/os_RU.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/pa.php | 76 + .../nesbot/carbon/src/Carbon/Lang/pa_Arab.php | 26 + .../nesbot/carbon/src/Carbon/Lang/pa_Guru.php | 27 + .../nesbot/carbon/src/Carbon/Lang/pa_IN.php | 19 + .../nesbot/carbon/src/Carbon/Lang/pa_PK.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/pap.php | 39 + .../nesbot/carbon/src/Carbon/Lang/pap_AW.php | 16 + .../nesbot/carbon/src/Carbon/Lang/pap_CW.php | 16 + vendor/nesbot/carbon/src/Carbon/Lang/pl.php | 126 + .../nesbot/carbon/src/Carbon/Lang/pl_PL.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/prg.php | 52 + vendor/nesbot/carbon/src/Carbon/Lang/ps.php | 55 + .../nesbot/carbon/src/Carbon/Lang/ps_AF.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/pt.php | 116 + .../nesbot/carbon/src/Carbon/Lang/pt_AO.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_BR.php | 39 + .../nesbot/carbon/src/Carbon/Lang/pt_CH.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_CV.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_GQ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_GW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_LU.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_MO.php | 20 + .../nesbot/carbon/src/Carbon/Lang/pt_MZ.php | 14 + .../nesbot/carbon/src/Carbon/Lang/pt_PT.php | 27 + .../nesbot/carbon/src/Carbon/Lang/pt_ST.php | 12 + .../nesbot/carbon/src/Carbon/Lang/pt_TL.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/qu.php | 22 + .../nesbot/carbon/src/Carbon/Lang/qu_BO.php | 14 + .../nesbot/carbon/src/Carbon/Lang/qu_EC.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/quz.php | 15 + .../nesbot/carbon/src/Carbon/Lang/quz_PE.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/raj.php | 15 + .../nesbot/carbon/src/Carbon/Lang/raj_IN.php | 47 + vendor/nesbot/carbon/src/Carbon/Lang/rm.php | 51 + vendor/nesbot/carbon/src/Carbon/Lang/rn.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/ro.php | 77 + .../nesbot/carbon/src/Carbon/Lang/ro_MD.php | 21 + .../nesbot/carbon/src/Carbon/Lang/ro_RO.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/rof.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/ru.php | 191 + .../nesbot/carbon/src/Carbon/Lang/ru_BY.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ru_KG.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ru_KZ.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ru_MD.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ru_RU.php | 12 + .../nesbot/carbon/src/Carbon/Lang/ru_UA.php | 20 + vendor/nesbot/carbon/src/Carbon/Lang/rw.php | 15 + .../nesbot/carbon/src/Carbon/Lang/rw_RW.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/rwk.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/sa.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sa_IN.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/sah.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sah_RU.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/saq.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/sat.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sat_IN.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/sbp.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/sc.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sc_IT.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/sd.php | 81 + .../nesbot/carbon/src/Carbon/Lang/sd_IN.php | 26 + .../src/Carbon/Lang/sd_IN@devanagari.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/se.php | 73 + .../nesbot/carbon/src/Carbon/Lang/se_FI.php | 27 + .../nesbot/carbon/src/Carbon/Lang/se_NO.php | 12 + .../nesbot/carbon/src/Carbon/Lang/se_SE.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/seh.php | 26 + vendor/nesbot/carbon/src/Carbon/Lang/ses.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/sg.php | 52 + vendor/nesbot/carbon/src/Carbon/Lang/sgs.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sgs_LT.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/sh.php | 68 + vendor/nesbot/carbon/src/Carbon/Lang/shi.php | 57 + .../carbon/src/Carbon/Lang/shi_Latn.php | 33 + .../carbon/src/Carbon/Lang/shi_Tfng.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/shn.php | 15 + .../nesbot/carbon/src/Carbon/Lang/shn_MM.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/shs.php | 15 + .../nesbot/carbon/src/Carbon/Lang/shs_CA.php | 38 + vendor/nesbot/carbon/src/Carbon/Lang/si.php | 78 + .../nesbot/carbon/src/Carbon/Lang/si_LK.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/sid.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sid_ET.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/sk.php | 155 + .../nesbot/carbon/src/Carbon/Lang/sk_SK.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/sl.php | 129 + .../nesbot/carbon/src/Carbon/Lang/sl_SI.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/sm.php | 15 + .../nesbot/carbon/src/Carbon/Lang/sm_WS.php | 53 + vendor/nesbot/carbon/src/Carbon/Lang/smn.php | 57 + vendor/nesbot/carbon/src/Carbon/Lang/sn.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/so.php | 74 + .../nesbot/carbon/src/Carbon/Lang/so_DJ.php | 20 + .../nesbot/carbon/src/Carbon/Lang/so_ET.php | 16 + .../nesbot/carbon/src/Carbon/Lang/so_KE.php | 16 + .../nesbot/carbon/src/Carbon/Lang/so_SO.php | 16 + vendor/nesbot/carbon/src/Carbon/Lang/sq.php | 79 + .../nesbot/carbon/src/Carbon/Lang/sq_AL.php | 12 + .../nesbot/carbon/src/Carbon/Lang/sq_MK.php | 19 + .../nesbot/carbon/src/Carbon/Lang/sq_XK.php | 19 + vendor/nesbot/carbon/src/Carbon/Lang/sr.php | 112 + .../nesbot/carbon/src/Carbon/Lang/sr_Cyrl.php | 112 + .../carbon/src/Carbon/Lang/sr_Cyrl_BA.php | 33 + .../carbon/src/Carbon/Lang/sr_Cyrl_ME.php | 118 + .../carbon/src/Carbon/Lang/sr_Cyrl_XK.php | 24 + .../nesbot/carbon/src/Carbon/Lang/sr_Latn.php | 12 + .../carbon/src/Carbon/Lang/sr_Latn_BA.php | 33 + .../carbon/src/Carbon/Lang/sr_Latn_ME.php | 76 + .../carbon/src/Carbon/Lang/sr_Latn_XK.php | 24 + .../nesbot/carbon/src/Carbon/Lang/sr_ME.php | 12 + .../nesbot/carbon/src/Carbon/Lang/sr_RS.php | 16 + .../carbon/src/Carbon/Lang/sr_RS@latin.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ss.php | 78 + .../nesbot/carbon/src/Carbon/Lang/ss_ZA.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/st.php | 15 + .../nesbot/carbon/src/Carbon/Lang/st_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/sv.php | 87 + .../nesbot/carbon/src/Carbon/Lang/sv_AX.php | 19 + .../nesbot/carbon/src/Carbon/Lang/sv_FI.php | 12 + .../nesbot/carbon/src/Carbon/Lang/sv_SE.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/sw.php | 74 + .../nesbot/carbon/src/Carbon/Lang/sw_CD.php | 17 + .../nesbot/carbon/src/Carbon/Lang/sw_KE.php | 27 + .../nesbot/carbon/src/Carbon/Lang/sw_TZ.php | 28 + .../nesbot/carbon/src/Carbon/Lang/sw_UG.php | 17 + vendor/nesbot/carbon/src/Carbon/Lang/szl.php | 15 + .../nesbot/carbon/src/Carbon/Lang/szl_PL.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/ta.php | 97 + .../nesbot/carbon/src/Carbon/Lang/ta_IN.php | 27 + .../nesbot/carbon/src/Carbon/Lang/ta_LK.php | 28 + .../nesbot/carbon/src/Carbon/Lang/ta_MY.php | 28 + .../nesbot/carbon/src/Carbon/Lang/ta_SG.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/tcy.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tcy_IN.php | 39 + vendor/nesbot/carbon/src/Carbon/Lang/te.php | 89 + .../nesbot/carbon/src/Carbon/Lang/te_IN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/teo.php | 28 + .../nesbot/carbon/src/Carbon/Lang/teo_KE.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/tet.php | 64 + vendor/nesbot/carbon/src/Carbon/Lang/tg.php | 104 + .../nesbot/carbon/src/Carbon/Lang/tg_TJ.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/th.php | 73 + .../nesbot/carbon/src/Carbon/Lang/th_TH.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/the.php | 15 + .../nesbot/carbon/src/Carbon/Lang/the_NP.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/ti.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ti_ER.php | 56 + .../nesbot/carbon/src/Carbon/Lang/ti_ET.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/tig.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tig_ER.php | 56 + vendor/nesbot/carbon/src/Carbon/Lang/tk.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tk_TM.php | 77 + vendor/nesbot/carbon/src/Carbon/Lang/tl.php | 61 + .../nesbot/carbon/src/Carbon/Lang/tl_PH.php | 18 + vendor/nesbot/carbon/src/Carbon/Lang/tlh.php | 72 + vendor/nesbot/carbon/src/Carbon/Lang/tn.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tn_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/to.php | 15 + .../nesbot/carbon/src/Carbon/Lang/to_TO.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/tpi.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tpi_PG.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/tr.php | 121 + .../nesbot/carbon/src/Carbon/Lang/tr_CY.php | 23 + .../nesbot/carbon/src/Carbon/Lang/tr_TR.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ts.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ts_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/tt.php | 15 + .../nesbot/carbon/src/Carbon/Lang/tt_RU.php | 39 + .../carbon/src/Carbon/Lang/tt_RU@iqtelif.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/twq.php | 14 + vendor/nesbot/carbon/src/Carbon/Lang/tzl.php | 65 + vendor/nesbot/carbon/src/Carbon/Lang/tzm.php | 57 + .../carbon/src/Carbon/Lang/tzm_Latn.php | 64 + vendor/nesbot/carbon/src/Carbon/Lang/ug.php | 90 + .../nesbot/carbon/src/Carbon/Lang/ug_CN.php | 17 + vendor/nesbot/carbon/src/Carbon/Lang/uk.php | 212 + .../nesbot/carbon/src/Carbon/Lang/uk_UA.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/unm.php | 15 + .../nesbot/carbon/src/Carbon/Lang/unm_US.php | 57 + vendor/nesbot/carbon/src/Carbon/Lang/ur.php | 94 + .../nesbot/carbon/src/Carbon/Lang/ur_IN.php | 26 + .../nesbot/carbon/src/Carbon/Lang/ur_PK.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/uz.php | 85 + .../nesbot/carbon/src/Carbon/Lang/uz_Arab.php | 28 + .../nesbot/carbon/src/Carbon/Lang/uz_Cyrl.php | 20 + .../nesbot/carbon/src/Carbon/Lang/uz_Latn.php | 74 + .../nesbot/carbon/src/Carbon/Lang/uz_UZ.php | 27 + .../carbon/src/Carbon/Lang/uz_UZ@cyrillic.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/vai.php | 35 + .../carbon/src/Carbon/Lang/vai_Latn.php | 27 + .../carbon/src/Carbon/Lang/vai_Vaii.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/ve.php | 15 + .../nesbot/carbon/src/Carbon/Lang/ve_ZA.php | 49 + vendor/nesbot/carbon/src/Carbon/Lang/vi.php | 76 + .../nesbot/carbon/src/Carbon/Lang/vi_VN.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/vo.php | 52 + vendor/nesbot/carbon/src/Carbon/Lang/vun.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/wa.php | 15 + .../nesbot/carbon/src/Carbon/Lang/wa_BE.php | 55 + vendor/nesbot/carbon/src/Carbon/Lang/wae.php | 15 + .../nesbot/carbon/src/Carbon/Lang/wae_CH.php | 31 + vendor/nesbot/carbon/src/Carbon/Lang/wal.php | 15 + .../nesbot/carbon/src/Carbon/Lang/wal_ET.php | 27 + vendor/nesbot/carbon/src/Carbon/Lang/wo.php | 15 + .../nesbot/carbon/src/Carbon/Lang/wo_SN.php | 39 + vendor/nesbot/carbon/src/Carbon/Lang/xh.php | 15 + .../nesbot/carbon/src/Carbon/Lang/xh_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/xog.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/yav.php | 28 + vendor/nesbot/carbon/src/Carbon/Lang/yi.php | 15 + .../nesbot/carbon/src/Carbon/Lang/yi_US.php | 54 + vendor/nesbot/carbon/src/Carbon/Lang/yo.php | 65 + .../nesbot/carbon/src/Carbon/Lang/yo_BJ.php | 28 + .../nesbot/carbon/src/Carbon/Lang/yo_NG.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/yue.php | 15 + .../nesbot/carbon/src/Carbon/Lang/yue_HK.php | 28 + .../carbon/src/Carbon/Lang/yue_Hans.php | 12 + .../carbon/src/Carbon/Lang/yue_Hant.php | 12 + vendor/nesbot/carbon/src/Carbon/Lang/yuw.php | 15 + .../nesbot/carbon/src/Carbon/Lang/yuw_PG.php | 26 + vendor/nesbot/carbon/src/Carbon/Lang/zgh.php | 80 + vendor/nesbot/carbon/src/Carbon/Lang/zh.php | 29 + .../nesbot/carbon/src/Carbon/Lang/zh_CN.php | 33 + .../nesbot/carbon/src/Carbon/Lang/zh_HK.php | 12 + .../nesbot/carbon/src/Carbon/Lang/zh_Hans.php | 109 + .../carbon/src/Carbon/Lang/zh_Hans_HK.php | 12 + .../carbon/src/Carbon/Lang/zh_Hans_MO.php | 12 + .../carbon/src/Carbon/Lang/zh_Hans_SG.php | 12 + .../nesbot/carbon/src/Carbon/Lang/zh_Hant.php | 111 + .../carbon/src/Carbon/Lang/zh_Hant_HK.php | 12 + .../carbon/src/Carbon/Lang/zh_Hant_MO.php | 12 + .../carbon/src/Carbon/Lang/zh_Hant_TW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/zh_MO.php | 21 + .../nesbot/carbon/src/Carbon/Lang/zh_SG.php | 26 + .../nesbot/carbon/src/Carbon/Lang/zh_TW.php | 12 + .../nesbot/carbon/src/Carbon/Lang/zh_YUE.php | 20 + vendor/nesbot/carbon/src/Carbon/Lang/zu.php | 15 + .../nesbot/carbon/src/Carbon/Lang/zu_ZA.php | 54 + vendor/nesbot/carbon/src/Carbon/Language.php | 342 + .../src/Carbon/Laravel/ServiceProvider.php | 127 + .../carbon/src/Carbon/List/languages.php | 1239 + .../nesbot/carbon/src/Carbon/List/regions.php | 265 + .../MessageFormatterMapper.php | 44 + .../src/Carbon/PHPStan/AbstractMacro.php | 286 + .../carbon/src/Carbon/PHPStan/Macro.php | 34 + .../src/Carbon/PHPStan/MacroExtension.php | 88 + .../src/Carbon/PHPStan/MacroScanner.php | 83 + .../carbon/src/Carbon/Traits/Boundaries.php | 443 + .../nesbot/carbon/src/Carbon/Traits/Cast.php | 43 + .../carbon/src/Carbon/Traits/Comparison.php | 1129 + .../carbon/src/Carbon/Traits/Converter.php | 639 + .../carbon/src/Carbon/Traits/Creator.php | 977 + .../nesbot/carbon/src/Carbon/Traits/Date.php | 2747 + .../Carbon/Traits/DeprecatedProperties.php | 61 + .../carbon/src/Carbon/Traits/Difference.php | 1182 + .../src/Carbon/Traits/IntervalRounding.php | 57 + .../carbon/src/Carbon/Traits/IntervalStep.php | 93 + .../carbon/src/Carbon/Traits/Localization.php | 840 + .../nesbot/carbon/src/Carbon/Traits/Macro.php | 136 + .../src/Carbon/Traits/MagicParameter.php | 33 + .../nesbot/carbon/src/Carbon/Traits/Mixin.php | 226 + .../carbon/src/Carbon/Traits/Modifiers.php | 472 + .../carbon/src/Carbon/Traits/Mutability.php | 71 + .../Carbon/Traits/ObjectInitialisation.php | 22 + .../carbon/src/Carbon/Traits/Options.php | 471 + .../carbon/src/Carbon/Traits/Rounding.php | 254 + .../src/Carbon/Traits/Serialization.php | 326 + .../nesbot/carbon/src/Carbon/Traits/Test.php | 228 + .../carbon/src/Carbon/Traits/Timestamp.php | 199 + .../src/Carbon/Traits/ToStringFormat.php | 56 + .../nesbot/carbon/src/Carbon/Traits/Units.php | 412 + .../nesbot/carbon/src/Carbon/Traits/Week.php | 219 + .../nesbot/carbon/src/Carbon/Translator.php | 32 + .../carbon/src/Carbon/TranslatorImmutable.php | 99 + .../Carbon/TranslatorStrongTypeInterface.php | 22 + vendor/nyholm/psr7/CHANGELOG.md | 172 + vendor/nyholm/psr7/LICENSE | 21 + vendor/nyholm/psr7/README.md | 108 + vendor/nyholm/psr7/composer.json | 49 + .../psr7/src/Factory/HttplugFactory.php | 53 + .../nyholm/psr7/src/Factory/Psr17Factory.php | 78 + vendor/nyholm/psr7/src/MessageTrait.php | 235 + vendor/nyholm/psr7/src/Request.php | 47 + vendor/nyholm/psr7/src/RequestTrait.php | 127 + vendor/nyholm/psr7/src/Response.php | 93 + vendor/nyholm/psr7/src/ServerRequest.php | 201 + vendor/nyholm/psr7/src/Stream.php | 399 + vendor/nyholm/psr7/src/StreamTrait.php | 57 + vendor/nyholm/psr7/src/UploadedFile.php | 179 + vendor/nyholm/psr7/src/Uri.php | 356 + vendor/paragonie/random_compat/LICENSE | 22 + vendor/paragonie/random_compat/build-phar.sh | 5 + vendor/paragonie/random_compat/composer.json | 34 + .../dist/random_compat.phar.pubkey | 5 + .../dist/random_compat.phar.pubkey.asc | 11 + vendor/paragonie/random_compat/lib/random.php | 32 + .../random_compat/other/build_phar.php | 57 + .../random_compat/psalm-autoload.php | 9 + vendor/paragonie/random_compat/psalm.xml | 19 + vendor/pecee/simple-router/README.md | 2105 + vendor/pecee/simple-router/composer.json | 56 + vendor/pecee/simple-router/helpers.php | 88 + vendor/pecee/simple-router/phpstan.neon | 22 + vendor/pecee/simple-router/phpunit.xml | 24 + .../Pecee/Controllers/IResourceController.php | 48 + .../Exceptions/InvalidArgumentException.php | 8 + .../Http/Exceptions/MalformedUrlException.php | 10 + .../src/Pecee/Http/Input/IInputItem.php | 28 + .../src/Pecee/Http/Input/InputFile.php | 319 + .../src/Pecee/Http/Input/InputHandler.php | 474 + .../src/Pecee/Http/Input/InputItem.php | 123 + .../Http/Middleware/BaseCsrfVerifier.php | 132 + .../Exceptions/TokenMismatchException.php | 10 + .../src/Pecee/Http/Middleware/IMiddleware.php | 14 + .../Http/Middleware/IpRestrictAccess.php | 47 + .../simple-router/src/Pecee/Http/Request.php | 564 + .../simple-router/src/Pecee/Http/Response.php | 132 + .../Http/Security/CookieTokenProvider.php | 124 + .../Security/Exceptions/SecurityException.php | 10 + .../Pecee/Http/Security/ITokenProvider.php | 29 + .../simple-router/src/Pecee/Http/Url.php | 547 + .../SimpleRouter/ClassLoader/ClassLoader.php | 49 + .../SimpleRouter/ClassLoader/IClassLoader.php | 33 + .../SimpleRouter/Event/EventArgument.php | 112 + .../SimpleRouter/Event/IEventArgument.php | 46 + .../Exceptions/ClassNotFoundHttpException.php | 45 + .../SimpleRouter/Exceptions/HttpException.php | 10 + .../Exceptions/NotFoundHttpException.php | 8 + .../Handlers/CallbackExceptionHandler.php | 42 + .../Handlers/DebugEventHandler.php | 63 + .../SimpleRouter/Handlers/EventHandler.php | 185 + .../SimpleRouter/Handlers/IEventHandler.php | 27 + .../Handlers/IExceptionHandler.php | 16 + .../Pecee/SimpleRouter/IRouterBootManager.php | 16 + .../SimpleRouter/Route/IControllerRoute.php | 22 + .../Pecee/SimpleRouter/Route/IGroupRoute.php | 93 + .../SimpleRouter/Route/ILoadableRoute.php | 87 + .../SimpleRouter/Route/IPartialGroupRoute.php | 8 + .../src/Pecee/SimpleRouter/Route/IRoute.php | 223 + .../SimpleRouter/Route/LoadableRoute.php | 283 + .../src/Pecee/SimpleRouter/Route/Route.php | 654 + .../SimpleRouter/Route/RouteController.php | 186 + .../Pecee/SimpleRouter/Route/RouteGroup.php | 265 + .../SimpleRouter/Route/RoutePartialGroup.php | 7 + .../SimpleRouter/Route/RouteResource.php | 245 + .../src/Pecee/SimpleRouter/Route/RouteUrl.php | 47 + .../src/Pecee/SimpleRouter/Router.php | 961 + .../src/Pecee/SimpleRouter/SimpleRouter.php | 537 + .../Pecee/SimpleRouter/BootManagerTest.php | 49 + .../Pecee/SimpleRouter/ClassLoaderTest.php | 30 + .../Pecee/SimpleRouter/CsrfVerifierTest.php | 66 + .../SimpleRouter/CustomMiddlewareTest.php | 71 + .../Dummy/ClassLoader/CustomClassLoader.php | 26 + .../Dummy/CsrfVerifier/DummyCsrfVerifier.php | 18 + .../SimpleRouter/Dummy/DummyController.php | 46 + .../SimpleRouter/Dummy/DummyMiddleware.php | 13 + .../Exception/ExceptionHandlerException.php | 5 + .../Exception/MiddlewareLoadedException.php | 4 + .../Dummy/Exception/ResponseException.php | 18 + .../Dummy/Handler/ExceptionHandler.php | 10 + .../Dummy/Handler/ExceptionHandlerFirst.php | 13 + .../Dummy/Handler/ExceptionHandlerSecond.php | 13 + .../Dummy/Handler/ExceptionHandlerThird.php | 13 + .../Dummy/Managers/FindUrlBootManager.php | 26 + .../Dummy/Managers/TestBootManager.php | 30 + .../Dummy/Middleware/IpRestrictMiddleware.php | 14 + .../Dummy/Middleware/RewriteMiddleware.php | 16 + .../Pecee/SimpleRouter/Dummy/NSController.php | 11 + .../SimpleRouter/Dummy/ResourceController.php | 39 + .../Dummy/Route/DummyLoadableRoute.php | 11 + .../Dummy/Security/SilentTokenProvider.php | 41 + .../Pecee/SimpleRouter/EventHandlerTest.php | 151 + .../Pecee/SimpleRouter/InputHandlerTest.php | 287 + .../Pecee/SimpleRouter/LoadableRouteTest.php | 27 + .../Pecee/SimpleRouter/MiddlewareTest.php | 35 + .../tests/Pecee/SimpleRouter/RequestTest.php | 84 + .../RouterCallbackExceptionHandlerTest.php | 47 + .../SimpleRouter/RouterControllerTest.php | 41 + .../Pecee/SimpleRouter/RouterGroupTest.php | 120 + .../SimpleRouter/RouterPartialGroupTest.php | 116 + .../Pecee/SimpleRouter/RouterResourceTest.php | 84 + .../Pecee/SimpleRouter/RouterRewriteTest.php | 203 + .../Pecee/SimpleRouter/RouterRouteTest.php | 335 + .../Pecee/SimpleRouter/RouterUrlTest.php | 389 + .../pecee/simple-router/tests/TestRouter.php | 69 + .../pecee/simple-router/tests/bootstrap.php | 4 + vendor/pecee/simple-router/tests/debug.php | 9 + vendor/php-di/invoker/LICENSE | 21 + vendor/php-di/invoker/README.md | 234 + vendor/php-di/invoker/composer.json | 32 + .../php-di/invoker/src/CallableResolver.php | 124 + .../src/Exception/InvocationException.php | 10 + .../src/Exception/NotCallableException.php | 33 + .../NotEnoughParametersException.php | 10 + vendor/php-di/invoker/src/Invoker.php | 109 + .../php-di/invoker/src/InvokerInterface.php | 25 + .../AssociativeArrayResolver.php | 37 + .../ParameterNameContainerResolver.php | 47 + .../Container/TypeHintContainerResolver.php | 65 + .../DefaultValueResolver.php | 43 + .../NumericArrayResolver.php | 37 + .../ParameterResolver/ParameterResolver.php | 30 + .../src/ParameterResolver/ResolverChain.php | 61 + .../ParameterResolver/TypeHintResolver.php | 54 + .../src/Reflection/CallableReflection.php | 56 + vendor/php-di/php-di/LICENSE | 18 + vendor/php-di/php-di/README.md | 21 + vendor/php-di/php-di/change-log.md | 440 + vendor/php-di/php-di/composer.json | 45 + vendor/php-di/php-di/src/Attribute/Inject.php | 74 + .../php-di/src/Attribute/Injectable.php | 34 + .../php-di/php-di/src/CompiledContainer.php | 116 + .../php-di/php-di/src/Compiler/Compiler.php | 402 + .../src/Compiler/ObjectCreationCompiler.php | 200 + .../src/Compiler/RequestedEntryHolder.php | 23 + .../php-di/php-di/src/Compiler/Template.php | 16 + vendor/php-di/php-di/src/Container.php | 398 + vendor/php-di/php-di/src/ContainerBuilder.php | 333 + .../php-di/src/Definition/ArrayDefinition.php | 65 + .../Definition/ArrayDefinitionExtension.php | 39 + .../src/Definition/AutowireDefinition.php | 12 + .../src/Definition/DecoratorDefinition.php | 36 + .../php-di/src/Definition/Definition.php | 37 + .../Dumper/ObjectDefinitionDumper.php | 144 + .../EnvironmentVariableDefinition.php | 87 + .../Definition/Exception/InvalidAttribute.php | 14 + .../Exception/InvalidDefinition.php | 25 + .../Definition/ExtendsPreviousDefinition.php | 15 + .../src/Definition/FactoryDefinition.php | 78 + .../Helper/AutowireDefinitionHelper.php | 72 + .../Helper/CreateDefinitionHelper.php | 189 + .../Definition/Helper/DefinitionHelper.php | 20 + .../Helper/FactoryDefinitionHelper.php | 63 + .../src/Definition/InstanceDefinition.php | 54 + .../src/Definition/ObjectDefinition.php | 242 + .../ObjectDefinition/MethodInjection.php | 76 + .../ObjectDefinition/PropertyInjection.php | 61 + .../php-di/src/Definition/Reference.php | 64 + .../src/Definition/Resolver/ArrayResolver.php | 76 + .../Definition/Resolver/DecoratorResolver.php | 74 + .../Resolver/DefinitionResolver.php | 42 + .../Resolver/EnvironmentVariableResolver.php | 69 + .../Definition/Resolver/FactoryResolver.php | 112 + .../Definition/Resolver/InstanceInjector.php | 50 + .../src/Definition/Resolver/ObjectCreator.php | 207 + .../Definition/Resolver/ParameterResolver.php | 106 + .../Resolver/ResolverDispatcher.php | 125 + .../Definition/SelfResolvingDefinition.php | 25 + .../Source/AttributeBasedAutowiring.php | 263 + .../src/Definition/Source/Autowiring.php | 23 + .../src/Definition/Source/DefinitionArray.php | 112 + .../src/Definition/Source/DefinitionFile.php | 62 + .../Source/DefinitionNormalizer.php | 112 + .../Definition/Source/DefinitionSource.php | 28 + .../Source/MutableDefinitionSource.php | 17 + .../src/Definition/Source/NoAutowiring.php | 24 + .../Source/ReflectionBasedAutowiring.php | 85 + .../src/Definition/Source/SourceCache.php | 77 + .../src/Definition/Source/SourceChain.php | 90 + .../src/Definition/StringDefinition.php | 90 + .../php-di/src/Definition/ValueDefinition.php | 60 + .../php-di/php-di/src/DependencyException.php | 14 + .../php-di/src/Factory/RequestedEntry.php | 23 + vendor/php-di/php-di/src/FactoryInterface.php | 30 + .../Invoker/DefinitionParameterResolver.php | 64 + .../src/Invoker/FactoryParameterResolver.php | 69 + .../php-di/php-di/src/NotFoundException.php | 14 + .../php-di/php-di/src/Proxy/ProxyFactory.php | 85 + vendor/php-di/php-di/src/functions.php | 154 + vendor/php-di/php-di/support.md | 42 + vendor/phpauth/phpauth/CHANGELOG.md | 65 + vendor/phpauth/phpauth/CONFIG_HINTS.md | 20 + vendor/phpauth/phpauth/CUSTOM_VALIDATORS.md | 146 + vendor/phpauth/phpauth/DEPRECATION_WARNING.md | 50 + vendor/phpauth/phpauth/LICENSE | 21 + vendor/phpauth/phpauth/composer.json | 36 + .../database_defs/database_emails_banned.sql | 114435 +++++++++++++++ .../phpauth/database_defs/database_mssql.sql | 111 + .../phpauth/database_defs/database_mysql.sql | 136 + .../phpauth/database_defs/database_pgsql.sql | 113 + .../database_translation_dictionary.sql | 47 + .../index.php | 126 + .../zxcvbn.js | 28 + vendor/phpauth/phpauth/files/domains.json | 1 + vendor/phpauth/phpauth/files/import.php | 203 + .../phpauth/files/import_langs_to_sql.php | 61 + .../make_forgotten_dictionary_by_sql.php | 24 + vendor/phpauth/phpauth/languages/ar_TN.php | 74 + vendor/phpauth/phpauth/languages/bs_BA.php | 74 + vendor/phpauth/phpauth/languages/cs_CZ.php | 74 + vendor/phpauth/phpauth/languages/da_DK.php | 74 + vendor/phpauth/phpauth/languages/de_DE.php | 74 + vendor/phpauth/phpauth/languages/en_GB.php | 82 + vendor/phpauth/phpauth/languages/es_MX.php | 74 + vendor/phpauth/phpauth/languages/fa_IR.php | 74 + vendor/phpauth/phpauth/languages/fr_FR.php | 74 + vendor/phpauth/phpauth/languages/gr_GR.php | 74 + vendor/phpauth/phpauth/languages/hu_HU.php | 74 + vendor/phpauth/phpauth/languages/id_ID.php | 82 + vendor/phpauth/phpauth/languages/it_IT.php | 74 + vendor/phpauth/phpauth/languages/ja_JP.php | 80 + vendor/phpauth/phpauth/languages/nl_BE.php | 74 + vendor/phpauth/phpauth/languages/nl_NL.php | 74 + vendor/phpauth/phpauth/languages/no_NB.php | 74 + vendor/phpauth/phpauth/languages/pl_PL.php | 74 + vendor/phpauth/phpauth/languages/ps_AF.php | 74 + vendor/phpauth/phpauth/languages/pt_BR.php | 74 + vendor/phpauth/phpauth/languages/ro_RO.php | 74 + vendor/phpauth/phpauth/languages/ru_RU.php | 74 + vendor/phpauth/phpauth/languages/se_SE.php | 74 + vendor/phpauth/phpauth/languages/sk_SK.php | 74 + vendor/phpauth/phpauth/languages/sl_SI.php | 74 + vendor/phpauth/phpauth/languages/sr_RS.php | 75 + vendor/phpauth/phpauth/languages/th_TH.php | 74 + vendor/phpauth/phpauth/languages/tr_TR.php | 57 + vendor/phpauth/phpauth/languages/uk_UA.php | 74 + vendor/phpauth/phpauth/languages/vi_VN.php | 74 + vendor/phpauth/phpauth/languages/zh_CN.php | 77 + vendor/phpauth/phpauth/languages/zh_TW.php | 77 + vendor/phpauth/phpauth/sources/Auth.php | 1799 + .../phpauth/phpauth/sources/AuthInterface.php | 311 + vendor/phpauth/phpauth/sources/Config.php | 513 + .../phpauth/sources/ConfigInterface.php | 89 + .../phpauth/phpauth/sources/Core/Result.php | 111 + vendor/phpauth/phpauth/sources/Helpers.php | 215 + vendor/phpmailer/phpmailer/COMMITMENT | 46 + vendor/phpmailer/phpmailer/LICENSE | 502 + vendor/phpmailer/phpmailer/README.md | 231 + vendor/phpmailer/phpmailer/SECURITY.md | 37 + vendor/phpmailer/phpmailer/VERSION | 1 + vendor/phpmailer/phpmailer/composer.json | 80 + .../phpmailer/phpmailer/get_oauth_token.php | 182 + .../phpmailer/language/phpmailer.lang-af.php | 26 + .../phpmailer/language/phpmailer.lang-ar.php | 27 + .../phpmailer/language/phpmailer.lang-as.php | 35 + .../phpmailer/language/phpmailer.lang-az.php | 27 + .../phpmailer/language/phpmailer.lang-ba.php | 27 + .../phpmailer/language/phpmailer.lang-be.php | 27 + .../phpmailer/language/phpmailer.lang-bg.php | 27 + .../phpmailer/language/phpmailer.lang-bn.php | 35 + .../phpmailer/language/phpmailer.lang-ca.php | 27 + .../phpmailer/language/phpmailer.lang-cs.php | 28 + .../phpmailer/language/phpmailer.lang-da.php | 36 + .../phpmailer/language/phpmailer.lang-de.php | 28 + .../phpmailer/language/phpmailer.lang-el.php | 33 + .../phpmailer/language/phpmailer.lang-eo.php | 26 + .../phpmailer/language/phpmailer.lang-es.php | 36 + .../phpmailer/language/phpmailer.lang-et.php | 28 + .../phpmailer/language/phpmailer.lang-fa.php | 28 + .../phpmailer/language/phpmailer.lang-fi.php | 27 + .../phpmailer/language/phpmailer.lang-fo.php | 27 + .../phpmailer/language/phpmailer.lang-fr.php | 36 + .../phpmailer/language/phpmailer.lang-gl.php | 27 + .../phpmailer/language/phpmailer.lang-he.php | 27 + .../phpmailer/language/phpmailer.lang-hi.php | 35 + .../phpmailer/language/phpmailer.lang-hr.php | 27 + .../phpmailer/language/phpmailer.lang-hu.php | 27 + .../phpmailer/language/phpmailer.lang-hy.php | 27 + .../phpmailer/language/phpmailer.lang-id.php | 31 + .../phpmailer/language/phpmailer.lang-it.php | 28 + .../phpmailer/language/phpmailer.lang-ja.php | 37 + .../phpmailer/language/phpmailer.lang-ka.php | 27 + .../phpmailer/language/phpmailer.lang-ko.php | 27 + .../phpmailer/language/phpmailer.lang-ku.php | 27 + .../phpmailer/language/phpmailer.lang-lt.php | 27 + .../phpmailer/language/phpmailer.lang-lv.php | 27 + .../phpmailer/language/phpmailer.lang-mg.php | 27 + .../phpmailer/language/phpmailer.lang-mn.php | 27 + .../phpmailer/language/phpmailer.lang-ms.php | 27 + .../phpmailer/language/phpmailer.lang-nb.php | 33 + .../phpmailer/language/phpmailer.lang-nl.php | 34 + .../phpmailer/language/phpmailer.lang-pl.php | 33 + .../phpmailer/language/phpmailer.lang-pt.php | 27 + .../language/phpmailer.lang-pt_br.php | 38 + .../phpmailer/language/phpmailer.lang-ro.php | 33 + .../phpmailer/language/phpmailer.lang-ru.php | 36 + .../phpmailer/language/phpmailer.lang-si.php | 34 + .../phpmailer/language/phpmailer.lang-sk.php | 30 + .../phpmailer/language/phpmailer.lang-sl.php | 36 + .../phpmailer/language/phpmailer.lang-sr.php | 28 + .../language/phpmailer.lang-sr_latn.php | 28 + .../phpmailer/language/phpmailer.lang-sv.php | 27 + .../phpmailer/language/phpmailer.lang-tl.php | 28 + .../phpmailer/language/phpmailer.lang-tr.php | 38 + .../phpmailer/language/phpmailer.lang-uk.php | 28 + .../phpmailer/language/phpmailer.lang-ur.php | 30 + .../phpmailer/language/phpmailer.lang-vi.php | 27 + .../phpmailer/language/phpmailer.lang-zh.php | 29 + .../language/phpmailer.lang-zh_cn.php | 36 + .../phpmailer/src/DSNConfigurator.php | 245 + vendor/phpmailer/phpmailer/src/Exception.php | 40 + vendor/phpmailer/phpmailer/src/OAuth.php | 139 + .../phpmailer/src/OAuthTokenProvider.php | 44 + vendor/phpmailer/phpmailer/src/PHPMailer.php | 5248 + vendor/phpmailer/phpmailer/src/POP3.php | 469 + vendor/phpmailer/phpmailer/src/SMTP.php | 1509 + vendor/predis/predis/CHANGELOG.md | 1109 + vendor/predis/predis/CONTRIBUTING.md | 44 + vendor/predis/predis/FAQ.md | 177 + vendor/predis/predis/LICENSE | 22 + vendor/predis/predis/README.md | 489 + vendor/predis/predis/VERSION | 1 + vendor/predis/predis/autoload.php | 14 + vendor/predis/predis/bin/create-command-test | 275 + vendor/predis/predis/bin/create-pear | 233 + vendor/predis/predis/bin/create-phar | 71 + vendor/predis/predis/bin/create-single-file | 662 + vendor/predis/predis/composer.json | 48 + .../examples/custom_cluster_distributor.php | 117 + .../predis/examples/debuggable_connection.php | 92 + .../predis/examples/dispatcher_loop.php | 79 + .../examples/executing_redis_commands.php | 57 + .../predis/predis/examples/key_prefixing.php | 36 + .../examples/lua_scripting_abstraction.php | 71 + .../predis/examples/monitor_consumer.php | 44 + .../predis/examples/pipelining_commands.php | 45 + .../predis/examples/pubsub_consumer.php | 59 + .../examples/redis_collections_iterators.php | 99 + .../predis/examples/replication_complex.php | 85 + .../predis/examples/replication_sentinel.php | 58 + .../predis/examples/replication_simple.php | 52 + .../predis/examples/session_handler.php | 52 + vendor/predis/predis/examples/shared.php | 48 + .../predis/examples/transaction_using_cas.php | 52 + vendor/predis/predis/package.ini | 36 + vendor/predis/predis/src/Autoloader.php | 62 + vendor/predis/predis/src/Client.php | 550 + .../predis/src/ClientContextInterface.php | 199 + vendor/predis/predis/src/ClientException.php | 21 + vendor/predis/predis/src/ClientInterface.php | 240 + .../predis/src/Cluster/ClusterStrategy.php | 469 + .../Distributor/DistributorInterface.php | 82 + .../Distributor/EmptyRingException.php | 21 + .../src/Cluster/Distributor/HashRing.php | 270 + .../src/Cluster/Distributor/KetamaRing.php | 71 + .../predis/predis/src/Cluster/Hash/CRC16.php | 74 + .../Cluster/Hash/HashGeneratorInterface.php | 30 + .../predis/src/Cluster/PredisStrategy.php | 79 + .../predis/src/Cluster/RedisStrategy.php | 58 + .../predis/src/Cluster/StrategyInterface.php | 53 + .../Iterator/CursorBasedIterator.php | 196 + .../src/Collection/Iterator/HashKey.php | 58 + .../src/Collection/Iterator/Keyspace.php | 43 + .../src/Collection/Iterator/ListKey.php | 181 + .../predis/src/Collection/Iterator/SetKey.php | 47 + .../src/Collection/Iterator/SortedSetKey.php | 58 + vendor/predis/predis/src/Command/Command.php | 129 + .../predis/src/Command/CommandInterface.php | 81 + .../predis/src/Command/ConnectionAuth.php | 28 + .../predis/src/Command/ConnectionEcho.php | 28 + .../predis/src/Command/ConnectionPing.php | 28 + .../predis/src/Command/ConnectionQuit.php | 28 + .../predis/src/Command/ConnectionSelect.php | 28 + .../predis/src/Command/GeospatialGeoAdd.php | 42 + .../predis/src/Command/GeospatialGeoDist.php | 28 + .../predis/src/Command/GeospatialGeoHash.php | 41 + .../predis/src/Command/GeospatialGeoPos.php | 41 + .../src/Command/GeospatialGeoRadius.php | 71 + .../Command/GeospatialGeoRadiusByMember.php | 28 + .../predis/predis/src/Command/HashDelete.php | 36 + .../predis/predis/src/Command/HashExists.php | 28 + vendor/predis/predis/src/Command/HashGet.php | 28 + .../predis/predis/src/Command/HashGetAll.php | 42 + .../predis/src/Command/HashGetMultiple.php | 36 + .../predis/src/Command/HashIncrementBy.php | 28 + .../src/Command/HashIncrementByFloat.php | 28 + vendor/predis/predis/src/Command/HashKeys.php | 28 + .../predis/predis/src/Command/HashLength.php | 28 + vendor/predis/predis/src/Command/HashScan.php | 85 + vendor/predis/predis/src/Command/HashSet.php | 28 + .../predis/src/Command/HashSetMultiple.php | 48 + .../predis/src/Command/HashSetPreserve.php | 28 + .../predis/src/Command/HashStringLength.php | 28 + .../predis/predis/src/Command/HashValues.php | 28 + .../predis/src/Command/HyperLogLogAdd.php | 36 + .../predis/src/Command/HyperLogLogCount.php | 36 + .../predis/src/Command/HyperLogLogMerge.php | 36 + .../predis/predis/src/Command/KeyDelete.php | 36 + vendor/predis/predis/src/Command/KeyDump.php | 28 + .../predis/predis/src/Command/KeyExists.php | 28 + .../predis/predis/src/Command/KeyExpire.php | 28 + .../predis/predis/src/Command/KeyExpireAt.php | 28 + vendor/predis/predis/src/Command/KeyKeys.php | 28 + .../predis/predis/src/Command/KeyMigrate.php | 50 + vendor/predis/predis/src/Command/KeyMove.php | 28 + .../predis/predis/src/Command/KeyPersist.php | 28 + .../predis/src/Command/KeyPreciseExpire.php | 28 + .../predis/src/Command/KeyPreciseExpireAt.php | 28 + .../src/Command/KeyPreciseTimeToLive.php | 28 + .../predis/predis/src/Command/KeyRandom.php | 36 + .../predis/predis/src/Command/KeyRename.php | 28 + .../predis/src/Command/KeyRenamePreserve.php | 28 + .../predis/predis/src/Command/KeyRestore.php | 28 + vendor/predis/predis/src/Command/KeyScan.php | 66 + vendor/predis/predis/src/Command/KeySort.php | 83 + .../predis/src/Command/KeyTimeToLive.php | 28 + vendor/predis/predis/src/Command/KeyType.php | 28 + .../predis/predis/src/Command/ListIndex.php | 28 + .../predis/predis/src/Command/ListInsert.php | 28 + .../predis/predis/src/Command/ListLength.php | 28 + .../predis/src/Command/ListPopFirst.php | 28 + .../src/Command/ListPopFirstBlocking.php | 41 + .../predis/predis/src/Command/ListPopLast.php | 28 + .../src/Command/ListPopLastBlocking.php | 28 + .../src/Command/ListPopLastPushHead.php | 28 + .../Command/ListPopLastPushHeadBlocking.php | 28 + .../predis/src/Command/ListPushHead.php | 28 + .../predis/src/Command/ListPushHeadX.php | 28 + .../predis/src/Command/ListPushTail.php | 36 + .../predis/src/Command/ListPushTailX.php | 28 + .../predis/predis/src/Command/ListRange.php | 28 + .../predis/predis/src/Command/ListRemove.php | 28 + vendor/predis/predis/src/Command/ListSet.php | 28 + vendor/predis/predis/src/Command/ListTrim.php | 28 + .../Command/PrefixableCommandInterface.php | 27 + .../Command/Processor/KeyPrefixProcessor.php | 450 + .../src/Command/Processor/ProcessorChain.php | 134 + .../Command/Processor/ProcessorInterface.php | 29 + .../predis/src/Command/PubSubPublish.php | 28 + .../predis/src/Command/PubSubPubsub.php | 61 + .../predis/src/Command/PubSubSubscribe.php | 36 + .../src/Command/PubSubSubscribeByPattern.php | 28 + .../predis/src/Command/PubSubUnsubscribe.php | 36 + .../Command/PubSubUnsubscribeByPattern.php | 28 + .../predis/predis/src/Command/RawCommand.php | 131 + .../predis/src/Command/ScriptCommand.php | 77 + .../Command/ServerBackgroundRewriteAOF.php | 36 + .../src/Command/ServerBackgroundSave.php | 36 + .../predis/src/Command/ServerClient.php | 74 + .../predis/src/Command/ServerCommand.php | 28 + .../predis/src/Command/ServerConfig.php | 49 + .../predis/src/Command/ServerDatabaseSize.php | 28 + .../predis/predis/src/Command/ServerEval.php | 38 + .../predis/src/Command/ServerEvalSHA.php | 38 + .../predis/src/Command/ServerFlushAll.php | 28 + .../src/Command/ServerFlushDatabase.php | 28 + .../predis/predis/src/Command/ServerInfo.php | 111 + .../predis/src/Command/ServerInfoV26x.php | 56 + .../predis/src/Command/ServerLastSave.php | 28 + .../predis/src/Command/ServerMonitor.php | 28 + .../predis/src/Command/ServerObject.php | 28 + .../predis/predis/src/Command/ServerSave.php | 28 + .../predis/src/Command/ServerScript.php | 28 + .../predis/src/Command/ServerSentinel.php | 69 + .../predis/src/Command/ServerShutdown.php | 28 + .../predis/src/Command/ServerSlaveOf.php | 40 + .../predis/src/Command/ServerSlowlog.php | 51 + .../predis/predis/src/Command/ServerTime.php | 28 + vendor/predis/predis/src/Command/SetAdd.php | 36 + .../predis/src/Command/SetCardinality.php | 28 + .../predis/src/Command/SetDifference.php | 28 + .../predis/src/Command/SetDifferenceStore.php | 28 + .../predis/src/Command/SetIntersection.php | 36 + .../src/Command/SetIntersectionStore.php | 40 + .../predis/predis/src/Command/SetIsMember.php | 28 + .../predis/predis/src/Command/SetMembers.php | 28 + vendor/predis/predis/src/Command/SetMove.php | 28 + vendor/predis/predis/src/Command/SetPop.php | 28 + .../predis/src/Command/SetRandomMember.php | 28 + .../predis/predis/src/Command/SetRemove.php | 36 + vendor/predis/predis/src/Command/SetScan.php | 66 + vendor/predis/predis/src/Command/SetUnion.php | 28 + .../predis/src/Command/SetUnionStore.php | 28 + .../predis/src/Command/StringAppend.php | 28 + .../predis/src/Command/StringBitCount.php | 28 + .../predis/src/Command/StringBitField.php | 28 + .../predis/predis/src/Command/StringBitOp.php | 42 + .../predis/src/Command/StringBitPos.php | 28 + .../predis/src/Command/StringDecrement.php | 28 + .../predis/src/Command/StringDecrementBy.php | 28 + .../predis/predis/src/Command/StringGet.php | 28 + .../predis/src/Command/StringGetBit.php | 28 + .../predis/src/Command/StringGetMultiple.php | 36 + .../predis/src/Command/StringGetRange.php | 28 + .../predis/src/Command/StringGetSet.php | 28 + .../predis/src/Command/StringIncrement.php | 28 + .../predis/src/Command/StringIncrementBy.php | 28 + .../src/Command/StringIncrementByFloat.php | 28 + .../src/Command/StringPreciseSetExpire.php | 28 + .../predis/predis/src/Command/StringSet.php | 28 + .../predis/src/Command/StringSetBit.php | 28 + .../predis/src/Command/StringSetExpire.php | 28 + .../predis/src/Command/StringSetMultiple.php | 48 + .../src/Command/StringSetMultiplePreserve.php | 28 + .../predis/src/Command/StringSetPreserve.php | 28 + .../predis/src/Command/StringSetRange.php | 28 + .../predis/src/Command/StringStrlen.php | 28 + .../predis/src/Command/StringSubstr.php | 28 + .../predis/src/Command/TransactionDiscard.php | 28 + .../predis/src/Command/TransactionExec.php | 28 + .../predis/src/Command/TransactionMulti.php | 28 + .../predis/src/Command/TransactionUnwatch.php | 28 + .../predis/src/Command/TransactionWatch.php | 40 + vendor/predis/predis/src/Command/ZSetAdd.php | 43 + .../predis/src/Command/ZSetCardinality.php | 28 + .../predis/predis/src/Command/ZSetCount.php | 28 + .../predis/src/Command/ZSetIncrementBy.php | 28 + .../src/Command/ZSetIntersectionStore.php | 28 + .../predis/src/Command/ZSetLexCount.php | 28 + .../predis/predis/src/Command/ZSetRange.php | 105 + .../predis/src/Command/ZSetRangeByLex.php | 55 + .../predis/src/Command/ZSetRangeByScore.php | 68 + vendor/predis/predis/src/Command/ZSetRank.php | 28 + .../predis/predis/src/Command/ZSetRemove.php | 36 + .../src/Command/ZSetRemoveRangeByLex.php | 28 + .../src/Command/ZSetRemoveRangeByRank.php | 28 + .../src/Command/ZSetRemoveRangeByScore.php | 28 + .../predis/src/Command/ZSetReverseRange.php | 28 + .../src/Command/ZSetReverseRangeByLex.php | 28 + .../src/Command/ZSetReverseRangeByScore.php | 28 + .../predis/src/Command/ZSetReverseRank.php | 28 + vendor/predis/predis/src/Command/ZSetScan.php | 85 + .../predis/predis/src/Command/ZSetScore.php | 28 + .../predis/src/Command/ZSetUnionStore.php | 78 + .../predis/src/CommunicationException.php | 85 + .../src/Configuration/ClusterOption.php | 76 + .../Configuration/ConnectionFactoryOption.php | 60 + .../src/Configuration/ExceptionsOption.php | 37 + .../src/Configuration/OptionInterface.php | 40 + .../predis/src/Configuration/Options.php | 122 + .../src/Configuration/OptionsInterface.php | 70 + .../predis/src/Configuration/PrefixOption.php | 44 + .../src/Configuration/ProfileOption.php | 69 + .../src/Configuration/ReplicationOption.php | 77 + .../src/Connection/AbstractConnection.php | 226 + .../Connection/Aggregate/ClusterInterface.php | 24 + .../Aggregate/MasterSlaveReplication.php | 509 + .../Connection/Aggregate/PredisCluster.php | 237 + .../src/Connection/Aggregate/RedisCluster.php | 675 + .../Aggregate/ReplicationInterface.php | 52 + .../Aggregate/SentinelReplication.php | 732 + .../AggregateConnectionInterface.php | 57 + .../CompositeConnectionInterface.php | 49 + .../Connection/CompositeStreamConnection.php | 125 + .../src/Connection/ConnectionException.php | 23 + .../src/Connection/ConnectionInterface.php | 66 + .../predis/predis/src/Connection/Factory.php | 192 + .../src/Connection/FactoryInterface.php | 52 + .../Connection/NodeConnectionInterface.php | 58 + .../predis/src/Connection/Parameters.php | 185 + .../src/Connection/ParametersInterface.php | 62 + .../Connection/PhpiredisSocketConnection.php | 418 + .../Connection/PhpiredisStreamConnection.php | 262 + .../src/Connection/StreamConnection.php | 396 + .../src/Connection/WebdisConnection.php | 366 + vendor/predis/predis/src/Monitor/Consumer.php | 178 + .../predis/src/NotSupportedException.php | 22 + vendor/predis/predis/src/Pipeline/Atomic.php | 119 + .../src/Pipeline/ConnectionErrorProof.php | 130 + .../predis/src/Pipeline/FireAndForget.php | 36 + .../predis/predis/src/Pipeline/Pipeline.php | 247 + vendor/predis/predis/src/PredisException.php | 21 + vendor/predis/predis/src/Profile/Factory.php | 101 + .../predis/src/Profile/ProfileInterface.php | 59 + .../predis/src/Profile/RedisProfile.php | 146 + .../predis/src/Profile/RedisUnstable.php | 38 + .../predis/src/Profile/RedisVersion200.php | 173 + .../predis/src/Profile/RedisVersion220.php | 202 + .../predis/src/Profile/RedisVersion240.php | 207 + .../predis/src/Profile/RedisVersion260.php | 235 + .../predis/src/Profile/RedisVersion280.php | 267 + .../predis/src/Profile/RedisVersion300.php | 270 + .../predis/src/Profile/RedisVersion320.php | 281 + .../predis/src/Protocol/ProtocolException.php | 24 + .../Protocol/ProtocolProcessorInterface.php | 41 + .../Protocol/RequestSerializerInterface.php | 31 + .../src/Protocol/ResponseReaderInterface.php | 32 + .../Text/CompositeProtocolProcessor.php | 107 + .../Protocol/Text/Handler/BulkResponse.php | 55 + .../Protocol/Text/Handler/ErrorResponse.php | 34 + .../Protocol/Text/Handler/IntegerResponse.php | 46 + .../Text/Handler/MultiBulkResponse.php | 68 + .../Text/Handler/ResponseHandlerInterface.php | 33 + .../Protocol/Text/Handler/StatusResponse.php | 35 + .../Handler/StreamableMultiBulkResponse.php | 47 + .../src/Protocol/Text/ProtocolProcessor.php | 123 + .../src/Protocol/Text/RequestSerializer.php | 46 + .../src/Protocol/Text/ResponseReader.php | 116 + .../predis/src/PubSub/AbstractConsumer.php | 224 + vendor/predis/predis/src/PubSub/Consumer.php | 158 + .../predis/src/PubSub/DispatcherLoop.php | 170 + .../Replication/MissingMasterException.php | 23 + .../src/Replication/ReplicationStrategy.php | 279 + .../predis/src/Replication/RoleException.php | 24 + vendor/predis/predis/src/Response/Error.php | 59 + .../predis/src/Response/ErrorInterface.php | 35 + .../src/Response/Iterator/MultiBulk.php | 77 + .../Response/Iterator/MultiBulkIterator.php | 110 + .../src/Response/Iterator/MultiBulkTuple.php | 91 + .../predis/src/Response/ResponseInterface.php | 21 + .../predis/src/Response/ServerException.php | 44 + vendor/predis/predis/src/Response/Status.php | 79 + vendor/predis/predis/src/Session/Handler.php | 148 + .../Transaction/AbortedMultiExecException.php | 45 + .../predis/src/Transaction/MultiExec.php | 461 + .../predis/src/Transaction/MultiExecState.php | 166 + vendor/predis/predis/tests/README.md | 82 + vendor/predis/predis/tests/apply-patches.php | 16 + .../predis/tests/phpunit_mock_objects.patch | 38 + vendor/predis/predis/tests/phpunit_php7.patch | 60 + vendor/predis/predis/tests/phpunit_php8.patch | 39 + .../predis/predis/tests/phpunit_php81.patch | 50 + vendor/psr/cache/CHANGELOG.md | 16 + vendor/psr/cache/LICENSE.txt | 19 + vendor/psr/cache/README.md | 12 + vendor/psr/cache/composer.json | 25 + vendor/psr/cache/src/CacheException.php | 10 + vendor/psr/cache/src/CacheItemInterface.php | 105 + .../psr/cache/src/CacheItemPoolInterface.php | 138 + .../cache/src/InvalidArgumentException.php | 13 + vendor/psr/clock/CHANGELOG.md | 11 + vendor/psr/clock/LICENSE | 19 + vendor/psr/clock/README.md | 61 + vendor/psr/clock/composer.json | 21 + vendor/psr/clock/src/ClockInterface.php | 13 + vendor/psr/container/LICENSE | 21 + vendor/psr/container/README.md | 13 + vendor/psr/container/composer.json | 22 + .../src/ContainerExceptionInterface.php | 12 + .../psr/container/src/ContainerInterface.php | 36 + .../src/NotFoundExceptionInterface.php | 10 + vendor/psr/event-dispatcher/LICENSE | 21 + vendor/psr/event-dispatcher/README.md | 6 + vendor/psr/event-dispatcher/composer.json | 26 + .../src/EventDispatcherInterface.php | 21 + .../src/ListenerProviderInterface.php | 19 + .../src/StoppableEventInterface.php | 26 + vendor/psr/http-client/CHANGELOG.md | 31 + vendor/psr/http-client/LICENSE | 19 + vendor/psr/http-client/README.md | 12 + vendor/psr/http-client/composer.json | 30 + .../src/ClientExceptionInterface.php | 10 + .../psr/http-client/src/ClientInterface.php | 20 + .../src/NetworkExceptionInterface.php | 24 + .../src/RequestExceptionInterface.php | 24 + vendor/psr/http-factory/LICENSE | 21 + vendor/psr/http-factory/README.md | 12 + vendor/psr/http-factory/composer.json | 38 + .../src/RequestFactoryInterface.php | 18 + .../src/ResponseFactoryInterface.php | 18 + .../src/ServerRequestFactoryInterface.php | 24 + .../src/StreamFactoryInterface.php | 45 + .../src/UploadedFileFactoryInterface.php | 34 + .../http-factory/src/UriFactoryInterface.php | 17 + vendor/psr/http-message/CHANGELOG.md | 36 + vendor/psr/http-message/LICENSE | 19 + vendor/psr/http-message/README.md | 16 + vendor/psr/http-message/composer.json | 26 + .../psr/http-message/docs/PSR7-Interfaces.md | 130 + vendor/psr/http-message/docs/PSR7-Usage.md | 159 + .../psr/http-message/src/MessageInterface.php | 187 + .../psr/http-message/src/RequestInterface.php | 130 + .../http-message/src/ResponseInterface.php | 68 + .../src/ServerRequestInterface.php | 261 + .../psr/http-message/src/StreamInterface.php | 158 + .../src/UploadedFileInterface.php | 123 + vendor/psr/http-message/src/UriInterface.php | 324 + vendor/psr/log/LICENSE | 19 + vendor/psr/log/README.md | 58 + vendor/psr/log/composer.json | 26 + vendor/psr/log/src/AbstractLogger.php | 15 + .../psr/log/src/InvalidArgumentException.php | 7 + vendor/psr/log/src/LogLevel.php | 18 + vendor/psr/log/src/LoggerAwareInterface.php | 18 + vendor/psr/log/src/LoggerAwareTrait.php | 26 + vendor/psr/log/src/LoggerInterface.php | 125 + vendor/psr/log/src/LoggerTrait.php | 142 + vendor/psr/log/src/NullLogger.php | 30 + vendor/psr/simple-cache/LICENSE.md | 21 + vendor/psr/simple-cache/README.md | 8 + vendor/psr/simple-cache/composer.json | 25 + .../psr/simple-cache/src/CacheException.php | 10 + .../psr/simple-cache/src/CacheInterface.php | 114 + .../src/InvalidArgumentException.php | 13 + vendor/rakit/validation/LICENSE.md | 7 + vendor/rakit/validation/README.md | 1168 + vendor/rakit/validation/composer.json | 36 + vendor/rakit/validation/phpcs.xml | 17 + vendor/rakit/validation/src/Attribute.php | 309 + vendor/rakit/validation/src/ErrorBag.php | 247 + vendor/rakit/validation/src/Helper.php | 258 + .../rakit/validation/src/MimeTypeGuesser.php | 804 + .../src/MissingRequiredParameterException.php | 7 + vendor/rakit/validation/src/Rule.php | 232 + .../validation/src/RuleNotFoundException.php | 9 + .../validation/src/RuleQuashException.php | 7 + .../rakit/validation/src/Rules/Accepted.php | 26 + vendor/rakit/validation/src/Rules/After.php | 40 + vendor/rakit/validation/src/Rules/Alpha.php | 23 + .../rakit/validation/src/Rules/AlphaDash.php | 27 + .../rakit/validation/src/Rules/AlphaNum.php | 27 + .../validation/src/Rules/AlphaSpaces.php | 27 + vendor/rakit/validation/src/Rules/Before.php | 39 + vendor/rakit/validation/src/Rules/Between.php | 38 + vendor/rakit/validation/src/Rules/Boolean.php | 23 + .../rakit/validation/src/Rules/Callback.php | 58 + vendor/rakit/validation/src/Rules/Date.php | 34 + .../rakit/validation/src/Rules/Defaults.php | 50 + .../rakit/validation/src/Rules/Different.php | 31 + vendor/rakit/validation/src/Rules/Digits.php | 31 + .../validation/src/Rules/DigitsBetween.php | 34 + vendor/rakit/validation/src/Rules/Email.php | 23 + .../rakit/validation/src/Rules/Extension.php | 50 + vendor/rakit/validation/src/Rules/In.php | 61 + vendor/rakit/validation/src/Rules/Integer.php | 23 + .../src/Rules/Interfaces/BeforeValidate.php | 13 + .../src/Rules/Interfaces/ModifyValue.php | 15 + vendor/rakit/validation/src/Rules/Ip.php | 23 + vendor/rakit/validation/src/Rules/Ipv4.php | 23 + vendor/rakit/validation/src/Rules/Ipv6.php | 23 + vendor/rakit/validation/src/Rules/Json.php | 33 + .../rakit/validation/src/Rules/Lowercase.php | 23 + vendor/rakit/validation/src/Rules/Max.php | 36 + vendor/rakit/validation/src/Rules/Mimes.php | 95 + vendor/rakit/validation/src/Rules/Min.php | 36 + vendor/rakit/validation/src/Rules/NotIn.php | 61 + .../rakit/validation/src/Rules/Nullable.php | 19 + vendor/rakit/validation/src/Rules/Numeric.php | 23 + vendor/rakit/validation/src/Rules/Present.php | 39 + vendor/rakit/validation/src/Rules/Regex.php | 28 + .../rakit/validation/src/Rules/Required.php | 51 + .../rakit/validation/src/Rules/RequiredIf.php | 52 + .../validation/src/Rules/RequiredUnless.php | 52 + .../validation/src/Rules/RequiredWith.php | 49 + .../validation/src/Rules/RequiredWithAll.php | 49 + .../validation/src/Rules/RequiredWithout.php | 49 + .../src/Rules/RequiredWithoutAll.php | 49 + vendor/rakit/validation/src/Rules/Same.php | 31 + .../src/Rules/Traits/DateUtilsTrait.php | 43 + .../validation/src/Rules/Traits/FileTrait.php | 86 + .../validation/src/Rules/Traits/SizeTrait.php | 109 + .../rakit/validation/src/Rules/TypeArray.php | 23 + .../validation/src/Rules/UploadedFile.php | 184 + .../rakit/validation/src/Rules/Uppercase.php | 23 + vendor/rakit/validation/src/Rules/Url.php | 115 + .../validation/src/Traits/MessagesTrait.php | 54 + .../src/Traits/TranslationsTrait.php | 54 + vendor/rakit/validation/src/Validation.php | 716 + vendor/rakit/validation/src/Validator.php | 221 + vendor/ralouphie/getallheaders/LICENSE | 21 + vendor/ralouphie/getallheaders/README.md | 27 + vendor/ralouphie/getallheaders/composer.json | 26 + .../getallheaders/src/getallheaders.php | 46 + vendor/robmorgan/phinx/LICENSE | 9 + vendor/robmorgan/phinx/README.md | 143 + vendor/robmorgan/phinx/app/phinx.php | 36 + vendor/robmorgan/phinx/app/web.php | 83 + vendor/robmorgan/phinx/bin/phinx | 28 + vendor/robmorgan/phinx/bin/phinx.bat | 41 + vendor/robmorgan/phinx/composer.json | 87 + vendor/robmorgan/phinx/data/phinx.json.dist | 38 + vendor/robmorgan/phinx/data/phinx.php.dist | 41 + vendor/robmorgan/phinx/data/phinx.yml.dist | 35 + .../robmorgan/phinx/docs/config/__init__.py | 0 vendor/robmorgan/phinx/docs/config/all.py | 43 + vendor/robmorgan/phinx/docs/en/commands.rst | 411 + vendor/robmorgan/phinx/docs/en/conf.py | 9 + .../robmorgan/phinx/docs/en/configuration.rst | 454 + vendor/robmorgan/phinx/docs/en/contents.rst | 14 + vendor/robmorgan/phinx/docs/en/copyright.rst | 29 + vendor/robmorgan/phinx/docs/en/goals.rst | 13 + vendor/robmorgan/phinx/docs/en/index.rst | 28 + vendor/robmorgan/phinx/docs/en/install.rst | 28 + vendor/robmorgan/phinx/docs/en/intro.rst | 16 + vendor/robmorgan/phinx/docs/en/migrations.rst | 1908 + vendor/robmorgan/phinx/docs/en/namespaces.rst | 154 + vendor/robmorgan/phinx/docs/en/seeding.rst | 226 + vendor/robmorgan/phinx/phpstan-baseline.neon | 37 + .../phinx/src/Phinx/Config/Config.php | 540 + .../src/Phinx/Config/ConfigInterface.php | 156 + .../Phinx/Config/NamespaceAwareInterface.php | 33 + .../src/Phinx/Config/NamespaceAwareTrait.php | 74 + .../Phinx/Console/Command/AbstractCommand.php | 410 + .../src/Phinx/Console/Command/Breakpoint.php | 108 + .../src/Phinx/Console/Command/Create.php | 316 + .../phinx/src/Phinx/Console/Command/Init.php | 171 + .../src/Phinx/Console/Command/ListAliases.php | 80 + .../src/Phinx/Console/Command/Migrate.php | 142 + .../src/Phinx/Console/Command/Rollback.php | 171 + .../src/Phinx/Console/Command/SeedCreate.php | 207 + .../src/Phinx/Console/Command/SeedRun.php | 119 + .../src/Phinx/Console/Command/Status.php | 92 + .../phinx/src/Phinx/Console/Command/Test.php | 97 + .../src/Phinx/Console/PhinxApplication.php | 72 + .../phinx/src/Phinx/Db/Action/Action.php | 38 + .../phinx/src/Phinx/Db/Action/AddColumn.php | 62 + .../src/Phinx/Db/Action/AddForeignKey.php | 78 + .../phinx/src/Phinx/Db/Action/AddIndex.php | 71 + .../src/Phinx/Db/Action/ChangeColumn.php | 87 + .../src/Phinx/Db/Action/ChangeComment.php | 42 + .../src/Phinx/Db/Action/ChangePrimaryKey.php | 42 + .../phinx/src/Phinx/Db/Action/CreateTable.php | 12 + .../src/Phinx/Db/Action/DropForeignKey.php | 68 + .../phinx/src/Phinx/Db/Action/DropIndex.php | 75 + .../phinx/src/Phinx/Db/Action/DropTable.php | 12 + .../src/Phinx/Db/Action/RemoveColumn.php | 59 + .../src/Phinx/Db/Action/RenameColumn.php | 79 + .../phinx/src/Phinx/Db/Action/RenameTable.php | 42 + .../src/Phinx/Db/Adapter/AbstractAdapter.php | 413 + .../src/Phinx/Db/Adapter/AdapterFactory.php | 170 + .../src/Phinx/Db/Adapter/AdapterInterface.php | 509 + .../src/Phinx/Db/Adapter/AdapterWrapper.php | 494 + .../Db/Adapter/DirectActionInterface.php | 139 + .../src/Phinx/Db/Adapter/MysqlAdapter.php | 1538 + .../phinx/src/Phinx/Db/Adapter/PdoAdapter.php | 974 + .../src/Phinx/Db/Adapter/PostgresAdapter.php | 1539 + .../src/Phinx/Db/Adapter/ProxyAdapter.php | 123 + .../src/Phinx/Db/Adapter/SQLiteAdapter.php | 1673 + .../src/Phinx/Db/Adapter/SqlServerAdapter.php | 1371 + .../Phinx/Db/Adapter/TablePrefixAdapter.php | 482 + .../Phinx/Db/Adapter/TimedOutputAdapter.php | 423 + .../UnsupportedColumnTypeException.php | 19 + .../src/Phinx/Db/Adapter/WrapperInterface.php | 39 + .../phinx/src/Phinx/Db/Plan/AlterTable.php | 72 + .../phinx/src/Phinx/Db/Plan/Intent.php | 55 + .../phinx/src/Phinx/Db/Plan/NewTable.php | 101 + .../phinx/src/Phinx/Db/Plan/Plan.php | 505 + .../Phinx/Db/Plan/Solver/ActionSplitter.php | 103 + vendor/robmorgan/phinx/src/Phinx/Db/Table.php | 717 + .../phinx/src/Phinx/Db/Table/Column.php | 756 + .../phinx/src/Phinx/Db/Table/ForeignKey.php | 234 + .../phinx/src/Phinx/Db/Table/Index.php | 227 + .../phinx/src/Phinx/Db/Table/Table.php | 82 + .../src/Phinx/Db/Util/AlterInstructions.php | 122 + .../src/Phinx/Migration/AbstractMigration.php | 335 + .../Migration/AbstractTemplateCreation.php | 74 + .../src/Phinx/Migration/CreationInterface.php | 69 + .../IrreversibleMigrationException.php | 20 + .../phinx/src/Phinx/Migration/Manager.php | 1086 + .../Phinx/Migration/Manager/Environment.php | 398 + .../Migration/Migration.template.php.dist | 23 + .../Phinx/Migration/MigrationInterface.php | 244 + .../phinx/src/Phinx/Seed/AbstractSeed.php | 187 + .../src/Phinx/Seed/Seed.template.php.dist | 20 + .../phinx/src/Phinx/Seed/SeedInterface.php | 154 + .../phinx/src/Phinx/Util/Expression.php | 41 + .../phinx/src/Phinx/Util/Literal.php | 41 + .../robmorgan/phinx/src/Phinx/Util/Util.php | 356 + .../phinx/src/Phinx/Wrapper/TextWrapper.php | 249 + .../phinx/src/composer_autoloader.php | 23 + vendor/symfony/cache-contracts/CHANGELOG.md | 5 + .../cache-contracts/CacheInterface.php | 57 + vendor/symfony/cache-contracts/CacheTrait.php | 80 + .../cache-contracts/CallbackInterface.php | 30 + .../symfony/cache-contracts/ItemInterface.php | 65 + vendor/symfony/cache-contracts/LICENSE | 19 + vendor/symfony/cache-contracts/README.md | 9 + .../TagAwareCacheInterface.php | 38 + vendor/symfony/cache-contracts/composer.json | 38 + .../symfony/cache/Adapter/AbstractAdapter.php | 208 + .../cache/Adapter/AbstractTagAwareAdapter.php | 330 + .../cache/Adapter/AdapterInterface.php | 47 + vendor/symfony/cache/Adapter/ApcuAdapter.php | 138 + vendor/symfony/cache/Adapter/ArrayAdapter.php | 407 + vendor/symfony/cache/Adapter/ChainAdapter.php | 342 + .../cache/Adapter/CouchbaseBucketAdapter.php | 252 + .../Adapter/CouchbaseCollectionAdapter.php | 222 + .../symfony/cache/Adapter/DoctrineAdapter.php | 110 + .../cache/Adapter/DoctrineDbalAdapter.php | 448 + .../cache/Adapter/FilesystemAdapter.php | 29 + .../Adapter/FilesystemTagAwareAdapter.php | 239 + .../cache/Adapter/MemcachedAdapter.php | 347 + vendor/symfony/cache/Adapter/NullAdapter.php | 152 + .../cache/Adapter/ParameterNormalizer.php | 35 + vendor/symfony/cache/Adapter/PdoAdapter.php | 616 + .../symfony/cache/Adapter/PhpArrayAdapter.php | 435 + .../symfony/cache/Adapter/PhpFilesAdapter.php | 330 + vendor/symfony/cache/Adapter/ProxyAdapter.php | 268 + vendor/symfony/cache/Adapter/Psr16Adapter.php | 86 + vendor/symfony/cache/Adapter/RedisAdapter.php | 32 + .../cache/Adapter/RedisTagAwareAdapter.php | 325 + .../symfony/cache/Adapter/TagAwareAdapter.php | 428 + .../Adapter/TagAwareAdapterInterface.php | 33 + .../cache/Adapter/TraceableAdapter.php | 295 + .../Adapter/TraceableTagAwareAdapter.php | 38 + vendor/symfony/cache/CHANGELOG.md | 108 + vendor/symfony/cache/CacheItem.php | 192 + .../DataCollector/CacheDataCollector.php | 183 + .../CacheCollectorPass.php | 94 + .../CachePoolClearerPass.php | 52 + .../DependencyInjection/CachePoolPass.php | 274 + .../CachePoolPrunerPass.php | 64 + vendor/symfony/cache/DoctrineProvider.php | 124 + .../cache/Exception/CacheException.php | 25 + .../Exception/InvalidArgumentException.php | 25 + .../cache/Exception/LogicException.php | 25 + vendor/symfony/cache/LICENSE | 19 + vendor/symfony/cache/LockRegistry.php | 165 + .../cache/Marshaller/DefaultMarshaller.php | 104 + .../cache/Marshaller/DeflateMarshaller.php | 53 + .../cache/Marshaller/MarshallerInterface.php | 40 + .../cache/Marshaller/SodiumMarshaller.php | 80 + .../cache/Marshaller/TagAwareMarshaller.php | 89 + .../Messenger/EarlyExpirationDispatcher.php | 61 + .../Messenger/EarlyExpirationHandler.php | 81 + .../Messenger/EarlyExpirationMessage.php | 97 + vendor/symfony/cache/PruneableInterface.php | 23 + vendor/symfony/cache/Psr16Cache.php | 289 + vendor/symfony/cache/README.md | 19 + vendor/symfony/cache/ResettableInterface.php | 21 + .../cache/Traits/AbstractAdapterTrait.php | 427 + .../symfony/cache/Traits/ContractsTrait.php | 109 + .../cache/Traits/FilesystemCommonTrait.php | 210 + .../symfony/cache/Traits/FilesystemTrait.php | 124 + vendor/symfony/cache/Traits/ProxyTrait.php | 43 + .../cache/Traits/RedisClusterNodeProxy.php | 53 + .../cache/Traits/RedisClusterProxy.php | 63 + vendor/symfony/cache/Traits/RedisProxy.php | 65 + vendor/symfony/cache/Traits/RedisTrait.php | 660 + vendor/symfony/cache/composer.json | 60 + .../symfony/config/Builder/ClassBuilder.php | 171 + .../config/Builder/ConfigBuilderGenerator.php | 600 + .../ConfigBuilderGeneratorInterface.php | 27 + .../config/Builder/ConfigBuilderInterface.php | 30 + vendor/symfony/config/Builder/Method.php | 34 + vendor/symfony/config/Builder/Property.php | 86 + vendor/symfony/config/CHANGELOG.md | 153 + vendor/symfony/config/ConfigCache.php | 60 + vendor/symfony/config/ConfigCacheFactory.php | 44 + .../config/ConfigCacheFactoryInterface.php | 30 + .../symfony/config/ConfigCacheInterface.php | 47 + .../symfony/config/Definition/ArrayNode.php | 402 + vendor/symfony/config/Definition/BaseNode.php | 542 + .../symfony/config/Definition/BooleanNode.php | 49 + .../Builder/ArrayNodeDefinition.php | 516 + .../Builder/BooleanNodeDefinition.php | 46 + .../Builder/BuilderAwareInterface.php | 27 + .../Definition/Builder/EnumNodeDefinition.php | 52 + .../config/Definition/Builder/ExprBuilder.php | 252 + .../Builder/FloatNodeDefinition.php | 30 + .../Builder/IntegerNodeDefinition.php | 30 + .../Definition/Builder/MergeBuilder.php | 61 + .../config/Definition/Builder/NodeBuilder.php | 204 + .../Definition/Builder/NodeDefinition.php | 336 + .../Builder/NodeParentInterface.php | 21 + .../Builder/NormalizationBuilder.php | 61 + .../Builder/NumericNodeDefinition.php | 67 + .../Builder/ParentNodeDefinitionInterface.php | 49 + .../Builder/ScalarNodeDefinition.php | 30 + .../config/Definition/Builder/TreeBuilder.php | 67 + .../Definition/Builder/ValidationBuilder.php | 44 + .../Builder/VariableNodeDefinition.php | 64 + .../Definition/ConfigurableInterface.php | 25 + .../config/Definition/Configuration.php | 45 + .../Definition/ConfigurationInterface.php | 29 + .../Configurator/DefinitionConfigurator.php | 47 + .../Definition/Dumper/XmlReferenceDumper.php | 299 + .../Definition/Dumper/YamlReferenceDumper.php | 254 + vendor/symfony/config/Definition/EnumNode.php | 96 + .../Exception/DuplicateKeyException.php | 22 + .../config/Definition/Exception/Exception.php | 21 + .../Exception/ForbiddenOverwriteException.php | 22 + .../InvalidConfigurationException.php | 52 + .../Exception/InvalidDefinitionException.php | 21 + .../Exception/InvalidTypeException.php | 21 + .../Exception/UnsetKeyException.php | 22 + .../symfony/config/Definition/FloatNode.php | 48 + .../symfony/config/Definition/IntegerNode.php | 43 + .../Loader/DefinitionFileLoader.php | 103 + .../config/Definition/NodeInterface.php | 77 + .../symfony/config/Definition/NumericNode.php | 58 + .../symfony/config/Definition/Processor.php | 89 + .../Definition/PrototypeNodeInterface.php | 27 + .../config/Definition/PrototypedArrayNode.php | 343 + .../symfony/config/Definition/ScalarNode.php | 61 + .../config/Definition/VariableNode.php | 128 + ...LoaderImportCircularReferenceException.php | 27 + .../FileLocatorFileNotFoundException.php | 37 + .../config/Exception/LoaderLoadException.php | 115 + vendor/symfony/config/FileLocator.php | 97 + .../symfony/config/FileLocatorInterface.php | 36 + vendor/symfony/config/LICENSE | 19 + .../config/Loader/DelegatingLoader.php | 44 + .../Loader/DirectoryAwareLoaderInterface.php | 22 + vendor/symfony/config/Loader/FileLoader.php | 188 + .../symfony/config/Loader/GlobFileLoader.php | 30 + vendor/symfony/config/Loader/Loader.php | 73 + .../symfony/config/Loader/LoaderInterface.php | 52 + .../symfony/config/Loader/LoaderResolver.php | 68 + .../config/Loader/LoaderResolverInterface.php | 27 + .../config/Loader/ParamConfigurator.php | 32 + vendor/symfony/config/README.md | 15 + .../Resource/ClassExistenceResource.php | 227 + .../config/Resource/ComposerResource.php | 64 + .../config/Resource/DirectoryResource.php | 96 + .../config/Resource/FileExistenceResource.php | 53 + .../symfony/config/Resource/FileResource.php | 60 + .../symfony/config/Resource/GlobResource.php | 249 + .../Resource/ReflectionClassResource.php | 206 + .../config/Resource/ResourceInterface.php | 31 + .../Resource/SelfCheckingResourceChecker.php | 46 + .../SelfCheckingResourceInterface.php | 28 + .../config/ResourceCheckerConfigCache.php | 181 + .../ResourceCheckerConfigCacheFactory.php | 41 + .../config/ResourceCheckerInterface.php | 45 + .../Util/Exception/InvalidXmlException.php | 22 + .../Util/Exception/XmlParsingException.php | 21 + vendor/symfony/config/Util/XmlUtils.php | 272 + vendor/symfony/config/composer.json | 42 + vendor/symfony/console/Application.php | 1301 + .../symfony/console/Attribute/AsCommand.php | 39 + vendor/symfony/console/CHANGELOG.md | 217 + .../console/CI/GithubActionReporter.php | 99 + vendor/symfony/console/Color.php | 180 + vendor/symfony/console/Command/Command.php | 710 + .../console/Command/CompleteCommand.php | 205 + .../console/Command/DumpCompletionCommand.php | 145 + .../symfony/console/Command/HelpCommand.php | 101 + .../symfony/console/Command/LazyCommand.php | 218 + .../symfony/console/Command/ListCommand.php | 95 + .../symfony/console/Command/LockableTrait.php | 69 + .../Command/SignalableCommandInterface.php | 30 + .../CommandLoader/CommandLoaderInterface.php | 42 + .../CommandLoader/ContainerCommandLoader.php | 63 + .../CommandLoader/FactoryCommandLoader.php | 62 + .../console/Completion/CompletionInput.php | 249 + .../Completion/CompletionSuggestions.php | 99 + .../Output/BashCompletionOutput.php | 33 + .../Output/CompletionOutputInterface.php | 25 + .../symfony/console/Completion/Suggestion.php | 37 + vendor/symfony/console/ConsoleEvents.php | 72 + vendor/symfony/console/Cursor.php | 207 + .../AddConsoleCommandPass.php | 148 + .../Descriptor/ApplicationDescription.php | 143 + .../symfony/console/Descriptor/Descriptor.php | 94 + .../Descriptor/DescriptorInterface.php | 24 + .../console/Descriptor/JsonDescriptor.php | 181 + .../console/Descriptor/MarkdownDescriptor.php | 206 + .../console/Descriptor/TextDescriptor.php | 341 + .../console/Descriptor/XmlDescriptor.php | 247 + .../console/Event/ConsoleCommandEvent.php | 54 + .../console/Event/ConsoleErrorEvent.php | 58 + vendor/symfony/console/Event/ConsoleEvent.php | 67 + .../console/Event/ConsoleSignalEvent.php | 35 + .../console/Event/ConsoleTerminateEvent.php | 43 + .../console/EventListener/ErrorListener.php | 95 + .../Exception/CommandNotFoundException.php | 43 + .../console/Exception/ExceptionInterface.php | 21 + .../Exception/InvalidArgumentException.php | 19 + .../Exception/InvalidOptionException.php | 21 + .../console/Exception/LogicException.php | 19 + .../Exception/MissingInputException.php | 21 + .../Exception/NamespaceNotFoundException.php | 21 + .../console/Exception/RuntimeException.php | 19 + .../console/Formatter/NullOutputFormatter.php | 69 + .../Formatter/NullOutputFormatterStyle.php | 66 + .../console/Formatter/OutputFormatter.php | 294 + .../Formatter/OutputFormatterInterface.php | 60 + .../Formatter/OutputFormatterStyle.php | 109 + .../OutputFormatterStyleInterface.php | 52 + .../Formatter/OutputFormatterStyleStack.php | 110 + .../WrappableOutputFormatterInterface.php | 25 + .../console/Helper/DebugFormatterHelper.php | 107 + .../console/Helper/DescriptorHelper.php | 92 + vendor/symfony/console/Helper/Dumper.php | 64 + .../console/Helper/FormatterHelper.php | 92 + vendor/symfony/console/Helper/Helper.php | 180 + .../console/Helper/HelperInterface.php | 39 + vendor/symfony/console/Helper/HelperSet.php | 108 + .../console/Helper/InputAwareHelper.php | 33 + .../symfony/console/Helper/ProcessHelper.php | 144 + vendor/symfony/console/Helper/ProgressBar.php | 612 + .../console/Helper/ProgressIndicator.php | 247 + .../symfony/console/Helper/QuestionHelper.php | 613 + .../console/Helper/SymfonyQuestionHelper.php | 109 + vendor/symfony/console/Helper/Table.php | 917 + vendor/symfony/console/Helper/TableCell.php | 78 + .../symfony/console/Helper/TableCellStyle.php | 89 + vendor/symfony/console/Helper/TableRows.php | 30 + .../symfony/console/Helper/TableSeparator.php | 25 + vendor/symfony/console/Helper/TableStyle.php | 376 + vendor/symfony/console/Input/ArgvInput.php | 378 + vendor/symfony/console/Input/ArrayInput.php | 210 + vendor/symfony/console/Input/Input.php | 213 + .../symfony/console/Input/InputArgument.php | 129 + .../console/Input/InputAwareInterface.php | 26 + .../symfony/console/Input/InputDefinition.php | 424 + .../symfony/console/Input/InputInterface.php | 151 + vendor/symfony/console/Input/InputOption.php | 231 + .../Input/StreamableInputInterface.php | 37 + vendor/symfony/console/Input/StringInput.php | 84 + vendor/symfony/console/LICENSE | 19 + .../symfony/console/Logger/ConsoleLogger.php | 126 + .../symfony/console/Output/BufferedOutput.php | 45 + .../symfony/console/Output/ConsoleOutput.php | 172 + .../console/Output/ConsoleOutputInterface.php | 32 + .../console/Output/ConsoleSectionOutput.php | 143 + vendor/symfony/console/Output/NullOutput.php | 128 + vendor/symfony/console/Output/Output.php | 174 + .../console/Output/OutputInterface.php | 110 + .../symfony/console/Output/StreamOutput.php | 123 + .../console/Output/TrimmedBufferOutput.php | 63 + .../console/Question/ChoiceQuestion.php | 183 + .../console/Question/ConfirmationQuestion.php | 57 + vendor/symfony/console/Question/Question.php | 299 + vendor/symfony/console/README.md | 36 + .../console/Resources/bin/hiddeninput.exe | Bin 0 -> 9216 bytes .../symfony/console/Resources/completion.bash | 84 + .../console/SignalRegistry/SignalRegistry.php | 65 + .../console/SingleCommandApplication.php | 72 + vendor/symfony/console/Style/OutputStyle.php | 153 + .../symfony/console/Style/StyleInterface.php | 132 + vendor/symfony/console/Style/SymfonyStyle.php | 518 + vendor/symfony/console/Terminal.php | 176 + .../console/Tester/ApplicationTester.php | 85 + .../Tester/CommandCompletionTester.php | 56 + .../symfony/console/Tester/CommandTester.php | 76 + .../Tester/Constraint/CommandIsSuccessful.php | 55 + vendor/symfony/console/Tester/TesterTrait.php | 197 + vendor/symfony/console/composer.json | 60 + .../deprecation-contracts/CHANGELOG.md | 5 + vendor/symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + vendor/symfony/dotenv/CHANGELOG.md | 45 + .../symfony/dotenv/Command/DebugCommand.php | 226 + .../dotenv/Command/DotenvDumpCommand.php | 117 + vendor/symfony/dotenv/Dotenv.php | 565 + .../dotenv/Exception/ExceptionInterface.php | 21 + .../dotenv/Exception/FormatException.php | 34 + .../Exception/FormatExceptionContext.php | 49 + .../dotenv/Exception/PathException.php | 25 + vendor/symfony/dotenv/LICENSE | 19 + vendor/symfony/dotenv/README.md | 36 + vendor/symfony/dotenv/composer.json | 36 + .../event-dispatcher-contracts/CHANGELOG.md | 5 + .../event-dispatcher-contracts/Event.php | 51 + .../EventDispatcherInterface.php | 33 + .../event-dispatcher-contracts/LICENSE | 19 + .../event-dispatcher-contracts/README.md | 9 + .../event-dispatcher-contracts/composer.json | 35 + .../Attribute/AsEventListener.php | 35 + vendor/symfony/event-dispatcher/CHANGELOG.md | 96 + .../Debug/TraceableEventDispatcher.php | 351 + .../Debug/WrappedListener.php | 143 + .../AddEventAliasesPass.php | 38 + .../RegisterListenersPass.php | 213 + .../event-dispatcher/EventDispatcher.php | 256 + .../EventDispatcherInterface.php | 66 + .../EventSubscriberInterface.php | 49 + .../symfony/event-dispatcher/GenericEvent.php | 155 + .../ImmutableEventDispatcher.php | 65 + vendor/symfony/event-dispatcher/LICENSE | 19 + vendor/symfony/event-dispatcher/README.md | 15 + vendor/symfony/event-dispatcher/composer.json | 47 + vendor/symfony/filesystem/CHANGELOG.md | 92 + .../Exception/ExceptionInterface.php | 21 + .../Exception/FileNotFoundException.php | 34 + .../filesystem/Exception/IOException.php | 36 + .../Exception/IOExceptionInterface.php | 25 + .../Exception/InvalidArgumentException.php | 19 + .../filesystem/Exception/RuntimeException.php | 19 + vendor/symfony/filesystem/Filesystem.php | 773 + vendor/symfony/filesystem/LICENSE | 19 + vendor/symfony/filesystem/Path.php | 816 + vendor/symfony/filesystem/README.md | 13 + vendor/symfony/filesystem/composer.json | 33 + vendor/symfony/mailer/CHANGELOG.md | 121 + .../mailer/Command/MailerTestCommand.php | 73 + .../DataCollector/MessageDataCollector.php | 59 + vendor/symfony/mailer/DelayedEnvelope.php | 97 + vendor/symfony/mailer/Envelope.php | 117 + .../mailer/Event/FailedMessageEvent.php | 37 + vendor/symfony/mailer/Event/MessageEvent.php | 101 + vendor/symfony/mailer/Event/MessageEvents.php | 74 + .../symfony/mailer/Event/SentMessageEvent.php | 30 + .../mailer/EventListener/EnvelopeListener.php | 96 + .../mailer/EventListener/MessageListener.php | 133 + .../EventListener/MessageLoggerListener.php | 54 + .../MessengerTransportListener.php | 49 + .../mailer/Exception/ExceptionInterface.php | 21 + .../Exception/HttpTransportException.php | 34 + .../Exception/IncompleteDsnException.php | 19 + .../Exception/InvalidArgumentException.php | 19 + .../mailer/Exception/LogicException.php | 19 + .../mailer/Exception/RuntimeException.php | 19 + .../mailer/Exception/TransportException.php | 30 + .../Exception/TransportExceptionInterface.php | 22 + .../Exception/UnexpectedResponseException.php | 16 + .../Exception/UnsupportedSchemeException.php | 117 + .../symfony/mailer/Header/MetadataHeader.php | 32 + vendor/symfony/mailer/Header/TagHeader.php | 25 + vendor/symfony/mailer/LICENSE | 19 + vendor/symfony/mailer/Mailer.php | 72 + vendor/symfony/mailer/MailerInterface.php | 30 + .../mailer/Messenger/MessageHandler.php | 31 + .../mailer/Messenger/SendEmailMessage.php | 37 + vendor/symfony/mailer/README.md | 87 + vendor/symfony/mailer/SentMessage.php | 95 + .../Test/AbstractTransportFactoryTestCase.php | 83 + .../mailer/Test/Constraint/EmailCount.php | 61 + .../mailer/Test/Constraint/EmailIsQueued.php | 39 + .../mailer/Test/IncompleteDsnTestTrait.php | 36 + .../mailer/Test/TransportFactoryTestCase.php | 64 + vendor/symfony/mailer/Transport.php | 194 + .../mailer/Transport/AbstractApiTransport.php | 47 + .../Transport/AbstractHttpTransport.php | 79 + .../mailer/Transport/AbstractTransport.php | 136 + .../Transport/AbstractTransportFactory.php | 47 + vendor/symfony/mailer/Transport/Dsn.php | 82 + .../mailer/Transport/FailoverTransport.php | 41 + .../Transport/NativeTransportFactory.php | 63 + .../mailer/Transport/NullTransport.php | 31 + .../mailer/Transport/NullTransportFactory.php | 34 + .../mailer/Transport/RoundRobinTransport.php | 123 + .../mailer/Transport/SendmailTransport.php | 124 + .../Transport/SendmailTransportFactory.php | 34 + .../Smtp/Auth/AuthenticatorInterface.php | 35 + .../Smtp/Auth/CramMd5Authenticator.php | 64 + .../Smtp/Auth/LoginAuthenticator.php | 37 + .../Smtp/Auth/PlainAuthenticator.php | 35 + .../Smtp/Auth/XOAuth2Authenticator.php | 37 + .../mailer/Transport/Smtp/EsmtpTransport.php | 249 + .../Transport/Smtp/EsmtpTransportFactory.php | 85 + .../mailer/Transport/Smtp/SmtpTransport.php | 393 + .../Transport/Smtp/Stream/AbstractStream.php | 145 + .../Transport/Smtp/Stream/ProcessStream.php | 81 + .../Transport/Smtp/Stream/SocketStream.php | 193 + .../Transport/TransportFactoryInterface.php | 29 + .../mailer/Transport/TransportInterface.php | 33 + .../symfony/mailer/Transport/Transports.php | 75 + vendor/symfony/mailer/composer.json | 47 + vendor/symfony/mime/Address.php | 140 + vendor/symfony/mime/BodyRendererInterface.php | 20 + vendor/symfony/mime/CHANGELOG.md | 57 + vendor/symfony/mime/CharacterStream.php | 211 + vendor/symfony/mime/Crypto/DkimOptions.php | 97 + vendor/symfony/mime/Crypto/DkimSigner.php | 217 + vendor/symfony/mime/Crypto/SMime.php | 111 + vendor/symfony/mime/Crypto/SMimeEncrypter.php | 63 + vendor/symfony/mime/Crypto/SMimeSigner.php | 65 + .../AddMimeTypeGuesserPass.php | 34 + vendor/symfony/mime/DraftEmail.php | 45 + vendor/symfony/mime/Email.php | 576 + .../mime/Encoder/AddressEncoderInterface.php | 28 + .../mime/Encoder/Base64ContentEncoder.php | 45 + vendor/symfony/mime/Encoder/Base64Encoder.php | 41 + .../mime/Encoder/Base64MimeHeaderEncoder.php | 43 + .../mime/Encoder/ContentEncoderInterface.php | 30 + .../mime/Encoder/EightBitContentEncoder.php | 35 + .../symfony/mime/Encoder/EncoderInterface.php | 26 + .../mime/Encoder/IdnAddressEncoder.php | 44 + .../Encoder/MimeHeaderEncoderInterface.php | 23 + .../symfony/mime/Encoder/QpContentEncoder.php | 55 + vendor/symfony/mime/Encoder/QpEncoder.php | 192 + .../mime/Encoder/QpMimeHeaderEncoder.php | 40 + .../symfony/mime/Encoder/Rfc2231Encoder.php | 50 + .../Exception/AddressEncoderException.php | 19 + .../mime/Exception/ExceptionInterface.php | 19 + .../Exception/InvalidArgumentException.php | 19 + .../symfony/mime/Exception/LogicException.php | 19 + .../mime/Exception/RfcComplianceException.php | 19 + .../mime/Exception/RuntimeException.php | 19 + .../mime/FileBinaryMimeTypeGuesser.php | 85 + .../symfony/mime/FileinfoMimeTypeGuesser.php | 69 + vendor/symfony/mime/Header/AbstractHeader.php | 294 + vendor/symfony/mime/Header/DateHeader.php | 62 + .../symfony/mime/Header/HeaderInterface.php | 61 + vendor/symfony/mime/Header/Headers.php | 316 + .../mime/Header/IdentificationHeader.php | 107 + vendor/symfony/mime/Header/MailboxHeader.php | 85 + .../symfony/mime/Header/MailboxListHeader.php | 136 + .../mime/Header/ParameterizedHeader.php | 191 + vendor/symfony/mime/Header/PathHeader.php | 62 + .../mime/Header/UnstructuredHeader.php | 66 + .../DefaultHtmlToTextConverter.php | 23 + .../HtmlToTextConverterInterface.php | 25 + .../LeagueHtmlToMarkdownConverter.php | 35 + vendor/symfony/mime/LICENSE | 19 + vendor/symfony/mime/Message.php | 163 + vendor/symfony/mime/MessageConverter.php | 122 + .../symfony/mime/MimeTypeGuesserInterface.php | 33 + vendor/symfony/mime/MimeTypes.php | 3789 + vendor/symfony/mime/MimeTypesInterface.php | 32 + .../mime/Part/AbstractMultipartPart.php | 95 + vendor/symfony/mime/Part/AbstractPart.php | 65 + vendor/symfony/mime/Part/DataPart.php | 165 + vendor/symfony/mime/Part/File.php | 51 + vendor/symfony/mime/Part/MessagePart.php | 69 + .../mime/Part/Multipart/AlternativePart.php | 25 + .../mime/Part/Multipart/DigestPart.php | 31 + .../mime/Part/Multipart/FormDataPart.php | 105 + .../symfony/mime/Part/Multipart/MixedPart.php | 25 + .../mime/Part/Multipart/RelatedPart.php | 55 + vendor/symfony/mime/Part/SMimePart.php | 105 + vendor/symfony/mime/Part/TextPart.php | 260 + vendor/symfony/mime/README.md | 13 + vendor/symfony/mime/RawMessage.php | 110 + .../Test/Constraint/EmailAddressContains.php | 64 + .../Test/Constraint/EmailAttachmentCount.php | 49 + .../mime/Test/Constraint/EmailHasHeader.php | 48 + .../mime/Test/Constraint/EmailHeaderSame.php | 59 + .../Test/Constraint/EmailHtmlBodyContains.php | 49 + .../Test/Constraint/EmailSubjectContains.php | 47 + .../Test/Constraint/EmailTextBodyContains.php | 49 + vendor/symfony/mime/composer.json | 47 + vendor/symfony/polyfill-ctype/Ctype.php | 232 + vendor/symfony/polyfill-ctype/LICENSE | 19 + vendor/symfony/polyfill-ctype/README.md | 12 + vendor/symfony/polyfill-ctype/bootstrap.php | 50 + vendor/symfony/polyfill-ctype/bootstrap80.php | 46 + vendor/symfony/polyfill-ctype/composer.json | 38 + .../polyfill-intl-grapheme/Grapheme.php | 247 + vendor/symfony/polyfill-intl-grapheme/LICENSE | 19 + .../symfony/polyfill-intl-grapheme/README.md | 31 + .../polyfill-intl-grapheme/bootstrap.php | 58 + .../polyfill-intl-grapheme/bootstrap80.php | 50 + .../polyfill-intl-grapheme/composer.json | 35 + vendor/symfony/polyfill-intl-idn/Idn.php | 933 + vendor/symfony/polyfill-intl-idn/Info.php | 23 + vendor/symfony/polyfill-intl-idn/LICENSE | 19 + vendor/symfony/polyfill-intl-idn/README.md | 12 + .../Resources/unidata/DisallowedRanges.php | 384 + .../Resources/unidata/Regex.php | 33 + .../Resources/unidata/deviation.php | 8 + .../Resources/unidata/disallowed.php | 2638 + .../unidata/disallowed_STD3_mapped.php | 308 + .../unidata/disallowed_STD3_valid.php | 71 + .../Resources/unidata/ignored.php | 273 + .../Resources/unidata/mapped.php | 5778 + .../Resources/unidata/virama.php | 65 + .../symfony/polyfill-intl-idn/bootstrap.php | 145 + .../symfony/polyfill-intl-idn/bootstrap80.php | 125 + .../symfony/polyfill-intl-idn/composer.json | 40 + .../symfony/polyfill-intl-normalizer/LICENSE | 19 + .../polyfill-intl-normalizer/Normalizer.php | 310 + .../polyfill-intl-normalizer/README.md | 14 + .../Resources/stubs/Normalizer.php | 17 + .../unidata/canonicalComposition.php | 945 + .../unidata/canonicalDecomposition.php | 2065 + .../Resources/unidata/combiningClass.php | 876 + .../unidata/compatibilityDecomposition.php | 3695 + .../polyfill-intl-normalizer/bootstrap.php | 23 + .../polyfill-intl-normalizer/bootstrap80.php | 19 + .../polyfill-intl-normalizer/composer.json | 36 + vendor/symfony/polyfill-mbstring/LICENSE | 19 + vendor/symfony/polyfill-mbstring/Mbstring.php | 1045 + vendor/symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/caseFolding.php | 119 + .../Resources/unidata/lowerCase.php | 1397 + .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1489 + .../symfony/polyfill-mbstring/bootstrap.php | 172 + .../symfony/polyfill-mbstring/bootstrap80.php | 167 + .../symfony/polyfill-mbstring/composer.json | 38 + vendor/symfony/polyfill-php73/LICENSE | 19 + vendor/symfony/polyfill-php73/Php73.php | 43 + vendor/symfony/polyfill-php73/README.md | 18 + .../Resources/stubs/JsonException.php | 16 + vendor/symfony/polyfill-php73/bootstrap.php | 31 + vendor/symfony/polyfill-php73/composer.json | 33 + vendor/symfony/polyfill-php80/LICENSE | 19 + vendor/symfony/polyfill-php80/Php80.php | 115 + vendor/symfony/polyfill-php80/PhpToken.php | 103 + vendor/symfony/polyfill-php80/README.md | 25 + .../Resources/stubs/Attribute.php | 31 + .../Resources/stubs/PhpToken.php | 16 + .../Resources/stubs/Stringable.php | 20 + .../Resources/stubs/UnhandledMatchError.php | 16 + .../Resources/stubs/ValueError.php | 16 + vendor/symfony/polyfill-php80/bootstrap.php | 42 + vendor/symfony/polyfill-php80/composer.json | 37 + .../service-contracts/Attribute/Required.php | 25 + .../Attribute/SubscribedService.php | 47 + vendor/symfony/service-contracts/CHANGELOG.md | 5 + vendor/symfony/service-contracts/LICENSE | 19 + vendor/symfony/service-contracts/README.md | 9 + .../service-contracts/ResetInterface.php | 33 + .../ServiceCollectionInterface.php | 26 + .../service-contracts/ServiceLocatorTrait.php | 115 + .../ServiceMethodsSubscriberTrait.php | 80 + .../ServiceProviderInterface.php | 45 + .../ServiceSubscriberInterface.php | 62 + .../ServiceSubscriberTrait.php | 84 + .../Test/ServiceLocatorTest.php | 23 + .../Test/ServiceLocatorTestCase.php | 96 + .../symfony/service-contracts/composer.json | 42 + vendor/symfony/string/AbstractString.php | 702 + .../symfony/string/AbstractUnicodeString.php | 590 + vendor/symfony/string/ByteString.php | 485 + vendor/symfony/string/CHANGELOG.md | 40 + vendor/symfony/string/CodePointString.php | 260 + .../string/Exception/ExceptionInterface.php | 16 + .../Exception/InvalidArgumentException.php | 16 + .../string/Exception/RuntimeException.php | 16 + .../string/Inflector/EnglishInflector.php | 586 + .../string/Inflector/FrenchInflector.php | 151 + .../string/Inflector/InflectorInterface.php | 33 + vendor/symfony/string/LICENSE | 19 + vendor/symfony/string/LazyString.php | 145 + vendor/symfony/string/README.md | 14 + .../Resources/data/wcswidth_table_wide.php | 1175 + .../Resources/data/wcswidth_table_zero.php | 1459 + vendor/symfony/string/Resources/functions.php | 38 + .../symfony/string/Slugger/AsciiSlugger.php | 210 + .../string/Slugger/SluggerInterface.php | 27 + vendor/symfony/string/UnicodeString.php | 385 + vendor/symfony/string/composer.json | 43 + .../translation-contracts/CHANGELOG.md | 5 + vendor/symfony/translation-contracts/LICENSE | 19 + .../LocaleAwareInterface.php | 29 + .../symfony/translation-contracts/README.md | 9 + .../Test/TranslatorTest.php | 385 + .../TranslatableInterface.php | 20 + .../TranslatorInterface.php | 68 + .../translation-contracts/TranslatorTrait.php | 225 + .../translation-contracts/composer.json | 37 + vendor/symfony/translation/CHANGELOG.md | 205 + .../Catalogue/AbstractOperation.php | 187 + .../translation/Catalogue/MergeOperation.php | 72 + .../Catalogue/OperationInterface.php | 61 + .../translation/Catalogue/TargetOperation.php | 86 + .../CatalogueMetadataAwareInterface.php | 48 + .../Command/TranslationPullCommand.php | 184 + .../Command/TranslationPushCommand.php | 182 + .../translation/Command/TranslationTrait.php | 77 + .../translation/Command/XliffLintCommand.php | 285 + .../TranslationDataCollector.php | 148 + .../translation/DataCollectorTranslator.php | 143 + .../DataCollectorTranslatorPass.php | 36 + .../LoggingTranslatorPass.php | 59 + .../TranslationDumperPass.php | 38 + .../TranslationExtractorPass.php | 43 + .../DependencyInjection/TranslatorPass.php | 94 + .../TranslatorPathsPass.php | 145 + .../translation/Dumper/CsvFileDumper.php | 56 + .../translation/Dumper/DumperInterface.php | 32 + .../symfony/translation/Dumper/FileDumper.php | 108 + .../translation/Dumper/IcuResFileDumper.php | 95 + .../translation/Dumper/IniFileDumper.php | 39 + .../translation/Dumper/JsonFileDumper.php | 34 + .../translation/Dumper/MoFileDumper.php | 76 + .../translation/Dumper/PhpFileDumper.php | 32 + .../translation/Dumper/PoFileDumper.php | 131 + .../translation/Dumper/QtFileDumper.php | 55 + .../translation/Dumper/XliffFileDumper.php | 221 + .../translation/Dumper/YamlFileDumper.php | 56 + .../Exception/ExceptionInterface.php | 21 + .../Exception/IncompleteDsnException.php | 24 + .../Exception/InvalidArgumentException.php | 21 + .../Exception/InvalidResourceException.php | 21 + .../translation/Exception/LogicException.php | 21 + .../MissingRequiredOptionException.php | 25 + .../Exception/NotFoundResourceException.php | 21 + .../Exception/ProviderException.php | 41 + .../Exception/ProviderExceptionInterface.php | 23 + .../Exception/RuntimeException.php | 21 + .../Exception/UnsupportedSchemeException.php | 58 + .../Extractor/AbstractFileExtractor.php | 67 + .../translation/Extractor/ChainExtractor.php | 59 + .../Extractor/ExtractorInterface.php | 39 + .../translation/Extractor/PhpAstExtractor.php | 85 + .../translation/Extractor/PhpExtractor.php | 333 + .../Extractor/PhpStringTokenParser.php | 141 + .../Extractor/Visitor/AbstractVisitor.php | 135 + .../Extractor/Visitor/ConstraintVisitor.php | 112 + .../Extractor/Visitor/TransMethodVisitor.php | 65 + .../Visitor/TranslatableMessageVisitor.php | 65 + .../translation/Formatter/IntlFormatter.php | 57 + .../Formatter/IntlFormatterInterface.php | 27 + .../Formatter/MessageFormatter.php | 46 + .../Formatter/MessageFormatterInterface.php | 28 + .../translation/IdentityTranslator.php | 26 + vendor/symfony/translation/LICENSE | 19 + .../translation/Loader/ArrayLoader.php | 57 + .../translation/Loader/CsvFileLoader.php | 64 + .../symfony/translation/Loader/FileLoader.php | 57 + .../translation/Loader/IcuDatFileLoader.php | 58 + .../translation/Loader/IcuResFileLoader.php | 86 + .../translation/Loader/IniFileLoader.php | 25 + .../translation/Loader/JsonFileLoader.php | 51 + .../translation/Loader/LoaderInterface.php | 32 + .../translation/Loader/MoFileLoader.php | 138 + .../translation/Loader/PhpFileLoader.php | 35 + .../translation/Loader/PoFileLoader.php | 147 + .../translation/Loader/QtFileLoader.php | 78 + .../translation/Loader/XliffFileLoader.php | 241 + .../translation/Loader/YamlFileLoader.php | 51 + vendor/symfony/translation/LocaleSwitcher.php | 83 + .../symfony/translation/LoggingTranslator.php | 115 + .../symfony/translation/MessageCatalogue.php | 338 + .../translation/MessageCatalogueInterface.php | 134 + .../translation/MetadataAwareInterface.php | 48 + .../Provider/AbstractProviderFactory.php | 37 + vendor/symfony/translation/Provider/Dsn.php | 110 + .../Provider/FilteringProvider.php | 62 + .../translation/Provider/NullProvider.php | 39 + .../Provider/NullProviderFactory.php | 34 + .../Provider/ProviderFactoryInterface.php | 26 + .../Provider/ProviderInterface.php | 30 + .../TranslationProviderCollection.php | 57 + .../TranslationProviderCollectionFactory.php | 57 + .../PseudoLocalizationTranslator.php | 365 + vendor/symfony/translation/README.md | 40 + .../translation/Reader/TranslationReader.php | 64 + .../Reader/TranslationReaderInterface.php | 29 + .../Resources/bin/translation-status.php | 274 + .../translation/Resources/data/parents.json | 142 + .../translation/Resources/functions.php | 22 + .../schemas/xliff-core-1.2-transitional.xsd | 2261 + .../Resources/schemas/xliff-core-2.0.xsd | 411 + .../translation/Resources/schemas/xml.xsd | 309 + .../Test/ProviderFactoryTestCase.php | 153 + .../translation/Test/ProviderTestCase.php | 82 + .../translation/TranslatableMessage.php | 60 + vendor/symfony/translation/Translator.php | 472 + vendor/symfony/translation/TranslatorBag.php | 102 + .../translation/TranslatorBagInterface.php | 36 + .../translation/Util/ArrayConverter.php | 142 + .../symfony/translation/Util/XliffUtils.php | 191 + .../translation/Writer/TranslationWriter.php | 75 + .../Writer/TranslationWriterInterface.php | 35 + vendor/symfony/translation/composer.json | 60 + vendor/symfony/var-exporter/CHANGELOG.md | 25 + .../Exception/ClassNotFoundException.php | 20 + .../Exception/ExceptionInterface.php | 16 + .../var-exporter/Exception/LogicException.php | 16 + .../NotInstantiableTypeException.php | 20 + vendor/symfony/var-exporter/Hydrator.php | 78 + vendor/symfony/var-exporter/Instantiator.php | 59 + .../var-exporter/Internal/Exporter.php | 419 + .../var-exporter/Internal/Hydrator.php | 310 + .../Internal/LazyObjectRegistry.php | 157 + .../var-exporter/Internal/LazyObjectState.php | 133 + .../var-exporter/Internal/LazyObjectTrait.php | 34 + .../var-exporter/Internal/Reference.php | 28 + .../var-exporter/Internal/Registry.php | 144 + .../symfony/var-exporter/Internal/Values.php | 27 + vendor/symfony/var-exporter/LICENSE | 19 + .../symfony/var-exporter/LazyGhostTrait.php | 403 + .../var-exporter/LazyObjectInterface.php | 32 + .../symfony/var-exporter/LazyProxyTrait.php | 349 + vendor/symfony/var-exporter/ProxyHelper.php | 512 + vendor/symfony/var-exporter/README.md | 137 + vendor/symfony/var-exporter/VarExporter.php | 114 + vendor/symfony/var-exporter/composer.json | 34 + vendor/twig/twig/CHANGELOG | 437 + vendor/twig/twig/LICENSE | 27 + vendor/twig/twig/README.rst | 23 + vendor/twig/twig/composer.json | 53 + vendor/twig/twig/phpstan-baseline.neon | 25 + vendor/twig/twig/phpstan.neon.dist | 9 + vendor/twig/twig/src/AbstractTwigCallable.php | 187 + .../Attribute/FirstClassTwigCallableReady.php | 20 + vendor/twig/twig/src/Attribute/YieldReady.php | 20 + vendor/twig/twig/src/Cache/CacheInterface.php | 46 + vendor/twig/twig/src/Cache/ChainCache.php | 88 + .../twig/twig/src/Cache/FilesystemCache.php | 95 + vendor/twig/twig/src/Cache/NullCache.php | 42 + .../src/Cache/ReadOnlyFilesystemCache.php | 25 + .../src/Cache/RemovableCacheInterface.php | 20 + vendor/twig/twig/src/Compiler.php | 257 + .../twig/twig/src/DeprecatedCallableInfo.php | 67 + vendor/twig/twig/src/Environment.php | 958 + vendor/twig/twig/src/Error/Error.php | 227 + vendor/twig/twig/src/Error/LoaderError.php | 21 + vendor/twig/twig/src/Error/RuntimeError.php | 22 + vendor/twig/twig/src/Error/SyntaxError.php | 46 + vendor/twig/twig/src/ExpressionParser.php | 1033 + .../twig/src/Extension/AbstractExtension.php | 62 + .../twig/twig/src/Extension/CoreExtension.php | 2162 + .../twig/src/Extension/DebugExtension.php | 62 + .../twig/src/Extension/EscaperExtension.php | 218 + .../twig/src/Extension/ExtensionInterface.php | 77 + .../twig/src/Extension/GlobalsInterface.php | 25 + .../LastModifiedExtensionInterface.php | 23 + .../twig/src/Extension/OptimizerExtension.php | 27 + .../twig/src/Extension/ProfilerExtension.php | 52 + .../Extension/RuntimeExtensionInterface.php | 19 + .../twig/src/Extension/SandboxExtension.php | 172 + .../twig/src/Extension/StagingExtension.php | 100 + .../src/Extension/StringLoaderExtension.php | 40 + .../src/Extension/YieldNotReadyExtension.php | 30 + vendor/twig/twig/src/ExtensionSet.php | 508 + .../src/FileExtensionEscapingStrategy.php | 61 + vendor/twig/twig/src/Lexer.php | 593 + vendor/twig/twig/src/Loader/ArrayLoader.php | 75 + vendor/twig/twig/src/Loader/ChainLoader.php | 132 + .../twig/twig/src/Loader/FilesystemLoader.php | 290 + .../twig/twig/src/Loader/LoaderInterface.php | 49 + vendor/twig/twig/src/Markup.php | 57 + vendor/twig/twig/src/Node/AutoEscapeNode.php | 40 + vendor/twig/twig/src/Node/BlockNode.php | 50 + .../twig/twig/src/Node/BlockReferenceNode.php | 38 + vendor/twig/twig/src/Node/BodyNode.php | 24 + vendor/twig/twig/src/Node/CaptureNode.php | 57 + .../twig/src/Node/CheckSecurityCallNode.php | 33 + .../twig/twig/src/Node/CheckSecurityNode.php | 85 + .../twig/twig/src/Node/CheckToStringNode.php | 47 + vendor/twig/twig/src/Node/DeprecatedNode.php | 73 + vendor/twig/twig/src/Node/DoNode.php | 40 + vendor/twig/twig/src/Node/EmbedNode.php | 56 + vendor/twig/twig/src/Node/EmptyNode.php | 33 + .../Node/Expression/AbstractExpression.php | 43 + .../src/Node/Expression/ArrayExpression.php | 143 + .../Expression/ArrowFunctionExpression.php | 64 + .../Node/Expression/AssignNameExpression.php | 44 + .../Node/Expression/Binary/AbstractBinary.php | 53 + .../src/Node/Expression/Binary/AddBinary.php | 23 + .../src/Node/Expression/Binary/AndBinary.php | 23 + .../Expression/Binary/BinaryInterface.php | 22 + .../Expression/Binary/BitwiseAndBinary.php | 23 + .../Expression/Binary/BitwiseOrBinary.php | 23 + .../Expression/Binary/BitwiseXorBinary.php | 23 + .../Node/Expression/Binary/ConcatBinary.php | 23 + .../src/Node/Expression/Binary/DivBinary.php | 23 + .../Node/Expression/Binary/ElvisBinary.php | 55 + .../Node/Expression/Binary/EndsWithBinary.php | 35 + .../Node/Expression/Binary/EqualBinary.php | 39 + .../Node/Expression/Binary/FloorDivBinary.php | 29 + .../Node/Expression/Binary/GreaterBinary.php | 39 + .../Expression/Binary/GreaterEqualBinary.php | 39 + .../Node/Expression/Binary/HasEveryBinary.php | 33 + .../Node/Expression/Binary/HasSomeBinary.php | 33 + .../src/Node/Expression/Binary/InBinary.php | 33 + .../src/Node/Expression/Binary/LessBinary.php | 39 + .../Expression/Binary/LessEqualBinary.php | 39 + .../Node/Expression/Binary/MatchesBinary.php | 51 + .../src/Node/Expression/Binary/ModBinary.php | 23 + .../src/Node/Expression/Binary/MulBinary.php | 23 + .../Node/Expression/Binary/NotEqualBinary.php | 39 + .../Node/Expression/Binary/NotInBinary.php | 33 + .../Expression/Binary/NullCoalesceBinary.php | 71 + .../src/Node/Expression/Binary/OrBinary.php | 23 + .../Node/Expression/Binary/PowerBinary.php | 22 + .../Node/Expression/Binary/RangeBinary.php | 33 + .../Expression/Binary/SpaceshipBinary.php | 22 + .../Expression/Binary/StartsWithBinary.php | 35 + .../src/Node/Expression/Binary/SubBinary.php | 23 + .../src/Node/Expression/Binary/XorBinary.php | 23 + .../Expression/BlockReferenceExpression.php | 94 + .../src/Node/Expression/CallExpression.php | 365 + .../Node/Expression/ConditionalExpression.php | 53 + .../Node/Expression/ConstantExpression.php | 31 + .../Node/Expression/Filter/DefaultFilter.php | 72 + .../src/Node/Expression/Filter/RawFilter.php | 45 + .../src/Node/Expression/FilterExpression.php | 80 + .../Node/Expression/FunctionExpression.php | 71 + .../FunctionNode/EnumCasesFunction.php | 41 + .../Expression/FunctionNode/EnumFunction.php | 45 + .../src/Node/Expression/GetAttrExpression.php | 118 + .../twig/src/Node/Expression/InlinePrint.php | 39 + .../Expression/MacroReferenceExpression.php | 56 + .../Node/Expression/MethodCallExpression.php | 55 + .../src/Node/Expression/NameExpression.php | 112 + .../Expression/NullCoalesceExpression.php | 77 + .../Expression/OperatorEscapeInterface.php | 25 + .../src/Node/Expression/ParentExpression.php | 46 + .../Node/Expression/TempNameExpression.php | 49 + .../Expression/Ternary/ConditionalTernary.php | 42 + .../src/Node/Expression/Test/ConstantTest.php | 49 + .../src/Node/Expression/Test/DefinedTest.php | 92 + .../Node/Expression/Test/DivisiblebyTest.php | 36 + .../src/Node/Expression/Test/EvenTest.php | 35 + .../src/Node/Expression/Test/NullTest.php | 34 + .../twig/src/Node/Expression/Test/OddTest.php | 35 + .../src/Node/Expression/Test/SameasTest.php | 34 + .../src/Node/Expression/TestExpression.php | 73 + .../Node/Expression/Unary/AbstractUnary.php | 48 + .../src/Node/Expression/Unary/NegUnary.php | 23 + .../src/Node/Expression/Unary/NotUnary.php | 23 + .../src/Node/Expression/Unary/PosUnary.php | 23 + .../src/Node/Expression/Unary/SpreadUnary.php | 22 + .../Node/Expression/Unary/StringCastUnary.php | 22 + .../Node/Expression/Unary/UnaryInterface.php | 22 + .../Variable/AssignContextVariable.php | 18 + .../Variable/AssignTemplateVariable.php | 44 + .../Expression/Variable/ContextVariable.php | 18 + .../Expression/Variable/LocalVariable.php | 18 + .../Expression/Variable/TemplateVariable.php | 42 + .../Node/Expression/VariadicExpression.php | 24 + vendor/twig/twig/src/Node/FlushNode.php | 40 + vendor/twig/twig/src/Node/ForElseNode.php | 41 + vendor/twig/twig/src/Node/ForLoopNode.php | 51 + vendor/twig/twig/src/Node/ForNode.php | 120 + vendor/twig/twig/src/Node/IfNode.php | 75 + vendor/twig/twig/src/Node/ImportNode.php | 63 + vendor/twig/twig/src/Node/IncludeNode.php | 116 + vendor/twig/twig/src/Node/MacroNode.php | 121 + vendor/twig/twig/src/Node/ModuleNode.php | 512 + vendor/twig/twig/src/Node/NameDeprecation.php | 46 + vendor/twig/twig/src/Node/Node.php | 297 + .../twig/src/Node/NodeCaptureInterface.php | 21 + .../twig/src/Node/NodeOutputInterface.php | 21 + vendor/twig/twig/src/Node/Nodes.php | 28 + vendor/twig/twig/src/Node/PrintNode.php | 44 + vendor/twig/twig/src/Node/SandboxNode.php | 54 + vendor/twig/twig/src/Node/SetNode.php | 115 + vendor/twig/twig/src/Node/TextNode.php | 41 + vendor/twig/twig/src/Node/TypesNode.php | 31 + vendor/twig/twig/src/Node/WithNode.php | 72 + vendor/twig/twig/src/NodeTraverser.php | 76 + .../src/NodeVisitor/AbstractNodeVisitor.php | 49 + .../src/NodeVisitor/EscaperNodeVisitor.php | 185 + .../src/NodeVisitor/NodeVisitorInterface.php | 46 + .../src/NodeVisitor/OptimizerNodeVisitor.php | 213 + .../NodeVisitor/SafeAnalysisNodeVisitor.php | 180 + .../src/NodeVisitor/SandboxNodeVisitor.php | 153 + .../NodeVisitor/YieldNotReadyNodeVisitor.php | 59 + .../twig/src/OperatorPrecedenceChange.php | 42 + vendor/twig/twig/src/Parser.php | 430 + .../twig/src/Profiler/Dumper/BaseDumper.php | 63 + .../src/Profiler/Dumper/BlackfireDumper.php | 72 + .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 + .../twig/src/Profiler/Dumper/TextDumper.php | 35 + .../src/Profiler/Node/EnterProfileNode.php | 44 + .../src/Profiler/Node/LeaveProfileNode.php | 38 + .../NodeVisitor/ProfilerNodeVisitor.php | 70 + vendor/twig/twig/src/Profiler/Profile.php | 194 + vendor/twig/twig/src/Resources/core.php | 541 + vendor/twig/twig/src/Resources/debug.php | 25 + vendor/twig/twig/src/Resources/escaper.php | 51 + .../twig/twig/src/Resources/string_loader.php | 26 + .../twig/twig/src/Runtime/EscaperRuntime.php | 340 + .../RuntimeLoader/ContainerRuntimeLoader.php | 35 + .../RuntimeLoader/FactoryRuntimeLoader.php | 39 + .../RuntimeLoader/RuntimeLoaderInterface.php | 27 + .../twig/twig/src/Sandbox/SecurityError.php | 23 + .../Sandbox/SecurityNotAllowedFilterError.php | 33 + .../SecurityNotAllowedFunctionError.php | 33 + .../Sandbox/SecurityNotAllowedMethodError.php | 40 + .../SecurityNotAllowedPropertyError.php | 40 + .../Sandbox/SecurityNotAllowedTagError.php | 33 + .../twig/twig/src/Sandbox/SecurityPolicy.php | 130 + .../src/Sandbox/SecurityPolicyInterface.php | 45 + .../src/Sandbox/SourcePolicyInterface.php | 24 + vendor/twig/twig/src/Source.php | 47 + vendor/twig/twig/src/Template.php | 521 + vendor/twig/twig/src/TemplateWrapper.php | 112 + .../twig/src/Test/IntegrationTestCase.php | 339 + vendor/twig/twig/src/Test/NodeTestCase.php | 142 + vendor/twig/twig/src/Token.php | 193 + .../src/TokenParser/AbstractTokenParser.php | 32 + .../twig/src/TokenParser/ApplyTokenParser.php | 57 + .../src/TokenParser/AutoEscapeTokenParser.php | 58 + .../twig/src/TokenParser/BlockTokenParser.php | 77 + .../src/TokenParser/DeprecatedTokenParser.php | 66 + .../twig/src/TokenParser/DoTokenParser.php | 38 + .../twig/src/TokenParser/EmbedTokenParser.php | 73 + .../src/TokenParser/ExtendsTokenParser.php | 50 + .../twig/src/TokenParser/FlushTokenParser.php | 38 + .../twig/src/TokenParser/ForTokenParser.php | 80 + .../twig/src/TokenParser/FromTokenParser.php | 69 + .../twig/src/TokenParser/GuardTokenParser.php | 73 + .../twig/src/TokenParser/IfTokenParser.php | 90 + .../src/TokenParser/ImportTokenParser.php | 45 + .../src/TokenParser/IncludeTokenParser.php | 73 + .../twig/src/TokenParser/MacroTokenParser.php | 123 + .../src/TokenParser/SandboxTokenParser.php | 68 + .../twig/src/TokenParser/SetTokenParser.php | 73 + .../src/TokenParser/TokenParserInterface.php | 46 + .../twig/src/TokenParser/TypesTokenParser.php | 89 + .../twig/src/TokenParser/UseTokenParser.php | 75 + .../twig/src/TokenParser/WithTokenParser.php | 56 + vendor/twig/twig/src/TokenStream.php | 131 + .../twig/twig/src/TwigCallableInterface.php | 53 + vendor/twig/twig/src/TwigFilter.php | 74 + vendor/twig/twig/src/TwigFunction.php | 63 + vendor/twig/twig/src/TwigTest.php | 67 + .../src/Util/CallableArgumentsExtractor.php | 219 + .../twig/src/Util/DeprecationCollector.php | 77 + .../twig/twig/src/Util/ReflectionCallable.php | 95 + .../twig/src/Util/TemplateDirIterator.php | 36 + vendor/voku/portable-ascii/CHANGELOG.md | 191 + vendor/voku/portable-ascii/LICENSE.txt | 19 + vendor/voku/portable-ascii/README.md | 428 + .../voku/portable-ascii/build/composer.json | 5 + vendor/voku/portable-ascii/build/docs/base.md | 127 + .../portable-ascii/build/generate_docs.php | 26 + .../build/generate_max_key_length.php | 20 + vendor/voku/portable-ascii/composer.json | 37 + .../portable-ascii/src/voku/helper/ASCII.php | 1500 + .../voku/helper/data/ascii_by_languages.php | 2929 + .../helper/data/ascii_extras_by_languages.php | 759 + .../helper/data/ascii_language_max_key.php | 65 + .../src/voku/helper/data/ascii_ord.php | 1 + .../src/voku/helper/data/x000.php | 16 + .../src/voku/helper/data/x001.php | 1 + .../src/voku/helper/data/x002.php | 1 + .../src/voku/helper/data/x003.php | 1 + .../src/voku/helper/data/x004.php | 1 + .../src/voku/helper/data/x005.php | 1 + .../src/voku/helper/data/x006.php | 1 + .../src/voku/helper/data/x007.php | 1 + .../src/voku/helper/data/x009.php | 1 + .../src/voku/helper/data/x00a.php | 1 + .../src/voku/helper/data/x00b.php | 1 + .../src/voku/helper/data/x00c.php | 1 + .../src/voku/helper/data/x00d.php | 1 + .../src/voku/helper/data/x00e.php | 1 + .../src/voku/helper/data/x00f.php | 1 + .../src/voku/helper/data/x010.php | 1 + .../src/voku/helper/data/x011.php | 1 + .../src/voku/helper/data/x012.php | 1 + .../src/voku/helper/data/x013.php | 1 + .../src/voku/helper/data/x014.php | 1 + .../src/voku/helper/data/x015.php | 1 + .../src/voku/helper/data/x016.php | 1 + .../src/voku/helper/data/x017.php | 1 + .../src/voku/helper/data/x018.php | 1 + .../src/voku/helper/data/x01d.php | 1 + .../src/voku/helper/data/x01e.php | 1 + .../src/voku/helper/data/x01f.php | 1 + .../src/voku/helper/data/x020.php | 4 + .../src/voku/helper/data/x021.php | 1 + .../src/voku/helper/data/x022.php | 1 + .../src/voku/helper/data/x023.php | 1 + .../src/voku/helper/data/x024.php | 1 + .../src/voku/helper/data/x025.php | 1 + .../src/voku/helper/data/x026.php | 1 + .../src/voku/helper/data/x027.php | 1 + .../src/voku/helper/data/x028.php | 1 + .../src/voku/helper/data/x029.php | 1 + .../src/voku/helper/data/x02a.php | 1 + .../src/voku/helper/data/x02c.php | 1 + .../src/voku/helper/data/x02e.php | 1 + .../src/voku/helper/data/x02f.php | 1 + .../src/voku/helper/data/x030.php | 9 + .../src/voku/helper/data/x031.php | 1 + .../src/voku/helper/data/x032.php | 1 + .../src/voku/helper/data/x033.php | 1 + .../src/voku/helper/data/x04d.php | 1 + .../src/voku/helper/data/x04e.php | 1 + .../src/voku/helper/data/x04f.php | 1 + .../src/voku/helper/data/x050.php | 1 + .../src/voku/helper/data/x051.php | 1 + .../src/voku/helper/data/x052.php | 1 + .../src/voku/helper/data/x053.php | 1 + .../src/voku/helper/data/x054.php | 1 + .../src/voku/helper/data/x055.php | 1 + .../src/voku/helper/data/x056.php | 1 + .../src/voku/helper/data/x057.php | 1 + .../src/voku/helper/data/x058.php | 1 + .../src/voku/helper/data/x059.php | 1 + .../src/voku/helper/data/x05a.php | 1 + .../src/voku/helper/data/x05b.php | 1 + .../src/voku/helper/data/x05c.php | 1 + .../src/voku/helper/data/x05d.php | 1 + .../src/voku/helper/data/x05e.php | 1 + .../src/voku/helper/data/x05f.php | 1 + .../src/voku/helper/data/x060.php | 1 + .../src/voku/helper/data/x061.php | 1 + .../src/voku/helper/data/x062.php | 1 + .../src/voku/helper/data/x063.php | 1 + .../src/voku/helper/data/x064.php | 1 + .../src/voku/helper/data/x065.php | 1 + .../src/voku/helper/data/x066.php | 1 + .../src/voku/helper/data/x067.php | 1 + .../src/voku/helper/data/x068.php | 1 + .../src/voku/helper/data/x069.php | 1 + .../src/voku/helper/data/x06a.php | 1 + .../src/voku/helper/data/x06b.php | 1 + .../src/voku/helper/data/x06c.php | 1 + .../src/voku/helper/data/x06d.php | 1 + .../src/voku/helper/data/x06e.php | 1 + .../src/voku/helper/data/x06f.php | 1 + .../src/voku/helper/data/x070.php | 1 + .../src/voku/helper/data/x071.php | 1 + .../src/voku/helper/data/x072.php | 1 + .../src/voku/helper/data/x073.php | 1 + .../src/voku/helper/data/x074.php | 1 + .../src/voku/helper/data/x075.php | 1 + .../src/voku/helper/data/x076.php | 1 + .../src/voku/helper/data/x077.php | 1 + .../src/voku/helper/data/x078.php | 1 + .../src/voku/helper/data/x079.php | 1 + .../src/voku/helper/data/x07a.php | 1 + .../src/voku/helper/data/x07b.php | 1 + .../src/voku/helper/data/x07c.php | 1 + .../src/voku/helper/data/x07d.php | 1 + .../src/voku/helper/data/x07e.php | 1 + .../src/voku/helper/data/x07f.php | 1 + .../src/voku/helper/data/x080.php | 1 + .../src/voku/helper/data/x081.php | 1 + .../src/voku/helper/data/x082.php | 1 + .../src/voku/helper/data/x083.php | 1 + .../src/voku/helper/data/x084.php | 1 + .../src/voku/helper/data/x085.php | 1 + .../src/voku/helper/data/x086.php | 1 + .../src/voku/helper/data/x087.php | 1 + .../src/voku/helper/data/x088.php | 1 + .../src/voku/helper/data/x089.php | 1 + .../src/voku/helper/data/x08a.php | 1 + .../src/voku/helper/data/x08b.php | 1 + .../src/voku/helper/data/x08c.php | 1 + .../src/voku/helper/data/x08d.php | 1 + .../src/voku/helper/data/x08e.php | 1 + .../src/voku/helper/data/x08f.php | 1 + .../src/voku/helper/data/x090.php | 1 + .../src/voku/helper/data/x091.php | 1 + .../src/voku/helper/data/x092.php | 1 + .../src/voku/helper/data/x093.php | 1 + .../src/voku/helper/data/x094.php | 1 + .../src/voku/helper/data/x095.php | 1 + .../src/voku/helper/data/x096.php | 1 + .../src/voku/helper/data/x097.php | 1 + .../src/voku/helper/data/x098.php | 1 + .../src/voku/helper/data/x099.php | 1 + .../src/voku/helper/data/x09a.php | 1 + .../src/voku/helper/data/x09b.php | 1 + .../src/voku/helper/data/x09c.php | 1 + .../src/voku/helper/data/x09d.php | 1 + .../src/voku/helper/data/x09e.php | 1 + .../src/voku/helper/data/x09f.php | 1 + .../src/voku/helper/data/x0a0.php | 1 + .../src/voku/helper/data/x0a1.php | 1 + .../src/voku/helper/data/x0a2.php | 1 + .../src/voku/helper/data/x0a3.php | 1 + .../src/voku/helper/data/x0a4.php | 1 + .../src/voku/helper/data/x0ac.php | 1 + .../src/voku/helper/data/x0ad.php | 1 + .../src/voku/helper/data/x0ae.php | 1 + .../src/voku/helper/data/x0af.php | 1 + .../src/voku/helper/data/x0b0.php | 1 + .../src/voku/helper/data/x0b1.php | 1 + .../src/voku/helper/data/x0b2.php | 1 + .../src/voku/helper/data/x0b3.php | 1 + .../src/voku/helper/data/x0b4.php | 1 + .../src/voku/helper/data/x0b5.php | 1 + .../src/voku/helper/data/x0b6.php | 1 + .../src/voku/helper/data/x0b7.php | 1 + .../src/voku/helper/data/x0b8.php | 1 + .../src/voku/helper/data/x0b9.php | 1 + .../src/voku/helper/data/x0ba.php | 1 + .../src/voku/helper/data/x0bb.php | 1 + .../src/voku/helper/data/x0bc.php | 1 + .../src/voku/helper/data/x0bd.php | 1 + .../src/voku/helper/data/x0be.php | 1 + .../src/voku/helper/data/x0bf.php | 1 + .../src/voku/helper/data/x0c0.php | 1 + .../src/voku/helper/data/x0c1.php | 1 + .../src/voku/helper/data/x0c2.php | 1 + .../src/voku/helper/data/x0c3.php | 1 + .../src/voku/helper/data/x0c4.php | 1 + .../src/voku/helper/data/x0c5.php | 1 + .../src/voku/helper/data/x0c6.php | 1 + .../src/voku/helper/data/x0c7.php | 1 + .../src/voku/helper/data/x0c8.php | 1 + .../src/voku/helper/data/x0c9.php | 1 + .../src/voku/helper/data/x0ca.php | 1 + .../src/voku/helper/data/x0cb.php | 1 + .../src/voku/helper/data/x0cc.php | 1 + .../src/voku/helper/data/x0cd.php | 1 + .../src/voku/helper/data/x0ce.php | 1 + .../src/voku/helper/data/x0cf.php | 1 + .../src/voku/helper/data/x0d0.php | 1 + .../src/voku/helper/data/x0d1.php | 1 + .../src/voku/helper/data/x0d2.php | 1 + .../src/voku/helper/data/x0d3.php | 1 + .../src/voku/helper/data/x0d4.php | 1 + .../src/voku/helper/data/x0d5.php | 1 + .../src/voku/helper/data/x0d6.php | 1 + .../src/voku/helper/data/x0d7.php | 1 + .../src/voku/helper/data/x0f9.php | 1 + .../src/voku/helper/data/x0fa.php | 1 + .../src/voku/helper/data/x0fb.php | 1 + .../src/voku/helper/data/x0fc.php | 1 + .../src/voku/helper/data/x0fd.php | 1 + .../src/voku/helper/data/x0fe.php | 1 + .../src/voku/helper/data/x0ff.php | 1 + .../src/voku/helper/data/x1d4.php | 1 + .../src/voku/helper/data/x1d5.php | 4 + .../src/voku/helper/data/x1d6.php | 1 + .../src/voku/helper/data/x1d7.php | 1 + .../src/voku/helper/data/x1f1.php | 2 + 4914 files changed, 789004 insertions(+) create mode 100644 .env create mode 100644 .htaccess create mode 100755 LICENSE create mode 100755 README.md create mode 100755 app/Console/Command/GenerateApiKeysCommand.php create mode 100755 app/Console/Command/GenerateAppKeyCommand.php create mode 100755 app/Console/Command/MigrateCrudExampleCommand.php create mode 100755 app/Console/Command/SayHelloCommand.php create mode 100755 app/Controllers/CrudExampleController.php create mode 100755 app/Controllers/HomeController.php create mode 100755 app/Controllers/IndexController.php create mode 100755 app/Controllers/TesteController.php create mode 100755 app/Controllers/TwigExampleController.php create mode 100755 app/Models/CrudExample.php create mode 100755 app/Models/TwigExample.php create mode 100755 app/Services/BaseController.php create mode 100755 app/Services/Sanitizer.php create mode 100755 bin/console create mode 100755 bootstrap/app.php create mode 100755 bootstrap/csrf.php create mode 100755 bootstrap/helpers.php create mode 100755 cache/crudexample.create_131f97ce10c031ed037031e0e52c6e8c42aab5be.bladec create mode 100755 cache/crudexample.edit_af3087646c3322691eb28ea32da0d08678d50545.bladec create mode 100644 cache/crudexample.index_a3e8efc0a7016af4026f3385ceba60150a67c43e.bladec create mode 100755 cache/crudexample.index_b9a4453a28d7fa64a3baa9da79321256182f4d8c.bladec create mode 100755 cache/crudexample.show_7b0e79ce3cc500f2bbcbc8483a73a7ac0a94593a.bladec create mode 100755 cache/home.about_03561e09a1fc8a0d775ef4fd1ce34c3f16625ea8.bladec create mode 100755 cache/home.app-development_c7d3404ba2a3d0b502efda2772c5288d077416b6.bladec create mode 100755 cache/home.console-cli_dcddad4f2472192950b28dbb814a8f861875162a.bladec create mode 100755 cache/home.database_cd9f67c6d9a4153b3d55ca4a2f92c837320dfb67.bladec create mode 100755 cache/home.dependency-injection_40a7ac7bb688a77a0c233084d3ba55644863b74b.bladec create mode 100755 cache/home.details_1635da5ee92224e8b6ecdf53388e6a7fc6386309.bladec create mode 100755 cache/home.readme_a5a72e6d1fce588c9467a65bb5a9924d7a6f75df.bladec create mode 100755 cache/home.security_a8863fd4006a715d4beab35500ce0daa0e44194d.bladec create mode 100755 cache/home.templates-blade_575eb2851ff825a1ddc807e6acd0a7c0d1db8730.bladec create mode 100644 cache/home_13ba8928d2626bc19d159b63a2840fcd5dc5fc90.bladec create mode 100644 cache/home_6e120cc9acc88bff03fde36dfe633a1bfbc6aaca.bladec create mode 100755 cache/home_c3e20cca6a65237ff4814aca14e321d0b6401e37.bladec create mode 100755 cache/layout_56ac544973bfff9e6c00c452396225fce53b9d55.bladec create mode 100644 cache/layout_61d625cce8d73fa5a4bdd25fd2592bba4196d57c.bladec create mode 100644 cache/layout_c675d3c0958e134a30d03f96711e91b560ce4860.bladec create mode 100644 composer.json create mode 100644 composer.lock create mode 100755 config/container.php create mode 100755 config/database.php create mode 100755 config/envread.php create mode 100755 config/paths.php create mode 100755 config/templateengine.php create mode 100755 database/crudexample.sql create mode 100755 logs/app.log create mode 100644 public/.htaccess create mode 100755 public/consent/cookieconsent.min.css create mode 100755 public/consent/cookieconsent.min.js create mode 100755 public/consent/termosdeuso.html create mode 100755 public/css/bootstrap-grid.css create mode 100755 public/css/bootstrap-grid.css.map create mode 100755 public/css/bootstrap-grid.min.css create mode 100755 public/css/bootstrap-grid.min.css.map create mode 100755 public/css/bootstrap-reboot.css create mode 100755 public/css/bootstrap-reboot.css.map create mode 100755 public/css/bootstrap-reboot.min.css create mode 100755 public/css/bootstrap-reboot.min.css.map create mode 100755 public/css/bootstrap.css create mode 100755 public/css/bootstrap.css.map create mode 100755 public/css/bootstrap.min.css create mode 100755 public/css/bootstrap.min.css.map create mode 100755 public/css/jumbotron.css create mode 100755 public/images/1.jpg create mode 100755 public/images/2.jpg create mode 100755 public/images/3.jpg create mode 100755 public/images/4.jpg create mode 100755 public/images/5.jpg create mode 100755 public/images/6.jpg create mode 100755 public/index.php create mode 100755 public/js/bootstrap.bundle.js create mode 100755 public/js/bootstrap.bundle.js.map create mode 100755 public/js/bootstrap.bundle.min.js create mode 100755 public/js/bootstrap.bundle.min.js.map create mode 100755 public/js/bootstrap.js create mode 100755 public/js/bootstrap.js.map create mode 100755 public/js/bootstrap.min.js create mode 100755 public/js/bootstrap.min.js.map create mode 100755 resources/views/crudexample/create.blade.php create mode 100755 resources/views/crudexample/delete.blade.php create mode 100755 resources/views/crudexample/edit.blade.php create mode 100755 resources/views/crudexample/index.blade.php create mode 100755 resources/views/crudexample/show.blade.php create mode 100755 resources/views/errors/403.html create mode 100755 resources/views/errors/404.html create mode 100755 resources/views/home.blade.php create mode 100755 resources/views/home/about.blade.php create mode 100755 resources/views/home/app-development.blade.php create mode 100755 resources/views/home/console-cli.blade.php create mode 100755 resources/views/home/database.blade.php create mode 100755 resources/views/home/dependency-injection.blade.php create mode 100755 resources/views/home/details.blade.php create mode 100755 resources/views/home/readme.blade.php create mode 100755 resources/views/home/security.blade.php create mode 100755 resources/views/home/templates-blade.blade.php create mode 100755 resources/views/layout.blade.php create mode 100755 resources/views/layout.twig create mode 100755 resources/views/layout.twig.php create mode 100755 resources/views/test.blade.php create mode 100755 resources/views/twigexample/create.twig create mode 100755 resources/views/twigexample/create.twig.php create mode 100755 resources/views/twigexample/edit.twig create mode 100755 resources/views/twigexample/edit.twig.php create mode 100755 resources/views/twigexample/index.twig create mode 100755 resources/views/twigexample/index.twig.php create mode 100755 resources/views/twigexample/show.twig create mode 100755 resources/views/twigexample/show.twig.php create mode 100755 routes/api.php create mode 100755 routes/auth.php create mode 100755 routes/web.php create mode 100755 vendor/autoload.php create mode 100755 vendor/bin/bladeonecli create mode 100755 vendor/bin/carbon create mode 100755 vendor/bin/generate-defuse-key create mode 100755 vendor/bin/phinx create mode 100755 vendor/cakephp/core/App.php create mode 100755 vendor/cakephp/core/BasePlugin.php create mode 100755 vendor/cakephp/core/ClassLoader.php create mode 100755 vendor/cakephp/core/Configure.php create mode 100755 vendor/cakephp/core/Configure/ConfigEngineInterface.php create mode 100755 vendor/cakephp/core/Configure/Engine/IniConfig.php create mode 100755 vendor/cakephp/core/Configure/Engine/JsonConfig.php create mode 100755 vendor/cakephp/core/Configure/Engine/PhpConfig.php create mode 100755 vendor/cakephp/core/Configure/FileConfigTrait.php create mode 100755 vendor/cakephp/core/ConsoleApplicationInterface.php create mode 100755 vendor/cakephp/core/Container.php create mode 100755 vendor/cakephp/core/ContainerApplicationInterface.php create mode 100755 vendor/cakephp/core/ContainerInterface.php create mode 100755 vendor/cakephp/core/ConventionsTrait.php create mode 100755 vendor/cakephp/core/Exception/CakeException.php create mode 100755 vendor/cakephp/core/Exception/Exception.php create mode 100755 vendor/cakephp/core/Exception/MissingPluginException.php create mode 100755 vendor/cakephp/core/HttpApplicationInterface.php create mode 100755 vendor/cakephp/core/InstanceConfigTrait.php create mode 100755 vendor/cakephp/core/LICENSE.txt create mode 100755 vendor/cakephp/core/ObjectRegistry.php create mode 100755 vendor/cakephp/core/Plugin.php create mode 100755 vendor/cakephp/core/PluginApplicationInterface.php create mode 100755 vendor/cakephp/core/PluginCollection.php create mode 100755 vendor/cakephp/core/PluginInterface.php create mode 100755 vendor/cakephp/core/README.md create mode 100755 vendor/cakephp/core/Retry/CommandRetry.php create mode 100755 vendor/cakephp/core/Retry/RetryStrategyInterface.php create mode 100755 vendor/cakephp/core/ServiceConfig.php create mode 100755 vendor/cakephp/core/ServiceProvider.php create mode 100755 vendor/cakephp/core/StaticConfigTrait.php create mode 100755 vendor/cakephp/core/TestSuite/ContainerStubTrait.php create mode 100755 vendor/cakephp/core/composer.json create mode 100755 vendor/cakephp/core/functions.php create mode 100755 vendor/cakephp/core/functions_global.php create mode 100755 vendor/cakephp/database/Connection.php create mode 100755 vendor/cakephp/database/ConstraintsInterface.php create mode 100755 vendor/cakephp/database/Driver.php create mode 100755 vendor/cakephp/database/Driver/Mysql.php create mode 100755 vendor/cakephp/database/Driver/Postgres.php create mode 100755 vendor/cakephp/database/Driver/SqlDialectTrait.php create mode 100755 vendor/cakephp/database/Driver/Sqlite.php create mode 100755 vendor/cakephp/database/Driver/Sqlserver.php create mode 100755 vendor/cakephp/database/Driver/TupleComparisonTranslatorTrait.php create mode 100755 vendor/cakephp/database/DriverInterface.php create mode 100755 vendor/cakephp/database/Exception.php create mode 100755 vendor/cakephp/database/Exception/DatabaseException.php create mode 100755 vendor/cakephp/database/Exception/MissingConnectionException.php create mode 100755 vendor/cakephp/database/Exception/MissingDriverException.php create mode 100755 vendor/cakephp/database/Exception/MissingExtensionException.php create mode 100755 vendor/cakephp/database/Exception/NestedTransactionRollbackException.php create mode 100755 vendor/cakephp/database/Expression/AggregateExpression.php create mode 100755 vendor/cakephp/database/Expression/BetweenExpression.php create mode 100755 vendor/cakephp/database/Expression/CaseExpression.php create mode 100755 vendor/cakephp/database/Expression/CaseExpressionTrait.php create mode 100755 vendor/cakephp/database/Expression/CaseStatementExpression.php create mode 100755 vendor/cakephp/database/Expression/CommonTableExpression.php create mode 100755 vendor/cakephp/database/Expression/Comparison.php create mode 100755 vendor/cakephp/database/Expression/ComparisonExpression.php create mode 100755 vendor/cakephp/database/Expression/FieldInterface.php create mode 100755 vendor/cakephp/database/Expression/FieldTrait.php create mode 100755 vendor/cakephp/database/Expression/FunctionExpression.php create mode 100755 vendor/cakephp/database/Expression/IdentifierExpression.php create mode 100755 vendor/cakephp/database/Expression/OrderByExpression.php create mode 100755 vendor/cakephp/database/Expression/OrderClauseExpression.php create mode 100755 vendor/cakephp/database/Expression/QueryExpression.php create mode 100755 vendor/cakephp/database/Expression/StringExpression.php create mode 100755 vendor/cakephp/database/Expression/TupleComparison.php create mode 100755 vendor/cakephp/database/Expression/UnaryExpression.php create mode 100755 vendor/cakephp/database/Expression/ValuesExpression.php create mode 100755 vendor/cakephp/database/Expression/WhenThenExpression.php create mode 100755 vendor/cakephp/database/Expression/WindowExpression.php create mode 100755 vendor/cakephp/database/Expression/WindowInterface.php create mode 100755 vendor/cakephp/database/ExpressionInterface.php create mode 100755 vendor/cakephp/database/FieldTypeConverter.php create mode 100755 vendor/cakephp/database/FunctionsBuilder.php create mode 100755 vendor/cakephp/database/IdentifierQuoter.php create mode 100755 vendor/cakephp/database/LICENSE.txt create mode 100755 vendor/cakephp/database/Log/LoggedQuery.php create mode 100755 vendor/cakephp/database/Log/LoggingStatement.php create mode 100755 vendor/cakephp/database/Log/QueryLogger.php create mode 100755 vendor/cakephp/database/PostgresCompiler.php create mode 100755 vendor/cakephp/database/Query.php create mode 100755 vendor/cakephp/database/Query/DeleteQuery.php create mode 100755 vendor/cakephp/database/Query/InsertQuery.php create mode 100755 vendor/cakephp/database/Query/SelectQuery.php create mode 100755 vendor/cakephp/database/Query/UpdateQuery.php create mode 100755 vendor/cakephp/database/QueryCompiler.php create mode 100755 vendor/cakephp/database/README.md create mode 100755 vendor/cakephp/database/Retry/ErrorCodeWaitStrategy.php create mode 100755 vendor/cakephp/database/Retry/ReconnectStrategy.php create mode 100755 vendor/cakephp/database/Schema/BaseSchema.php create mode 100755 vendor/cakephp/database/Schema/CachedCollection.php create mode 100755 vendor/cakephp/database/Schema/Collection.php create mode 100755 vendor/cakephp/database/Schema/CollectionInterface.php create mode 100755 vendor/cakephp/database/Schema/MysqlSchema.php create mode 100755 vendor/cakephp/database/Schema/MysqlSchemaDialect.php create mode 100755 vendor/cakephp/database/Schema/PostgresSchema.php create mode 100755 vendor/cakephp/database/Schema/PostgresSchemaDialect.php create mode 100755 vendor/cakephp/database/Schema/SchemaDialect.php create mode 100755 vendor/cakephp/database/Schema/SqlGeneratorInterface.php create mode 100755 vendor/cakephp/database/Schema/SqliteSchema.php create mode 100755 vendor/cakephp/database/Schema/SqliteSchemaDialect.php create mode 100755 vendor/cakephp/database/Schema/SqlserverSchema.php create mode 100755 vendor/cakephp/database/Schema/SqlserverSchemaDialect.php create mode 100755 vendor/cakephp/database/Schema/TableSchema.php create mode 100755 vendor/cakephp/database/Schema/TableSchemaAwareInterface.php create mode 100755 vendor/cakephp/database/Schema/TableSchemaInterface.php create mode 100755 vendor/cakephp/database/SchemaCache.php create mode 100755 vendor/cakephp/database/SqlDialectTrait.php create mode 100755 vendor/cakephp/database/SqliteCompiler.php create mode 100755 vendor/cakephp/database/SqlserverCompiler.php create mode 100755 vendor/cakephp/database/Statement/BufferResultsTrait.php create mode 100755 vendor/cakephp/database/Statement/BufferedStatement.php create mode 100755 vendor/cakephp/database/Statement/CallbackStatement.php create mode 100755 vendor/cakephp/database/Statement/MysqlStatement.php create mode 100755 vendor/cakephp/database/Statement/PDOStatement.php create mode 100755 vendor/cakephp/database/Statement/SqliteStatement.php create mode 100755 vendor/cakephp/database/Statement/SqlserverStatement.php create mode 100755 vendor/cakephp/database/Statement/StatementDecorator.php create mode 100755 vendor/cakephp/database/StatementInterface.php create mode 100755 vendor/cakephp/database/Type.php create mode 100755 vendor/cakephp/database/Type/BaseType.php create mode 100755 vendor/cakephp/database/Type/BatchCastingInterface.php create mode 100755 vendor/cakephp/database/Type/BinaryType.php create mode 100755 vendor/cakephp/database/Type/BinaryUuidType.php create mode 100755 vendor/cakephp/database/Type/BoolType.php create mode 100755 vendor/cakephp/database/Type/ColumnSchemaAwareInterface.php create mode 100755 vendor/cakephp/database/Type/DateTimeFractionalType.php create mode 100755 vendor/cakephp/database/Type/DateTimeTimezoneType.php create mode 100755 vendor/cakephp/database/Type/DateTimeType.php create mode 100755 vendor/cakephp/database/Type/DateType.php create mode 100755 vendor/cakephp/database/Type/DecimalType.php create mode 100755 vendor/cakephp/database/Type/ExpressionTypeCasterTrait.php create mode 100755 vendor/cakephp/database/Type/ExpressionTypeInterface.php create mode 100755 vendor/cakephp/database/Type/FloatType.php create mode 100755 vendor/cakephp/database/Type/IntegerType.php create mode 100755 vendor/cakephp/database/Type/JsonType.php create mode 100755 vendor/cakephp/database/Type/OptionalConvertInterface.php create mode 100755 vendor/cakephp/database/Type/StringType.php create mode 100755 vendor/cakephp/database/Type/TimeType.php create mode 100755 vendor/cakephp/database/Type/UuidType.php create mode 100755 vendor/cakephp/database/TypeConverterTrait.php create mode 100755 vendor/cakephp/database/TypeFactory.php create mode 100755 vendor/cakephp/database/TypeInterface.php create mode 100755 vendor/cakephp/database/TypeMap.php create mode 100755 vendor/cakephp/database/TypeMapTrait.php create mode 100755 vendor/cakephp/database/TypedResultInterface.php create mode 100755 vendor/cakephp/database/TypedResultTrait.php create mode 100755 vendor/cakephp/database/ValueBinder.php create mode 100755 vendor/cakephp/database/composer.json create mode 100755 vendor/cakephp/datasource/ConnectionInterface.php create mode 100755 vendor/cakephp/datasource/ConnectionManager.php create mode 100755 vendor/cakephp/datasource/ConnectionRegistry.php create mode 100755 vendor/cakephp/datasource/EntityInterface.php create mode 100755 vendor/cakephp/datasource/EntityTrait.php create mode 100755 vendor/cakephp/datasource/Exception/InvalidPrimaryKeyException.php create mode 100755 vendor/cakephp/datasource/Exception/MissingDatasourceConfigException.php create mode 100755 vendor/cakephp/datasource/Exception/MissingDatasourceException.php create mode 100755 vendor/cakephp/datasource/Exception/MissingModelException.php create mode 100755 vendor/cakephp/datasource/Exception/PageOutOfBoundsException.php create mode 100755 vendor/cakephp/datasource/Exception/RecordNotFoundException.php create mode 100755 vendor/cakephp/datasource/FactoryLocator.php create mode 100755 vendor/cakephp/datasource/FixtureInterface.php create mode 100755 vendor/cakephp/datasource/InvalidPropertyInterface.php create mode 100755 vendor/cakephp/datasource/LICENSE.txt create mode 100755 vendor/cakephp/datasource/Locator/AbstractLocator.php create mode 100755 vendor/cakephp/datasource/Locator/LocatorInterface.php create mode 100755 vendor/cakephp/datasource/ModelAwareTrait.php create mode 100755 vendor/cakephp/datasource/Paginator.php create mode 100755 vendor/cakephp/datasource/PaginatorInterface.php create mode 100755 vendor/cakephp/datasource/Paging/Exception/PageOutOfBoundsException.php create mode 100755 vendor/cakephp/datasource/Paging/NumericPaginator.php create mode 100755 vendor/cakephp/datasource/Paging/PaginatorInterface.php create mode 100755 vendor/cakephp/datasource/Paging/SimplePaginator.php create mode 100755 vendor/cakephp/datasource/QueryCacher.php create mode 100755 vendor/cakephp/datasource/QueryInterface.php create mode 100755 vendor/cakephp/datasource/QueryTrait.php create mode 100755 vendor/cakephp/datasource/README.md create mode 100755 vendor/cakephp/datasource/RepositoryInterface.php create mode 100755 vendor/cakephp/datasource/ResultSetDecorator.php create mode 100755 vendor/cakephp/datasource/ResultSetInterface.php create mode 100755 vendor/cakephp/datasource/RuleInvoker.php create mode 100755 vendor/cakephp/datasource/RulesAwareTrait.php create mode 100755 vendor/cakephp/datasource/RulesChecker.php create mode 100755 vendor/cakephp/datasource/SchemaInterface.php create mode 100755 vendor/cakephp/datasource/SimplePaginator.php create mode 100755 vendor/cakephp/datasource/composer.json create mode 100755 vendor/cakephp/utility/CookieCryptTrait.php create mode 100755 vendor/cakephp/utility/Crypto/OpenSsl.php create mode 100755 vendor/cakephp/utility/Exception/XmlException.php create mode 100755 vendor/cakephp/utility/Hash.php create mode 100755 vendor/cakephp/utility/Inflector.php create mode 100755 vendor/cakephp/utility/LICENSE.txt create mode 100755 vendor/cakephp/utility/MergeVariablesTrait.php create mode 100755 vendor/cakephp/utility/README.md create mode 100755 vendor/cakephp/utility/Security.php create mode 100755 vendor/cakephp/utility/Text.php create mode 100755 vendor/cakephp/utility/Xml.php create mode 100755 vendor/cakephp/utility/bootstrap.php create mode 100755 vendor/cakephp/utility/composer.json create mode 100755 vendor/carbonphp/carbon-doctrine-types/LICENSE create mode 100755 vendor/carbonphp/carbon-doctrine-types/README.md create mode 100755 vendor/carbonphp/carbon-doctrine-types/composer.json create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonImmutableType.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonType.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonTypeConverter.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeImmutableType.php create mode 100755 vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php create mode 100755 vendor/composer/ClassLoader.php create mode 100755 vendor/composer/InstalledVersions.php create mode 100755 vendor/composer/LICENSE create mode 100755 vendor/composer/autoload_classmap.php create mode 100755 vendor/composer/autoload_files.php create mode 100755 vendor/composer/autoload_namespaces.php create mode 100755 vendor/composer/autoload_psr4.php create mode 100755 vendor/composer/autoload_real.php create mode 100755 vendor/composer/autoload_static.php create mode 100755 vendor/composer/installed.json create mode 100755 vendor/composer/installed.php create mode 100755 vendor/composer/platform_check.php create mode 100755 vendor/defuse/php-encryption/LICENSE create mode 100755 vendor/defuse/php-encryption/README.md create mode 100755 vendor/defuse/php-encryption/bin/generate-defuse-key create mode 100755 vendor/defuse/php-encryption/composer.json create mode 100755 vendor/defuse/php-encryption/dist/Makefile create mode 100755 vendor/defuse/php-encryption/dist/box.json create mode 100755 vendor/defuse/php-encryption/dist/phar-testing-autoload.php create mode 100755 vendor/defuse/php-encryption/dist/signingkey-new.asc create mode 100755 vendor/defuse/php-encryption/dist/signingkey-new.asc.sig create mode 100755 vendor/defuse/php-encryption/dist/signingkey.asc create mode 100755 vendor/defuse/php-encryption/docs/CryptoDetails.md create mode 100755 vendor/defuse/php-encryption/docs/FAQ.md create mode 100755 vendor/defuse/php-encryption/docs/InstallingAndVerifying.md create mode 100755 vendor/defuse/php-encryption/docs/InternalDeveloperDocs.md create mode 100755 vendor/defuse/php-encryption/docs/Tutorial.md create mode 100755 vendor/defuse/php-encryption/docs/UpgradingFromV1.2.md create mode 100755 vendor/defuse/php-encryption/docs/classes/Crypto.md create mode 100755 vendor/defuse/php-encryption/docs/classes/File.md create mode 100755 vendor/defuse/php-encryption/docs/classes/Key.md create mode 100755 vendor/defuse/php-encryption/docs/classes/KeyProtectedByPassword.md create mode 100755 vendor/defuse/php-encryption/src/Core.php create mode 100755 vendor/defuse/php-encryption/src/Crypto.php create mode 100755 vendor/defuse/php-encryption/src/DerivedKeys.php create mode 100755 vendor/defuse/php-encryption/src/Encoding.php create mode 100755 vendor/defuse/php-encryption/src/Exception/BadFormatException.php create mode 100755 vendor/defuse/php-encryption/src/Exception/CryptoException.php create mode 100755 vendor/defuse/php-encryption/src/Exception/EnvironmentIsBrokenException.php create mode 100755 vendor/defuse/php-encryption/src/Exception/IOException.php create mode 100755 vendor/defuse/php-encryption/src/Exception/WrongKeyOrModifiedCiphertextException.php create mode 100755 vendor/defuse/php-encryption/src/File.php create mode 100755 vendor/defuse/php-encryption/src/Key.php create mode 100755 vendor/defuse/php-encryption/src/KeyOrPassword.php create mode 100755 vendor/defuse/php-encryption/src/KeyProtectedByPassword.php create mode 100755 vendor/defuse/php-encryption/src/RuntimeTests.php create mode 100755 vendor/delight-im/auth/.editorconfig create mode 100755 vendor/delight-im/auth/.gitignore create mode 100755 vendor/delight-im/auth/Database/MySQL.sql create mode 100755 vendor/delight-im/auth/Database/PostgreSQL.sql create mode 100755 vendor/delight-im/auth/Database/SQLite.sql create mode 100755 vendor/delight-im/auth/LICENSE create mode 100755 vendor/delight-im/auth/Migration.md create mode 100755 vendor/delight-im/auth/README.md create mode 100755 vendor/delight-im/auth/composer.json create mode 100755 vendor/delight-im/auth/composer.lock create mode 100755 vendor/delight-im/auth/src/Administration.php create mode 100755 vendor/delight-im/auth/src/AmbiguousUsernameException.php create mode 100755 vendor/delight-im/auth/src/AttemptCancelledException.php create mode 100755 vendor/delight-im/auth/src/Auth.php create mode 100755 vendor/delight-im/auth/src/AuthError.php create mode 100755 vendor/delight-im/auth/src/AuthException.php create mode 100755 vendor/delight-im/auth/src/ConfirmationRequestNotFound.php create mode 100755 vendor/delight-im/auth/src/DatabaseError.php create mode 100755 vendor/delight-im/auth/src/DuplicateUsernameException.php create mode 100755 vendor/delight-im/auth/src/EmailNotVerifiedException.php create mode 100755 vendor/delight-im/auth/src/EmailOrUsernameRequiredError.php create mode 100755 vendor/delight-im/auth/src/HeadersAlreadySentError.php create mode 100755 vendor/delight-im/auth/src/InvalidEmailException.php create mode 100755 vendor/delight-im/auth/src/InvalidPasswordException.php create mode 100755 vendor/delight-im/auth/src/InvalidSelectorTokenPairException.php create mode 100755 vendor/delight-im/auth/src/MissingCallbackError.php create mode 100755 vendor/delight-im/auth/src/NotLoggedInException.php create mode 100755 vendor/delight-im/auth/src/ResetDisabledException.php create mode 100755 vendor/delight-im/auth/src/Role.php create mode 100755 vendor/delight-im/auth/src/Status.php create mode 100755 vendor/delight-im/auth/src/TokenExpiredException.php create mode 100755 vendor/delight-im/auth/src/TooManyRequestsException.php create mode 100755 vendor/delight-im/auth/src/UnknownIdException.php create mode 100755 vendor/delight-im/auth/src/UnknownUsernameException.php create mode 100755 vendor/delight-im/auth/src/UserAlreadyExistsException.php create mode 100755 vendor/delight-im/auth/src/UserManager.php create mode 100755 vendor/delight-im/auth/tests/index.php create mode 100755 vendor/delight-im/base64/.editorconfig create mode 100755 vendor/delight-im/base64/.gitignore create mode 100755 vendor/delight-im/base64/LICENSE create mode 100755 vendor/delight-im/base64/README.md create mode 100755 vendor/delight-im/base64/composer.json create mode 100755 vendor/delight-im/base64/composer.lock create mode 100755 vendor/delight-im/base64/src/Base64.php create mode 100755 vendor/delight-im/base64/src/Throwable/DecodingError.php create mode 100755 vendor/delight-im/base64/src/Throwable/EncodingError.php create mode 100755 vendor/delight-im/base64/src/Throwable/Error.php create mode 100755 vendor/delight-im/base64/src/Throwable/Exception.php create mode 100755 vendor/delight-im/base64/tests/index.php create mode 100755 vendor/delight-im/cookie/.editorconfig create mode 100755 vendor/delight-im/cookie/.gitignore create mode 100755 vendor/delight-im/cookie/.travis-ci-apache create mode 100755 vendor/delight-im/cookie/.travis.yml create mode 100755 vendor/delight-im/cookie/LICENSE create mode 100755 vendor/delight-im/cookie/Migration.md create mode 100755 vendor/delight-im/cookie/README.md create mode 100755 vendor/delight-im/cookie/composer.json create mode 100755 vendor/delight-im/cookie/composer.lock create mode 100755 vendor/delight-im/cookie/src/Cookie.php create mode 100755 vendor/delight-im/cookie/src/Session.php create mode 100755 vendor/delight-im/cookie/tests/index.php create mode 100755 vendor/delight-im/db/.editorconfig create mode 100755 vendor/delight-im/db/.gitignore create mode 100755 vendor/delight-im/db/LICENSE create mode 100755 vendor/delight-im/db/README.md create mode 100755 vendor/delight-im/db/composer.json create mode 100755 vendor/delight-im/db/composer.lock create mode 100755 vendor/delight-im/db/src/DataSource.php create mode 100755 vendor/delight-im/db/src/Database.php create mode 100755 vendor/delight-im/db/src/Dsn.php create mode 100755 vendor/delight-im/db/src/ErrorHandler.php create mode 100755 vendor/delight-im/db/src/Measurement.php create mode 100755 vendor/delight-im/db/src/PdoDataSource.php create mode 100755 vendor/delight-im/db/src/PdoDatabase.php create mode 100755 vendor/delight-im/db/src/PdoDsn.php create mode 100755 vendor/delight-im/db/src/Profiler.php create mode 100755 vendor/delight-im/db/src/SimpleMeasurement.php create mode 100755 vendor/delight-im/db/src/SimpleProfiler.php create mode 100755 vendor/delight-im/db/src/Throwable/BeginTransactionFailureException.php create mode 100755 vendor/delight-im/db/src/Throwable/CommitTransactionFailureException.php create mode 100755 vendor/delight-im/db/src/Throwable/DatabaseNotFoundError.php create mode 100755 vendor/delight-im/db/src/Throwable/EmptyValueListError.php create mode 100755 vendor/delight-im/db/src/Throwable/EmptyWhereClauseError.php create mode 100755 vendor/delight-im/db/src/Throwable/Error.php create mode 100755 vendor/delight-im/db/src/Throwable/Exception.php create mode 100755 vendor/delight-im/db/src/Throwable/IntegrityConstraintViolationException.php create mode 100755 vendor/delight-im/db/src/Throwable/NoDatabaseSelectedError.php create mode 100755 vendor/delight-im/db/src/Throwable/RollBackTransactionFailureException.php create mode 100755 vendor/delight-im/db/src/Throwable/SyntaxError.php create mode 100755 vendor/delight-im/db/src/Throwable/TableNotFoundError.php create mode 100755 vendor/delight-im/db/src/Throwable/TransactionFailureException.php create mode 100755 vendor/delight-im/db/src/Throwable/UnknownColumnError.php create mode 100755 vendor/delight-im/db/src/Throwable/WrongCredentialsError.php create mode 100755 vendor/delight-im/db/tests/index.php create mode 100755 vendor/delight-im/http/.editorconfig create mode 100755 vendor/delight-im/http/.gitignore create mode 100755 vendor/delight-im/http/LICENSE create mode 100755 vendor/delight-im/http/Migration.md create mode 100755 vendor/delight-im/http/README.md create mode 100755 vendor/delight-im/http/composer.json create mode 100755 vendor/delight-im/http/composer.lock create mode 100755 vendor/delight-im/http/src/ResponseHeader.php create mode 100755 vendor/delight-im/http/tests/index.php create mode 100755 vendor/doctrine/inflector/LICENSE create mode 100755 vendor/doctrine/inflector/README.md create mode 100755 vendor/doctrine/inflector/composer.json create mode 100755 vendor/doctrine/inflector/docs/en/index.rst create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Language.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php create mode 100755 vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php create mode 100755 vendor/doctrine/lexer/LICENSE create mode 100755 vendor/doctrine/lexer/README.md create mode 100755 vendor/doctrine/lexer/UPGRADE.md create mode 100755 vendor/doctrine/lexer/composer.json create mode 100755 vendor/doctrine/lexer/src/AbstractLexer.php create mode 100755 vendor/doctrine/lexer/src/Token.php create mode 100755 vendor/eftec/bladeone/LICENSE create mode 100755 vendor/eftec/bladeone/composer.json create mode 100755 vendor/eftec/bladeone/lib/BladeOne.php create mode 100755 vendor/eftec/bladeone/lib/BladeOneCache.php create mode 100755 vendor/eftec/bladeone/lib/BladeOneCacheRedis.php create mode 100755 vendor/eftec/bladeone/lib/BladeOneCustom.php create mode 100755 vendor/eftec/bladeone/lib/bladeonecli create mode 100755 vendor/eftec/bladeonehtml/LICENSE create mode 100755 vendor/eftec/bladeonehtml/README.md create mode 100755 vendor/eftec/bladeonehtml/composer.json create mode 100755 vendor/eftec/bladeonehtml/lib/BladeOneHtml.php create mode 100755 vendor/eftec/bladeonehtml/test/bootstrap.php create mode 100755 vendor/eftec/bladeonehtml/test/clientTest.php create mode 100755 vendor/eftec/messagecontainer/LICENSE create mode 100755 vendor/eftec/messagecontainer/README.md create mode 100755 vendor/eftec/messagecontainer/composer.json create mode 100755 vendor/eftec/messagecontainer/lib/MessageContainer.php create mode 100755 vendor/eftec/messagecontainer/lib/MessageLocker.php create mode 100755 vendor/egulias/email-validator/CONTRIBUTING.md create mode 100755 vendor/egulias/email-validator/LICENSE create mode 100755 vendor/egulias/email-validator/composer.json create mode 100755 vendor/egulias/email-validator/src/EmailLexer.php create mode 100755 vendor/egulias/email-validator/src/EmailParser.php create mode 100755 vendor/egulias/email-validator/src/EmailValidator.php create mode 100755 vendor/egulias/email-validator/src/MessageIDParser.php create mode 100755 vendor/egulias/email-validator/src/Parser.php create mode 100755 vendor/egulias/email-validator/src/Parser/Comment.php create mode 100755 vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php create mode 100755 vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php create mode 100755 vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php create mode 100755 vendor/egulias/email-validator/src/Parser/DomainLiteral.php create mode 100755 vendor/egulias/email-validator/src/Parser/DomainPart.php create mode 100755 vendor/egulias/email-validator/src/Parser/DoubleQuote.php create mode 100755 vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php create mode 100755 vendor/egulias/email-validator/src/Parser/IDLeftPart.php create mode 100755 vendor/egulias/email-validator/src/Parser/IDRightPart.php create mode 100755 vendor/egulias/email-validator/src/Parser/LocalPart.php create mode 100755 vendor/egulias/email-validator/src/Parser/PartParser.php create mode 100755 vendor/egulias/email-validator/src/Result/InvalidEmail.php create mode 100755 vendor/egulias/email-validator/src/Result/MultipleErrors.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CRNoLF.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ConsecutiveAt.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ConsecutiveDot.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DomainHyphened.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DomainTooLong.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DotAtEnd.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/DotAtStart.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/EmptyReason.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ExpectingDTEXT.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/LabelTooLong.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/NoDomainPart.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/NoLocalPart.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/RFCWarnings.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/Reason.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/SpoofEmail.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/UnableToGetDNSRecord.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/UnclosedComment.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/UnclosedQuotedString.php create mode 100755 vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php create mode 100755 vendor/egulias/email-validator/src/Result/Result.php create mode 100755 vendor/egulias/email-validator/src/Result/SpoofEmail.php create mode 100755 vendor/egulias/email-validator/src/Result/ValidEmail.php create mode 100755 vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php create mode 100755 vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php create mode 100755 vendor/egulias/email-validator/src/Validation/DNSRecords.php create mode 100755 vendor/egulias/email-validator/src/Validation/EmailValidation.php create mode 100755 vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php create mode 100755 vendor/egulias/email-validator/src/Validation/Extra/SpoofCheckValidation.php create mode 100755 vendor/egulias/email-validator/src/Validation/MessageIDValidation.php create mode 100755 vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php create mode 100755 vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php create mode 100755 vendor/egulias/email-validator/src/Validation/RFCValidation.php create mode 100755 vendor/egulias/email-validator/src/Warning/AddressLiteral.php create mode 100755 vendor/egulias/email-validator/src/Warning/CFWSNearAt.php create mode 100755 vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php create mode 100755 vendor/egulias/email-validator/src/Warning/Comment.php create mode 100755 vendor/egulias/email-validator/src/Warning/DeprecatedComment.php create mode 100755 vendor/egulias/email-validator/src/Warning/DomainLiteral.php create mode 100755 vendor/egulias/email-validator/src/Warning/EmailTooLong.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6BadChar.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php create mode 100755 vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php create mode 100755 vendor/egulias/email-validator/src/Warning/LocalTooLong.php create mode 100755 vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php create mode 100755 vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php create mode 100755 vendor/egulias/email-validator/src/Warning/QuotedPart.php create mode 100755 vendor/egulias/email-validator/src/Warning/QuotedString.php create mode 100755 vendor/egulias/email-validator/src/Warning/TLD.php create mode 100755 vendor/egulias/email-validator/src/Warning/Warning.php create mode 100755 vendor/fakerphp/faker/CHANGELOG.md create mode 100755 vendor/fakerphp/faker/LICENSE create mode 100755 vendor/fakerphp/faker/README.md create mode 100755 vendor/fakerphp/faker/composer.json create mode 100755 vendor/fakerphp/faker/rector-migrate.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/Ean.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/Iban.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/Inn.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/Isbn.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/Luhn.php create mode 100755 vendor/fakerphp/faker/src/Faker/Calculator/TCNo.php create mode 100755 vendor/fakerphp/faker/src/Faker/ChanceGenerator.php create mode 100755 vendor/fakerphp/faker/src/Faker/Container/Container.php create mode 100755 vendor/fakerphp/faker/src/Faker/Container/ContainerBuilder.php create mode 100755 vendor/fakerphp/faker/src/Faker/Container/ContainerException.php create mode 100755 vendor/fakerphp/faker/src/Faker/Container/ContainerInterface.php create mode 100755 vendor/fakerphp/faker/src/Faker/Container/NotInContainerException.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Barcode.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Blood.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Coordinates.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/File.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Number.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Uuid.php create mode 100755 vendor/fakerphp/faker/src/Faker/Core/Version.php create mode 100755 vendor/fakerphp/faker/src/Faker/DefaultGenerator.php create mode 100755 vendor/fakerphp/faker/src/Faker/Documentor.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/AddressExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/BarcodeExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/BloodExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/ColorExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/CompanyExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/CountryExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/DateTimeExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/Extension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/ExtensionNotFound.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/FileExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/GeneratorAwareExtensionTrait.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/Helper.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/NumberExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/PersonExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/PhoneNumberExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/UuidExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Extension/VersionExtension.php create mode 100755 vendor/fakerphp/faker/src/Faker/Factory.php create mode 100755 vendor/fakerphp/faker/src/Faker/Generator.php create mode 100755 vendor/fakerphp/faker/src/Faker/Guesser/Name.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/CakePHP/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/CakePHP/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/CakePHP/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Doctrine/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Doctrine/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Doctrine/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Doctrine/backward-compatibility.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Mandango/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Mandango/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Mandango/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel2/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel2/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Propel2/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Spot/ColumnTypeGuesser.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Spot/EntityPopulator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ORM/Spot/Populator.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Barcode.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Base.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Biased.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/File.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/HtmlLorem.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Image.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Lorem.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Medical.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Miscellaneous.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/UserAgent.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/Uuid.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_EG/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_JO/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ar_SA/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/at_AT/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bg_BG/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bg_BG/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bn_BD/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/bn_BD/Utils.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/cs_CZ/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/da_DK/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_AT/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_CH/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/de_DE/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_CY/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/el_GR/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_AU/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_AU/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_AU/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_CA/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_CA/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_GB/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_HK/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_HK/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_HK/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_IN/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_IN/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_IN/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_IN/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NG/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NG/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NG/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NG/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NZ/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NZ/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_NZ/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_PH/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_PH/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_SG/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_SG/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_SG/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_UG/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_UG/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_UG/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_UG/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_US/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_ZA/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/en_ZA/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_AR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_AR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_AR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_AR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_ES/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_PE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_PE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_PE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_PE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_VE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_VE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_VE/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_VE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/es_VE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/et_EE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fa_IR/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fi_FI/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_BE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CA/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_CH/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/fr_FR/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/he_IL/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/he_IL/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/he_IL/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/he_IL/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/he_IL/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hr_HR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hr_HR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hu_HU/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/hy_AM/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/id_ID/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/is_IS/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_CH/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/it_IT/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ja_JP/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ka_GE/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/kk_KZ/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ko_KR/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lt_LT/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/lv_LV/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/me_ME/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/me_ME/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/me_ME/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/me_ME/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/me_ME/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/mn_MN/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/mn_MN/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Miscellaneous.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ms_MY/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nb_NO/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nb_NO/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ne_NP/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ne_NP/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_BE/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/nl_NL/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/LicensePlate.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pl_PL/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_BR/check_digit.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/pt_PT/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_MD/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_MD/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_RO/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ro_RO/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/ru_RU/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sk_SK/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sl_SI/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Cyrl_RS/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_Latn_RS/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sr_RS/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Municipality.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/sv_SE/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/th_TH/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/tr_TR/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/uk_UA/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/vi_VN/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/vi_VN/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_CN/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Address.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Color.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Company.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/DateTime.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Internet.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Payment.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Person.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/PhoneNumber.php create mode 100755 vendor/fakerphp/faker/src/Faker/Provider/zh_TW/Text.php create mode 100755 vendor/fakerphp/faker/src/Faker/UniqueGenerator.php create mode 100755 vendor/fakerphp/faker/src/Faker/ValidGenerator.php create mode 100755 vendor/fakerphp/faker/src/autoload.php create mode 100755 vendor/google/recaptcha/LICENSE create mode 100755 vendor/google/recaptcha/README.md create mode 100755 vendor/google/recaptcha/app.yaml create mode 100755 vendor/google/recaptcha/composer.json create mode 100755 vendor/google/recaptcha/src/ReCaptcha/ReCaptcha.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Socket.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestMethod/SocketPost.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/RequestParameters.php create mode 100755 vendor/google/recaptcha/src/ReCaptcha/Response.php create mode 100755 vendor/google/recaptcha/src/autoload.php create mode 100755 vendor/guzzlehttp/guzzle/CHANGELOG.md create mode 100755 vendor/guzzlehttp/guzzle/LICENSE create mode 100755 vendor/guzzlehttp/guzzle/README.md create mode 100755 vendor/guzzlehttp/guzzle/UPGRADING.md create mode 100755 vendor/guzzlehttp/guzzle/composer.json create mode 100755 vendor/guzzlehttp/guzzle/src/BodySummarizer.php create mode 100755 vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php create mode 100755 vendor/guzzlehttp/guzzle/src/Client.php create mode 100755 vendor/guzzlehttp/guzzle/src/ClientInterface.php create mode 100755 vendor/guzzlehttp/guzzle/src/ClientTrait.php create mode 100755 vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100755 vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100755 vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100755 vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100755 vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100755 vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100755 vendor/guzzlehttp/guzzle/src/HandlerStack.php create mode 100755 vendor/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100755 vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php create mode 100755 vendor/guzzlehttp/guzzle/src/Middleware.php create mode 100755 vendor/guzzlehttp/guzzle/src/Pool.php create mode 100755 vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100755 vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100755 vendor/guzzlehttp/guzzle/src/RequestOptions.php create mode 100755 vendor/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100755 vendor/guzzlehttp/guzzle/src/TransferStats.php create mode 100755 vendor/guzzlehttp/guzzle/src/Utils.php create mode 100755 vendor/guzzlehttp/guzzle/src/functions.php create mode 100755 vendor/guzzlehttp/guzzle/src/functions_include.php create mode 100755 vendor/guzzlehttp/promises/CHANGELOG.md create mode 100755 vendor/guzzlehttp/promises/LICENSE create mode 100755 vendor/guzzlehttp/promises/README.md create mode 100755 vendor/guzzlehttp/promises/composer.json create mode 100755 vendor/guzzlehttp/promises/src/AggregateException.php create mode 100755 vendor/guzzlehttp/promises/src/CancellationException.php create mode 100755 vendor/guzzlehttp/promises/src/Coroutine.php create mode 100755 vendor/guzzlehttp/promises/src/Create.php create mode 100755 vendor/guzzlehttp/promises/src/Each.php create mode 100755 vendor/guzzlehttp/promises/src/EachPromise.php create mode 100755 vendor/guzzlehttp/promises/src/FulfilledPromise.php create mode 100755 vendor/guzzlehttp/promises/src/Is.php create mode 100755 vendor/guzzlehttp/promises/src/Promise.php create mode 100755 vendor/guzzlehttp/promises/src/PromiseInterface.php create mode 100755 vendor/guzzlehttp/promises/src/PromisorInterface.php create mode 100755 vendor/guzzlehttp/promises/src/RejectedPromise.php create mode 100755 vendor/guzzlehttp/promises/src/RejectionException.php create mode 100755 vendor/guzzlehttp/promises/src/TaskQueue.php create mode 100755 vendor/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100755 vendor/guzzlehttp/promises/src/Utils.php create mode 100755 vendor/guzzlehttp/psr7/CHANGELOG.md create mode 100755 vendor/guzzlehttp/psr7/LICENSE create mode 100755 vendor/guzzlehttp/psr7/README.md create mode 100755 vendor/guzzlehttp/psr7/composer.json create mode 100755 vendor/guzzlehttp/psr7/src/AppendStream.php create mode 100755 vendor/guzzlehttp/psr7/src/BufferStream.php create mode 100755 vendor/guzzlehttp/psr7/src/CachingStream.php create mode 100755 vendor/guzzlehttp/psr7/src/DroppingStream.php create mode 100755 vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php create mode 100755 vendor/guzzlehttp/psr7/src/FnStream.php create mode 100755 vendor/guzzlehttp/psr7/src/Header.php create mode 100755 vendor/guzzlehttp/psr7/src/HttpFactory.php create mode 100755 vendor/guzzlehttp/psr7/src/InflateStream.php create mode 100755 vendor/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100755 vendor/guzzlehttp/psr7/src/LimitStream.php create mode 100755 vendor/guzzlehttp/psr7/src/Message.php create mode 100755 vendor/guzzlehttp/psr7/src/MessageTrait.php create mode 100755 vendor/guzzlehttp/psr7/src/MimeType.php create mode 100755 vendor/guzzlehttp/psr7/src/MultipartStream.php create mode 100755 vendor/guzzlehttp/psr7/src/NoSeekStream.php create mode 100755 vendor/guzzlehttp/psr7/src/PumpStream.php create mode 100755 vendor/guzzlehttp/psr7/src/Query.php create mode 100755 vendor/guzzlehttp/psr7/src/Request.php create mode 100755 vendor/guzzlehttp/psr7/src/Response.php create mode 100755 vendor/guzzlehttp/psr7/src/Rfc7230.php create mode 100755 vendor/guzzlehttp/psr7/src/ServerRequest.php create mode 100755 vendor/guzzlehttp/psr7/src/Stream.php create mode 100755 vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100755 vendor/guzzlehttp/psr7/src/StreamWrapper.php create mode 100755 vendor/guzzlehttp/psr7/src/UploadedFile.php create mode 100755 vendor/guzzlehttp/psr7/src/Uri.php create mode 100755 vendor/guzzlehttp/psr7/src/UriComparator.php create mode 100755 vendor/guzzlehttp/psr7/src/UriNormalizer.php create mode 100755 vendor/guzzlehttp/psr7/src/UriResolver.php create mode 100755 vendor/guzzlehttp/psr7/src/Utils.php create mode 100755 vendor/illuminate/collections/Arr.php create mode 100755 vendor/illuminate/collections/Collection.php create mode 100755 vendor/illuminate/collections/Enumerable.php create mode 100755 vendor/illuminate/collections/HigherOrderCollectionProxy.php create mode 100755 vendor/illuminate/collections/HigherOrderWhenProxy.php create mode 100755 vendor/illuminate/collections/ItemNotFoundException.php create mode 100755 vendor/illuminate/collections/LICENSE.md create mode 100755 vendor/illuminate/collections/LazyCollection.php create mode 100755 vendor/illuminate/collections/MultipleItemsFoundException.php create mode 100755 vendor/illuminate/collections/Traits/EnumeratesValues.php create mode 100755 vendor/illuminate/collections/composer.json create mode 100755 vendor/illuminate/collections/helpers.php create mode 100755 vendor/illuminate/container/BoundMethod.php create mode 100755 vendor/illuminate/container/Container.php create mode 100755 vendor/illuminate/container/ContextualBindingBuilder.php create mode 100755 vendor/illuminate/container/EntryNotFoundException.php create mode 100755 vendor/illuminate/container/LICENSE.md create mode 100755 vendor/illuminate/container/RewindableGenerator.php create mode 100755 vendor/illuminate/container/Util.php create mode 100755 vendor/illuminate/container/composer.json create mode 100755 vendor/illuminate/contracts/Auth/Access/Authorizable.php create mode 100755 vendor/illuminate/contracts/Auth/Access/Gate.php create mode 100755 vendor/illuminate/contracts/Auth/Authenticatable.php create mode 100755 vendor/illuminate/contracts/Auth/CanResetPassword.php create mode 100755 vendor/illuminate/contracts/Auth/Factory.php create mode 100755 vendor/illuminate/contracts/Auth/Guard.php create mode 100755 vendor/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php create mode 100755 vendor/illuminate/contracts/Auth/MustVerifyEmail.php create mode 100755 vendor/illuminate/contracts/Auth/PasswordBroker.php create mode 100755 vendor/illuminate/contracts/Auth/PasswordBrokerFactory.php create mode 100755 vendor/illuminate/contracts/Auth/StatefulGuard.php create mode 100755 vendor/illuminate/contracts/Auth/SupportsBasicAuth.php create mode 100755 vendor/illuminate/contracts/Auth/UserProvider.php create mode 100755 vendor/illuminate/contracts/Broadcasting/Broadcaster.php create mode 100755 vendor/illuminate/contracts/Broadcasting/Factory.php create mode 100755 vendor/illuminate/contracts/Broadcasting/HasBroadcastChannel.php create mode 100755 vendor/illuminate/contracts/Broadcasting/ShouldBroadcast.php create mode 100755 vendor/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php create mode 100755 vendor/illuminate/contracts/Bus/Dispatcher.php create mode 100755 vendor/illuminate/contracts/Bus/QueueingDispatcher.php create mode 100755 vendor/illuminate/contracts/Cache/Factory.php create mode 100755 vendor/illuminate/contracts/Cache/Lock.php create mode 100755 vendor/illuminate/contracts/Cache/LockProvider.php create mode 100755 vendor/illuminate/contracts/Cache/LockTimeoutException.php create mode 100755 vendor/illuminate/contracts/Cache/Repository.php create mode 100755 vendor/illuminate/contracts/Cache/Store.php create mode 100755 vendor/illuminate/contracts/Config/Repository.php create mode 100755 vendor/illuminate/contracts/Console/Application.php create mode 100755 vendor/illuminate/contracts/Console/Kernel.php create mode 100755 vendor/illuminate/contracts/Container/BindingResolutionException.php create mode 100755 vendor/illuminate/contracts/Container/CircularDependencyException.php create mode 100755 vendor/illuminate/contracts/Container/Container.php create mode 100755 vendor/illuminate/contracts/Container/ContextualBindingBuilder.php create mode 100755 vendor/illuminate/contracts/Cookie/Factory.php create mode 100755 vendor/illuminate/contracts/Cookie/QueueingFactory.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/Castable.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php create mode 100755 vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php create mode 100755 vendor/illuminate/contracts/Database/Events/MigrationEvent.php create mode 100755 vendor/illuminate/contracts/Database/ModelIdentifier.php create mode 100755 vendor/illuminate/contracts/Debug/ExceptionHandler.php create mode 100755 vendor/illuminate/contracts/Encryption/DecryptException.php create mode 100755 vendor/illuminate/contracts/Encryption/EncryptException.php create mode 100755 vendor/illuminate/contracts/Encryption/Encrypter.php create mode 100755 vendor/illuminate/contracts/Encryption/StringEncrypter.php create mode 100755 vendor/illuminate/contracts/Events/Dispatcher.php create mode 100755 vendor/illuminate/contracts/Filesystem/Cloud.php create mode 100755 vendor/illuminate/contracts/Filesystem/Factory.php create mode 100755 vendor/illuminate/contracts/Filesystem/FileExistsException.php create mode 100755 vendor/illuminate/contracts/Filesystem/FileNotFoundException.php create mode 100755 vendor/illuminate/contracts/Filesystem/Filesystem.php create mode 100755 vendor/illuminate/contracts/Filesystem/LockTimeoutException.php create mode 100755 vendor/illuminate/contracts/Foundation/Application.php create mode 100755 vendor/illuminate/contracts/Foundation/CachesConfiguration.php create mode 100755 vendor/illuminate/contracts/Foundation/CachesRoutes.php create mode 100755 vendor/illuminate/contracts/Hashing/Hasher.php create mode 100755 vendor/illuminate/contracts/Http/Kernel.php create mode 100755 vendor/illuminate/contracts/LICENSE.md create mode 100755 vendor/illuminate/contracts/Mail/Factory.php create mode 100755 vendor/illuminate/contracts/Mail/MailQueue.php create mode 100755 vendor/illuminate/contracts/Mail/Mailable.php create mode 100755 vendor/illuminate/contracts/Mail/Mailer.php create mode 100755 vendor/illuminate/contracts/Notifications/Dispatcher.php create mode 100755 vendor/illuminate/contracts/Notifications/Factory.php create mode 100755 vendor/illuminate/contracts/Pagination/CursorPaginator.php create mode 100755 vendor/illuminate/contracts/Pagination/LengthAwarePaginator.php create mode 100755 vendor/illuminate/contracts/Pagination/Paginator.php create mode 100755 vendor/illuminate/contracts/Pipeline/Hub.php create mode 100755 vendor/illuminate/contracts/Pipeline/Pipeline.php create mode 100755 vendor/illuminate/contracts/Queue/ClearableQueue.php create mode 100755 vendor/illuminate/contracts/Queue/EntityNotFoundException.php create mode 100755 vendor/illuminate/contracts/Queue/EntityResolver.php create mode 100755 vendor/illuminate/contracts/Queue/Factory.php create mode 100755 vendor/illuminate/contracts/Queue/Job.php create mode 100755 vendor/illuminate/contracts/Queue/Monitor.php create mode 100755 vendor/illuminate/contracts/Queue/Queue.php create mode 100755 vendor/illuminate/contracts/Queue/QueueableCollection.php create mode 100755 vendor/illuminate/contracts/Queue/QueueableEntity.php create mode 100755 vendor/illuminate/contracts/Queue/ShouldBeEncrypted.php create mode 100755 vendor/illuminate/contracts/Queue/ShouldBeUnique.php create mode 100755 vendor/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php create mode 100755 vendor/illuminate/contracts/Queue/ShouldQueue.php create mode 100755 vendor/illuminate/contracts/Redis/Connection.php create mode 100755 vendor/illuminate/contracts/Redis/Connector.php create mode 100755 vendor/illuminate/contracts/Redis/Factory.php create mode 100755 vendor/illuminate/contracts/Redis/LimiterTimeoutException.php create mode 100755 vendor/illuminate/contracts/Routing/BindingRegistrar.php create mode 100755 vendor/illuminate/contracts/Routing/Registrar.php create mode 100755 vendor/illuminate/contracts/Routing/ResponseFactory.php create mode 100755 vendor/illuminate/contracts/Routing/UrlGenerator.php create mode 100755 vendor/illuminate/contracts/Routing/UrlRoutable.php create mode 100755 vendor/illuminate/contracts/Session/Session.php create mode 100755 vendor/illuminate/contracts/Support/Arrayable.php create mode 100755 vendor/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php create mode 100755 vendor/illuminate/contracts/Support/DeferrableProvider.php create mode 100755 vendor/illuminate/contracts/Support/DeferringDisplayableValue.php create mode 100755 vendor/illuminate/contracts/Support/Htmlable.php create mode 100755 vendor/illuminate/contracts/Support/Jsonable.php create mode 100755 vendor/illuminate/contracts/Support/MessageBag.php create mode 100755 vendor/illuminate/contracts/Support/MessageProvider.php create mode 100755 vendor/illuminate/contracts/Support/Renderable.php create mode 100755 vendor/illuminate/contracts/Support/Responsable.php create mode 100755 vendor/illuminate/contracts/Support/ValidatedData.php create mode 100755 vendor/illuminate/contracts/Translation/HasLocalePreference.php create mode 100755 vendor/illuminate/contracts/Translation/Loader.php create mode 100755 vendor/illuminate/contracts/Translation/Translator.php create mode 100755 vendor/illuminate/contracts/Validation/DataAwareRule.php create mode 100755 vendor/illuminate/contracts/Validation/Factory.php create mode 100755 vendor/illuminate/contracts/Validation/ImplicitRule.php create mode 100755 vendor/illuminate/contracts/Validation/Rule.php create mode 100755 vendor/illuminate/contracts/Validation/UncompromisedVerifier.php create mode 100755 vendor/illuminate/contracts/Validation/ValidatesWhenResolved.php create mode 100755 vendor/illuminate/contracts/Validation/Validator.php create mode 100755 vendor/illuminate/contracts/Validation/ValidatorAwareRule.php create mode 100755 vendor/illuminate/contracts/View/Engine.php create mode 100755 vendor/illuminate/contracts/View/Factory.php create mode 100755 vendor/illuminate/contracts/View/View.php create mode 100755 vendor/illuminate/contracts/composer.json create mode 100755 vendor/illuminate/database/Capsule/Manager.php create mode 100755 vendor/illuminate/database/ClassMorphViolationException.php create mode 100755 vendor/illuminate/database/Concerns/BuildsQueries.php create mode 100755 vendor/illuminate/database/Concerns/ExplainsQueries.php create mode 100755 vendor/illuminate/database/Concerns/ManagesTransactions.php create mode 100755 vendor/illuminate/database/ConfigurationUrlParser.php create mode 100755 vendor/illuminate/database/Connection.php create mode 100755 vendor/illuminate/database/ConnectionInterface.php create mode 100755 vendor/illuminate/database/ConnectionResolver.php create mode 100755 vendor/illuminate/database/ConnectionResolverInterface.php create mode 100755 vendor/illuminate/database/Connectors/ConnectionFactory.php create mode 100755 vendor/illuminate/database/Connectors/Connector.php create mode 100755 vendor/illuminate/database/Connectors/ConnectorInterface.php create mode 100755 vendor/illuminate/database/Connectors/MySqlConnector.php create mode 100755 vendor/illuminate/database/Connectors/PostgresConnector.php create mode 100755 vendor/illuminate/database/Connectors/SQLiteConnector.php create mode 100755 vendor/illuminate/database/Connectors/SqlServerConnector.php create mode 100755 vendor/illuminate/database/Console/DbCommand.php create mode 100755 vendor/illuminate/database/Console/DumpCommand.php create mode 100755 vendor/illuminate/database/Console/Factories/FactoryMakeCommand.php create mode 100755 vendor/illuminate/database/Console/Factories/stubs/factory.stub create mode 100755 vendor/illuminate/database/Console/Migrations/BaseCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/FreshCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/InstallCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/MigrateCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/MigrateMakeCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/RefreshCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/ResetCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/RollbackCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/StatusCommand.php create mode 100755 vendor/illuminate/database/Console/Migrations/TableGuesser.php create mode 100755 vendor/illuminate/database/Console/PruneCommand.php create mode 100755 vendor/illuminate/database/Console/Seeds/SeedCommand.php create mode 100755 vendor/illuminate/database/Console/Seeds/SeederMakeCommand.php create mode 100755 vendor/illuminate/database/Console/Seeds/stubs/seeder.stub create mode 100755 vendor/illuminate/database/Console/WipeCommand.php create mode 100755 vendor/illuminate/database/DBAL/TimestampType.php create mode 100755 vendor/illuminate/database/DatabaseManager.php create mode 100755 vendor/illuminate/database/DatabaseServiceProvider.php create mode 100755 vendor/illuminate/database/DatabaseTransactionRecord.php create mode 100755 vendor/illuminate/database/DatabaseTransactionsManager.php create mode 100755 vendor/illuminate/database/DetectsConcurrencyErrors.php create mode 100755 vendor/illuminate/database/DetectsLostConnections.php create mode 100755 vendor/illuminate/database/Eloquent/BroadcastableModelEventOccurred.php create mode 100755 vendor/illuminate/database/Eloquent/BroadcastsEvents.php create mode 100755 vendor/illuminate/database/Eloquent/Builder.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/ArrayObject.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/AsArrayObject.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/AsCollection.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/AsEncryptedArrayObject.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/AsEncryptedCollection.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/AsStringable.php create mode 100755 vendor/illuminate/database/Eloquent/Casts/Attribute.php create mode 100755 vendor/illuminate/database/Eloquent/Collection.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HasEvents.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HasGlobalScopes.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HasRelationships.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HasTimestamps.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/HidesAttributes.php create mode 100755 vendor/illuminate/database/Eloquent/Concerns/QueriesRelationships.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/BelongsToManyRelationship.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/BelongsToRelationship.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/CrossJoinSequence.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/Factory.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/HasFactory.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/Relationship.php create mode 100755 vendor/illuminate/database/Eloquent/Factories/Sequence.php create mode 100755 vendor/illuminate/database/Eloquent/HigherOrderBuilderProxy.php create mode 100755 vendor/illuminate/database/Eloquent/InvalidCastException.php create mode 100755 vendor/illuminate/database/Eloquent/JsonEncodingException.php create mode 100755 vendor/illuminate/database/Eloquent/MassAssignmentException.php create mode 100755 vendor/illuminate/database/Eloquent/MassPrunable.php create mode 100755 vendor/illuminate/database/Eloquent/Model.php create mode 100755 vendor/illuminate/database/Eloquent/ModelNotFoundException.php create mode 100755 vendor/illuminate/database/Eloquent/Prunable.php create mode 100755 vendor/illuminate/database/Eloquent/QueueEntityResolver.php create mode 100755 vendor/illuminate/database/Eloquent/RelationNotFoundException.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/BelongsTo.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/AsPivot.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/CanBeOneOfMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/ComparesRelatedModels.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/InteractsWithDictionary.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Concerns/SupportsDefaultModels.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/HasMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/HasManyThrough.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/HasOne.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/HasOneOrMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/HasOneThrough.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphOne.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphOneOrMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphPivot.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphTo.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/MorphToMany.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Pivot.php create mode 100755 vendor/illuminate/database/Eloquent/Relations/Relation.php create mode 100755 vendor/illuminate/database/Eloquent/Scope.php create mode 100755 vendor/illuminate/database/Eloquent/SoftDeletes.php create mode 100755 vendor/illuminate/database/Eloquent/SoftDeletingScope.php create mode 100755 vendor/illuminate/database/Events/ConnectionEvent.php create mode 100755 vendor/illuminate/database/Events/DatabaseRefreshed.php create mode 100755 vendor/illuminate/database/Events/MigrationEnded.php create mode 100755 vendor/illuminate/database/Events/MigrationEvent.php create mode 100755 vendor/illuminate/database/Events/MigrationStarted.php create mode 100755 vendor/illuminate/database/Events/MigrationsEnded.php create mode 100755 vendor/illuminate/database/Events/MigrationsEvent.php create mode 100755 vendor/illuminate/database/Events/MigrationsStarted.php create mode 100755 vendor/illuminate/database/Events/ModelsPruned.php create mode 100755 vendor/illuminate/database/Events/NoPendingMigrations.php create mode 100755 vendor/illuminate/database/Events/QueryExecuted.php create mode 100755 vendor/illuminate/database/Events/SchemaDumped.php create mode 100755 vendor/illuminate/database/Events/SchemaLoaded.php create mode 100755 vendor/illuminate/database/Events/StatementPrepared.php create mode 100755 vendor/illuminate/database/Events/TransactionBeginning.php create mode 100755 vendor/illuminate/database/Events/TransactionCommitted.php create mode 100755 vendor/illuminate/database/Events/TransactionRolledBack.php create mode 100755 vendor/illuminate/database/Grammar.php create mode 100755 vendor/illuminate/database/LICENSE.md create mode 100755 vendor/illuminate/database/LazyLoadingViolationException.php create mode 100755 vendor/illuminate/database/MigrationServiceProvider.php create mode 100755 vendor/illuminate/database/Migrations/DatabaseMigrationRepository.php create mode 100755 vendor/illuminate/database/Migrations/Migration.php create mode 100755 vendor/illuminate/database/Migrations/MigrationCreator.php create mode 100755 vendor/illuminate/database/Migrations/MigrationRepositoryInterface.php create mode 100755 vendor/illuminate/database/Migrations/Migrator.php create mode 100755 vendor/illuminate/database/Migrations/stubs/migration.create.stub create mode 100755 vendor/illuminate/database/Migrations/stubs/migration.stub create mode 100755 vendor/illuminate/database/Migrations/stubs/migration.update.stub create mode 100755 vendor/illuminate/database/MultipleRecordsFoundException.php create mode 100755 vendor/illuminate/database/MySqlConnection.php create mode 100755 vendor/illuminate/database/PDO/Concerns/ConnectsToDatabase.php create mode 100755 vendor/illuminate/database/PDO/Connection.php create mode 100755 vendor/illuminate/database/PDO/MySqlDriver.php create mode 100755 vendor/illuminate/database/PDO/PostgresDriver.php create mode 100755 vendor/illuminate/database/PDO/SQLiteDriver.php create mode 100755 vendor/illuminate/database/PDO/SqlServerConnection.php create mode 100755 vendor/illuminate/database/PDO/SqlServerDriver.php create mode 100755 vendor/illuminate/database/PostgresConnection.php create mode 100755 vendor/illuminate/database/Query/Builder.php create mode 100755 vendor/illuminate/database/Query/Expression.php create mode 100755 vendor/illuminate/database/Query/Grammars/Grammar.php create mode 100755 vendor/illuminate/database/Query/Grammars/MySqlGrammar.php create mode 100755 vendor/illuminate/database/Query/Grammars/PostgresGrammar.php create mode 100755 vendor/illuminate/database/Query/Grammars/SQLiteGrammar.php create mode 100755 vendor/illuminate/database/Query/Grammars/SqlServerGrammar.php create mode 100755 vendor/illuminate/database/Query/JoinClause.php create mode 100755 vendor/illuminate/database/Query/Processors/MySqlProcessor.php create mode 100755 vendor/illuminate/database/Query/Processors/PostgresProcessor.php create mode 100755 vendor/illuminate/database/Query/Processors/Processor.php create mode 100755 vendor/illuminate/database/Query/Processors/SQLiteProcessor.php create mode 100755 vendor/illuminate/database/Query/Processors/SqlServerProcessor.php create mode 100755 vendor/illuminate/database/QueryException.php create mode 100755 vendor/illuminate/database/README.md create mode 100755 vendor/illuminate/database/RecordsNotFoundException.php create mode 100755 vendor/illuminate/database/SQLiteConnection.php create mode 100755 vendor/illuminate/database/Schema/Blueprint.php create mode 100755 vendor/illuminate/database/Schema/Builder.php create mode 100755 vendor/illuminate/database/Schema/ColumnDefinition.php create mode 100755 vendor/illuminate/database/Schema/ForeignIdColumnDefinition.php create mode 100755 vendor/illuminate/database/Schema/ForeignKeyDefinition.php create mode 100755 vendor/illuminate/database/Schema/Grammars/ChangeColumn.php create mode 100755 vendor/illuminate/database/Schema/Grammars/Grammar.php create mode 100755 vendor/illuminate/database/Schema/Grammars/MySqlGrammar.php create mode 100755 vendor/illuminate/database/Schema/Grammars/PostgresGrammar.php create mode 100755 vendor/illuminate/database/Schema/Grammars/RenameColumn.php create mode 100755 vendor/illuminate/database/Schema/Grammars/SQLiteGrammar.php create mode 100755 vendor/illuminate/database/Schema/Grammars/SqlServerGrammar.php create mode 100755 vendor/illuminate/database/Schema/MySqlBuilder.php create mode 100755 vendor/illuminate/database/Schema/MySqlSchemaState.php create mode 100755 vendor/illuminate/database/Schema/PostgresBuilder.php create mode 100755 vendor/illuminate/database/Schema/PostgresSchemaState.php create mode 100755 vendor/illuminate/database/Schema/SQLiteBuilder.php create mode 100755 vendor/illuminate/database/Schema/SchemaState.php create mode 100755 vendor/illuminate/database/Schema/SqlServerBuilder.php create mode 100755 vendor/illuminate/database/Schema/SqliteSchemaState.php create mode 100755 vendor/illuminate/database/Seeder.php create mode 100755 vendor/illuminate/database/SqlServerConnection.php create mode 100755 vendor/illuminate/database/composer.json create mode 100755 vendor/illuminate/macroable/LICENSE.md create mode 100755 vendor/illuminate/macroable/Traits/Macroable.php create mode 100755 vendor/illuminate/macroable/composer.json create mode 100755 vendor/illuminate/support/AggregateServiceProvider.php create mode 100755 vendor/illuminate/support/Carbon.php create mode 100755 vendor/illuminate/support/Composer.php create mode 100755 vendor/illuminate/support/ConfigurationUrlParser.php create mode 100755 vendor/illuminate/support/DateFactory.php create mode 100755 vendor/illuminate/support/Env.php create mode 100755 vendor/illuminate/support/Facades/App.php create mode 100755 vendor/illuminate/support/Facades/Artisan.php create mode 100755 vendor/illuminate/support/Facades/Auth.php create mode 100755 vendor/illuminate/support/Facades/Blade.php create mode 100755 vendor/illuminate/support/Facades/Broadcast.php create mode 100755 vendor/illuminate/support/Facades/Bus.php create mode 100755 vendor/illuminate/support/Facades/Cache.php create mode 100755 vendor/illuminate/support/Facades/Config.php create mode 100755 vendor/illuminate/support/Facades/Cookie.php create mode 100755 vendor/illuminate/support/Facades/Crypt.php create mode 100755 vendor/illuminate/support/Facades/DB.php create mode 100755 vendor/illuminate/support/Facades/Date.php create mode 100755 vendor/illuminate/support/Facades/Event.php create mode 100755 vendor/illuminate/support/Facades/Facade.php create mode 100755 vendor/illuminate/support/Facades/File.php create mode 100755 vendor/illuminate/support/Facades/Gate.php create mode 100755 vendor/illuminate/support/Facades/Hash.php create mode 100755 vendor/illuminate/support/Facades/Http.php create mode 100755 vendor/illuminate/support/Facades/Lang.php create mode 100755 vendor/illuminate/support/Facades/Log.php create mode 100755 vendor/illuminate/support/Facades/Mail.php create mode 100755 vendor/illuminate/support/Facades/Notification.php create mode 100755 vendor/illuminate/support/Facades/ParallelTesting.php create mode 100755 vendor/illuminate/support/Facades/Password.php create mode 100755 vendor/illuminate/support/Facades/Queue.php create mode 100755 vendor/illuminate/support/Facades/RateLimiter.php create mode 100755 vendor/illuminate/support/Facades/Redirect.php create mode 100755 vendor/illuminate/support/Facades/Redis.php create mode 100755 vendor/illuminate/support/Facades/Request.php create mode 100755 vendor/illuminate/support/Facades/Response.php create mode 100755 vendor/illuminate/support/Facades/Route.php create mode 100755 vendor/illuminate/support/Facades/Schema.php create mode 100755 vendor/illuminate/support/Facades/Session.php create mode 100755 vendor/illuminate/support/Facades/Storage.php create mode 100755 vendor/illuminate/support/Facades/URL.php create mode 100755 vendor/illuminate/support/Facades/Validator.php create mode 100755 vendor/illuminate/support/Facades/View.php create mode 100755 vendor/illuminate/support/Fluent.php create mode 100755 vendor/illuminate/support/HigherOrderTapProxy.php create mode 100755 vendor/illuminate/support/HtmlString.php create mode 100755 vendor/illuminate/support/InteractsWithTime.php create mode 100755 vendor/illuminate/support/Js.php create mode 100755 vendor/illuminate/support/LICENSE.md create mode 100755 vendor/illuminate/support/Manager.php create mode 100755 vendor/illuminate/support/MessageBag.php create mode 100755 vendor/illuminate/support/MultipleInstanceManager.php create mode 100755 vendor/illuminate/support/NamespacedItemResolver.php create mode 100755 vendor/illuminate/support/Optional.php create mode 100755 vendor/illuminate/support/Pluralizer.php create mode 100755 vendor/illuminate/support/ProcessUtils.php create mode 100755 vendor/illuminate/support/Reflector.php create mode 100755 vendor/illuminate/support/ServiceProvider.php create mode 100755 vendor/illuminate/support/Str.php create mode 100755 vendor/illuminate/support/Stringable.php create mode 100755 vendor/illuminate/support/Testing/Fakes/BatchRepositoryFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/BusFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/EventFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/MailFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/NotificationFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/PendingBatchFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/PendingChainFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/PendingMailFake.php create mode 100755 vendor/illuminate/support/Testing/Fakes/QueueFake.php create mode 100755 vendor/illuminate/support/Timebox.php create mode 100755 vendor/illuminate/support/Traits/CapsuleManagerTrait.php create mode 100755 vendor/illuminate/support/Traits/Conditionable.php create mode 100755 vendor/illuminate/support/Traits/ForwardsCalls.php create mode 100755 vendor/illuminate/support/Traits/Localizable.php create mode 100755 vendor/illuminate/support/Traits/ReflectsClosures.php create mode 100755 vendor/illuminate/support/Traits/Tappable.php create mode 100755 vendor/illuminate/support/ValidatedInput.php create mode 100755 vendor/illuminate/support/ViewErrorBag.php create mode 100755 vendor/illuminate/support/composer.json create mode 100755 vendor/illuminate/support/helpers.php create mode 100755 vendor/intervention/image/LICENSE create mode 100755 vendor/intervention/image/composer.json create mode 100755 vendor/intervention/image/provides.json create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractColor.php create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractDecoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractDriver.php create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractEncoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractFont.php create mode 100755 vendor/intervention/image/src/Intervention/Image/AbstractShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/AbstractCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/Argument.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/ChecksumCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/CircleCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/EllipseCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/ExifCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/IptcCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/LineCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/OrientateCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/PolygonCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/PsrResponseCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/RectangleCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/ResponseCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/StreamCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Commands/TextCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Constraint.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/ImageException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/InvalidArgumentException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/MissingDependencyException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/NotFoundException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/NotReadableException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/NotSupportedException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/NotWritableException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Exception/RuntimeException.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Facades/Image.php create mode 100755 vendor/intervention/image/src/Intervention/Image/File.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Filters/DemoFilter.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Filters/FilterInterface.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Color.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BackupCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BlurCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/BrightnessCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ColorizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ContrastCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/CropCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/DestroyCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FillCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FitCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/FlipCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GammaCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GetSizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/GreyscaleCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/HeightenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InsertCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InterlaceCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/InvertCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/LimitColorsCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/MaskCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/OpacityCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PickColorCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/PixelateCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResetCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCanvasCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/ResizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/RotateCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/SharpenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/TrimCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Commands/WidenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Driver.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Encoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Font.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/CircleShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/EllipseShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/LineShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/PolygonShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Gd/Shapes/RectangleShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Image.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageManager.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageManagerStatic.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageServiceProvider.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravel4.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLaravelRecent.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLeague.php create mode 100755 vendor/intervention/image/src/Intervention/Image/ImageServiceProviderLumen.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Color.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BackupCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BlurCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/BrightnessCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ColorizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ContrastCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/CropCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/DestroyCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ExifCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FillCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FitCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/FlipCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GammaCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GetSizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/GreyscaleCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/HeightenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InsertCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InterlaceCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/InvertCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/LimitColorsCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/MaskCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/OpacityCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PickColorCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/PixelateCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResetCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCanvasCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/ResizeCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/RotateCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/SharpenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/TrimCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Commands/WidenCommand.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Decoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Driver.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Encoder.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Font.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/CircleShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/EllipseShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/LineShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/PolygonShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Imagick/Shapes/RectangleShape.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Point.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Response.php create mode 100755 vendor/intervention/image/src/Intervention/Image/Size.php create mode 100755 vendor/intervention/image/src/config/config.php create mode 100755 vendor/laravel/serializable-closure/LICENSE.md create mode 100755 vendor/laravel/serializable-closure/README.md create mode 100755 vendor/laravel/serializable-closure/composer.json create mode 100755 vendor/laravel/serializable-closure/src/Contracts/Serializable.php create mode 100755 vendor/laravel/serializable-closure/src/Contracts/Signer.php create mode 100755 vendor/laravel/serializable-closure/src/Exceptions/InvalidSignatureException.php create mode 100755 vendor/laravel/serializable-closure/src/Exceptions/MissingSecretKeyException.php create mode 100755 vendor/laravel/serializable-closure/src/Exceptions/PhpVersionNotSupportedException.php create mode 100755 vendor/laravel/serializable-closure/src/SerializableClosure.php create mode 100755 vendor/laravel/serializable-closure/src/Serializers/Native.php create mode 100755 vendor/laravel/serializable-closure/src/Serializers/Signed.php create mode 100755 vendor/laravel/serializable-closure/src/Signers/Hmac.php create mode 100755 vendor/laravel/serializable-closure/src/Support/ClosureScope.php create mode 100755 vendor/laravel/serializable-closure/src/Support/ClosureStream.php create mode 100755 vendor/laravel/serializable-closure/src/Support/ReflectionClosure.php create mode 100755 vendor/laravel/serializable-closure/src/Support/SelfReference.php create mode 100755 vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php create mode 100755 vendor/league/flysystem/CODE_OF_CONDUCT.md create mode 100755 vendor/league/flysystem/LICENSE create mode 100755 vendor/league/flysystem/SECURITY.md create mode 100755 vendor/league/flysystem/composer.json create mode 100755 vendor/league/flysystem/deprecations.md create mode 100755 vendor/league/flysystem/src/Adapter/AbstractAdapter.php create mode 100755 vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php create mode 100755 vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php create mode 100755 vendor/league/flysystem/src/Adapter/Ftp.php create mode 100755 vendor/league/flysystem/src/Adapter/Ftpd.php create mode 100755 vendor/league/flysystem/src/Adapter/Local.php create mode 100755 vendor/league/flysystem/src/Adapter/NullAdapter.php create mode 100755 vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php create mode 100755 vendor/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php create mode 100755 vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php create mode 100755 vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php create mode 100755 vendor/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php create mode 100755 vendor/league/flysystem/src/Adapter/SynologyFtp.php create mode 100755 vendor/league/flysystem/src/AdapterInterface.php create mode 100755 vendor/league/flysystem/src/Config.php create mode 100755 vendor/league/flysystem/src/ConfigAwareTrait.php create mode 100755 vendor/league/flysystem/src/ConnectionErrorException.php create mode 100755 vendor/league/flysystem/src/ConnectionRuntimeException.php create mode 100755 vendor/league/flysystem/src/CorruptedPathDetected.php create mode 100755 vendor/league/flysystem/src/Directory.php create mode 100755 vendor/league/flysystem/src/Exception.php create mode 100755 vendor/league/flysystem/src/File.php create mode 100755 vendor/league/flysystem/src/FileExistsException.php create mode 100755 vendor/league/flysystem/src/FileNotFoundException.php create mode 100755 vendor/league/flysystem/src/Filesystem.php create mode 100755 vendor/league/flysystem/src/FilesystemException.php create mode 100755 vendor/league/flysystem/src/FilesystemInterface.php create mode 100755 vendor/league/flysystem/src/FilesystemNotFoundException.php create mode 100755 vendor/league/flysystem/src/Handler.php create mode 100755 vendor/league/flysystem/src/InvalidRootException.php create mode 100755 vendor/league/flysystem/src/MountManager.php create mode 100755 vendor/league/flysystem/src/NotSupportedException.php create mode 100755 vendor/league/flysystem/src/Plugin/AbstractPlugin.php create mode 100755 vendor/league/flysystem/src/Plugin/EmptyDir.php create mode 100755 vendor/league/flysystem/src/Plugin/ForcedCopy.php create mode 100755 vendor/league/flysystem/src/Plugin/ForcedRename.php create mode 100755 vendor/league/flysystem/src/Plugin/GetWithMetadata.php create mode 100755 vendor/league/flysystem/src/Plugin/ListFiles.php create mode 100755 vendor/league/flysystem/src/Plugin/ListPaths.php create mode 100755 vendor/league/flysystem/src/Plugin/ListWith.php create mode 100755 vendor/league/flysystem/src/Plugin/PluggableTrait.php create mode 100755 vendor/league/flysystem/src/Plugin/PluginNotFoundException.php create mode 100755 vendor/league/flysystem/src/PluginInterface.php create mode 100755 vendor/league/flysystem/src/ReadInterface.php create mode 100755 vendor/league/flysystem/src/RootViolationException.php create mode 100755 vendor/league/flysystem/src/SafeStorage.php create mode 100755 vendor/league/flysystem/src/UnreadableFileException.php create mode 100755 vendor/league/flysystem/src/Util.php create mode 100755 vendor/league/flysystem/src/Util/ContentListingFormatter.php create mode 100755 vendor/league/flysystem/src/Util/MimeType.php create mode 100755 vendor/league/flysystem/src/Util/StreamHasher.php create mode 100755 vendor/league/mime-type-detection/CHANGELOG.md create mode 100755 vendor/league/mime-type-detection/LICENSE create mode 100755 vendor/league/mime-type-detection/composer.json create mode 100755 vendor/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php create mode 100755 vendor/league/mime-type-detection/src/ExtensionLookup.php create mode 100755 vendor/league/mime-type-detection/src/ExtensionMimeTypeDetector.php create mode 100755 vendor/league/mime-type-detection/src/ExtensionToMimeTypeMap.php create mode 100755 vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php create mode 100755 vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php create mode 100755 vendor/league/mime-type-detection/src/MimeTypeDetector.php create mode 100755 vendor/league/mime-type-detection/src/OverridingExtensionToMimeTypeMap.php create mode 100755 vendor/monolog/monolog/CHANGELOG.md create mode 100755 vendor/monolog/monolog/LICENSE create mode 100755 vendor/monolog/monolog/README.md create mode 100755 vendor/monolog/monolog/UPGRADE.md create mode 100755 vendor/monolog/monolog/composer.json create mode 100755 vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php create mode 100755 vendor/monolog/monolog/src/Monolog/ErrorHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/Handler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/LogRecord.php create mode 100755 vendor/monolog/monolog/src/Monolog/Logger.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php create mode 100755 vendor/monolog/monolog/src/Monolog/Registry.php create mode 100755 vendor/monolog/monolog/src/Monolog/ResettableInterface.php create mode 100755 vendor/monolog/monolog/src/Monolog/SignalHandler.php create mode 100755 vendor/monolog/monolog/src/Monolog/Test/TestCase.php create mode 100755 vendor/monolog/monolog/src/Monolog/Utils.php create mode 100755 vendor/nesbot/carbon/LICENSE create mode 100755 vendor/nesbot/carbon/bin/carbon create mode 100755 vendor/nesbot/carbon/bin/carbon.bat create mode 100755 vendor/nesbot/carbon/composer.json create mode 100755 vendor/nesbot/carbon/extension.neon create mode 100755 vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperStrongType.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperWeakType.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroBuiltin.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroStatic.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroStrongType.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroWeakType.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/TranslatorStrongType.php create mode 100755 vendor/nesbot/carbon/lazy/Carbon/TranslatorWeakType.php create mode 100755 vendor/nesbot/carbon/readme.md create mode 100755 vendor/nesbot/carbon/sponsors.php create mode 100755 vendor/nesbot/carbon/src/Carbon/AbstractTranslator.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Carbon.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonConverterInterface.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonInterface.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonInterval.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonPeriodImmutable.php create mode 100755 vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Cli/Invoker.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/EndLessPeriodException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/Exception.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnitException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Factory.php create mode 100755 vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/aa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/aa_DJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/aa_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/aa_ER@saaho.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/aa_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/af.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/af_NA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/af_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/agq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/agr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/agr_PE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ak.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ak_GH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/am.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/am_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/an.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/an_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/anp.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/anp_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_AE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_BH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_DJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_DZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_EG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_EH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_IL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_IQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_JO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_KM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_KW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_LB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_LY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_MA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_MR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_OM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_PS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_QA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_SA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_SD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_SO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_SS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_SY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_Shakl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_TD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_TN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ar_YE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/as.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/as_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/asa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ast.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ast_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ayc.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ayc_PE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/az.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/az_AZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/az_Cyrl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/az_IR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/az_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bas.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/be.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/be_BY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/be_BY@latin.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bem.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bem_ZM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ber.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ber_DZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ber_MA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bez.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bg_BG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bhb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bhb_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bho.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bho_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bi_VU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bm.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bn_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bo_CN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bo_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/br.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/br_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/brx.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/brx_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bs.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bs_BA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bs_Cyrl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/bs_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/byn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/byn_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca_AD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca_ES_Valencia.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ca_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ccp.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ccp_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ce.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ce_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cgg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/chr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/chr_US.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ckb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cmn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cmn_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/crh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/crh_UA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cs.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cs_CZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/csb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/csb_PL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cv_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cy.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/cy_GB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/da.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/da_DK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/da_GL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dav.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_AT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_BE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_LI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/de_LU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dje.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/doi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/doi_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dsb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dsb_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dua.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dv_MV.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dyo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dz.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/dz_BT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ebu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ee.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ee_TG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/el.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/el_CY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/el_GR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_001.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_150.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_AG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_AI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_AS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_AT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_AU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_BZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_CY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_DG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_DK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_DM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_FI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_FJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_FK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_FM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_GY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_HK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_IE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_IL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_IM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_IO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_ISO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_JE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_JM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_KE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_KI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_KN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_KY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_LC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_LR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_LS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_MY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_NZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_PW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_RW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_SZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TV.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_TZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_UG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_UM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_US.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_US_Posix.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_VC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_VG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_VI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_VU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_WS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_ZM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/en_ZW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/eo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_419.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_AR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_BO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_BR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_BZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_CL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_CO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_CR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_CU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_DO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_EA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_EC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_GQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_GT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_HN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_IC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_MX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_NI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_PA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_PE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_PH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_PR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_PY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_SV.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_US.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_UY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/es_VE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/et.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/et_EE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/eu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/eu_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ewo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fa_AF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fa_IR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ff.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ff_CM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ff_GN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ff_MR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ff_SN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fi_FI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fil.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fil_PH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fo_DK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fo_FO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_BE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_BF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_BI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_BJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_BL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_CM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_DJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_DZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_GA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_GF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_GN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_GP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_GQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_HT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_KM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_LU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_ML.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_MU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_NC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_NE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_PF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_PM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_RE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_RW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_SC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_SN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_SY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_TD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_TG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_TN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_VU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_WF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fr_YT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fur.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fur_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fy.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fy_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/fy_NL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ga.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ga_IE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gd.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gd_GB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gez.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gez_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gez_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gl_ES.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gom.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gom_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gsw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gsw_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gsw_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gsw_LI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gu_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/guz.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/gv_GB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ha.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ha_GH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ha_NE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ha_NG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hak.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hak_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/haw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/he.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/he_IL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hi_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hif.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hif_FJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hne.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hne_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hr_BA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hr_HR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hsb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hsb_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ht.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ht_HT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hu_HU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hy.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/hy_AM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/i18n.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ia.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ia_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/id.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/id_ID.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ig.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ig_NG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ii.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ik.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ik_CA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/in.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/is.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/is_IS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/it.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/it_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/it_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/it_SM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/it_VA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/iu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/iu_CA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/iw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ja.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ja_JP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/jgo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/jmc.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/jv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ka.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ka_GE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kab.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kab_DZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kam.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kde.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kea.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/khq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ki.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kk_KZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kkj.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kl_GL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kln.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/km.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/km_KH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kn_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ko.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ko_KP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ko_KR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kok.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kok_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ks.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ks_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ks_IN@devanagari.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ksb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ksf.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ksh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ku.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ku_TR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/kw_GB.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ky.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ky_KG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lag.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lb_LU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lg_UG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/li.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/li_NL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lij.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lij_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lkt.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ln.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ln_AO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ln_CD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ln_CF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ln_CG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lo_LA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lrc.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lrc_IQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lt.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lt_LT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/luo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/luy.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lv_LV.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lzh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/lzh_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mag.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mag_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mai.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mai_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mas.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mas_TZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mer.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mfe.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mfe_MU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mg_MG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mgh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mgo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mhr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mhr_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mi_NZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/miq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/miq_NI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mjw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mjw_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mk_MK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ml.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ml_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mn_MN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mni.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mni_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mr_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ms.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ms_BN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ms_MY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ms_SG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mt.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mt_MT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mua.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/my.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/my_MM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/mzn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nan.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nan_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nan_TW@latin.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/naq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nb.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nb_NO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nb_SJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nd.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nds.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nds_DE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nds_NL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ne.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ne_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ne_NP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nhn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nhn_MX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/niu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/niu_NU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_AW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_BE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_BQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_CW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_NL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_SR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nl_SX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nmg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nn_NO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nnh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/no.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nr_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nso.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nso_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nus.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/nyn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/oc.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/oc_FR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/om.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/om_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/om_KE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/or.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/or_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/os.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/os_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pa_Arab.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pa_Guru.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pa_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pa_PK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pap.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pap_AW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pap_CW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pl_PL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/prg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ps.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ps_AF.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_AO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_BR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_CV.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_GQ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_GW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_LU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_MO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_MZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_PT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_ST.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/pt_TL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/qu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/qu_BO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/qu_EC.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/quz.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/quz_PE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/raj.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/raj_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rm.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ro.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ro_MD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ro_RO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rof.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_BY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_KG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_KZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_MD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ru_UA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rw_RW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/rwk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sa_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sah.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sah_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/saq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sat.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sat_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sbp.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sc.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sc_IT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sd.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sd_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sd_IN@devanagari.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/se.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/se_FI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/se_NO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/se_SE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/seh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ses.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sgs.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sgs_LT.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shi_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shi_Tfng.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shs.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/shs_CA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/si.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/si_LK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sid.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sid_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sk_SK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sl_SI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sm.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sm_WS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/smn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/so.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/so_DJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/so_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/so_KE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/so_SO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sq_AL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sq_MK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sq_XK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_BA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_ME.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_XK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_BA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_ME.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_XK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_ME.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_RS.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sr_RS@latin.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ss.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ss_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/st.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/st_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sv.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sv_AX.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sv_FI.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sv_SE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sw_CD.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sw_KE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sw_TZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/sw_UG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/szl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/szl_PL.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ta.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ta_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ta_LK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ta_MY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ta_SG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tcy.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tcy_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/te.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/te_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/teo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/teo_KE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tet.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tg.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tg_TJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/th.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/th_TH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/the.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/the_NP.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ti.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ti_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ti_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tig.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tig_ER.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tk_TM.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tl_PH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tlh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tn_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/to.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/to_TO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tpi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tpi_PG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tr.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tr_CY.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tr_TR.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ts.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ts_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tt.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tt_RU.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tt_RU@iqtelif.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/twq.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tzl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tzm.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/tzm_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ug.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ug_CN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uk.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uk_UA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/unm.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/unm_US.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ur.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ur_IN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ur_PK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz_Arab.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz_Cyrl.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ@cyrillic.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vai.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vai_Latn.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vai_Vaii.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ve.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/ve_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vi_VN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/vun.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wa.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wa_BE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wae.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wae_CH.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wal.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wal_ET.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/wo_SN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/xh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/xh_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/xog.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yav.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yi.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yi_US.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yo.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yo_BJ.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yo_NG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yue.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yue_HK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yue_Hans.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yue_Hant.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yuw.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/yuw_PG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zgh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_CN.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_HK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_HK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_MO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_SG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_HK.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_MO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_MO.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_SG.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zh_YUE.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zu.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Lang/zu_ZA.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Language.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php create mode 100755 vendor/nesbot/carbon/src/Carbon/List/languages.php create mode 100755 vendor/nesbot/carbon/src/Carbon/List/regions.php create mode 100755 vendor/nesbot/carbon/src/Carbon/MessageFormatter/MessageFormatterMapper.php create mode 100755 vendor/nesbot/carbon/src/Carbon/PHPStan/AbstractMacro.php create mode 100755 vendor/nesbot/carbon/src/Carbon/PHPStan/Macro.php create mode 100755 vendor/nesbot/carbon/src/Carbon/PHPStan/MacroExtension.php create mode 100755 vendor/nesbot/carbon/src/Carbon/PHPStan/MacroScanner.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Boundaries.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Cast.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Converter.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Creator.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Date.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/DeprecatedProperties.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Difference.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Localization.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Macro.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/MagicParameter.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Mutability.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Options.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Test.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/ToStringFormat.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Units.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Traits/Week.php create mode 100755 vendor/nesbot/carbon/src/Carbon/Translator.php create mode 100755 vendor/nesbot/carbon/src/Carbon/TranslatorImmutable.php create mode 100755 vendor/nesbot/carbon/src/Carbon/TranslatorStrongTypeInterface.php create mode 100755 vendor/nyholm/psr7/CHANGELOG.md create mode 100755 vendor/nyholm/psr7/LICENSE create mode 100755 vendor/nyholm/psr7/README.md create mode 100755 vendor/nyholm/psr7/composer.json create mode 100755 vendor/nyholm/psr7/src/Factory/HttplugFactory.php create mode 100755 vendor/nyholm/psr7/src/Factory/Psr17Factory.php create mode 100755 vendor/nyholm/psr7/src/MessageTrait.php create mode 100755 vendor/nyholm/psr7/src/Request.php create mode 100755 vendor/nyholm/psr7/src/RequestTrait.php create mode 100755 vendor/nyholm/psr7/src/Response.php create mode 100755 vendor/nyholm/psr7/src/ServerRequest.php create mode 100755 vendor/nyholm/psr7/src/Stream.php create mode 100755 vendor/nyholm/psr7/src/StreamTrait.php create mode 100755 vendor/nyholm/psr7/src/UploadedFile.php create mode 100755 vendor/nyholm/psr7/src/Uri.php create mode 100755 vendor/paragonie/random_compat/LICENSE create mode 100755 vendor/paragonie/random_compat/build-phar.sh create mode 100755 vendor/paragonie/random_compat/composer.json create mode 100755 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey create mode 100755 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc create mode 100755 vendor/paragonie/random_compat/lib/random.php create mode 100755 vendor/paragonie/random_compat/other/build_phar.php create mode 100755 vendor/paragonie/random_compat/psalm-autoload.php create mode 100755 vendor/paragonie/random_compat/psalm.xml create mode 100755 vendor/pecee/simple-router/README.md create mode 100755 vendor/pecee/simple-router/composer.json create mode 100755 vendor/pecee/simple-router/helpers.php create mode 100755 vendor/pecee/simple-router/phpstan.neon create mode 100755 vendor/pecee/simple-router/phpunit.xml create mode 100755 vendor/pecee/simple-router/src/Pecee/Controllers/IResourceController.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Exceptions/InvalidArgumentException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Exceptions/MalformedUrlException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Input/IInputItem.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Input/InputFile.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Input/InputHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Input/InputItem.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Middleware/BaseCsrfVerifier.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Middleware/Exceptions/TokenMismatchException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Middleware/IMiddleware.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Middleware/IpRestrictAccess.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Request.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Response.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Security/CookieTokenProvider.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Security/Exceptions/SecurityException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Security/ITokenProvider.php create mode 100755 vendor/pecee/simple-router/src/Pecee/Http/Url.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/ClassLoader/IClassLoader.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Event/EventArgument.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Event/IEventArgument.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Exceptions/ClassNotFoundHttpException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Exceptions/HttpException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Exceptions/NotFoundHttpException.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Handlers/CallbackExceptionHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Handlers/DebugEventHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Handlers/EventHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Handlers/IEventHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Handlers/IExceptionHandler.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/IRouterBootManager.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/IControllerRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/IGroupRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/ILoadableRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/IPartialGroupRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/IRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/LoadableRoute.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/Route.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/RouteController.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/RouteGroup.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/RoutePartialGroup.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/RouteResource.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Route/RouteUrl.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/Router.php create mode 100755 vendor/pecee/simple-router/src/Pecee/SimpleRouter/SimpleRouter.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/BootManagerTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/ClassLoaderTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/CsrfVerifierTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/CustomMiddlewareTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/ClassLoader/CustomClassLoader.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/CsrfVerifier/DummyCsrfVerifier.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/DummyController.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/DummyMiddleware.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Exception/ExceptionHandlerException.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Exception/MiddlewareLoadedException.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Exception/ResponseException.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandler.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerFirst.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerSecond.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Handler/ExceptionHandlerThird.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Managers/FindUrlBootManager.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Managers/TestBootManager.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Middleware/IpRestrictMiddleware.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Middleware/RewriteMiddleware.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/NSController.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/ResourceController.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Route/DummyLoadableRoute.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/Dummy/Security/SilentTokenProvider.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/EventHandlerTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/InputHandlerTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/LoadableRouteTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/MiddlewareTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RequestTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterCallbackExceptionHandlerTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterControllerTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterGroupTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterPartialGroupTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterResourceTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterRewriteTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterRouteTest.php create mode 100755 vendor/pecee/simple-router/tests/Pecee/SimpleRouter/RouterUrlTest.php create mode 100755 vendor/pecee/simple-router/tests/TestRouter.php create mode 100755 vendor/pecee/simple-router/tests/bootstrap.php create mode 100755 vendor/pecee/simple-router/tests/debug.php create mode 100755 vendor/php-di/invoker/LICENSE create mode 100755 vendor/php-di/invoker/README.md create mode 100755 vendor/php-di/invoker/composer.json create mode 100755 vendor/php-di/invoker/src/CallableResolver.php create mode 100755 vendor/php-di/invoker/src/Exception/InvocationException.php create mode 100755 vendor/php-di/invoker/src/Exception/NotCallableException.php create mode 100755 vendor/php-di/invoker/src/Exception/NotEnoughParametersException.php create mode 100755 vendor/php-di/invoker/src/Invoker.php create mode 100755 vendor/php-di/invoker/src/InvokerInterface.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/AssociativeArrayResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/Container/ParameterNameContainerResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/Container/TypeHintContainerResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/DefaultValueResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/NumericArrayResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/ParameterResolver.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/ResolverChain.php create mode 100755 vendor/php-di/invoker/src/ParameterResolver/TypeHintResolver.php create mode 100755 vendor/php-di/invoker/src/Reflection/CallableReflection.php create mode 100755 vendor/php-di/php-di/LICENSE create mode 100755 vendor/php-di/php-di/README.md create mode 100755 vendor/php-di/php-di/change-log.md create mode 100755 vendor/php-di/php-di/composer.json create mode 100755 vendor/php-di/php-di/src/Attribute/Inject.php create mode 100755 vendor/php-di/php-di/src/Attribute/Injectable.php create mode 100755 vendor/php-di/php-di/src/CompiledContainer.php create mode 100755 vendor/php-di/php-di/src/Compiler/Compiler.php create mode 100755 vendor/php-di/php-di/src/Compiler/ObjectCreationCompiler.php create mode 100755 vendor/php-di/php-di/src/Compiler/RequestedEntryHolder.php create mode 100755 vendor/php-di/php-di/src/Compiler/Template.php create mode 100755 vendor/php-di/php-di/src/Container.php create mode 100755 vendor/php-di/php-di/src/ContainerBuilder.php create mode 100755 vendor/php-di/php-di/src/Definition/ArrayDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/ArrayDefinitionExtension.php create mode 100755 vendor/php-di/php-di/src/Definition/AutowireDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/DecoratorDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/Definition.php create mode 100755 vendor/php-di/php-di/src/Definition/Dumper/ObjectDefinitionDumper.php create mode 100755 vendor/php-di/php-di/src/Definition/EnvironmentVariableDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/Exception/InvalidAttribute.php create mode 100755 vendor/php-di/php-di/src/Definition/Exception/InvalidDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/ExtendsPreviousDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/FactoryDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/Helper/AutowireDefinitionHelper.php create mode 100755 vendor/php-di/php-di/src/Definition/Helper/CreateDefinitionHelper.php create mode 100755 vendor/php-di/php-di/src/Definition/Helper/DefinitionHelper.php create mode 100755 vendor/php-di/php-di/src/Definition/Helper/FactoryDefinitionHelper.php create mode 100755 vendor/php-di/php-di/src/Definition/InstanceDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/ObjectDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/ObjectDefinition/MethodInjection.php create mode 100755 vendor/php-di/php-di/src/Definition/ObjectDefinition/PropertyInjection.php create mode 100755 vendor/php-di/php-di/src/Definition/Reference.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/ArrayResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/DecoratorResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/DefinitionResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/EnvironmentVariableResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/FactoryResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/InstanceInjector.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/ObjectCreator.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/ParameterResolver.php create mode 100755 vendor/php-di/php-di/src/Definition/Resolver/ResolverDispatcher.php create mode 100755 vendor/php-di/php-di/src/Definition/SelfResolvingDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/AttributeBasedAutowiring.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/Autowiring.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/DefinitionArray.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/DefinitionFile.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/DefinitionNormalizer.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/DefinitionSource.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/MutableDefinitionSource.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/NoAutowiring.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/ReflectionBasedAutowiring.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/SourceCache.php create mode 100755 vendor/php-di/php-di/src/Definition/Source/SourceChain.php create mode 100755 vendor/php-di/php-di/src/Definition/StringDefinition.php create mode 100755 vendor/php-di/php-di/src/Definition/ValueDefinition.php create mode 100755 vendor/php-di/php-di/src/DependencyException.php create mode 100755 vendor/php-di/php-di/src/Factory/RequestedEntry.php create mode 100755 vendor/php-di/php-di/src/FactoryInterface.php create mode 100755 vendor/php-di/php-di/src/Invoker/DefinitionParameterResolver.php create mode 100755 vendor/php-di/php-di/src/Invoker/FactoryParameterResolver.php create mode 100755 vendor/php-di/php-di/src/NotFoundException.php create mode 100755 vendor/php-di/php-di/src/Proxy/ProxyFactory.php create mode 100755 vendor/php-di/php-di/src/functions.php create mode 100755 vendor/php-di/php-di/support.md create mode 100755 vendor/phpauth/phpauth/CHANGELOG.md create mode 100755 vendor/phpauth/phpauth/CONFIG_HINTS.md create mode 100755 vendor/phpauth/phpauth/CUSTOM_VALIDATORS.md create mode 100755 vendor/phpauth/phpauth/DEPRECATION_WARNING.md create mode 100755 vendor/phpauth/phpauth/LICENSE create mode 100755 vendor/phpauth/phpauth/composer.json create mode 100755 vendor/phpauth/phpauth/database_defs/database_emails_banned.sql create mode 100755 vendor/phpauth/phpauth/database_defs/database_mssql.sql create mode 100755 vendor/phpauth/phpauth/database_defs/database_mysql.sql create mode 100755 vendor/phpauth/phpauth/database_defs/database_pgsql.sql create mode 100755 vendor/phpauth/phpauth/database_defs/database_translation_dictionary.sql create mode 100755 vendor/phpauth/phpauth/examples/html-frontend-password-strength-gui-feedback/index.php create mode 100755 vendor/phpauth/phpauth/examples/html-frontend-password-strength-gui-feedback/zxcvbn.js create mode 100755 vendor/phpauth/phpauth/files/domains.json create mode 100755 vendor/phpauth/phpauth/files/import.php create mode 100755 vendor/phpauth/phpauth/files/import_langs_to_sql.php create mode 100755 vendor/phpauth/phpauth/files/make_forgotten_dictionary_by_sql.php create mode 100755 vendor/phpauth/phpauth/languages/ar_TN.php create mode 100755 vendor/phpauth/phpauth/languages/bs_BA.php create mode 100755 vendor/phpauth/phpauth/languages/cs_CZ.php create mode 100755 vendor/phpauth/phpauth/languages/da_DK.php create mode 100755 vendor/phpauth/phpauth/languages/de_DE.php create mode 100755 vendor/phpauth/phpauth/languages/en_GB.php create mode 100755 vendor/phpauth/phpauth/languages/es_MX.php create mode 100755 vendor/phpauth/phpauth/languages/fa_IR.php create mode 100755 vendor/phpauth/phpauth/languages/fr_FR.php create mode 100755 vendor/phpauth/phpauth/languages/gr_GR.php create mode 100755 vendor/phpauth/phpauth/languages/hu_HU.php create mode 100755 vendor/phpauth/phpauth/languages/id_ID.php create mode 100755 vendor/phpauth/phpauth/languages/it_IT.php create mode 100755 vendor/phpauth/phpauth/languages/ja_JP.php create mode 100755 vendor/phpauth/phpauth/languages/nl_BE.php create mode 100755 vendor/phpauth/phpauth/languages/nl_NL.php create mode 100755 vendor/phpauth/phpauth/languages/no_NB.php create mode 100755 vendor/phpauth/phpauth/languages/pl_PL.php create mode 100755 vendor/phpauth/phpauth/languages/ps_AF.php create mode 100755 vendor/phpauth/phpauth/languages/pt_BR.php create mode 100755 vendor/phpauth/phpauth/languages/ro_RO.php create mode 100755 vendor/phpauth/phpauth/languages/ru_RU.php create mode 100755 vendor/phpauth/phpauth/languages/se_SE.php create mode 100755 vendor/phpauth/phpauth/languages/sk_SK.php create mode 100755 vendor/phpauth/phpauth/languages/sl_SI.php create mode 100755 vendor/phpauth/phpauth/languages/sr_RS.php create mode 100755 vendor/phpauth/phpauth/languages/th_TH.php create mode 100755 vendor/phpauth/phpauth/languages/tr_TR.php create mode 100755 vendor/phpauth/phpauth/languages/uk_UA.php create mode 100755 vendor/phpauth/phpauth/languages/vi_VN.php create mode 100755 vendor/phpauth/phpauth/languages/zh_CN.php create mode 100755 vendor/phpauth/phpauth/languages/zh_TW.php create mode 100755 vendor/phpauth/phpauth/sources/Auth.php create mode 100755 vendor/phpauth/phpauth/sources/AuthInterface.php create mode 100755 vendor/phpauth/phpauth/sources/Config.php create mode 100755 vendor/phpauth/phpauth/sources/ConfigInterface.php create mode 100755 vendor/phpauth/phpauth/sources/Core/Result.php create mode 100755 vendor/phpauth/phpauth/sources/Helpers.php create mode 100755 vendor/phpmailer/phpmailer/COMMITMENT create mode 100755 vendor/phpmailer/phpmailer/LICENSE create mode 100755 vendor/phpmailer/phpmailer/README.md create mode 100755 vendor/phpmailer/phpmailer/SECURITY.md create mode 100755 vendor/phpmailer/phpmailer/VERSION create mode 100755 vendor/phpmailer/phpmailer/composer.json create mode 100755 vendor/phpmailer/phpmailer/get_oauth_token.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-as.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-bn.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ku.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-mn.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-ur.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php create mode 100755 vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php create mode 100755 vendor/phpmailer/phpmailer/src/DSNConfigurator.php create mode 100755 vendor/phpmailer/phpmailer/src/Exception.php create mode 100755 vendor/phpmailer/phpmailer/src/OAuth.php create mode 100755 vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php create mode 100755 vendor/phpmailer/phpmailer/src/PHPMailer.php create mode 100755 vendor/phpmailer/phpmailer/src/POP3.php create mode 100755 vendor/phpmailer/phpmailer/src/SMTP.php create mode 100755 vendor/predis/predis/CHANGELOG.md create mode 100755 vendor/predis/predis/CONTRIBUTING.md create mode 100755 vendor/predis/predis/FAQ.md create mode 100755 vendor/predis/predis/LICENSE create mode 100755 vendor/predis/predis/README.md create mode 100755 vendor/predis/predis/VERSION create mode 100755 vendor/predis/predis/autoload.php create mode 100755 vendor/predis/predis/bin/create-command-test create mode 100755 vendor/predis/predis/bin/create-pear create mode 100755 vendor/predis/predis/bin/create-phar create mode 100755 vendor/predis/predis/bin/create-single-file create mode 100755 vendor/predis/predis/composer.json create mode 100755 vendor/predis/predis/examples/custom_cluster_distributor.php create mode 100755 vendor/predis/predis/examples/debuggable_connection.php create mode 100755 vendor/predis/predis/examples/dispatcher_loop.php create mode 100755 vendor/predis/predis/examples/executing_redis_commands.php create mode 100755 vendor/predis/predis/examples/key_prefixing.php create mode 100755 vendor/predis/predis/examples/lua_scripting_abstraction.php create mode 100755 vendor/predis/predis/examples/monitor_consumer.php create mode 100755 vendor/predis/predis/examples/pipelining_commands.php create mode 100755 vendor/predis/predis/examples/pubsub_consumer.php create mode 100755 vendor/predis/predis/examples/redis_collections_iterators.php create mode 100755 vendor/predis/predis/examples/replication_complex.php create mode 100755 vendor/predis/predis/examples/replication_sentinel.php create mode 100755 vendor/predis/predis/examples/replication_simple.php create mode 100755 vendor/predis/predis/examples/session_handler.php create mode 100755 vendor/predis/predis/examples/shared.php create mode 100755 vendor/predis/predis/examples/transaction_using_cas.php create mode 100755 vendor/predis/predis/package.ini create mode 100755 vendor/predis/predis/src/Autoloader.php create mode 100755 vendor/predis/predis/src/Client.php create mode 100755 vendor/predis/predis/src/ClientContextInterface.php create mode 100755 vendor/predis/predis/src/ClientException.php create mode 100755 vendor/predis/predis/src/ClientInterface.php create mode 100755 vendor/predis/predis/src/Cluster/ClusterStrategy.php create mode 100755 vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php create mode 100755 vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php create mode 100755 vendor/predis/predis/src/Cluster/Distributor/HashRing.php create mode 100755 vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php create mode 100755 vendor/predis/predis/src/Cluster/Hash/CRC16.php create mode 100755 vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php create mode 100755 vendor/predis/predis/src/Cluster/PredisStrategy.php create mode 100755 vendor/predis/predis/src/Cluster/RedisStrategy.php create mode 100755 vendor/predis/predis/src/Cluster/StrategyInterface.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/HashKey.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/Keyspace.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/ListKey.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/SetKey.php create mode 100755 vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php create mode 100755 vendor/predis/predis/src/Command/Command.php create mode 100755 vendor/predis/predis/src/Command/CommandInterface.php create mode 100755 vendor/predis/predis/src/Command/ConnectionAuth.php create mode 100755 vendor/predis/predis/src/Command/ConnectionEcho.php create mode 100755 vendor/predis/predis/src/Command/ConnectionPing.php create mode 100755 vendor/predis/predis/src/Command/ConnectionQuit.php create mode 100755 vendor/predis/predis/src/Command/ConnectionSelect.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoAdd.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoDist.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoHash.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoPos.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoRadius.php create mode 100755 vendor/predis/predis/src/Command/GeospatialGeoRadiusByMember.php create mode 100755 vendor/predis/predis/src/Command/HashDelete.php create mode 100755 vendor/predis/predis/src/Command/HashExists.php create mode 100755 vendor/predis/predis/src/Command/HashGet.php create mode 100755 vendor/predis/predis/src/Command/HashGetAll.php create mode 100755 vendor/predis/predis/src/Command/HashGetMultiple.php create mode 100755 vendor/predis/predis/src/Command/HashIncrementBy.php create mode 100755 vendor/predis/predis/src/Command/HashIncrementByFloat.php create mode 100755 vendor/predis/predis/src/Command/HashKeys.php create mode 100755 vendor/predis/predis/src/Command/HashLength.php create mode 100755 vendor/predis/predis/src/Command/HashScan.php create mode 100755 vendor/predis/predis/src/Command/HashSet.php create mode 100755 vendor/predis/predis/src/Command/HashSetMultiple.php create mode 100755 vendor/predis/predis/src/Command/HashSetPreserve.php create mode 100755 vendor/predis/predis/src/Command/HashStringLength.php create mode 100755 vendor/predis/predis/src/Command/HashValues.php create mode 100755 vendor/predis/predis/src/Command/HyperLogLogAdd.php create mode 100755 vendor/predis/predis/src/Command/HyperLogLogCount.php create mode 100755 vendor/predis/predis/src/Command/HyperLogLogMerge.php create mode 100755 vendor/predis/predis/src/Command/KeyDelete.php create mode 100755 vendor/predis/predis/src/Command/KeyDump.php create mode 100755 vendor/predis/predis/src/Command/KeyExists.php create mode 100755 vendor/predis/predis/src/Command/KeyExpire.php create mode 100755 vendor/predis/predis/src/Command/KeyExpireAt.php create mode 100755 vendor/predis/predis/src/Command/KeyKeys.php create mode 100755 vendor/predis/predis/src/Command/KeyMigrate.php create mode 100755 vendor/predis/predis/src/Command/KeyMove.php create mode 100755 vendor/predis/predis/src/Command/KeyPersist.php create mode 100755 vendor/predis/predis/src/Command/KeyPreciseExpire.php create mode 100755 vendor/predis/predis/src/Command/KeyPreciseExpireAt.php create mode 100755 vendor/predis/predis/src/Command/KeyPreciseTimeToLive.php create mode 100755 vendor/predis/predis/src/Command/KeyRandom.php create mode 100755 vendor/predis/predis/src/Command/KeyRename.php create mode 100755 vendor/predis/predis/src/Command/KeyRenamePreserve.php create mode 100755 vendor/predis/predis/src/Command/KeyRestore.php create mode 100755 vendor/predis/predis/src/Command/KeyScan.php create mode 100755 vendor/predis/predis/src/Command/KeySort.php create mode 100755 vendor/predis/predis/src/Command/KeyTimeToLive.php create mode 100755 vendor/predis/predis/src/Command/KeyType.php create mode 100755 vendor/predis/predis/src/Command/ListIndex.php create mode 100755 vendor/predis/predis/src/Command/ListInsert.php create mode 100755 vendor/predis/predis/src/Command/ListLength.php create mode 100755 vendor/predis/predis/src/Command/ListPopFirst.php create mode 100755 vendor/predis/predis/src/Command/ListPopFirstBlocking.php create mode 100755 vendor/predis/predis/src/Command/ListPopLast.php create mode 100755 vendor/predis/predis/src/Command/ListPopLastBlocking.php create mode 100755 vendor/predis/predis/src/Command/ListPopLastPushHead.php create mode 100755 vendor/predis/predis/src/Command/ListPopLastPushHeadBlocking.php create mode 100755 vendor/predis/predis/src/Command/ListPushHead.php create mode 100755 vendor/predis/predis/src/Command/ListPushHeadX.php create mode 100755 vendor/predis/predis/src/Command/ListPushTail.php create mode 100755 vendor/predis/predis/src/Command/ListPushTailX.php create mode 100755 vendor/predis/predis/src/Command/ListRange.php create mode 100755 vendor/predis/predis/src/Command/ListRemove.php create mode 100755 vendor/predis/predis/src/Command/ListSet.php create mode 100755 vendor/predis/predis/src/Command/ListTrim.php create mode 100755 vendor/predis/predis/src/Command/PrefixableCommandInterface.php create mode 100755 vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php create mode 100755 vendor/predis/predis/src/Command/Processor/ProcessorChain.php create mode 100755 vendor/predis/predis/src/Command/Processor/ProcessorInterface.php create mode 100755 vendor/predis/predis/src/Command/PubSubPublish.php create mode 100755 vendor/predis/predis/src/Command/PubSubPubsub.php create mode 100755 vendor/predis/predis/src/Command/PubSubSubscribe.php create mode 100755 vendor/predis/predis/src/Command/PubSubSubscribeByPattern.php create mode 100755 vendor/predis/predis/src/Command/PubSubUnsubscribe.php create mode 100755 vendor/predis/predis/src/Command/PubSubUnsubscribeByPattern.php create mode 100755 vendor/predis/predis/src/Command/RawCommand.php create mode 100755 vendor/predis/predis/src/Command/ScriptCommand.php create mode 100755 vendor/predis/predis/src/Command/ServerBackgroundRewriteAOF.php create mode 100755 vendor/predis/predis/src/Command/ServerBackgroundSave.php create mode 100755 vendor/predis/predis/src/Command/ServerClient.php create mode 100755 vendor/predis/predis/src/Command/ServerCommand.php create mode 100755 vendor/predis/predis/src/Command/ServerConfig.php create mode 100755 vendor/predis/predis/src/Command/ServerDatabaseSize.php create mode 100755 vendor/predis/predis/src/Command/ServerEval.php create mode 100755 vendor/predis/predis/src/Command/ServerEvalSHA.php create mode 100755 vendor/predis/predis/src/Command/ServerFlushAll.php create mode 100755 vendor/predis/predis/src/Command/ServerFlushDatabase.php create mode 100755 vendor/predis/predis/src/Command/ServerInfo.php create mode 100755 vendor/predis/predis/src/Command/ServerInfoV26x.php create mode 100755 vendor/predis/predis/src/Command/ServerLastSave.php create mode 100755 vendor/predis/predis/src/Command/ServerMonitor.php create mode 100755 vendor/predis/predis/src/Command/ServerObject.php create mode 100755 vendor/predis/predis/src/Command/ServerSave.php create mode 100755 vendor/predis/predis/src/Command/ServerScript.php create mode 100755 vendor/predis/predis/src/Command/ServerSentinel.php create mode 100755 vendor/predis/predis/src/Command/ServerShutdown.php create mode 100755 vendor/predis/predis/src/Command/ServerSlaveOf.php create mode 100755 vendor/predis/predis/src/Command/ServerSlowlog.php create mode 100755 vendor/predis/predis/src/Command/ServerTime.php create mode 100755 vendor/predis/predis/src/Command/SetAdd.php create mode 100755 vendor/predis/predis/src/Command/SetCardinality.php create mode 100755 vendor/predis/predis/src/Command/SetDifference.php create mode 100755 vendor/predis/predis/src/Command/SetDifferenceStore.php create mode 100755 vendor/predis/predis/src/Command/SetIntersection.php create mode 100755 vendor/predis/predis/src/Command/SetIntersectionStore.php create mode 100755 vendor/predis/predis/src/Command/SetIsMember.php create mode 100755 vendor/predis/predis/src/Command/SetMembers.php create mode 100755 vendor/predis/predis/src/Command/SetMove.php create mode 100755 vendor/predis/predis/src/Command/SetPop.php create mode 100755 vendor/predis/predis/src/Command/SetRandomMember.php create mode 100755 vendor/predis/predis/src/Command/SetRemove.php create mode 100755 vendor/predis/predis/src/Command/SetScan.php create mode 100755 vendor/predis/predis/src/Command/SetUnion.php create mode 100755 vendor/predis/predis/src/Command/SetUnionStore.php create mode 100755 vendor/predis/predis/src/Command/StringAppend.php create mode 100755 vendor/predis/predis/src/Command/StringBitCount.php create mode 100755 vendor/predis/predis/src/Command/StringBitField.php create mode 100755 vendor/predis/predis/src/Command/StringBitOp.php create mode 100755 vendor/predis/predis/src/Command/StringBitPos.php create mode 100755 vendor/predis/predis/src/Command/StringDecrement.php create mode 100755 vendor/predis/predis/src/Command/StringDecrementBy.php create mode 100755 vendor/predis/predis/src/Command/StringGet.php create mode 100755 vendor/predis/predis/src/Command/StringGetBit.php create mode 100755 vendor/predis/predis/src/Command/StringGetMultiple.php create mode 100755 vendor/predis/predis/src/Command/StringGetRange.php create mode 100755 vendor/predis/predis/src/Command/StringGetSet.php create mode 100755 vendor/predis/predis/src/Command/StringIncrement.php create mode 100755 vendor/predis/predis/src/Command/StringIncrementBy.php create mode 100755 vendor/predis/predis/src/Command/StringIncrementByFloat.php create mode 100755 vendor/predis/predis/src/Command/StringPreciseSetExpire.php create mode 100755 vendor/predis/predis/src/Command/StringSet.php create mode 100755 vendor/predis/predis/src/Command/StringSetBit.php create mode 100755 vendor/predis/predis/src/Command/StringSetExpire.php create mode 100755 vendor/predis/predis/src/Command/StringSetMultiple.php create mode 100755 vendor/predis/predis/src/Command/StringSetMultiplePreserve.php create mode 100755 vendor/predis/predis/src/Command/StringSetPreserve.php create mode 100755 vendor/predis/predis/src/Command/StringSetRange.php create mode 100755 vendor/predis/predis/src/Command/StringStrlen.php create mode 100755 vendor/predis/predis/src/Command/StringSubstr.php create mode 100755 vendor/predis/predis/src/Command/TransactionDiscard.php create mode 100755 vendor/predis/predis/src/Command/TransactionExec.php create mode 100755 vendor/predis/predis/src/Command/TransactionMulti.php create mode 100755 vendor/predis/predis/src/Command/TransactionUnwatch.php create mode 100755 vendor/predis/predis/src/Command/TransactionWatch.php create mode 100755 vendor/predis/predis/src/Command/ZSetAdd.php create mode 100755 vendor/predis/predis/src/Command/ZSetCardinality.php create mode 100755 vendor/predis/predis/src/Command/ZSetCount.php create mode 100755 vendor/predis/predis/src/Command/ZSetIncrementBy.php create mode 100755 vendor/predis/predis/src/Command/ZSetIntersectionStore.php create mode 100755 vendor/predis/predis/src/Command/ZSetLexCount.php create mode 100755 vendor/predis/predis/src/Command/ZSetRange.php create mode 100755 vendor/predis/predis/src/Command/ZSetRangeByLex.php create mode 100755 vendor/predis/predis/src/Command/ZSetRangeByScore.php create mode 100755 vendor/predis/predis/src/Command/ZSetRank.php create mode 100755 vendor/predis/predis/src/Command/ZSetRemove.php create mode 100755 vendor/predis/predis/src/Command/ZSetRemoveRangeByLex.php create mode 100755 vendor/predis/predis/src/Command/ZSetRemoveRangeByRank.php create mode 100755 vendor/predis/predis/src/Command/ZSetRemoveRangeByScore.php create mode 100755 vendor/predis/predis/src/Command/ZSetReverseRange.php create mode 100755 vendor/predis/predis/src/Command/ZSetReverseRangeByLex.php create mode 100755 vendor/predis/predis/src/Command/ZSetReverseRangeByScore.php create mode 100755 vendor/predis/predis/src/Command/ZSetReverseRank.php create mode 100755 vendor/predis/predis/src/Command/ZSetScan.php create mode 100755 vendor/predis/predis/src/Command/ZSetScore.php create mode 100755 vendor/predis/predis/src/Command/ZSetUnionStore.php create mode 100755 vendor/predis/predis/src/CommunicationException.php create mode 100755 vendor/predis/predis/src/Configuration/ClusterOption.php create mode 100755 vendor/predis/predis/src/Configuration/ConnectionFactoryOption.php create mode 100755 vendor/predis/predis/src/Configuration/ExceptionsOption.php create mode 100755 vendor/predis/predis/src/Configuration/OptionInterface.php create mode 100755 vendor/predis/predis/src/Configuration/Options.php create mode 100755 vendor/predis/predis/src/Configuration/OptionsInterface.php create mode 100755 vendor/predis/predis/src/Configuration/PrefixOption.php create mode 100755 vendor/predis/predis/src/Configuration/ProfileOption.php create mode 100755 vendor/predis/predis/src/Configuration/ReplicationOption.php create mode 100755 vendor/predis/predis/src/Connection/AbstractConnection.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/ClusterInterface.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/PredisCluster.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/ReplicationInterface.php create mode 100755 vendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php create mode 100755 vendor/predis/predis/src/Connection/AggregateConnectionInterface.php create mode 100755 vendor/predis/predis/src/Connection/CompositeConnectionInterface.php create mode 100755 vendor/predis/predis/src/Connection/CompositeStreamConnection.php create mode 100755 vendor/predis/predis/src/Connection/ConnectionException.php create mode 100755 vendor/predis/predis/src/Connection/ConnectionInterface.php create mode 100755 vendor/predis/predis/src/Connection/Factory.php create mode 100755 vendor/predis/predis/src/Connection/FactoryInterface.php create mode 100755 vendor/predis/predis/src/Connection/NodeConnectionInterface.php create mode 100755 vendor/predis/predis/src/Connection/Parameters.php create mode 100755 vendor/predis/predis/src/Connection/ParametersInterface.php create mode 100755 vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php create mode 100755 vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php create mode 100755 vendor/predis/predis/src/Connection/StreamConnection.php create mode 100755 vendor/predis/predis/src/Connection/WebdisConnection.php create mode 100755 vendor/predis/predis/src/Monitor/Consumer.php create mode 100755 vendor/predis/predis/src/NotSupportedException.php create mode 100755 vendor/predis/predis/src/Pipeline/Atomic.php create mode 100755 vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php create mode 100755 vendor/predis/predis/src/Pipeline/FireAndForget.php create mode 100755 vendor/predis/predis/src/Pipeline/Pipeline.php create mode 100755 vendor/predis/predis/src/PredisException.php create mode 100755 vendor/predis/predis/src/Profile/Factory.php create mode 100755 vendor/predis/predis/src/Profile/ProfileInterface.php create mode 100755 vendor/predis/predis/src/Profile/RedisProfile.php create mode 100755 vendor/predis/predis/src/Profile/RedisUnstable.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion200.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion220.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion240.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion260.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion280.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion300.php create mode 100755 vendor/predis/predis/src/Profile/RedisVersion320.php create mode 100755 vendor/predis/predis/src/Protocol/ProtocolException.php create mode 100755 vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php create mode 100755 vendor/predis/predis/src/Protocol/RequestSerializerInterface.php create mode 100755 vendor/predis/predis/src/Protocol/ResponseReaderInterface.php create mode 100755 vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php create mode 100755 vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php create mode 100755 vendor/predis/predis/src/Protocol/Text/RequestSerializer.php create mode 100755 vendor/predis/predis/src/Protocol/Text/ResponseReader.php create mode 100755 vendor/predis/predis/src/PubSub/AbstractConsumer.php create mode 100755 vendor/predis/predis/src/PubSub/Consumer.php create mode 100755 vendor/predis/predis/src/PubSub/DispatcherLoop.php create mode 100755 vendor/predis/predis/src/Replication/MissingMasterException.php create mode 100755 vendor/predis/predis/src/Replication/ReplicationStrategy.php create mode 100755 vendor/predis/predis/src/Replication/RoleException.php create mode 100755 vendor/predis/predis/src/Response/Error.php create mode 100755 vendor/predis/predis/src/Response/ErrorInterface.php create mode 100755 vendor/predis/predis/src/Response/Iterator/MultiBulk.php create mode 100755 vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php create mode 100755 vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php create mode 100755 vendor/predis/predis/src/Response/ResponseInterface.php create mode 100755 vendor/predis/predis/src/Response/ServerException.php create mode 100755 vendor/predis/predis/src/Response/Status.php create mode 100755 vendor/predis/predis/src/Session/Handler.php create mode 100755 vendor/predis/predis/src/Transaction/AbortedMultiExecException.php create mode 100755 vendor/predis/predis/src/Transaction/MultiExec.php create mode 100755 vendor/predis/predis/src/Transaction/MultiExecState.php create mode 100755 vendor/predis/predis/tests/README.md create mode 100755 vendor/predis/predis/tests/apply-patches.php create mode 100755 vendor/predis/predis/tests/phpunit_mock_objects.patch create mode 100755 vendor/predis/predis/tests/phpunit_php7.patch create mode 100755 vendor/predis/predis/tests/phpunit_php8.patch create mode 100755 vendor/predis/predis/tests/phpunit_php81.patch create mode 100755 vendor/psr/cache/CHANGELOG.md create mode 100755 vendor/psr/cache/LICENSE.txt create mode 100755 vendor/psr/cache/README.md create mode 100755 vendor/psr/cache/composer.json create mode 100755 vendor/psr/cache/src/CacheException.php create mode 100755 vendor/psr/cache/src/CacheItemInterface.php create mode 100755 vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100755 vendor/psr/cache/src/InvalidArgumentException.php create mode 100755 vendor/psr/clock/CHANGELOG.md create mode 100755 vendor/psr/clock/LICENSE create mode 100755 vendor/psr/clock/README.md create mode 100755 vendor/psr/clock/composer.json create mode 100755 vendor/psr/clock/src/ClockInterface.php create mode 100755 vendor/psr/container/LICENSE create mode 100755 vendor/psr/container/README.md create mode 100755 vendor/psr/container/composer.json create mode 100755 vendor/psr/container/src/ContainerExceptionInterface.php create mode 100755 vendor/psr/container/src/ContainerInterface.php create mode 100755 vendor/psr/container/src/NotFoundExceptionInterface.php create mode 100755 vendor/psr/event-dispatcher/LICENSE create mode 100755 vendor/psr/event-dispatcher/README.md create mode 100755 vendor/psr/event-dispatcher/composer.json create mode 100755 vendor/psr/event-dispatcher/src/EventDispatcherInterface.php create mode 100755 vendor/psr/event-dispatcher/src/ListenerProviderInterface.php create mode 100755 vendor/psr/event-dispatcher/src/StoppableEventInterface.php create mode 100755 vendor/psr/http-client/CHANGELOG.md create mode 100755 vendor/psr/http-client/LICENSE create mode 100755 vendor/psr/http-client/README.md create mode 100755 vendor/psr/http-client/composer.json create mode 100755 vendor/psr/http-client/src/ClientExceptionInterface.php create mode 100755 vendor/psr/http-client/src/ClientInterface.php create mode 100755 vendor/psr/http-client/src/NetworkExceptionInterface.php create mode 100755 vendor/psr/http-client/src/RequestExceptionInterface.php create mode 100755 vendor/psr/http-factory/LICENSE create mode 100755 vendor/psr/http-factory/README.md create mode 100755 vendor/psr/http-factory/composer.json create mode 100755 vendor/psr/http-factory/src/RequestFactoryInterface.php create mode 100755 vendor/psr/http-factory/src/ResponseFactoryInterface.php create mode 100755 vendor/psr/http-factory/src/ServerRequestFactoryInterface.php create mode 100755 vendor/psr/http-factory/src/StreamFactoryInterface.php create mode 100755 vendor/psr/http-factory/src/UploadedFileFactoryInterface.php create mode 100755 vendor/psr/http-factory/src/UriFactoryInterface.php create mode 100755 vendor/psr/http-message/CHANGELOG.md create mode 100755 vendor/psr/http-message/LICENSE create mode 100755 vendor/psr/http-message/README.md create mode 100755 vendor/psr/http-message/composer.json create mode 100755 vendor/psr/http-message/docs/PSR7-Interfaces.md create mode 100755 vendor/psr/http-message/docs/PSR7-Usage.md create mode 100755 vendor/psr/http-message/src/MessageInterface.php create mode 100755 vendor/psr/http-message/src/RequestInterface.php create mode 100755 vendor/psr/http-message/src/ResponseInterface.php create mode 100755 vendor/psr/http-message/src/ServerRequestInterface.php create mode 100755 vendor/psr/http-message/src/StreamInterface.php create mode 100755 vendor/psr/http-message/src/UploadedFileInterface.php create mode 100755 vendor/psr/http-message/src/UriInterface.php create mode 100755 vendor/psr/log/LICENSE create mode 100755 vendor/psr/log/README.md create mode 100755 vendor/psr/log/composer.json create mode 100755 vendor/psr/log/src/AbstractLogger.php create mode 100755 vendor/psr/log/src/InvalidArgumentException.php create mode 100755 vendor/psr/log/src/LogLevel.php create mode 100755 vendor/psr/log/src/LoggerAwareInterface.php create mode 100755 vendor/psr/log/src/LoggerAwareTrait.php create mode 100755 vendor/psr/log/src/LoggerInterface.php create mode 100755 vendor/psr/log/src/LoggerTrait.php create mode 100755 vendor/psr/log/src/NullLogger.php create mode 100755 vendor/psr/simple-cache/LICENSE.md create mode 100755 vendor/psr/simple-cache/README.md create mode 100755 vendor/psr/simple-cache/composer.json create mode 100755 vendor/psr/simple-cache/src/CacheException.php create mode 100755 vendor/psr/simple-cache/src/CacheInterface.php create mode 100755 vendor/psr/simple-cache/src/InvalidArgumentException.php create mode 100755 vendor/rakit/validation/LICENSE.md create mode 100755 vendor/rakit/validation/README.md create mode 100755 vendor/rakit/validation/composer.json create mode 100755 vendor/rakit/validation/phpcs.xml create mode 100755 vendor/rakit/validation/src/Attribute.php create mode 100755 vendor/rakit/validation/src/ErrorBag.php create mode 100755 vendor/rakit/validation/src/Helper.php create mode 100755 vendor/rakit/validation/src/MimeTypeGuesser.php create mode 100755 vendor/rakit/validation/src/MissingRequiredParameterException.php create mode 100755 vendor/rakit/validation/src/Rule.php create mode 100755 vendor/rakit/validation/src/RuleNotFoundException.php create mode 100755 vendor/rakit/validation/src/RuleQuashException.php create mode 100755 vendor/rakit/validation/src/Rules/Accepted.php create mode 100755 vendor/rakit/validation/src/Rules/After.php create mode 100755 vendor/rakit/validation/src/Rules/Alpha.php create mode 100755 vendor/rakit/validation/src/Rules/AlphaDash.php create mode 100755 vendor/rakit/validation/src/Rules/AlphaNum.php create mode 100755 vendor/rakit/validation/src/Rules/AlphaSpaces.php create mode 100755 vendor/rakit/validation/src/Rules/Before.php create mode 100755 vendor/rakit/validation/src/Rules/Between.php create mode 100755 vendor/rakit/validation/src/Rules/Boolean.php create mode 100755 vendor/rakit/validation/src/Rules/Callback.php create mode 100755 vendor/rakit/validation/src/Rules/Date.php create mode 100755 vendor/rakit/validation/src/Rules/Defaults.php create mode 100755 vendor/rakit/validation/src/Rules/Different.php create mode 100755 vendor/rakit/validation/src/Rules/Digits.php create mode 100755 vendor/rakit/validation/src/Rules/DigitsBetween.php create mode 100755 vendor/rakit/validation/src/Rules/Email.php create mode 100755 vendor/rakit/validation/src/Rules/Extension.php create mode 100755 vendor/rakit/validation/src/Rules/In.php create mode 100755 vendor/rakit/validation/src/Rules/Integer.php create mode 100755 vendor/rakit/validation/src/Rules/Interfaces/BeforeValidate.php create mode 100755 vendor/rakit/validation/src/Rules/Interfaces/ModifyValue.php create mode 100755 vendor/rakit/validation/src/Rules/Ip.php create mode 100755 vendor/rakit/validation/src/Rules/Ipv4.php create mode 100755 vendor/rakit/validation/src/Rules/Ipv6.php create mode 100755 vendor/rakit/validation/src/Rules/Json.php create mode 100755 vendor/rakit/validation/src/Rules/Lowercase.php create mode 100755 vendor/rakit/validation/src/Rules/Max.php create mode 100755 vendor/rakit/validation/src/Rules/Mimes.php create mode 100755 vendor/rakit/validation/src/Rules/Min.php create mode 100755 vendor/rakit/validation/src/Rules/NotIn.php create mode 100755 vendor/rakit/validation/src/Rules/Nullable.php create mode 100755 vendor/rakit/validation/src/Rules/Numeric.php create mode 100755 vendor/rakit/validation/src/Rules/Present.php create mode 100755 vendor/rakit/validation/src/Rules/Regex.php create mode 100755 vendor/rakit/validation/src/Rules/Required.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredIf.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredUnless.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredWith.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredWithAll.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredWithout.php create mode 100755 vendor/rakit/validation/src/Rules/RequiredWithoutAll.php create mode 100755 vendor/rakit/validation/src/Rules/Same.php create mode 100755 vendor/rakit/validation/src/Rules/Traits/DateUtilsTrait.php create mode 100755 vendor/rakit/validation/src/Rules/Traits/FileTrait.php create mode 100755 vendor/rakit/validation/src/Rules/Traits/SizeTrait.php create mode 100755 vendor/rakit/validation/src/Rules/TypeArray.php create mode 100755 vendor/rakit/validation/src/Rules/UploadedFile.php create mode 100755 vendor/rakit/validation/src/Rules/Uppercase.php create mode 100755 vendor/rakit/validation/src/Rules/Url.php create mode 100755 vendor/rakit/validation/src/Traits/MessagesTrait.php create mode 100755 vendor/rakit/validation/src/Traits/TranslationsTrait.php create mode 100755 vendor/rakit/validation/src/Validation.php create mode 100755 vendor/rakit/validation/src/Validator.php create mode 100755 vendor/ralouphie/getallheaders/LICENSE create mode 100755 vendor/ralouphie/getallheaders/README.md create mode 100755 vendor/ralouphie/getallheaders/composer.json create mode 100755 vendor/ralouphie/getallheaders/src/getallheaders.php create mode 100755 vendor/robmorgan/phinx/LICENSE create mode 100755 vendor/robmorgan/phinx/README.md create mode 100755 vendor/robmorgan/phinx/app/phinx.php create mode 100755 vendor/robmorgan/phinx/app/web.php create mode 100755 vendor/robmorgan/phinx/bin/phinx create mode 100755 vendor/robmorgan/phinx/bin/phinx.bat create mode 100755 vendor/robmorgan/phinx/composer.json create mode 100755 vendor/robmorgan/phinx/data/phinx.json.dist create mode 100755 vendor/robmorgan/phinx/data/phinx.php.dist create mode 100755 vendor/robmorgan/phinx/data/phinx.yml.dist create mode 100755 vendor/robmorgan/phinx/docs/config/__init__.py create mode 100755 vendor/robmorgan/phinx/docs/config/all.py create mode 100755 vendor/robmorgan/phinx/docs/en/commands.rst create mode 100755 vendor/robmorgan/phinx/docs/en/conf.py create mode 100755 vendor/robmorgan/phinx/docs/en/configuration.rst create mode 100755 vendor/robmorgan/phinx/docs/en/contents.rst create mode 100755 vendor/robmorgan/phinx/docs/en/copyright.rst create mode 100755 vendor/robmorgan/phinx/docs/en/goals.rst create mode 100755 vendor/robmorgan/phinx/docs/en/index.rst create mode 100755 vendor/robmorgan/phinx/docs/en/install.rst create mode 100755 vendor/robmorgan/phinx/docs/en/intro.rst create mode 100755 vendor/robmorgan/phinx/docs/en/migrations.rst create mode 100755 vendor/robmorgan/phinx/docs/en/namespaces.rst create mode 100755 vendor/robmorgan/phinx/docs/en/seeding.rst create mode 100755 vendor/robmorgan/phinx/phpstan-baseline.neon create mode 100755 vendor/robmorgan/phinx/src/Phinx/Config/Config.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Config/ConfigInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Config/NamespaceAwareInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Config/NamespaceAwareTrait.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/AbstractCommand.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Breakpoint.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Create.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Init.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/ListAliases.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Migrate.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Rollback.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/SeedCreate.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/SeedRun.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Status.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/Command/Test.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Console/PhinxApplication.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/Action.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/AddColumn.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/AddForeignKey.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/AddIndex.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/ChangeColumn.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/ChangeComment.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/ChangePrimaryKey.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/CreateTable.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/DropForeignKey.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/DropIndex.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/DropTable.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/RemoveColumn.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/RenameColumn.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Action/RenameTable.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/AbstractAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/AdapterFactory.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/AdapterInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/AdapterWrapper.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/DirectActionInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/MysqlAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PostgresAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/ProxyAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/SQLiteAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/SqlServerAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/TablePrefixAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/TimedOutputAdapter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/UnsupportedColumnTypeException.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Adapter/WrapperInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Plan/AlterTable.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Plan/Intent.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Plan/NewTable.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Plan/Plan.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Plan/Solver/ActionSplitter.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Table.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Table/Column.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Table/ForeignKey.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Table/Index.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Table/Table.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Db/Util/AlterInstructions.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/AbstractMigration.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/AbstractTemplateCreation.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/CreationInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/IrreversibleMigrationException.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/Manager.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/Manager/Environment.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/Migration.template.php.dist create mode 100755 vendor/robmorgan/phinx/src/Phinx/Migration/MigrationInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Seed/AbstractSeed.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Seed/Seed.template.php.dist create mode 100755 vendor/robmorgan/phinx/src/Phinx/Seed/SeedInterface.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Util/Expression.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Util/Literal.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Util/Util.php create mode 100755 vendor/robmorgan/phinx/src/Phinx/Wrapper/TextWrapper.php create mode 100755 vendor/robmorgan/phinx/src/composer_autoloader.php create mode 100755 vendor/symfony/cache-contracts/CHANGELOG.md create mode 100755 vendor/symfony/cache-contracts/CacheInterface.php create mode 100755 vendor/symfony/cache-contracts/CacheTrait.php create mode 100755 vendor/symfony/cache-contracts/CallbackInterface.php create mode 100755 vendor/symfony/cache-contracts/ItemInterface.php create mode 100755 vendor/symfony/cache-contracts/LICENSE create mode 100755 vendor/symfony/cache-contracts/README.md create mode 100755 vendor/symfony/cache-contracts/TagAwareCacheInterface.php create mode 100755 vendor/symfony/cache-contracts/composer.json create mode 100755 vendor/symfony/cache/Adapter/AbstractAdapter.php create mode 100755 vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php create mode 100755 vendor/symfony/cache/Adapter/AdapterInterface.php create mode 100755 vendor/symfony/cache/Adapter/ApcuAdapter.php create mode 100755 vendor/symfony/cache/Adapter/ArrayAdapter.php create mode 100755 vendor/symfony/cache/Adapter/ChainAdapter.php create mode 100755 vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php create mode 100755 vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php create mode 100755 vendor/symfony/cache/Adapter/DoctrineAdapter.php create mode 100755 vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php create mode 100755 vendor/symfony/cache/Adapter/FilesystemAdapter.php create mode 100755 vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php create mode 100755 vendor/symfony/cache/Adapter/MemcachedAdapter.php create mode 100755 vendor/symfony/cache/Adapter/NullAdapter.php create mode 100755 vendor/symfony/cache/Adapter/ParameterNormalizer.php create mode 100755 vendor/symfony/cache/Adapter/PdoAdapter.php create mode 100755 vendor/symfony/cache/Adapter/PhpArrayAdapter.php create mode 100755 vendor/symfony/cache/Adapter/PhpFilesAdapter.php create mode 100755 vendor/symfony/cache/Adapter/ProxyAdapter.php create mode 100755 vendor/symfony/cache/Adapter/Psr16Adapter.php create mode 100755 vendor/symfony/cache/Adapter/RedisAdapter.php create mode 100755 vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php create mode 100755 vendor/symfony/cache/Adapter/TagAwareAdapter.php create mode 100755 vendor/symfony/cache/Adapter/TagAwareAdapterInterface.php create mode 100755 vendor/symfony/cache/Adapter/TraceableAdapter.php create mode 100755 vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php create mode 100755 vendor/symfony/cache/CHANGELOG.md create mode 100755 vendor/symfony/cache/CacheItem.php create mode 100755 vendor/symfony/cache/DataCollector/CacheDataCollector.php create mode 100755 vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php create mode 100755 vendor/symfony/cache/DependencyInjection/CachePoolClearerPass.php create mode 100755 vendor/symfony/cache/DependencyInjection/CachePoolPass.php create mode 100755 vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php create mode 100755 vendor/symfony/cache/DoctrineProvider.php create mode 100755 vendor/symfony/cache/Exception/CacheException.php create mode 100755 vendor/symfony/cache/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/cache/Exception/LogicException.php create mode 100755 vendor/symfony/cache/LICENSE create mode 100755 vendor/symfony/cache/LockRegistry.php create mode 100755 vendor/symfony/cache/Marshaller/DefaultMarshaller.php create mode 100755 vendor/symfony/cache/Marshaller/DeflateMarshaller.php create mode 100755 vendor/symfony/cache/Marshaller/MarshallerInterface.php create mode 100755 vendor/symfony/cache/Marshaller/SodiumMarshaller.php create mode 100755 vendor/symfony/cache/Marshaller/TagAwareMarshaller.php create mode 100755 vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php create mode 100755 vendor/symfony/cache/Messenger/EarlyExpirationHandler.php create mode 100755 vendor/symfony/cache/Messenger/EarlyExpirationMessage.php create mode 100755 vendor/symfony/cache/PruneableInterface.php create mode 100755 vendor/symfony/cache/Psr16Cache.php create mode 100755 vendor/symfony/cache/README.md create mode 100755 vendor/symfony/cache/ResettableInterface.php create mode 100755 vendor/symfony/cache/Traits/AbstractAdapterTrait.php create mode 100755 vendor/symfony/cache/Traits/ContractsTrait.php create mode 100755 vendor/symfony/cache/Traits/FilesystemCommonTrait.php create mode 100755 vendor/symfony/cache/Traits/FilesystemTrait.php create mode 100755 vendor/symfony/cache/Traits/ProxyTrait.php create mode 100755 vendor/symfony/cache/Traits/RedisClusterNodeProxy.php create mode 100755 vendor/symfony/cache/Traits/RedisClusterProxy.php create mode 100755 vendor/symfony/cache/Traits/RedisProxy.php create mode 100755 vendor/symfony/cache/Traits/RedisTrait.php create mode 100755 vendor/symfony/cache/composer.json create mode 100755 vendor/symfony/config/Builder/ClassBuilder.php create mode 100755 vendor/symfony/config/Builder/ConfigBuilderGenerator.php create mode 100755 vendor/symfony/config/Builder/ConfigBuilderGeneratorInterface.php create mode 100755 vendor/symfony/config/Builder/ConfigBuilderInterface.php create mode 100755 vendor/symfony/config/Builder/Method.php create mode 100755 vendor/symfony/config/Builder/Property.php create mode 100755 vendor/symfony/config/CHANGELOG.md create mode 100755 vendor/symfony/config/ConfigCache.php create mode 100755 vendor/symfony/config/ConfigCacheFactory.php create mode 100755 vendor/symfony/config/ConfigCacheFactoryInterface.php create mode 100755 vendor/symfony/config/ConfigCacheInterface.php create mode 100755 vendor/symfony/config/Definition/ArrayNode.php create mode 100755 vendor/symfony/config/Definition/BaseNode.php create mode 100755 vendor/symfony/config/Definition/BooleanNode.php create mode 100755 vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php create mode 100755 vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/ExprBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/MergeBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/NodeBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/NodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/NodeParentInterface.php create mode 100755 vendor/symfony/config/Definition/Builder/NormalizationBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php create mode 100755 vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/Builder/TreeBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/ValidationBuilder.php create mode 100755 vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php create mode 100755 vendor/symfony/config/Definition/ConfigurableInterface.php create mode 100755 vendor/symfony/config/Definition/Configuration.php create mode 100755 vendor/symfony/config/Definition/ConfigurationInterface.php create mode 100755 vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php create mode 100755 vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php create mode 100755 vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php create mode 100755 vendor/symfony/config/Definition/EnumNode.php create mode 100755 vendor/symfony/config/Definition/Exception/DuplicateKeyException.php create mode 100755 vendor/symfony/config/Definition/Exception/Exception.php create mode 100755 vendor/symfony/config/Definition/Exception/ForbiddenOverwriteException.php create mode 100755 vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php create mode 100755 vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php create mode 100755 vendor/symfony/config/Definition/Exception/InvalidTypeException.php create mode 100755 vendor/symfony/config/Definition/Exception/UnsetKeyException.php create mode 100755 vendor/symfony/config/Definition/FloatNode.php create mode 100755 vendor/symfony/config/Definition/IntegerNode.php create mode 100755 vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php create mode 100755 vendor/symfony/config/Definition/NodeInterface.php create mode 100755 vendor/symfony/config/Definition/NumericNode.php create mode 100755 vendor/symfony/config/Definition/Processor.php create mode 100755 vendor/symfony/config/Definition/PrototypeNodeInterface.php create mode 100755 vendor/symfony/config/Definition/PrototypedArrayNode.php create mode 100755 vendor/symfony/config/Definition/ScalarNode.php create mode 100755 vendor/symfony/config/Definition/VariableNode.php create mode 100755 vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php create mode 100755 vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php create mode 100755 vendor/symfony/config/Exception/LoaderLoadException.php create mode 100755 vendor/symfony/config/FileLocator.php create mode 100755 vendor/symfony/config/FileLocatorInterface.php create mode 100755 vendor/symfony/config/LICENSE create mode 100755 vendor/symfony/config/Loader/DelegatingLoader.php create mode 100755 vendor/symfony/config/Loader/DirectoryAwareLoaderInterface.php create mode 100755 vendor/symfony/config/Loader/FileLoader.php create mode 100755 vendor/symfony/config/Loader/GlobFileLoader.php create mode 100755 vendor/symfony/config/Loader/Loader.php create mode 100755 vendor/symfony/config/Loader/LoaderInterface.php create mode 100755 vendor/symfony/config/Loader/LoaderResolver.php create mode 100755 vendor/symfony/config/Loader/LoaderResolverInterface.php create mode 100755 vendor/symfony/config/Loader/ParamConfigurator.php create mode 100755 vendor/symfony/config/README.md create mode 100755 vendor/symfony/config/Resource/ClassExistenceResource.php create mode 100755 vendor/symfony/config/Resource/ComposerResource.php create mode 100755 vendor/symfony/config/Resource/DirectoryResource.php create mode 100755 vendor/symfony/config/Resource/FileExistenceResource.php create mode 100755 vendor/symfony/config/Resource/FileResource.php create mode 100755 vendor/symfony/config/Resource/GlobResource.php create mode 100755 vendor/symfony/config/Resource/ReflectionClassResource.php create mode 100755 vendor/symfony/config/Resource/ResourceInterface.php create mode 100755 vendor/symfony/config/Resource/SelfCheckingResourceChecker.php create mode 100755 vendor/symfony/config/Resource/SelfCheckingResourceInterface.php create mode 100755 vendor/symfony/config/ResourceCheckerConfigCache.php create mode 100755 vendor/symfony/config/ResourceCheckerConfigCacheFactory.php create mode 100755 vendor/symfony/config/ResourceCheckerInterface.php create mode 100755 vendor/symfony/config/Util/Exception/InvalidXmlException.php create mode 100755 vendor/symfony/config/Util/Exception/XmlParsingException.php create mode 100755 vendor/symfony/config/Util/XmlUtils.php create mode 100755 vendor/symfony/config/composer.json create mode 100755 vendor/symfony/console/Application.php create mode 100755 vendor/symfony/console/Attribute/AsCommand.php create mode 100755 vendor/symfony/console/CHANGELOG.md create mode 100755 vendor/symfony/console/CI/GithubActionReporter.php create mode 100755 vendor/symfony/console/Color.php create mode 100755 vendor/symfony/console/Command/Command.php create mode 100755 vendor/symfony/console/Command/CompleteCommand.php create mode 100755 vendor/symfony/console/Command/DumpCompletionCommand.php create mode 100755 vendor/symfony/console/Command/HelpCommand.php create mode 100755 vendor/symfony/console/Command/LazyCommand.php create mode 100755 vendor/symfony/console/Command/ListCommand.php create mode 100755 vendor/symfony/console/Command/LockableTrait.php create mode 100755 vendor/symfony/console/Command/SignalableCommandInterface.php create mode 100755 vendor/symfony/console/CommandLoader/CommandLoaderInterface.php create mode 100755 vendor/symfony/console/CommandLoader/ContainerCommandLoader.php create mode 100755 vendor/symfony/console/CommandLoader/FactoryCommandLoader.php create mode 100755 vendor/symfony/console/Completion/CompletionInput.php create mode 100755 vendor/symfony/console/Completion/CompletionSuggestions.php create mode 100755 vendor/symfony/console/Completion/Output/BashCompletionOutput.php create mode 100755 vendor/symfony/console/Completion/Output/CompletionOutputInterface.php create mode 100755 vendor/symfony/console/Completion/Suggestion.php create mode 100755 vendor/symfony/console/ConsoleEvents.php create mode 100755 vendor/symfony/console/Cursor.php create mode 100755 vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php create mode 100755 vendor/symfony/console/Descriptor/ApplicationDescription.php create mode 100755 vendor/symfony/console/Descriptor/Descriptor.php create mode 100755 vendor/symfony/console/Descriptor/DescriptorInterface.php create mode 100755 vendor/symfony/console/Descriptor/JsonDescriptor.php create mode 100755 vendor/symfony/console/Descriptor/MarkdownDescriptor.php create mode 100755 vendor/symfony/console/Descriptor/TextDescriptor.php create mode 100755 vendor/symfony/console/Descriptor/XmlDescriptor.php create mode 100755 vendor/symfony/console/Event/ConsoleCommandEvent.php create mode 100755 vendor/symfony/console/Event/ConsoleErrorEvent.php create mode 100755 vendor/symfony/console/Event/ConsoleEvent.php create mode 100755 vendor/symfony/console/Event/ConsoleSignalEvent.php create mode 100755 vendor/symfony/console/Event/ConsoleTerminateEvent.php create mode 100755 vendor/symfony/console/EventListener/ErrorListener.php create mode 100755 vendor/symfony/console/Exception/CommandNotFoundException.php create mode 100755 vendor/symfony/console/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/console/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/console/Exception/InvalidOptionException.php create mode 100755 vendor/symfony/console/Exception/LogicException.php create mode 100755 vendor/symfony/console/Exception/MissingInputException.php create mode 100755 vendor/symfony/console/Exception/NamespaceNotFoundException.php create mode 100755 vendor/symfony/console/Exception/RuntimeException.php create mode 100755 vendor/symfony/console/Formatter/NullOutputFormatter.php create mode 100755 vendor/symfony/console/Formatter/NullOutputFormatterStyle.php create mode 100755 vendor/symfony/console/Formatter/OutputFormatter.php create mode 100755 vendor/symfony/console/Formatter/OutputFormatterInterface.php create mode 100755 vendor/symfony/console/Formatter/OutputFormatterStyle.php create mode 100755 vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php create mode 100755 vendor/symfony/console/Formatter/OutputFormatterStyleStack.php create mode 100755 vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php create mode 100755 vendor/symfony/console/Helper/DebugFormatterHelper.php create mode 100755 vendor/symfony/console/Helper/DescriptorHelper.php create mode 100755 vendor/symfony/console/Helper/Dumper.php create mode 100755 vendor/symfony/console/Helper/FormatterHelper.php create mode 100755 vendor/symfony/console/Helper/Helper.php create mode 100755 vendor/symfony/console/Helper/HelperInterface.php create mode 100755 vendor/symfony/console/Helper/HelperSet.php create mode 100755 vendor/symfony/console/Helper/InputAwareHelper.php create mode 100755 vendor/symfony/console/Helper/ProcessHelper.php create mode 100755 vendor/symfony/console/Helper/ProgressBar.php create mode 100755 vendor/symfony/console/Helper/ProgressIndicator.php create mode 100755 vendor/symfony/console/Helper/QuestionHelper.php create mode 100755 vendor/symfony/console/Helper/SymfonyQuestionHelper.php create mode 100755 vendor/symfony/console/Helper/Table.php create mode 100755 vendor/symfony/console/Helper/TableCell.php create mode 100755 vendor/symfony/console/Helper/TableCellStyle.php create mode 100755 vendor/symfony/console/Helper/TableRows.php create mode 100755 vendor/symfony/console/Helper/TableSeparator.php create mode 100755 vendor/symfony/console/Helper/TableStyle.php create mode 100755 vendor/symfony/console/Input/ArgvInput.php create mode 100755 vendor/symfony/console/Input/ArrayInput.php create mode 100755 vendor/symfony/console/Input/Input.php create mode 100755 vendor/symfony/console/Input/InputArgument.php create mode 100755 vendor/symfony/console/Input/InputAwareInterface.php create mode 100755 vendor/symfony/console/Input/InputDefinition.php create mode 100755 vendor/symfony/console/Input/InputInterface.php create mode 100755 vendor/symfony/console/Input/InputOption.php create mode 100755 vendor/symfony/console/Input/StreamableInputInterface.php create mode 100755 vendor/symfony/console/Input/StringInput.php create mode 100755 vendor/symfony/console/LICENSE create mode 100755 vendor/symfony/console/Logger/ConsoleLogger.php create mode 100755 vendor/symfony/console/Output/BufferedOutput.php create mode 100755 vendor/symfony/console/Output/ConsoleOutput.php create mode 100755 vendor/symfony/console/Output/ConsoleOutputInterface.php create mode 100755 vendor/symfony/console/Output/ConsoleSectionOutput.php create mode 100755 vendor/symfony/console/Output/NullOutput.php create mode 100755 vendor/symfony/console/Output/Output.php create mode 100755 vendor/symfony/console/Output/OutputInterface.php create mode 100755 vendor/symfony/console/Output/StreamOutput.php create mode 100755 vendor/symfony/console/Output/TrimmedBufferOutput.php create mode 100755 vendor/symfony/console/Question/ChoiceQuestion.php create mode 100755 vendor/symfony/console/Question/ConfirmationQuestion.php create mode 100755 vendor/symfony/console/Question/Question.php create mode 100755 vendor/symfony/console/README.md create mode 100755 vendor/symfony/console/Resources/bin/hiddeninput.exe create mode 100755 vendor/symfony/console/Resources/completion.bash create mode 100755 vendor/symfony/console/SignalRegistry/SignalRegistry.php create mode 100755 vendor/symfony/console/SingleCommandApplication.php create mode 100755 vendor/symfony/console/Style/OutputStyle.php create mode 100755 vendor/symfony/console/Style/StyleInterface.php create mode 100755 vendor/symfony/console/Style/SymfonyStyle.php create mode 100755 vendor/symfony/console/Terminal.php create mode 100755 vendor/symfony/console/Tester/ApplicationTester.php create mode 100755 vendor/symfony/console/Tester/CommandCompletionTester.php create mode 100755 vendor/symfony/console/Tester/CommandTester.php create mode 100755 vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php create mode 100755 vendor/symfony/console/Tester/TesterTrait.php create mode 100755 vendor/symfony/console/composer.json create mode 100755 vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100755 vendor/symfony/deprecation-contracts/LICENSE create mode 100755 vendor/symfony/deprecation-contracts/README.md create mode 100755 vendor/symfony/deprecation-contracts/composer.json create mode 100755 vendor/symfony/deprecation-contracts/function.php create mode 100755 vendor/symfony/dotenv/CHANGELOG.md create mode 100755 vendor/symfony/dotenv/Command/DebugCommand.php create mode 100755 vendor/symfony/dotenv/Command/DotenvDumpCommand.php create mode 100755 vendor/symfony/dotenv/Dotenv.php create mode 100755 vendor/symfony/dotenv/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/dotenv/Exception/FormatException.php create mode 100755 vendor/symfony/dotenv/Exception/FormatExceptionContext.php create mode 100755 vendor/symfony/dotenv/Exception/PathException.php create mode 100755 vendor/symfony/dotenv/LICENSE create mode 100755 vendor/symfony/dotenv/README.md create mode 100755 vendor/symfony/dotenv/composer.json create mode 100755 vendor/symfony/event-dispatcher-contracts/CHANGELOG.md create mode 100755 vendor/symfony/event-dispatcher-contracts/Event.php create mode 100755 vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php create mode 100755 vendor/symfony/event-dispatcher-contracts/LICENSE create mode 100755 vendor/symfony/event-dispatcher-contracts/README.md create mode 100755 vendor/symfony/event-dispatcher-contracts/composer.json create mode 100755 vendor/symfony/event-dispatcher/Attribute/AsEventListener.php create mode 100755 vendor/symfony/event-dispatcher/CHANGELOG.md create mode 100755 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php create mode 100755 vendor/symfony/event-dispatcher/Debug/WrappedListener.php create mode 100755 vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php create mode 100755 vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php create mode 100755 vendor/symfony/event-dispatcher/EventDispatcher.php create mode 100755 vendor/symfony/event-dispatcher/EventDispatcherInterface.php create mode 100755 vendor/symfony/event-dispatcher/EventSubscriberInterface.php create mode 100755 vendor/symfony/event-dispatcher/GenericEvent.php create mode 100755 vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php create mode 100755 vendor/symfony/event-dispatcher/LICENSE create mode 100755 vendor/symfony/event-dispatcher/README.md create mode 100755 vendor/symfony/event-dispatcher/composer.json create mode 100755 vendor/symfony/filesystem/CHANGELOG.md create mode 100755 vendor/symfony/filesystem/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/filesystem/Exception/FileNotFoundException.php create mode 100755 vendor/symfony/filesystem/Exception/IOException.php create mode 100755 vendor/symfony/filesystem/Exception/IOExceptionInterface.php create mode 100755 vendor/symfony/filesystem/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/filesystem/Exception/RuntimeException.php create mode 100755 vendor/symfony/filesystem/Filesystem.php create mode 100755 vendor/symfony/filesystem/LICENSE create mode 100755 vendor/symfony/filesystem/Path.php create mode 100755 vendor/symfony/filesystem/README.md create mode 100755 vendor/symfony/filesystem/composer.json create mode 100755 vendor/symfony/mailer/CHANGELOG.md create mode 100755 vendor/symfony/mailer/Command/MailerTestCommand.php create mode 100755 vendor/symfony/mailer/DataCollector/MessageDataCollector.php create mode 100755 vendor/symfony/mailer/DelayedEnvelope.php create mode 100755 vendor/symfony/mailer/Envelope.php create mode 100755 vendor/symfony/mailer/Event/FailedMessageEvent.php create mode 100755 vendor/symfony/mailer/Event/MessageEvent.php create mode 100755 vendor/symfony/mailer/Event/MessageEvents.php create mode 100755 vendor/symfony/mailer/Event/SentMessageEvent.php create mode 100755 vendor/symfony/mailer/EventListener/EnvelopeListener.php create mode 100755 vendor/symfony/mailer/EventListener/MessageListener.php create mode 100755 vendor/symfony/mailer/EventListener/MessageLoggerListener.php create mode 100755 vendor/symfony/mailer/EventListener/MessengerTransportListener.php create mode 100755 vendor/symfony/mailer/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/mailer/Exception/HttpTransportException.php create mode 100755 vendor/symfony/mailer/Exception/IncompleteDsnException.php create mode 100755 vendor/symfony/mailer/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/mailer/Exception/LogicException.php create mode 100755 vendor/symfony/mailer/Exception/RuntimeException.php create mode 100755 vendor/symfony/mailer/Exception/TransportException.php create mode 100755 vendor/symfony/mailer/Exception/TransportExceptionInterface.php create mode 100755 vendor/symfony/mailer/Exception/UnexpectedResponseException.php create mode 100755 vendor/symfony/mailer/Exception/UnsupportedSchemeException.php create mode 100755 vendor/symfony/mailer/Header/MetadataHeader.php create mode 100755 vendor/symfony/mailer/Header/TagHeader.php create mode 100755 vendor/symfony/mailer/LICENSE create mode 100755 vendor/symfony/mailer/Mailer.php create mode 100755 vendor/symfony/mailer/MailerInterface.php create mode 100755 vendor/symfony/mailer/Messenger/MessageHandler.php create mode 100755 vendor/symfony/mailer/Messenger/SendEmailMessage.php create mode 100755 vendor/symfony/mailer/README.md create mode 100755 vendor/symfony/mailer/SentMessage.php create mode 100755 vendor/symfony/mailer/Test/AbstractTransportFactoryTestCase.php create mode 100755 vendor/symfony/mailer/Test/Constraint/EmailCount.php create mode 100755 vendor/symfony/mailer/Test/Constraint/EmailIsQueued.php create mode 100755 vendor/symfony/mailer/Test/IncompleteDsnTestTrait.php create mode 100755 vendor/symfony/mailer/Test/TransportFactoryTestCase.php create mode 100755 vendor/symfony/mailer/Transport.php create mode 100755 vendor/symfony/mailer/Transport/AbstractApiTransport.php create mode 100755 vendor/symfony/mailer/Transport/AbstractHttpTransport.php create mode 100755 vendor/symfony/mailer/Transport/AbstractTransport.php create mode 100755 vendor/symfony/mailer/Transport/AbstractTransportFactory.php create mode 100755 vendor/symfony/mailer/Transport/Dsn.php create mode 100755 vendor/symfony/mailer/Transport/FailoverTransport.php create mode 100755 vendor/symfony/mailer/Transport/NativeTransportFactory.php create mode 100755 vendor/symfony/mailer/Transport/NullTransport.php create mode 100755 vendor/symfony/mailer/Transport/NullTransportFactory.php create mode 100755 vendor/symfony/mailer/Transport/RoundRobinTransport.php create mode 100755 vendor/symfony/mailer/Transport/SendmailTransport.php create mode 100755 vendor/symfony/mailer/Transport/SendmailTransportFactory.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Auth/AuthenticatorInterface.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Auth/CramMd5Authenticator.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Auth/LoginAuthenticator.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Auth/PlainAuthenticator.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Auth/XOAuth2Authenticator.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/EsmtpTransport.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/EsmtpTransportFactory.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/SmtpTransport.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Stream/AbstractStream.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Stream/ProcessStream.php create mode 100755 vendor/symfony/mailer/Transport/Smtp/Stream/SocketStream.php create mode 100755 vendor/symfony/mailer/Transport/TransportFactoryInterface.php create mode 100755 vendor/symfony/mailer/Transport/TransportInterface.php create mode 100755 vendor/symfony/mailer/Transport/Transports.php create mode 100755 vendor/symfony/mailer/composer.json create mode 100755 vendor/symfony/mime/Address.php create mode 100755 vendor/symfony/mime/BodyRendererInterface.php create mode 100755 vendor/symfony/mime/CHANGELOG.md create mode 100755 vendor/symfony/mime/CharacterStream.php create mode 100755 vendor/symfony/mime/Crypto/DkimOptions.php create mode 100755 vendor/symfony/mime/Crypto/DkimSigner.php create mode 100755 vendor/symfony/mime/Crypto/SMime.php create mode 100755 vendor/symfony/mime/Crypto/SMimeEncrypter.php create mode 100755 vendor/symfony/mime/Crypto/SMimeSigner.php create mode 100755 vendor/symfony/mime/DependencyInjection/AddMimeTypeGuesserPass.php create mode 100755 vendor/symfony/mime/DraftEmail.php create mode 100755 vendor/symfony/mime/Email.php create mode 100755 vendor/symfony/mime/Encoder/AddressEncoderInterface.php create mode 100755 vendor/symfony/mime/Encoder/Base64ContentEncoder.php create mode 100755 vendor/symfony/mime/Encoder/Base64Encoder.php create mode 100755 vendor/symfony/mime/Encoder/Base64MimeHeaderEncoder.php create mode 100755 vendor/symfony/mime/Encoder/ContentEncoderInterface.php create mode 100755 vendor/symfony/mime/Encoder/EightBitContentEncoder.php create mode 100755 vendor/symfony/mime/Encoder/EncoderInterface.php create mode 100755 vendor/symfony/mime/Encoder/IdnAddressEncoder.php create mode 100755 vendor/symfony/mime/Encoder/MimeHeaderEncoderInterface.php create mode 100755 vendor/symfony/mime/Encoder/QpContentEncoder.php create mode 100755 vendor/symfony/mime/Encoder/QpEncoder.php create mode 100755 vendor/symfony/mime/Encoder/QpMimeHeaderEncoder.php create mode 100755 vendor/symfony/mime/Encoder/Rfc2231Encoder.php create mode 100755 vendor/symfony/mime/Exception/AddressEncoderException.php create mode 100755 vendor/symfony/mime/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/mime/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/mime/Exception/LogicException.php create mode 100755 vendor/symfony/mime/Exception/RfcComplianceException.php create mode 100755 vendor/symfony/mime/Exception/RuntimeException.php create mode 100755 vendor/symfony/mime/FileBinaryMimeTypeGuesser.php create mode 100755 vendor/symfony/mime/FileinfoMimeTypeGuesser.php create mode 100755 vendor/symfony/mime/Header/AbstractHeader.php create mode 100755 vendor/symfony/mime/Header/DateHeader.php create mode 100755 vendor/symfony/mime/Header/HeaderInterface.php create mode 100755 vendor/symfony/mime/Header/Headers.php create mode 100755 vendor/symfony/mime/Header/IdentificationHeader.php create mode 100755 vendor/symfony/mime/Header/MailboxHeader.php create mode 100755 vendor/symfony/mime/Header/MailboxListHeader.php create mode 100755 vendor/symfony/mime/Header/ParameterizedHeader.php create mode 100755 vendor/symfony/mime/Header/PathHeader.php create mode 100755 vendor/symfony/mime/Header/UnstructuredHeader.php create mode 100755 vendor/symfony/mime/HtmlToTextConverter/DefaultHtmlToTextConverter.php create mode 100755 vendor/symfony/mime/HtmlToTextConverter/HtmlToTextConverterInterface.php create mode 100755 vendor/symfony/mime/HtmlToTextConverter/LeagueHtmlToMarkdownConverter.php create mode 100755 vendor/symfony/mime/LICENSE create mode 100755 vendor/symfony/mime/Message.php create mode 100755 vendor/symfony/mime/MessageConverter.php create mode 100755 vendor/symfony/mime/MimeTypeGuesserInterface.php create mode 100755 vendor/symfony/mime/MimeTypes.php create mode 100755 vendor/symfony/mime/MimeTypesInterface.php create mode 100755 vendor/symfony/mime/Part/AbstractMultipartPart.php create mode 100755 vendor/symfony/mime/Part/AbstractPart.php create mode 100755 vendor/symfony/mime/Part/DataPart.php create mode 100755 vendor/symfony/mime/Part/File.php create mode 100755 vendor/symfony/mime/Part/MessagePart.php create mode 100755 vendor/symfony/mime/Part/Multipart/AlternativePart.php create mode 100755 vendor/symfony/mime/Part/Multipart/DigestPart.php create mode 100755 vendor/symfony/mime/Part/Multipart/FormDataPart.php create mode 100755 vendor/symfony/mime/Part/Multipart/MixedPart.php create mode 100755 vendor/symfony/mime/Part/Multipart/RelatedPart.php create mode 100755 vendor/symfony/mime/Part/SMimePart.php create mode 100755 vendor/symfony/mime/Part/TextPart.php create mode 100755 vendor/symfony/mime/README.md create mode 100755 vendor/symfony/mime/RawMessage.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailAddressContains.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailAttachmentCount.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailHasHeader.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailHeaderSame.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailHtmlBodyContains.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailSubjectContains.php create mode 100755 vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php create mode 100755 vendor/symfony/mime/composer.json create mode 100755 vendor/symfony/polyfill-ctype/Ctype.php create mode 100755 vendor/symfony/polyfill-ctype/LICENSE create mode 100755 vendor/symfony/polyfill-ctype/README.md create mode 100755 vendor/symfony/polyfill-ctype/bootstrap.php create mode 100755 vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100755 vendor/symfony/polyfill-ctype/composer.json create mode 100755 vendor/symfony/polyfill-intl-grapheme/Grapheme.php create mode 100755 vendor/symfony/polyfill-intl-grapheme/LICENSE create mode 100755 vendor/symfony/polyfill-intl-grapheme/README.md create mode 100755 vendor/symfony/polyfill-intl-grapheme/bootstrap.php create mode 100755 vendor/symfony/polyfill-intl-grapheme/bootstrap80.php create mode 100755 vendor/symfony/polyfill-intl-grapheme/composer.json create mode 100755 vendor/symfony/polyfill-intl-idn/Idn.php create mode 100755 vendor/symfony/polyfill-intl-idn/Info.php create mode 100755 vendor/symfony/polyfill-intl-idn/LICENSE create mode 100755 vendor/symfony/polyfill-intl-idn/README.md create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php create mode 100755 vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php create mode 100755 vendor/symfony/polyfill-intl-idn/bootstrap.php create mode 100755 vendor/symfony/polyfill-intl-idn/bootstrap80.php create mode 100755 vendor/symfony/polyfill-intl-idn/composer.json create mode 100755 vendor/symfony/polyfill-intl-normalizer/LICENSE create mode 100755 vendor/symfony/polyfill-intl-normalizer/Normalizer.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/README.md create mode 100755 vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/bootstrap.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/bootstrap80.php create mode 100755 vendor/symfony/polyfill-intl-normalizer/composer.json create mode 100755 vendor/symfony/polyfill-mbstring/LICENSE create mode 100755 vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100755 vendor/symfony/polyfill-mbstring/README.md create mode 100755 vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100755 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100755 vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100755 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100755 vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100755 vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100755 vendor/symfony/polyfill-mbstring/composer.json create mode 100755 vendor/symfony/polyfill-php73/LICENSE create mode 100755 vendor/symfony/polyfill-php73/Php73.php create mode 100755 vendor/symfony/polyfill-php73/README.md create mode 100755 vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php create mode 100755 vendor/symfony/polyfill-php73/bootstrap.php create mode 100755 vendor/symfony/polyfill-php73/composer.json create mode 100755 vendor/symfony/polyfill-php80/LICENSE create mode 100755 vendor/symfony/polyfill-php80/Php80.php create mode 100755 vendor/symfony/polyfill-php80/PhpToken.php create mode 100755 vendor/symfony/polyfill-php80/README.md create mode 100755 vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100755 vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php create mode 100755 vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100755 vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100755 vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100755 vendor/symfony/polyfill-php80/bootstrap.php create mode 100755 vendor/symfony/polyfill-php80/composer.json create mode 100755 vendor/symfony/service-contracts/Attribute/Required.php create mode 100755 vendor/symfony/service-contracts/Attribute/SubscribedService.php create mode 100755 vendor/symfony/service-contracts/CHANGELOG.md create mode 100755 vendor/symfony/service-contracts/LICENSE create mode 100755 vendor/symfony/service-contracts/README.md create mode 100755 vendor/symfony/service-contracts/ResetInterface.php create mode 100755 vendor/symfony/service-contracts/ServiceCollectionInterface.php create mode 100755 vendor/symfony/service-contracts/ServiceLocatorTrait.php create mode 100755 vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php create mode 100755 vendor/symfony/service-contracts/ServiceProviderInterface.php create mode 100755 vendor/symfony/service-contracts/ServiceSubscriberInterface.php create mode 100755 vendor/symfony/service-contracts/ServiceSubscriberTrait.php create mode 100755 vendor/symfony/service-contracts/Test/ServiceLocatorTest.php create mode 100755 vendor/symfony/service-contracts/Test/ServiceLocatorTestCase.php create mode 100755 vendor/symfony/service-contracts/composer.json create mode 100755 vendor/symfony/string/AbstractString.php create mode 100755 vendor/symfony/string/AbstractUnicodeString.php create mode 100755 vendor/symfony/string/ByteString.php create mode 100755 vendor/symfony/string/CHANGELOG.md create mode 100755 vendor/symfony/string/CodePointString.php create mode 100755 vendor/symfony/string/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/string/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/string/Exception/RuntimeException.php create mode 100755 vendor/symfony/string/Inflector/EnglishInflector.php create mode 100755 vendor/symfony/string/Inflector/FrenchInflector.php create mode 100755 vendor/symfony/string/Inflector/InflectorInterface.php create mode 100755 vendor/symfony/string/LICENSE create mode 100755 vendor/symfony/string/LazyString.php create mode 100755 vendor/symfony/string/README.md create mode 100755 vendor/symfony/string/Resources/data/wcswidth_table_wide.php create mode 100755 vendor/symfony/string/Resources/data/wcswidth_table_zero.php create mode 100755 vendor/symfony/string/Resources/functions.php create mode 100755 vendor/symfony/string/Slugger/AsciiSlugger.php create mode 100755 vendor/symfony/string/Slugger/SluggerInterface.php create mode 100755 vendor/symfony/string/UnicodeString.php create mode 100755 vendor/symfony/string/composer.json create mode 100755 vendor/symfony/translation-contracts/CHANGELOG.md create mode 100755 vendor/symfony/translation-contracts/LICENSE create mode 100755 vendor/symfony/translation-contracts/LocaleAwareInterface.php create mode 100755 vendor/symfony/translation-contracts/README.md create mode 100755 vendor/symfony/translation-contracts/Test/TranslatorTest.php create mode 100755 vendor/symfony/translation-contracts/TranslatableInterface.php create mode 100755 vendor/symfony/translation-contracts/TranslatorInterface.php create mode 100755 vendor/symfony/translation-contracts/TranslatorTrait.php create mode 100755 vendor/symfony/translation-contracts/composer.json create mode 100755 vendor/symfony/translation/CHANGELOG.md create mode 100755 vendor/symfony/translation/Catalogue/AbstractOperation.php create mode 100755 vendor/symfony/translation/Catalogue/MergeOperation.php create mode 100755 vendor/symfony/translation/Catalogue/OperationInterface.php create mode 100755 vendor/symfony/translation/Catalogue/TargetOperation.php create mode 100755 vendor/symfony/translation/CatalogueMetadataAwareInterface.php create mode 100755 vendor/symfony/translation/Command/TranslationPullCommand.php create mode 100755 vendor/symfony/translation/Command/TranslationPushCommand.php create mode 100755 vendor/symfony/translation/Command/TranslationTrait.php create mode 100755 vendor/symfony/translation/Command/XliffLintCommand.php create mode 100755 vendor/symfony/translation/DataCollector/TranslationDataCollector.php create mode 100755 vendor/symfony/translation/DataCollectorTranslator.php create mode 100755 vendor/symfony/translation/DependencyInjection/DataCollectorTranslatorPass.php create mode 100755 vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php create mode 100755 vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php create mode 100755 vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php create mode 100755 vendor/symfony/translation/DependencyInjection/TranslatorPass.php create mode 100755 vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php create mode 100755 vendor/symfony/translation/Dumper/CsvFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/DumperInterface.php create mode 100755 vendor/symfony/translation/Dumper/FileDumper.php create mode 100755 vendor/symfony/translation/Dumper/IcuResFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/IniFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/JsonFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/MoFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/PhpFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/PoFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/QtFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/XliffFileDumper.php create mode 100755 vendor/symfony/translation/Dumper/YamlFileDumper.php create mode 100755 vendor/symfony/translation/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/translation/Exception/IncompleteDsnException.php create mode 100755 vendor/symfony/translation/Exception/InvalidArgumentException.php create mode 100755 vendor/symfony/translation/Exception/InvalidResourceException.php create mode 100755 vendor/symfony/translation/Exception/LogicException.php create mode 100755 vendor/symfony/translation/Exception/MissingRequiredOptionException.php create mode 100755 vendor/symfony/translation/Exception/NotFoundResourceException.php create mode 100755 vendor/symfony/translation/Exception/ProviderException.php create mode 100755 vendor/symfony/translation/Exception/ProviderExceptionInterface.php create mode 100755 vendor/symfony/translation/Exception/RuntimeException.php create mode 100755 vendor/symfony/translation/Exception/UnsupportedSchemeException.php create mode 100755 vendor/symfony/translation/Extractor/AbstractFileExtractor.php create mode 100755 vendor/symfony/translation/Extractor/ChainExtractor.php create mode 100755 vendor/symfony/translation/Extractor/ExtractorInterface.php create mode 100755 vendor/symfony/translation/Extractor/PhpAstExtractor.php create mode 100755 vendor/symfony/translation/Extractor/PhpExtractor.php create mode 100755 vendor/symfony/translation/Extractor/PhpStringTokenParser.php create mode 100755 vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php create mode 100755 vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php create mode 100755 vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php create mode 100755 vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php create mode 100755 vendor/symfony/translation/Formatter/IntlFormatter.php create mode 100755 vendor/symfony/translation/Formatter/IntlFormatterInterface.php create mode 100755 vendor/symfony/translation/Formatter/MessageFormatter.php create mode 100755 vendor/symfony/translation/Formatter/MessageFormatterInterface.php create mode 100755 vendor/symfony/translation/IdentityTranslator.php create mode 100755 vendor/symfony/translation/LICENSE create mode 100755 vendor/symfony/translation/Loader/ArrayLoader.php create mode 100755 vendor/symfony/translation/Loader/CsvFileLoader.php create mode 100755 vendor/symfony/translation/Loader/FileLoader.php create mode 100755 vendor/symfony/translation/Loader/IcuDatFileLoader.php create mode 100755 vendor/symfony/translation/Loader/IcuResFileLoader.php create mode 100755 vendor/symfony/translation/Loader/IniFileLoader.php create mode 100755 vendor/symfony/translation/Loader/JsonFileLoader.php create mode 100755 vendor/symfony/translation/Loader/LoaderInterface.php create mode 100755 vendor/symfony/translation/Loader/MoFileLoader.php create mode 100755 vendor/symfony/translation/Loader/PhpFileLoader.php create mode 100755 vendor/symfony/translation/Loader/PoFileLoader.php create mode 100755 vendor/symfony/translation/Loader/QtFileLoader.php create mode 100755 vendor/symfony/translation/Loader/XliffFileLoader.php create mode 100755 vendor/symfony/translation/Loader/YamlFileLoader.php create mode 100755 vendor/symfony/translation/LocaleSwitcher.php create mode 100755 vendor/symfony/translation/LoggingTranslator.php create mode 100755 vendor/symfony/translation/MessageCatalogue.php create mode 100755 vendor/symfony/translation/MessageCatalogueInterface.php create mode 100755 vendor/symfony/translation/MetadataAwareInterface.php create mode 100755 vendor/symfony/translation/Provider/AbstractProviderFactory.php create mode 100755 vendor/symfony/translation/Provider/Dsn.php create mode 100755 vendor/symfony/translation/Provider/FilteringProvider.php create mode 100755 vendor/symfony/translation/Provider/NullProvider.php create mode 100755 vendor/symfony/translation/Provider/NullProviderFactory.php create mode 100755 vendor/symfony/translation/Provider/ProviderFactoryInterface.php create mode 100755 vendor/symfony/translation/Provider/ProviderInterface.php create mode 100755 vendor/symfony/translation/Provider/TranslationProviderCollection.php create mode 100755 vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php create mode 100755 vendor/symfony/translation/PseudoLocalizationTranslator.php create mode 100755 vendor/symfony/translation/README.md create mode 100755 vendor/symfony/translation/Reader/TranslationReader.php create mode 100755 vendor/symfony/translation/Reader/TranslationReaderInterface.php create mode 100755 vendor/symfony/translation/Resources/bin/translation-status.php create mode 100755 vendor/symfony/translation/Resources/data/parents.json create mode 100755 vendor/symfony/translation/Resources/functions.php create mode 100755 vendor/symfony/translation/Resources/schemas/xliff-core-1.2-transitional.xsd create mode 100755 vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd create mode 100755 vendor/symfony/translation/Resources/schemas/xml.xsd create mode 100755 vendor/symfony/translation/Test/ProviderFactoryTestCase.php create mode 100755 vendor/symfony/translation/Test/ProviderTestCase.php create mode 100755 vendor/symfony/translation/TranslatableMessage.php create mode 100755 vendor/symfony/translation/Translator.php create mode 100755 vendor/symfony/translation/TranslatorBag.php create mode 100755 vendor/symfony/translation/TranslatorBagInterface.php create mode 100755 vendor/symfony/translation/Util/ArrayConverter.php create mode 100755 vendor/symfony/translation/Util/XliffUtils.php create mode 100755 vendor/symfony/translation/Writer/TranslationWriter.php create mode 100755 vendor/symfony/translation/Writer/TranslationWriterInterface.php create mode 100755 vendor/symfony/translation/composer.json create mode 100755 vendor/symfony/var-exporter/CHANGELOG.md create mode 100755 vendor/symfony/var-exporter/Exception/ClassNotFoundException.php create mode 100755 vendor/symfony/var-exporter/Exception/ExceptionInterface.php create mode 100755 vendor/symfony/var-exporter/Exception/LogicException.php create mode 100755 vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php create mode 100755 vendor/symfony/var-exporter/Hydrator.php create mode 100755 vendor/symfony/var-exporter/Instantiator.php create mode 100755 vendor/symfony/var-exporter/Internal/Exporter.php create mode 100755 vendor/symfony/var-exporter/Internal/Hydrator.php create mode 100755 vendor/symfony/var-exporter/Internal/LazyObjectRegistry.php create mode 100755 vendor/symfony/var-exporter/Internal/LazyObjectState.php create mode 100755 vendor/symfony/var-exporter/Internal/LazyObjectTrait.php create mode 100755 vendor/symfony/var-exporter/Internal/Reference.php create mode 100755 vendor/symfony/var-exporter/Internal/Registry.php create mode 100755 vendor/symfony/var-exporter/Internal/Values.php create mode 100755 vendor/symfony/var-exporter/LICENSE create mode 100755 vendor/symfony/var-exporter/LazyGhostTrait.php create mode 100755 vendor/symfony/var-exporter/LazyObjectInterface.php create mode 100755 vendor/symfony/var-exporter/LazyProxyTrait.php create mode 100755 vendor/symfony/var-exporter/ProxyHelper.php create mode 100755 vendor/symfony/var-exporter/README.md create mode 100755 vendor/symfony/var-exporter/VarExporter.php create mode 100755 vendor/symfony/var-exporter/composer.json create mode 100755 vendor/twig/twig/CHANGELOG create mode 100755 vendor/twig/twig/LICENSE create mode 100755 vendor/twig/twig/README.rst create mode 100755 vendor/twig/twig/composer.json create mode 100755 vendor/twig/twig/phpstan-baseline.neon create mode 100755 vendor/twig/twig/phpstan.neon.dist create mode 100755 vendor/twig/twig/src/AbstractTwigCallable.php create mode 100755 vendor/twig/twig/src/Attribute/FirstClassTwigCallableReady.php create mode 100755 vendor/twig/twig/src/Attribute/YieldReady.php create mode 100755 vendor/twig/twig/src/Cache/CacheInterface.php create mode 100755 vendor/twig/twig/src/Cache/ChainCache.php create mode 100755 vendor/twig/twig/src/Cache/FilesystemCache.php create mode 100755 vendor/twig/twig/src/Cache/NullCache.php create mode 100755 vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php create mode 100755 vendor/twig/twig/src/Cache/RemovableCacheInterface.php create mode 100755 vendor/twig/twig/src/Compiler.php create mode 100755 vendor/twig/twig/src/DeprecatedCallableInfo.php create mode 100755 vendor/twig/twig/src/Environment.php create mode 100755 vendor/twig/twig/src/Error/Error.php create mode 100755 vendor/twig/twig/src/Error/LoaderError.php create mode 100755 vendor/twig/twig/src/Error/RuntimeError.php create mode 100755 vendor/twig/twig/src/Error/SyntaxError.php create mode 100755 vendor/twig/twig/src/ExpressionParser.php create mode 100755 vendor/twig/twig/src/Extension/AbstractExtension.php create mode 100755 vendor/twig/twig/src/Extension/CoreExtension.php create mode 100755 vendor/twig/twig/src/Extension/DebugExtension.php create mode 100755 vendor/twig/twig/src/Extension/EscaperExtension.php create mode 100755 vendor/twig/twig/src/Extension/ExtensionInterface.php create mode 100755 vendor/twig/twig/src/Extension/GlobalsInterface.php create mode 100755 vendor/twig/twig/src/Extension/LastModifiedExtensionInterface.php create mode 100755 vendor/twig/twig/src/Extension/OptimizerExtension.php create mode 100755 vendor/twig/twig/src/Extension/ProfilerExtension.php create mode 100755 vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php create mode 100755 vendor/twig/twig/src/Extension/SandboxExtension.php create mode 100755 vendor/twig/twig/src/Extension/StagingExtension.php create mode 100755 vendor/twig/twig/src/Extension/StringLoaderExtension.php create mode 100755 vendor/twig/twig/src/Extension/YieldNotReadyExtension.php create mode 100755 vendor/twig/twig/src/ExtensionSet.php create mode 100755 vendor/twig/twig/src/FileExtensionEscapingStrategy.php create mode 100755 vendor/twig/twig/src/Lexer.php create mode 100755 vendor/twig/twig/src/Loader/ArrayLoader.php create mode 100755 vendor/twig/twig/src/Loader/ChainLoader.php create mode 100755 vendor/twig/twig/src/Loader/FilesystemLoader.php create mode 100755 vendor/twig/twig/src/Loader/LoaderInterface.php create mode 100755 vendor/twig/twig/src/Markup.php create mode 100755 vendor/twig/twig/src/Node/AutoEscapeNode.php create mode 100755 vendor/twig/twig/src/Node/BlockNode.php create mode 100755 vendor/twig/twig/src/Node/BlockReferenceNode.php create mode 100755 vendor/twig/twig/src/Node/BodyNode.php create mode 100755 vendor/twig/twig/src/Node/CaptureNode.php create mode 100755 vendor/twig/twig/src/Node/CheckSecurityCallNode.php create mode 100755 vendor/twig/twig/src/Node/CheckSecurityNode.php create mode 100755 vendor/twig/twig/src/Node/CheckToStringNode.php create mode 100755 vendor/twig/twig/src/Node/DeprecatedNode.php create mode 100755 vendor/twig/twig/src/Node/DoNode.php create mode 100755 vendor/twig/twig/src/Node/EmbedNode.php create mode 100755 vendor/twig/twig/src/Node/EmptyNode.php create mode 100755 vendor/twig/twig/src/Node/Expression/AbstractExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/ArrayExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/AssignNameExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/BinaryInterface.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/ElvisBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/InBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/NullCoalesceBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Binary/XorBinary.php create mode 100755 vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/CallExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/ConditionalExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/ConstantExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php create mode 100755 vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php create mode 100755 vendor/twig/twig/src/Node/Expression/FilterExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/FunctionExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/FunctionNode/EnumCasesFunction.php create mode 100755 vendor/twig/twig/src/Node/Expression/FunctionNode/EnumFunction.php create mode 100755 vendor/twig/twig/src/Node/Expression/GetAttrExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/InlinePrint.php create mode 100755 vendor/twig/twig/src/Node/Expression/MacroReferenceExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/MethodCallExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/NameExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/OperatorEscapeInterface.php create mode 100755 vendor/twig/twig/src/Node/Expression/ParentExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/TempNameExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/Ternary/ConditionalTernary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/EvenTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/NullTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/OddTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/Test/SameasTest.php create mode 100755 vendor/twig/twig/src/Node/Expression/TestExpression.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/SpreadUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/StringCastUnary.php create mode 100755 vendor/twig/twig/src/Node/Expression/Unary/UnaryInterface.php create mode 100755 vendor/twig/twig/src/Node/Expression/Variable/AssignContextVariable.php create mode 100755 vendor/twig/twig/src/Node/Expression/Variable/AssignTemplateVariable.php create mode 100755 vendor/twig/twig/src/Node/Expression/Variable/ContextVariable.php create mode 100755 vendor/twig/twig/src/Node/Expression/Variable/LocalVariable.php create mode 100755 vendor/twig/twig/src/Node/Expression/Variable/TemplateVariable.php create mode 100755 vendor/twig/twig/src/Node/Expression/VariadicExpression.php create mode 100755 vendor/twig/twig/src/Node/FlushNode.php create mode 100755 vendor/twig/twig/src/Node/ForElseNode.php create mode 100755 vendor/twig/twig/src/Node/ForLoopNode.php create mode 100755 vendor/twig/twig/src/Node/ForNode.php create mode 100755 vendor/twig/twig/src/Node/IfNode.php create mode 100755 vendor/twig/twig/src/Node/ImportNode.php create mode 100755 vendor/twig/twig/src/Node/IncludeNode.php create mode 100755 vendor/twig/twig/src/Node/MacroNode.php create mode 100755 vendor/twig/twig/src/Node/ModuleNode.php create mode 100755 vendor/twig/twig/src/Node/NameDeprecation.php create mode 100755 vendor/twig/twig/src/Node/Node.php create mode 100755 vendor/twig/twig/src/Node/NodeCaptureInterface.php create mode 100755 vendor/twig/twig/src/Node/NodeOutputInterface.php create mode 100755 vendor/twig/twig/src/Node/Nodes.php create mode 100755 vendor/twig/twig/src/Node/PrintNode.php create mode 100755 vendor/twig/twig/src/Node/SandboxNode.php create mode 100755 vendor/twig/twig/src/Node/SetNode.php create mode 100755 vendor/twig/twig/src/Node/TextNode.php create mode 100755 vendor/twig/twig/src/Node/TypesNode.php create mode 100755 vendor/twig/twig/src/Node/WithNode.php create mode 100755 vendor/twig/twig/src/NodeTraverser.php create mode 100755 vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php create mode 100755 vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php create mode 100755 vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php create mode 100755 vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php create mode 100755 vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php create mode 100755 vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php create mode 100755 vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php create mode 100755 vendor/twig/twig/src/OperatorPrecedenceChange.php create mode 100755 vendor/twig/twig/src/Parser.php create mode 100755 vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php create mode 100755 vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php create mode 100755 vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php create mode 100755 vendor/twig/twig/src/Profiler/Dumper/TextDumper.php create mode 100755 vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php create mode 100755 vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php create mode 100755 vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php create mode 100755 vendor/twig/twig/src/Profiler/Profile.php create mode 100755 vendor/twig/twig/src/Resources/core.php create mode 100755 vendor/twig/twig/src/Resources/debug.php create mode 100755 vendor/twig/twig/src/Resources/escaper.php create mode 100755 vendor/twig/twig/src/Resources/string_loader.php create mode 100755 vendor/twig/twig/src/Runtime/EscaperRuntime.php create mode 100755 vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php create mode 100755 vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php create mode 100755 vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityPolicy.php create mode 100755 vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php create mode 100755 vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php create mode 100755 vendor/twig/twig/src/Source.php create mode 100755 vendor/twig/twig/src/Template.php create mode 100755 vendor/twig/twig/src/TemplateWrapper.php create mode 100755 vendor/twig/twig/src/Test/IntegrationTestCase.php create mode 100755 vendor/twig/twig/src/Test/NodeTestCase.php create mode 100755 vendor/twig/twig/src/Token.php create mode 100755 vendor/twig/twig/src/TokenParser/AbstractTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/ApplyTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/BlockTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/DoTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/EmbedTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/FlushTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/ForTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/FromTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/GuardTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/IfTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/ImportTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/IncludeTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/MacroTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/SandboxTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/SetTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/TokenParserInterface.php create mode 100755 vendor/twig/twig/src/TokenParser/TypesTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/UseTokenParser.php create mode 100755 vendor/twig/twig/src/TokenParser/WithTokenParser.php create mode 100755 vendor/twig/twig/src/TokenStream.php create mode 100755 vendor/twig/twig/src/TwigCallableInterface.php create mode 100755 vendor/twig/twig/src/TwigFilter.php create mode 100755 vendor/twig/twig/src/TwigFunction.php create mode 100755 vendor/twig/twig/src/TwigTest.php create mode 100755 vendor/twig/twig/src/Util/CallableArgumentsExtractor.php create mode 100755 vendor/twig/twig/src/Util/DeprecationCollector.php create mode 100755 vendor/twig/twig/src/Util/ReflectionCallable.php create mode 100755 vendor/twig/twig/src/Util/TemplateDirIterator.php create mode 100755 vendor/voku/portable-ascii/CHANGELOG.md create mode 100755 vendor/voku/portable-ascii/LICENSE.txt create mode 100755 vendor/voku/portable-ascii/README.md create mode 100755 vendor/voku/portable-ascii/build/composer.json create mode 100755 vendor/voku/portable-ascii/build/docs/base.md create mode 100755 vendor/voku/portable-ascii/build/generate_docs.php create mode 100755 vendor/voku/portable-ascii/build/generate_max_key_length.php create mode 100755 vendor/voku/portable-ascii/composer.json create mode 100755 vendor/voku/portable-ascii/src/voku/helper/ASCII.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/ascii_ord.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x000.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x001.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x002.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x003.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x004.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x005.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x006.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x007.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x009.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x00f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x010.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x011.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x012.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x013.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x014.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x015.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x016.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x017.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x018.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x01d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x01e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x01f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x020.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x021.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x022.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x023.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x024.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x025.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x026.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x027.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x028.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x029.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x02a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x02c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x02e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x02f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x030.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x031.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x032.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x033.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x04d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x04e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x04f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x050.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x051.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x052.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x053.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x054.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x055.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x056.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x057.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x058.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x059.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x05f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x060.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x061.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x062.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x063.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x064.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x065.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x066.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x067.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x068.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x069.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x06f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x070.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x071.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x072.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x073.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x074.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x075.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x076.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x077.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x078.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x079.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x07f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x080.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x081.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x082.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x083.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x084.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x085.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x086.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x087.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x088.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x089.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x08f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x090.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x091.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x092.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x093.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x094.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x095.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x096.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x097.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x098.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x099.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09a.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09b.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09c.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09d.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09e.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x09f.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0a0.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0a1.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0a2.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0a3.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0a4.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ac.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ad.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ae.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0af.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b0.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b1.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b2.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b3.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b4.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b5.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b6.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b7.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b8.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0b9.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ba.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0bb.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0bc.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0bd.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0be.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0bf.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c0.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c1.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c2.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c3.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c4.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c5.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c6.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c7.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c8.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0c9.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ca.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0cb.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0cc.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0cd.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ce.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0cf.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d0.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d1.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d2.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d3.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d4.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d5.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d6.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0d7.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0f9.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0fa.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0fb.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0fc.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0fd.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0fe.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x0ff.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x1d4.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x1d5.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x1d6.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x1d7.php create mode 100755 vendor/voku/portable-ascii/src/voku/helper/data/x1f1.php diff --git a/.env b/.env new file mode 100644 index 0000000..898d2c3 --- /dev/null +++ b/.env @@ -0,0 +1,123 @@ +# .env file for SysMVC + +# Application settings +APP_NAME=SysMVC +APP_KEY=dd9a6739a393907184b439c74718247991d7228ca72b67543bbca11e6a440078 +APP_ENV=production +APP_DEBUG=false +APP_URL=http://sysmvc.syspanel.com.br +# Database configuration +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=sysmvc +DB_USERNAME=sysmvc +DB_PASSWORD=Mega88ax10 + + + +# Session configuration +SESSION_DRIVER=file # options: file, database, redis, etc. +SESSION_LIFETIME=120 # in minutes + +# Mail configuration (example for SMTP) +MAIL_MAILER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=noreply@sysmvc.com +MAIL_FROM_NAME="${APP_NAME}" + +# Logging configuration +LOG_CHANNEL=stack # options: daily, single, syslog, etc. + +# JWT Secret for authentication (if you're using JWT) +JWT_SECRET=your_jwt_secret_key + +# Other third-party services +PUSHER_APP_ID=your_pusher_app_id +PUSHER_APP_KEY=your_pusher_app_key +PUSHER_APP_SECRET=your_pusher_app_secret + +# Redis configuration (if you're using Redis) +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 +REDIS_DB=0 + +# Storage paths (example for image uploads) +UPLOADS_DIR=/var/www/sysmvc/public/uploads + +# Other sensitive credentials +STRIPE_SECRET_KEY=your_stripe_secret_key +STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key + +# PayPal +PAYPAL_CLIENT_ID=your_paypal_client_id +PAYPAL_SECRET=your_paypal_secret_key +PAYPAL_MODE=sandbox # ou "live" para produção + +# MercadoPago +MERCADOPAGO_ACCESS_TOKEN=your_access_token +MERCADOPAGO_PUBLIC_KEY=your_public_key + +# Pagar.me +PAGARME_API_KEY=your_api_key +PAGARME_ENCRYPTION_KEY=your_encryption_key + +# Braintree +BRAINTREE_MERCHANT_ID=your_merchant_id +BRAINTREE_PUBLIC_KEY=your_public_key +BRAINTREE_PRIVATE_KEY=your_private_key + +# PagSeguro +PAGSEGURO_EMAIL=your_pagseguro_email +PAGSEGURO_TOKEN=your_pagseguro_token + +API_PUBLIC_KEY=9d8f87ae56d7806759d59a8e1119b47d +API_SECRET_KEY=7958d0834f85a08beef4d4d23cd1d184f9dcfc2b60b2c30f0a67a677960d62c2 + + + +# Optional for development +APP_TIMEZONE=America/Sao_Paulo + + + +# PHP Configuration + +# Limite de memória do PHP (aumente se precisar processar muitos dados) +PHP_MEMORY_LIMIT=1024M + +# Tempo máximo de execução de scripts (evita timeout em processos longos) +PHP_MAX_EXECUTION_TIME=300 + +# Tempo máximo que um script pode aguardar por entrada (upload, por exemplo) +PHP_MAX_INPUT_TIME=120 + +# Tamanho máximo de arquivos para upload +PHP_UPLOAD_MAX_FILESIZE=256M + +# Tamanho máximo de POST (afeta upload de arquivos grandes) +PHP_POST_MAX_SIZE=256M + +# Número máximo de arquivos enviados por requisição +PHP_MAX_FILE_UPLOADS=50 + +# Exibir erros do PHP (use false em produção) +PHP_DISPLAY_ERRORS=false + +# Exibir startup errors do PHP +PHP_DISPLAY_STARTUP_ERRORS=true + +# Nível de erro do PHP (E_ALL para capturar tudo, E_ERROR para apenas erros graves) +PHP_ERROR_REPORTING=E_ALL + +# Habilita ou desabilita logs de erro do PHP +PHP_LOG_ERRORS=true + +# Arquivo de log de erros do PHP +PHP_ERROR_LOG=/var/log/php_errors.log + diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..f00d481 --- /dev/null +++ b/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine on +RewriteRule ^$ public/ [L] +RewriteRule (.*) public/$1 [L] \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..b93dbbf --- /dev/null +++ b/LICENSE @@ -0,0 +1,10 @@ +MIT License + +Copyright (c) 2025 Marco Costa (marcocosta@gmx.com) + +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 provided 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 NON-INFRINGEMENT. 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. + diff --git a/README.md b/README.md new file mode 100755 index 0000000..a7132f3 --- /dev/null +++ b/README.md @@ -0,0 +1,152 @@ +# SysMVC + +## 📌 Project Information +**SysMVC** is a system developed by **Marco Costa** (**syspanel@gmx.com**), with source code licensed under the **MIT License**. + +This software is offered for free and can be used, modified, and distributed under the terms of the MIT License. + +Project website: [https://sysmvc.duckdns.org](https://sysmvc.duckdns.org) + +Github: https://github.com/syspanel/SysMVC.git + +### Support the Project +If you find this project useful, consider supporting its development with a donation via PayPal: + +[![Donate via PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD) + +--- + +## 🚀 Installation Tutorial + +### ✅ Prerequisites +- **PHP 7.4** or higher +- **Composer** (dependency manager for PHP) +- **Web Server** (Apache or Nginx) +- **MySQL** or another compatible database + +### 🔧 Step-by-Step Guide + +#### 1️⃣ Unzip the File +Download and unzip the SysMVC file to your local environment: + + bash + unzip sysmvc.zip -d sysmvc + cd sysmvc + + 2️⃣ Install Dependencies + + Use Composer to install the project dependencies: + + composer install + + 3️⃣ Configure the Environment + + Copy the .env.example file to .env and configure your environment variables: + + cp .env.example .env + + Open the .env file and edit the following lines with your information: + + DB_CONNECTION=mysql + DB_HOST=127.0.0.1 + DB_PORT=3306 + DB_DATABASE=your_database_name + DB_USERNAME=your_username + DB_PASSWORD=your_password + + 4️⃣ Set Permissions + + Change the permissions for the storage and cache directories to ensure the web server can write to them: + + chmod -R 775 storage + chmod -R 775 bootstrap/cache + + 5️⃣ Generate the Application Key + + php bin/console generate:app-key + + 6️⃣ Run Migrations + + Run the migrations to create the tables in the database: + + php bin/console migrate + + 7️⃣ Configure the Web Server + 📌 Apache + + Add the following configuration to your Apache configuration file: + + + ServerName sysmvc.local + DocumentRoot /path/to/sysmvc/public + + + AllowOverride All + Require all granted + + + + 📌 Nginx + + Add the following configuration to your Nginx configuration file: + + server { + listen 80; + server_name sysmvc.local; + root /path/to/sysmvc/public; + + index index.php index.html index.htm; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + include snippets/fastcgi-php.conf; + fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; + } + } + +📦 Dependencies Used + +The project uses the following third-party packages, each with its respective license: +✅ Packages with MIT License + + Illuminate Database → illuminate/database + Monolog → monolog/monolog + BladeOne → eftec/bladeone + Twig → twig/twig + Symfony Console → symfony/console + Phinx → robmorgan/phinx + Defuse Encryption → defuse/php-encryption + Random Compatibility → paragonie/random_compat + Rakit Validation → rakit/validation + Carbon → nesbot/carbon + Flysystem → league/flysystem + Intervention Image → intervention/image + Symfony Cache → symfony/cache + Predis Redis Client → predis/predis + PHP Dependency Injection → php-di/php-di + Symfony Dotenv → symfony/dotenv + BladeOne HTML → eftec/bladeonehtml + Pecee SimpleRouter → pecee/simple-router + Nyholm PSR7 → nyholm/psr7 + FakerPHP Faker → fakerphp/faker + Symfony Mailer → symfony/mailer + +📜 Terms of Use + +This project is licensed under the MIT License. + +You can use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software, as long as the license and copyright notice are included in all copies or substantial portions of the Software. + +The Software is provided "as is", without warranties of any kind. For more details, see the MIT License. + +For more information, contact: marcocosta@gmx.com + +### Support the Project +If you find this project useful, consider supporting its development with a donation via PayPal: + +[![Donate via PayPal](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?business=marcocosta@gmx.com¤cy_code=USD) + +© 2025 Marco Costa - All rights reserved under the MIT License. \ No newline at end of file diff --git a/app/Console/Command/GenerateApiKeysCommand.php b/app/Console/Command/GenerateApiKeysCommand.php new file mode 100755 index 0000000..755b205 --- /dev/null +++ b/app/Console/Command/GenerateApiKeysCommand.php @@ -0,0 +1,65 @@ +setDescription('Generates API keys and writes them to the .env file'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + // Generate random API keys + $publicKey = bin2hex(random_bytes(16)); // Generates a random public key + $secretKey = bin2hex(random_bytes(32)); // Generates a random secret key + + // Output to terminal + $output->writeln("Public Key: $publicKey"); + $output->writeln("Secret Key: $secretKey"); + + // Path to the .env file + $envFilePath = __DIR__ . '/../../../.env'; + + // Check if the .env file exists + if (!file_exists($envFilePath)) { + $output->writeln(".env file not found!"); + return Command::FAILURE; + } + + // Read the contents of the .env file + $envFile = file_get_contents($envFilePath); + + // Check if the keys already exist in the .env file + if (strpos($envFile, 'API_PUBLIC_KEY=') === false) { + // Add the public key + $envFile .= "\nAPI_PUBLIC_KEY=$publicKey"; + } else { + // Replace the existing public key + $envFile = preg_replace('/^API_PUBLIC_KEY=.*$/m', "API_PUBLIC_KEY=$publicKey", $envFile); + } + + if (strpos($envFile, 'API_SECRET_KEY=') === false) { + // Add the secret key + $envFile .= "\nAPI_SECRET_KEY=$secretKey"; + } else { + // Replace the existing secret key + $envFile = preg_replace('/^API_SECRET_KEY=.*$/m', "API_SECRET_KEY=$secretKey", $envFile); + } + + // Write to the .env file + file_put_contents($envFilePath, $envFile); + + $output->writeln("API keys have been written to the .env file"); + + return Command::SUCCESS; + } +} diff --git a/app/Console/Command/GenerateAppKeyCommand.php b/app/Console/Command/GenerateAppKeyCommand.php new file mode 100755 index 0000000..4a48a6e --- /dev/null +++ b/app/Console/Command/GenerateAppKeyCommand.php @@ -0,0 +1,54 @@ +setDescription('Generates an application key and writes it to the .env file'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + // Generate random key + $appKey = bin2hex(random_bytes(32)); // Generates a 64-character key (32 bytes) + + // Output to terminal + $output->writeln("Generated Key: $appKey"); + + // Load the .env + $dotenv = new Dotenv(); + $envFilePath = __DIR__ . '/../../../.env'; // Adjust the path as needed + if (!file_exists($envFilePath)) { + $output->writeln(".env file not found!"); + return Command::FAILURE; + } + + // Read the content of the .env file + $envFile = file_get_contents($envFilePath); + + // Replace the APP_KEY or add it if it doesn't exist + if (strpos($envFile, 'APP_KEY=') !== false) { + // If a line with APP_KEY already exists, replace it + $envFile = preg_replace('/^APP_KEY=.*$/m', "APP_KEY=$appKey", $envFile); + } else { + // Otherwise, add it at the end + $envFile .= "\nAPP_KEY=$appKey\n"; + } + + // Write the new content to the .env file + file_put_contents($envFilePath, $envFile); + + $output->writeln("The application key has been written to the .env file"); + + return Command::SUCCESS; + } +} diff --git a/app/Console/Command/MigrateCrudExampleCommand.php b/app/Console/Command/MigrateCrudExampleCommand.php new file mode 100755 index 0000000..bf48586 --- /dev/null +++ b/app/Console/Command/MigrateCrudExampleCommand.php @@ -0,0 +1,85 @@ +setDescription('Migrates the database by creating the crudexample table and adding fake records for testing.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + // Load the variables from the .env file + $dotenv = new Dotenv(); + $dotenv->load(__DIR__ . '/../../../.env'); + + $capsule = new Capsule; + + $capsule->addConnection([ + 'driver' => $_ENV['DB_CONNECTION'], + 'host' => $_ENV['DB_HOST'], + 'database' => $_ENV['DB_DATABASE'], + 'username' => $_ENV['DB_USERNAME'], + 'password' => $_ENV['DB_PASSWORD'], + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', + ]); + + // Set Capsule as the global Eloquent ORM manager + $capsule->setAsGlobal(); + + // Boot Eloquent ORM + $capsule->bootEloquent(); + + // Check if the crudexample table already exists + if (Capsule::schema()->hasTable('crudexample')) { + $output->writeln('The "crudexample" table already exists. No action needed.'); + return Command::SUCCESS; + } + + // Create the crudexample table + $capsule->schema()->create('crudexample', function ($table) { + $table->increments('id'); + $table->string('company', 50); + $table->string('name', 50); + $table->string('password', 255); + $table->string('email', 100)->unique(); + $table->string('address', 50); + $table->string('phone', 50); + $table->text('notes')->nullable(); + $table->timestamps(); + }); + + // Generate 30 fake records + $faker = Faker::create(); + for ($i = 0; $i < 30; $i++) { + Capsule::table('crudexample')->insert([ + 'company' => $faker->company, + 'name' => $faker->name, + 'password' => password_hash('password', PASSWORD_BCRYPT), // Default password for testing + 'email' => $faker->unique()->safeEmail, + 'address' => $faker->address, + 'phone' => $faker->phoneNumber, + 'notes' => $faker->sentence, + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), + ]); + } + + $output->writeln('Migration of the "crudexample" table and insertion of fake records for example completed successfully.'); + + return Command::SUCCESS; + } +} diff --git a/app/Console/Command/SayHelloCommand.php b/app/Console/Command/SayHelloCommand.php new file mode 100755 index 0000000..d8f38f4 --- /dev/null +++ b/app/Console/Command/SayHelloCommand.php @@ -0,0 +1,23 @@ +setDescription('Exibe uma mensagem de saudação.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $output->writeln('Hello, SysMVC!'); + return Command::SUCCESS; + } +} diff --git a/app/Controllers/CrudExampleController.php b/app/Controllers/CrudExampleController.php new file mode 100755 index 0000000..487ddc1 --- /dev/null +++ b/app/Controllers/CrudExampleController.php @@ -0,0 +1,174 @@ +blade = $blade; + $this->logger = $logger; + } + + protected function validateCsrfToken($token) + { + return hash_equals($_SESSION['csrf_token'], $token); + } + + public function index(Request $request): string + { + try { + $crudexample = CrudExample::all(); + $this->logger->info('Displaying the CrudExampleController page.'); + + if ($crudexample->isEmpty()) { + $this->logger->warning('No records found in the database.'); + // Continue with rendering the view instead of returning a message + } + + $crudexample = Sanitizer::sanitizeOutput($crudexample->toArray()); + + return $this->blade->run('crudexample.index', ['crudexample' => $crudexample]); + + } catch (\Exception $e) { + $this->logger->error('Error when querying the database: ' . $e->getMessage()); + return 'Error when querying the database: ' . $e->getMessage(); + } + } + + public function edit(Request $request, $id): string + { + try { + $this->logger->info('Editing record with ID: ' . $id); + $crudexample = CrudExample::find($id); + if (!$crudexample) { + return 'Record not found'; + } + + $csrfToken = generateCsrfToken(); + $crudexample = Sanitizer::sanitizeOutput($crudexample->toArray()); + + return $this->blade->run('crudexample.edit', ['crudexample' => $crudexample, 'csrfToken' => $csrfToken]); + } catch (\Exception $e) { + $this->logger->error('Error when displaying the edit page: ' . $e->getMessage()); + return 'Error when displaying the edit page: ' . $e->getMessage(); + } + } + + public function create(): string + { + try { + return $this->blade->run('crudexample.create', ['error' => null]); + } catch (\Exception $e) { + $this->logger->error('Error when displaying the create page: ' . $e->getMessage()); + return 'Error when displaying the create page: ' . $e->getMessage(); + } + } + + public function store() + { + try { + $data = $_POST; + + if (!isset($data['csrf_token']) || !$this->validateCsrfToken($data['csrf_token'])) { + throw new \Exception('Invalid CSRF token.'); + } + + $data = Sanitizer::sanitizeInput($data); + + if (!isset($data['password']) || empty($data['password'])) { + throw new \Exception('The "password" field is required.'); + } + + $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT); + + CrudExample::create($data); + + header('Location: /crudexample'); + exit; + } catch (\Exception $e) { + if ($e->getCode() == 23000) { // Error code for duplicate + $this->logger->error('Error when creating record: Duplicate email.'); + return $this->blade->run('crudexample.create', ['error' => 'This email already exists.']); + } else { + $this->logger->error('Error when creating record: ' . $e->getMessage()); + echo 'Error when creating record: ' . $e->getMessage(); + } + } + } + + public function update($id) + { + try { + $data = $_POST; + + if (!isset($data['csrf_token']) || !$this->validateCsrfToken($data['csrf_token'])) { + throw new \Exception('Invalid CSRF token.'); + } + + $data = Sanitizer::sanitizeInput($data); + + if (isset($data['password']) && !empty($data['password'])) { + $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT); + } else { + unset($data['password']); + } + + $crudexample = CrudExample::find($id); + if ($crudexample) { + $crudexample->update($data); + } + + header('Location: /crudexample'); + exit; + } catch (\Exception $e) { + $this->logger->error('Error when updating record: ' . $e->getMessage()); + echo 'Error when updating record: ' . $e->getMessage(); + } + } + + public function show(Request $request, $id): string + { + try { + $crudexample = CrudExample::find($id); + if (!$crudexample) { + return 'Record not found'; + } + + $crudexample = Sanitizer::sanitizeOutput($crudexample->toArray()); + + return $this->blade->run('crudexample.show', ['crudexample' => $crudexample]); + } catch (\Exception $e) { + $this->logger->error('Error when displaying record details: ' . $e->getMessage()); + return 'Error when displaying record details: ' . $e->getMessage(); + } + } + + public function delete(Request $request, $id) + { + try { + $this->logger->info('Deleting record with ID: ' . $id); + $crudexample = CrudExample::find($id); + if ($crudexample) { + $crudexample->delete(); + } + + header('Location: /crudexample'); + exit; + } catch (\Exception $e) { + $this->logger->error('Error when deleting record: ' . $e->getMessage()); + echo 'Error when deleting record: ' . $e->getMessage(); + } + } +} diff --git a/app/Controllers/HomeController.php b/app/Controllers/HomeController.php new file mode 100755 index 0000000..d16ff57 --- /dev/null +++ b/app/Controllers/HomeController.php @@ -0,0 +1,127 @@ +blade = $blade; + $this->logger = $logger; + } + + public function index(Request $request): string + { + $data = ['title' => 'Welcome to SysMVC']; + return $this->blade->run('home', $data); + } + + public function about(): string + { + try { + $this->logger->info('Displaying the About page.'); + return $this->blade->run('home.about'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the About page: ' . $e->getMessage()); + return 'Error displaying the About page: ' . $e->getMessage(); + } + } + + public function details(): string + { + try { + $this->logger->info('Displaying the Learn More page.'); + return $this->blade->run('home.details'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Details page: ' . $e->getMessage()); + return 'Error displaying the Learn More page: ' . $e->getMessage(); + } + } + + public function readme(): string + { + try { + $this->logger->info('Displaying the ReadMe page.'); + return $this->blade->run('home.readme'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the ReadMe page: ' . $e->getMessage()); + return 'Error displaying the ReadMe page: ' . $e->getMessage(); + } + } + + public function database(): string + { + try { + $this->logger->info('Displaying the Database Usage page.'); + return $this->blade->run('home.database'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Database Usage page: ' . $e->getMessage()); + return 'Error displaying the Database Usage page: ' . $e->getMessage(); + } + } + + public function dependencyInjection(): string + { + try { + $this->logger->info('Displaying the Dependency Injection page.'); + return $this->blade->run('home.dependency-injection'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Dependency Injection page: ' . $e->getMessage()); + return 'Error displaying the Dependency Injection page: ' . $e->getMessage(); + } + } + + public function appDevelopment(): string + { + try { + $this->logger->info('Displaying the App Development page.'); + return $this->blade->run('home.app-development'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the App Development page: ' . $e->getMessage()); + return 'Error displaying the App Development page: ' . $e->getMessage(); + } + } + + // New methods + public function templatesBlade(): string + { + try { + $this->logger->info('Displaying the Blade Templates page.'); + return $this->blade->run('home.templates-blade'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Blade Templates page: ' . $e->getMessage()); + return 'Error displaying the Blade Templates page: ' . $e->getMessage(); + } + } + + public function security(): string + { + try { + $this->logger->info('Displaying the Security page.'); + return $this->blade->run('home.security'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Security page: ' . $e->getMessage()); + return 'Error displaying the Security page: ' . $e->getMessage(); + } + } + + public function consoleCli(): string + { + try { + $this->logger->info('Displaying the Console CLI page.'); + return $this->blade->run('home.console-cli'); + } catch (\Exception $e) { + $this->logger->error('Error displaying the Console CLI page: ' . $e->getMessage()); + return 'Error displaying the Console CLI page: ' . $e->getMessage(); + } + } +} diff --git a/app/Controllers/IndexController.php b/app/Controllers/IndexController.php new file mode 100755 index 0000000..1d3bb0b --- /dev/null +++ b/app/Controllers/IndexController.php @@ -0,0 +1,23 @@ +blade = new BladeOne(VIEWS_PATH, CACHE_PATH, BladeOne::MODE_DEBUG); + } + + public function index() + { + // Pass data to the view and render + return $this->blade->run('home', ['title' => 'Welcome to SysMVC2025!']); + } +} diff --git a/app/Controllers/TesteController.php b/app/Controllers/TesteController.php new file mode 100755 index 0000000..40d9b0f --- /dev/null +++ b/app/Controllers/TesteController.php @@ -0,0 +1,29 @@ +blade = $blade; + $this->logger = $logger; + } + + public function index(Request $request): string + { + $data = ['title' => 'Bem-vindo ao TesteController']; + $this->logger->info('Exibindo a página do TesteController.'); + return $this->blade->run('test', $data); + } +} + diff --git a/app/Controllers/TwigExampleController.php b/app/Controllers/TwigExampleController.php new file mode 100755 index 0000000..038eb38 --- /dev/null +++ b/app/Controllers/TwigExampleController.php @@ -0,0 +1,184 @@ +twig = $twig; + $this->logger = $logger; + $this->blade = $blade; + } + + protected function validateCsrfToken($token) + { + return hash_equals($_SESSION['csrf_token'], $token); + } + + public function index(Request $request): string + { + try { + $twigexample = TwigExample::all(); + $this->logger->info('Displaying the TwigExampleController page.'); + + if ($twigexample->isEmpty()) { + $this->logger->warning('No records found in the database.'); + // Continue with rendering the view instead of returning a message + } + + $twigexample = Sanitizer::sanitizeOutput($twigexample->toArray()); + + return $this->twig->render('twigexample/index.twig.php', ['twigexample' => $twigexample]); + } catch (\Exception $e) { + $this->logger->error('Error querying the database: ' . $e->getMessage()); + return 'Error querying the database: ' . $e->getMessage(); + } + } + + public function create(Request $request): string + { + try { + $this->logger->info('Displaying the creation page of the TwigExampleController.'); + return $this->twig->render('twigexample/create.twig.php', ['csrf_token' => htmlspecialchars(getCsrfToken(), ENT_QUOTES, 'UTF-8')]); + } catch (\Exception $e) { + $this->logger->error('Error displaying the creation page: ' . $e->getMessage()); + return 'Error displaying the creation page: ' . $e->getMessage(); + } + } + + public function edit(Request $request, $id): string + { + try { + $twigexample = TwigExample::find($id); + + if (!$twigexample) { + $this->logger->warning("Record with ID $id not found."); + return "Record with ID $id not found."; + } + + $twigexample = Sanitizer::sanitizeOutput($twigexample->toArray()); + + $this->logger->info("Displaying the edit page for the record with ID: $id."); + return $this->twig->render('twigexample/edit.twig.php', ['twigexample' => $twigexample, 'csrf_token' => htmlspecialchars(getCsrfToken(), ENT_QUOTES, 'UTF-8')]); + } catch (\Exception $e) { + $this->logger->error('Error displaying the edit page: ' . $e->getMessage()); + return 'Error displaying the edit page: ' . $e->getMessage(); + } + } + + public function show(Request $request, $id): string + { + try { + $twigexample = TwigExample::find($id); + + if (!$twigexample) { + $this->logger->warning("Record with ID $id not found."); + return "Record with ID $id not found."; + } + + $twigexample = Sanitizer::sanitizeOutput($twigexample->toArray()); + + $this->logger->info("Displaying the record with ID: $id."); + return $this->twig->render('twigexample/show.twig.php', ['twigexample' => $twigexample]); + } catch (\Exception $e) { + $this->logger->error('Error displaying the record: ' . $e->getMessage()); + return 'Error displaying the record: ' . $e->getMessage(); + } + } + + public function delete(Request $request, $id) + { + try { + $twigexample = TwigExample::find($id); + + if (!$twigexample) { + $this->logger->warning("Record with ID $id not found."); + return "Record with ID $id not found."; + } + + $twigexample->delete(); + + $this->logger->info("Record with ID: $id deleted successfully."); + header('Location: /twigexample'); + exit; + } catch (\Exception $e) { + $this->logger->error('Error deleting the record: ' . $e->getMessage()); + return 'Error deleting the record: ' . $e->getMessage(); + } + } + + public function store() + { + try { + $data = $_POST; + + if (!isset($data['csrf_token']) || !$this->validateCsrfToken($data['csrf_token'])) { + throw new \Exception('Invalid CSRF token.'); + } + + $data = Sanitizer::sanitizeInput($data); + + if (!isset($data['password']) || empty($data['password'])) { + throw new \Exception('The "password" field is required.'); + } + + $data['password'] = password_hash($data['password'], PASSWORD_BCRYPT); + + TwigExample::create($data); + + header('Location: /twigexample'); + exit; + } catch (\Exception $e) { + if ($e->getCode() == 23000) { // Error code for duplicate + $this->logger->error('Error creating record: Duplicate email.'); + return $this->blade->run('twigexample.create', ['error' => 'This email already exists.']); + } else { + $this->logger->error('Error creating record: ' . $e->getMessage()); + echo 'Error creating record: ' . $e->getMessage(); + } + } + } + + public function update(Request $request, $id) + { + try { + $data = $_POST; + + if (!isset($data['csrf_token']) || !$this->validateCsrfToken($data['csrf_token'])) { + throw new \Exception('Invalid CSRF token.'); + } + + $data = Sanitizer::sanitizeInput($data); + + $twigexample = TwigExample::find($id); + + if (!$twigexample) { + $this->logger->warning("Record with ID $id not found."); + return "Record with ID $id not found."; + } + + $twigexample->fill($data); + $twigexample->save(); + + $this->logger->info("Record with ID: $id updated successfully."); + header('Location: /twigexample'); + } catch (\Exception $e) { + $this->logger->error('Error updating the record: ' . $e->getMessage()); + return 'Error updating the record: ' . $e->getMessage(); + } + } +} diff --git a/app/Models/CrudExample.php b/app/Models/CrudExample.php new file mode 100755 index 0000000..4bb930a --- /dev/null +++ b/app/Models/CrudExample.php @@ -0,0 +1,27 @@ + diff --git a/app/Services/Sanitizer.php b/app/Services/Sanitizer.php new file mode 100755 index 0000000..979d2ad --- /dev/null +++ b/app/Services/Sanitizer.php @@ -0,0 +1,39 @@ + $value) { + $sanitizedData[$key] = static::sanitizeValue($value); + } + return $sanitizedData; + } + + public static function sanitizeOutput($data) + { + if (is_array($data)) { + return array_map([static::class, 'sanitizeOutput'], $data); + } + + return $data !== null ? htmlspecialchars($data, ENT_QUOTES, 'UTF-8') : ''; + } + + private static function sanitizeValue($value) + { + if (is_array($value)) { + return static::sanitizeInput($value); + } elseif (is_null($value)) { + return ''; // Ensures null does not pass through + } elseif (filter_var($value, FILTER_VALIDATE_EMAIL)) { + return filter_var($value, FILTER_SANITIZE_EMAIL); + } elseif (filter_var($value, FILTER_VALIDATE_URL)) { + return filter_var($value, FILTER_SANITIZE_URL); + } else { + return filter_var($value, FILTER_SANITIZE_FULL_SPECIAL_CHARS); + } + } +} diff --git a/bin/console b/bin/console new file mode 100755 index 0000000..30c9bfa --- /dev/null +++ b/bin/console @@ -0,0 +1,19 @@ +#!/usr/bin/env php +add(new GenerateApiKeysCommand()); +$application->add(new GenerateAppKeyCommand()); +$application->add(new MigrateCrudExampleCommand()); +$application->add(new App\Console\Command\SayHelloCommand()); + + +$application->run(); + diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100755 index 0000000..ea53203 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,26 @@ +format($format); +} + +/** + * Calculates the difference between two dates using Carbon. + * + * @param string $startDate + * @param string $endDate + * @return string + */ +function carbonDateDifference(string $startDate, string $endDate): string { + $start = Carbon::parse($startDate); + $end = Carbon::parse($endDate); + return $start->diffForHumans($end); +} + +/** + * Generates the full URL for an asset in your project. + * + * @param string $path The relative path of the asset. + * @return string The full URL of the asset. + */ +function asset($path) +{ + // Get the base URL of the application from the defined constants + $baseUrl = rtrim(APP_URL, '/'); + + // Combine the base URL with the asset path + return $baseUrl . '/' . ltrim($path, '/'); +} + +/** + * Converts a monetary value to cents. + * + * @param float $amount + * @return int + */ +function toCents(float $amount): int { + return (int) round($amount * 100); +} + +/** + * Converts a monetary value from cents to reais. + * + * @param int $cents + * @return float + */ +function fromCents(int $cents): float { + return $cents / 100; +} + +/** + * Creates a Flysystem file system. + * + * @return Filesystem + */ +function createFilesystem(): Filesystem { + $adapter = new Local(__DIR__ . '/path/to/your/files'); + return new Filesystem($adapter); +} + +/** + * Checks if a file exists in Flysystem. + * + * @param string $filePath + * @return bool + */ +function flysystemFileExists(string $filePath): bool { + $filesystem = createFilesystem(); + return $filesystem->has($filePath); +} + +/** + * Resizes an image using Intervention Image. + * + * @param string $filePath + * @param int $width + * @param int $height + * @return bool + */ +function resizeImage(string $filePath, int $width, int $height): bool { + $manager = new ImageManager(['driver' => 'gd']); + $image = $manager->make($filePath); + $image->resize($width, $height); + return $image->save(); +} + +/** + * Loads a view with BladeOne. + * + * @param string $view + * @param array $data + * @return string + */ +function view(string $view, array $data = []): string { + global $blade; + return $blade->run($view, $data); +} + +/** + * Gets the base URL. + * + * @param string $path + * @return string + */ +function baseUrl(string $path = ''): string { + return 'http://localhost/' . trim($path, '/'); +} + +/** + * Checks if a value exists in the array. + * + * @param array $array + * @param string $key + * @return bool + */ +function arrayHas(array $array, string $key): bool { + return isset($array[$key]); +} + +/** + * Merges arrays recursively. + * + * @param array $array1 + * @param array $array2 + * @return array + */ +function arrayMergeRecursive(array $array1, array $array2): array { + return array_merge_recursive($array1, $array2); +} + +/** + * Gets a value from an array or returns a default value. + * + * @param array $array + * @param string $key + * @param mixed $default + * @return mixed + */ +function dataGet($array, $key, $default = null) { + if (is_null($key)) { + return $array; + } + + if (isset($array[$key])) { + return $array[$key]; + } + + foreach (explode('.', $key) as $segment) { + if (is_array($array) && array_key_exists($segment, $array)) { + $array = $array[$segment]; + } else { + return $default; + } + } + + return $array; +} + +/** + * Converts a string to camel case. + * + * @param string $string + * @return string + */ +function toCamelCase(string $string): string { + $result = str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $string))); + $result[0] = strtolower($result[0]); + return $result; +} + +/** + * Generates a slug from a string. + * + * @param string $string + * @return string + */ +function generateSlug(string $string): string { + $slug = preg_replace('/[^A-Za-z0-9-]+/', '-', strtolower($string)); + return trim($slug, '-'); +} + +/** + * Converts a string to snake case. + * + * @param string $string + * @return string + */ +function toSnakeCase(string $string): string { + return strtolower(preg_replace('/[A-Z]/', '_$0', lcfirst($string))); +} + +/** + * Generates a random string. + * + * @param int $length + * @return string + */ +function randomString(int $length = 10): string { + return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / 62))), 1, $length); +} + +/** + * Gets the current date formatted. + * + * @param string $format + * @return string + */ +function currentDateFormatted(string $format = 'Y-m-d H:i:s'): string { + return date($format); +} + +/** + * Calculates the difference between two dates. + * + * @param string $startDate + * @param string $endDate + * @return int + */ +function dateDifference(string $startDate, string $endDate): int { + $start = new DateTime($startDate); + $end = new DateTime($endDate); + return $start->diff($end)->days; +} + +/** + * Formats a date. + * + * @param string $date + * @param string $format + * @return string + */ +function formatDate(string $date, string $format = 'Y-m-d H:i:s'): string { + return date($format, strtotime($date)); +} + +/** + * Calculates the age from a birth date. + * + * @param string $birthDate + * @return int + */ +function calculateAge(string $birthDate): int { + $birthDate = new DateTime($birthDate); + $today = new DateTime('today'); + return $birthDate->diff($today)->y; +} + +/** + * Redirects to another URL. + * + * @param string $url + */ +function redirect(string $url) { + header('Location: ' . $url); + exit(); +} + +/** + * Sends a JSON response. + * + * @param array $data + * @param int $statusCode + */ +function jsonResponse(array $data, int $statusCode = 200) { + header('Content-Type: application/json'); + http_response_code($statusCode); + echo json_encode($data); + exit(); +} + +/** + * Checks if a file exists. + * + * @param string $filePath + * @return bool + */ +function fileExists(string $filePath): bool { + return file_exists($filePath); +} + +/** + * Creates a directory. + * + * @param string $path + * @param int $permissions + */ +function createDirectory(string $path, int $permissions = 0755) { + if (!file_exists($path)) { + mkdir($path, $permissions, true); + } +} + +/** + * Checks if the string ends with a given suffix. + * + * @param string $haystack + * @param string|array $needles + * @return bool + */ +function strEndsWith($haystack, $needles) { + foreach ((array) $needles as $needle) { + if ($needle !== '' && substr($haystack, -strlen($needle)) === $needle) { + return true; + } + } + return false; +} + +/** + * Checks if the string contains a given value. + * + * @param string $haystack + * @param string|array $needles + * @return bool + */ +function strContains($haystack, $needles) { + foreach ((array) $needles as $needle) { + if ($needle !== '' && strpos($haystack, $needle) !== false) { + return true; + } + } + return false; +} + +/** + * Helper for debugging variables (prints in a readable manner and exits). + * + * @param mixed $var + */ +function dd($var) { + echo '
';
+    var_dump($var);
+    echo '
'; + die(); +} + +/** + * Helper for printing variables in a readable manner. + * + * @param mixed $var + */ +function dump($var) { + echo '
';
+    var_dump($var);
+    echo '
'; +} + +/** + * Formats a monetary value. + * + * @param float $amount + * @param string $currency + * @return string + */ +function formatCurrency(float $amount, string $currency = 'BRL'): string { + $formatter = new NumberFormatter('pt_BR', NumberFormatter::CURRENCY); + return $formatter->formatCurrency($amount, $currency); +} + +/** + * Converts a monetary value to cents. + * + * @param float $amount + * @return int + */ +function toCents2(float $amount): int { + return (int) round($amount * 100); +} + +/** + * Converts a monetary value from cents to reais. + * + * @param int $cents + * @return float + */ +function fromCents2(int $cents): float { + return $cents / 100; +} + +/** + * Checks if the string starts with a given prefix. + * + * @param string $haystack + * @param string|array $needles + * @return bool + */ +function strStartsWith($haystack, $needles) { + foreach ((array) $needles as $needle) { + if ($needle !== '' && substr($haystack, 0, strlen($needle)) === $needle) { + return true; + } + } + return false; +} + +?> diff --git a/cache/crudexample.create_131f97ce10c031ed037031e0e52c6e8c42aab5be.bladec b/cache/crudexample.create_131f97ce10c031ed037031e0e52c6e8c42aab5be.bladec new file mode 100755 index 0000000..c058045 --- /dev/null +++ b/cache/crudexample.create_131f97ce10c031ed037031e0e52c6e8c42aab5be.bladec @@ -0,0 +1,52 @@ + + +startSection('title', 'Crud Example Create'); ?> + +startSection('content'); ?> +
+

Blade - Crud Example New Item

+ + + +
+ + +
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/crudexample.edit_af3087646c3322691eb28ea32da0d08678d50545.bladec b/cache/crudexample.edit_af3087646c3322691eb28ea32da0d08678d50545.bladec new file mode 100755 index 0000000..c8348f1 --- /dev/null +++ b/cache/crudexample.edit_af3087646c3322691eb28ea32da0d08678d50545.bladec @@ -0,0 +1,52 @@ + + +startSection('title', 'Crud Example Edit'); ?> + +startSection('content'); ?> +
+

Blade - Crud Example Edit

+
+ + +
+ + +
+
+ + + Show Password + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/crudexample.index_a3e8efc0a7016af4026f3385ceba60150a67c43e.bladec b/cache/crudexample.index_a3e8efc0a7016af4026f3385ceba60150a67c43e.bladec new file mode 100644 index 0000000..342d361 --- /dev/null +++ b/cache/crudexample.index_a3e8efc0a7016af4026f3385ceba60150a67c43e.bladec @@ -0,0 +1,46 @@ + + +startSection('title', 'Crud Example List'); ?> + +startSection('content'); ?> +
+
+

Blade - Crud Example List

+ Add New Item +
+
+ + + + + + + + + + + addLoop($__currentLoopData);$this->getFirstLoop(); + foreach($__currentLoopData as $item): $loop = $this->incrementLoopIndices(); ?> + + + + + + + popLoop(); $loop = $this->getFirstLoop(); ?> + +
IDNameCompanyActions
+ View + Edit + + +
+ + +
+
+
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/crudexample.index_b9a4453a28d7fa64a3baa9da79321256182f4d8c.bladec b/cache/crudexample.index_b9a4453a28d7fa64a3baa9da79321256182f4d8c.bladec new file mode 100755 index 0000000..342d361 --- /dev/null +++ b/cache/crudexample.index_b9a4453a28d7fa64a3baa9da79321256182f4d8c.bladec @@ -0,0 +1,46 @@ + + +startSection('title', 'Crud Example List'); ?> + +startSection('content'); ?> +
+
+

Blade - Crud Example List

+ Add New Item +
+
+ + + + + + + + + + + addLoop($__currentLoopData);$this->getFirstLoop(); + foreach($__currentLoopData as $item): $loop = $this->incrementLoopIndices(); ?> + + + + + + + popLoop(); $loop = $this->getFirstLoop(); ?> + +
IDNameCompanyActions
+ View + Edit + + +
+ + +
+
+
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/crudexample.show_7b0e79ce3cc500f2bbcbc8483a73a7ac0a94593a.bladec b/cache/crudexample.show_7b0e79ce3cc500f2bbcbc8483a73a7ac0a94593a.bladec new file mode 100755 index 0000000..00a97bf --- /dev/null +++ b/cache/crudexample.show_7b0e79ce3cc500f2bbcbc8483a73a7ac0a94593a.bladec @@ -0,0 +1,50 @@ + + +startSection('title', 'Crud Example Show'); ?> + +startSection('content'); ?> +
+

Blade - Crud Example Show

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID
Name
Company
Address
Phone
Email
Notes
+ Edit + + +
+ + +
+ + Back to List +
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.about_03561e09a1fc8a0d775ef4fd1ce34c3f16625ea8.bladec b/cache/home.about_03561e09a1fc8a0d775ef4fd1ce34c3f16625ea8.bladec new file mode 100755 index 0000000..dae2182 --- /dev/null +++ b/cache/home.about_03561e09a1fc8a0d775ef4fd1ce34c3f16625ea8.bladec @@ -0,0 +1,26 @@ + + +startSection('title', 'About'); ?> + +startSection('content'); ?> +
+

About Us

+

Welcome to SysMVC - PHP Framework!

+

SysMVC is a PHP framework developed to simplify the creation of robust and scalable web applications. We use the best development practices and modern tools to provide an efficient and enjoyable development experience.

+

Our mission is to help developers build high-quality web applications quickly and effectively. We offer a solid and flexible framework, allowing you to focus on what really matters: creating amazing features for your users.

+

If you have any questions or need support, feel free to contact us. We are here to help!

+

Marco Costa

+

Developer and Creator of SysMVC

+

Official website: sysmvc.syspanel.com.br

+

Contact email: syspanel@gmx.com

+

Github: https://github.com/syspanel/SysMVC.git

+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.app-development_c7d3404ba2a3d0b502efda2772c5288d077416b6.bladec b/cache/home.app-development_c7d3404ba2a3d0b502efda2772c5288d077416b6.bladec new file mode 100755 index 0000000..1afdcfe --- /dev/null +++ b/cache/home.app-development_c7d3404ba2a3d0b502efda2772c5288d077416b6.bladec @@ -0,0 +1,52 @@ + + +startSection('title', 'App Development with SysMVC'); ?> + +startSection('content'); ?> +
+

App Development with SysMVC

+

How to use SysMVC as a base for application development.

+ +

SysMVC is a flexible and powerful framework, perfect for serving as the foundation for developing modern web applications.

+ +

Modular Structure

+

SysMVC allows you to create independent modules, making it easier to organize your code and maintain the project.

+ +

Simple Routing

+

With SysMVC's router, you can define your routes in a simple and intuitive way:

+

+Router::get('/home', 'HomeController@index');
+Router::post('/client', 'ClientController@store');
+ 
+ +

Template Rendering

+

Use BladeOne to efficiently and neatly render your templates:

+

+echo $blade->run("home.index", ["clients" => $clients]);
+ 
+ +

With these tools, SysMVC provides a solid foundation for developing robust and scalable web applications.

+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + + ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.console-cli_dcddad4f2472192950b28dbb814a8f861875162a.bladec b/cache/home.console-cli_dcddad4f2472192950b28dbb814a8f861875162a.bladec new file mode 100755 index 0000000..3b07123 --- /dev/null +++ b/cache/home.console-cli_dcddad4f2472192950b28dbb814a8f861875162a.bladec @@ -0,0 +1,90 @@ + + +startSection('title', 'Console CLI'); ?> + +startSection('content'); ?> +
+

Console CLI

+

The SysMVC CLI console, based on Symfony Console, allows you to efficiently manage your project using command-line commands.

+ +

Useful Commands

+ + +

Extending with More Commands

+

The Symfony Console allows you to create and extend custom commands. Here is an example of how to create a custom command:

+
+ 
+ // src/Command/SayHelloCommand.php
+ namespace App\Command;
+
+ use Symfony\Component\Console\Command\Command;
+ use Symfony\Component\Console\Input\InputInterface;
+ use Symfony\Component\Console\Output\OutputInterface;
+
+ class SayHelloCommand extends Command
+ {
+ protected static $defaultName = 'app:say-hello';
+
+ protected function configure()
+ {
+ $this
+ ->setDescription('Says hello.')
+ ->setHelp('This command allows you to say hello...');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $output->writeln('Hello from SysMVC!');
+ return Command::SUCCESS;
+ }
+ }
+ 
+ 
+ +

To register the command, add it to the service in the config/services.yaml file:

+
+ 
+ # config/services.yaml
+ services:
+ App\Command\SayHelloCommand:
+ tags: ['console.command']
+ 
+ 
+ +

Now you can execute the custom command:

+
+ 
+ $ php bin/console app:say-hello
+ 
+ 
+ +

For more information about available commands and how to create custom commands, check the Symfony Console documentation.

+
+ + +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +
+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.database_cd9f67c6d9a4153b3d55ca4a2f92c837320dfb67.bladec b/cache/home.database_cd9f67c6d9a4153b3d55ca4a2f92c837320dfb67.bladec new file mode 100755 index 0000000..d55cb0a --- /dev/null +++ b/cache/home.database_cd9f67c6d9a4153b3d55ca4a2f92c837320dfb67.bladec @@ -0,0 +1,68 @@ + + +startSection('title', 'Database Usage'); ?> + +startSection('content'); ?> +
+

Database Usage

+

CRUD Example with SysMVC.

+ +

SysMVC makes it easy to interact with databases through the use of Eloquent ORM. You can easily create, read, update, and delete records in the database using intuitive methods.

+ +

CRUD Example

+

Below is a basic example of CRUD operations:

+ +

Creating a Record

+

+$client = new Client();
+$client->name = 'Client Name';
+$client->email = 'email@example.com';
+$client->save();
+ 
+ +

Reading Records

+

+$clients = Client::all();
+foreach ($clients as $client) {
+ echo $client->name;
+}
+ 
+ +

Updating a Record

+

+$client = Client::find(1);
+$client->name = 'New Name';
+$client->save();
+ 
+ +

Deleting a Record

+

+$client = Client::find(1);
+$client->delete();
+ 
+ +

With these examples, you can see how easy it is to work with databases using SysMVC.

+

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.dependency-injection_40a7ac7bb688a77a0c233084d3ba55644863b74b.bladec b/cache/home.dependency-injection_40a7ac7bb688a77a0c233084d3ba55644863b74b.bladec new file mode 100755 index 0000000..91bf9bc --- /dev/null +++ b/cache/home.dependency-injection_40a7ac7bb688a77a0c233084d3ba55644863b74b.bladec @@ -0,0 +1,63 @@ + + +startSection('title', 'Dependency Injection with PHP-DI'); ?> + +startSection('content'); ?> +
+

Dependency Injection with PHP-DI

+

How to use PHP-DI in SysMVC.

+ +

SysMVC uses the PHP-DI library to manage dependency injection. This allows you to write more modular and testable code.

+ +

Basic Configuration

+

To configure PHP-DI, you can create a di-config.php file with the definitions of your dependencies:

+
addDefinitions([
+ // Define your dependencies here
+ ClientRepository::class => \DI\create(MySqlClientRepository::class),
+ ]);
+ };'??'', ENT_QUOTES, 'UTF-8', false); ?>
+ +

Usage

+

To use dependency injection in your classes, simply pass the dependencies through the constructor:

+
clientRepository = $clientRepository;
+ }
+ 
+ public function getClients() {
+ return $this->clientRepository->findAll();
+ }
+ }'??'', ENT_QUOTES, 'UTF-8', false); ?>
+ +

With dependency injection, you can easily swap implementations and keep your code decoupled and more testable.

+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + + ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+stopSection(); ?> + + + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.details_1635da5ee92224e8b6ecdf53388e6a7fc6386309.bladec b/cache/home.details_1635da5ee92224e8b6ecdf53388e6a7fc6386309.bladec new file mode 100755 index 0000000..c4c13b9 --- /dev/null +++ b/cache/home.details_1635da5ee92224e8b6ecdf53388e6a7fc6386309.bladec @@ -0,0 +1,84 @@ + + +startSection('title', 'Learn More About SysMVC'); ?> + +startSection('content'); ?> +
+ + + SysMVC + +

+

SysMVC - PHP Framework

+
+ +

Welcome to SysMVC - PHP Framework!

+

SysMVC is a PHP framework developed to facilitate the creation of robust and scalable web applications. We use best development practices and modern tools to provide an efficient and pleasant development experience.

+

Our mission is to help developers build high-quality web applications quickly and efficiently. We offer a solid and flexible framework, allowing you to focus on what really matters: creating amazing features for your users.

+

SysMVC has a fast learning curve, it's lightweight, fast, modern, straightforward, secure, and ideal for developing websites and apps both locally and in the cloud. It is also licensed under the MIT License, which is highly permissive for developers.

+ +

Main Features

+ +
+

MIT License

+

SysMVC is licensed under the MIT License, which allows wide freedom of use and distribution. Here is the full text of the license:

+
+
+MIT License
+
+Copyright (c) 2025 Marco Costa
+
+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.
+ 
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +
+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.readme_a5a72e6d1fce588c9467a65bb5a9924d7a6f75df.bladec b/cache/home.readme_a5a72e6d1fce588c9467a65bb5a9924d7a6f75df.bladec new file mode 100755 index 0000000..c9ad17b --- /dev/null +++ b/cache/home.readme_a5a72e6d1fce588c9467a65bb5a9924d7a6f75df.bladec @@ -0,0 +1,156 @@ + + +startSection('title', 'Project Information'); ?> + +startSection('content'); ?> +
+

SysMVC - PHP Framework

+ +
+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Project Information

+

SysMVC is a system developed by Marco Costa (syspanel@gmx.com), with source code licensed under the MIT License.

+

This software is offered for free and can be used, modified, and distributed under the terms of the MIT License.

+

Project website: https://sysmvc.syspanel.com.br

+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+ +

🚀 Installation Tutorial

+ +

✅ Prerequisites

+ + +

🔧 Step-by-Step

+ +

1️⃣ Unzip the File

+

Download and unzip the SysMVC file to your local environment:

+
unzip sysmvc.zip -d sysmvc
+cd sysmvc
+ 
+ +

2️⃣ Install the Dependencies

+

Use Composer to install the project dependencies:

+
composer install
+ 
+ +

3️⃣ Configure the Environment

+

Copy the .env.example file to .env and configure your environment variables:

+
cp .env.example .env
+ 
+ +

Open the .env file and edit the following lines with your information:

+
DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=your_database
+DB_USERNAME=your_username
+DB_PASSWORD=your_password
+ 
+ +

4️⃣ Set Permissions

+

Change the permissions of the storage and cache directories to ensure the web server can write to them:

+
chmod -R 775 storage
+chmod -R 775 bootstrap/cache
+ 
+ +

5️⃣ Generate the Application Key

+
php bin/console generate:app-key
+ 
+ +

6️⃣ Run the Migrations

+

Run the migrations to create the tables in the database:

+
php bin/console migrate:crudexample
+ 
+ +

7️⃣ Configure the Web Server

+ +
📌 Apache
+

Add the following configuration to your Apache configuration file:

+
<VirtualHost *:80>
+ ServerName sysmvc.local
+ DocumentRoot /path/to/sysmvc/public
+
+ <Directory /path/to/sysmvc/public>
+ AllowOverride All
+ Require all granted
+ </Directory>
+</VirtualHost>
+ 
+ +
📌 Nginx
+

Add the following configuration to your Nginx configuration file:

+
server {
+ listen 80;
+ server_name sysmvc.local;
+ root /path/to/sysmvc/public;
+
+ index index.php index.html index.htm;
+
+ location / {
+ try_files $uri $uri/ /index.php?$query_string;
+ }
+
+ location ~ \.php$ {
+ include snippets/fastcgi-php.conf;
+ fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
+ }
+}
+ 
+ +
+ +

📦 Dependencies Used

+

The project uses the following third-party packages, each with its respective license:

+ +

✅ Packages with MIT License

+ + +
+ +

📜 Terms of Use

+

This project is licensed under the MIT License.

+

You can use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software, provided that the license and copyright notice are included in all copies or substantial portions of the Software.

+

The Software is provided "as is", without any warranty of any kind. For more details, please consult the MIT License.

+

For more information, contact: sysmvc@syspanel.com.br

+ +

© 2025 Marco Costa - All rights reserved under the MIT License.

+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.security_a8863fd4006a715d4beab35500ce0daa0e44194d.bladec b/cache/home.security_a8863fd4006a715d4beab35500ce0daa0e44194d.bladec new file mode 100755 index 0000000..7c66bbc --- /dev/null +++ b/cache/home.security_a8863fd4006a715d4beab35500ce0daa0e44194d.bladec @@ -0,0 +1,41 @@ + + +startSection('title', 'Security'); ?> + +startSection('content'); ?> +
+

Security

+

We have implemented several security measures in SysMVC to protect your application against threats. Here are some of the implementations:

+

CSRF Protection

+

We use CSRF tokens to protect against Cross-Site Request Forgery attacks.

+

Data Sanitization

+

All input and output data are sanitized to prevent code injections and other attacks.

+

Security Headers

+

We add HTTP security headers to protect against attacks like clickjacking and MIME-type sniffing.

+

For more information about security, refer to the OWASP documentation.

+
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, feel free to contact us:

+ + +
+

Donations via PAYPAL

+## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home.templates-blade_575eb2851ff825a1ddc807e6acd0a7c0d1db8730.bladec b/cache/home.templates-blade_575eb2851ff825a1ddc807e6acd0a7c0d1db8730.bladec new file mode 100755 index 0000000..02c7668 --- /dev/null +++ b/cache/home.templates-blade_575eb2851ff825a1ddc807e6acd0a7c0d1db8730.bladec @@ -0,0 +1,52 @@ + + +startSection('title', 'SysMVC Advantages - Blade, Twig, and Pure PHP'); ?> + +startSection('content'); ?> +
+

SysMVC: Support for Blade, Twig, and Pure PHP

+

SysMVC is a versatile PHP framework that supports three template rendering methods: Blade, Twig, and Pure PHP. This flexibility allows developers to choose the tool that best suits their needs, providing several advantages.

+ +

Blade Advantages

+

Blade is a simple yet powerful template engine developed for the Laravel framework. With Blade, developers can easily create reusable layouts and dynamic components. It is known for its clean and clear syntax, making template development fast and intuitive.

+

For more information, refer to the official Blade documentation.

+ +

Twig Advantages

+

Twig is a flexible and robust template engine, widely used in various PHP frameworks. It offers a series of advanced features such as template inheritance, filters, custom extensions, and more. Twig is known for its security and performance, making it a reliable choice for projects of any scale.

+

For more information, refer to the official Twig documentation.

+ +

Pure PHP Advantages

+

SysMVC also supports template rendering using pure PHP. This means you can directly include PHP files and render content dynamically. If you prefer not to use a template engine, you can simply use the include command to include template files and generate the desired content. This can be a simpler and more straightforward choice for smaller projects or developers more familiar with PHP.

+

Example of using pure PHP in SysMVC:

+
include('page.php');
+ +

Why Choose SysMVC?

+

With SysMVC, you don't have to worry about choosing between Blade, Twig, or Pure PHP. You can use any of these options, or even combine different approaches within the same project, depending on the context. This flexibility is a significant advantage, as it allows developers to take the best of each tool, adapting to their preferences and specific requirements.

+ +

Conclusion

+

Whether you're a Blade enthusiast, a Twig fan, or someone who prefers pure PHP, SysMVC is ready to meet your needs. The ability to switch between these options makes SysMVC an excellent choice for developers seeking efficiency, flexibility, and ease of use in their PHP projects.

+
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, feel free to contact us:

+ + +## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+stopSection(); ?> + + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home_13ba8928d2626bc19d159b63a2840fcd5dc5fc90.bladec b/cache/home_13ba8928d2626bc19d159b63a2840fcd5dc5fc90.bladec new file mode 100644 index 0000000..cee727d --- /dev/null +++ b/cache/home_13ba8928d2626bc19d159b63a2840fcd5dc5fc90.bladec @@ -0,0 +1,87 @@ + + +startSection('title', 'SysMVC - PHP Framework'); ?> + +startSection('content'); ?> +
+

Welcome to SysMVC

+

PHP framework for website and app development.

+ Learn More Details +
+ +
+
+
+ Image +
+
Database Usage
+

Learn how to use the database in SysMVC with CRUD examples.

+ See More +
+
+
+
+
+ Image +
+
Dependency Injection
+

Learn how to use dependency injection with PHP-DI in SysMVC.

+ See More +
+
+
+
+
+ Image +
+
App Projects
+

See how to use SysMVC as a base for application development.

+ See More +
+
+
+
+ +
+ +
+ +
+
+ Image +
+
Blade & Twig Templates Engine
+

Learn more about using Blade and/or Twig templates with SysMVC.

+ See More +
+
+
+ + + +
+
+ Image +
+
Security
+

Security implementations in SysMVC.

+ See More +
+
+
+ + +
+
+ Image +
+
Console CLI
+

Use the CLI console to manage your SysMVC project.

+ See More +
+
+
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home_6e120cc9acc88bff03fde36dfe633a1bfbc6aaca.bladec b/cache/home_6e120cc9acc88bff03fde36dfe633a1bfbc6aaca.bladec new file mode 100644 index 0000000..cee727d --- /dev/null +++ b/cache/home_6e120cc9acc88bff03fde36dfe633a1bfbc6aaca.bladec @@ -0,0 +1,87 @@ + + +startSection('title', 'SysMVC - PHP Framework'); ?> + +startSection('content'); ?> +
+

Welcome to SysMVC

+

PHP framework for website and app development.

+ Learn More Details +
+ +
+
+
+ Image +
+
Database Usage
+

Learn how to use the database in SysMVC with CRUD examples.

+ See More +
+
+
+
+
+ Image +
+
Dependency Injection
+

Learn how to use dependency injection with PHP-DI in SysMVC.

+ See More +
+
+
+
+
+ Image +
+
App Projects
+

See how to use SysMVC as a base for application development.

+ See More +
+
+
+
+ +
+ +
+ +
+
+ Image +
+
Blade & Twig Templates Engine
+

Learn more about using Blade and/or Twig templates with SysMVC.

+ See More +
+
+
+ + + +
+
+ Image +
+
Security
+

Security implementations in SysMVC.

+ See More +
+
+
+ + +
+
+ Image +
+
Console CLI
+

Use the CLI console to manage your SysMVC project.

+ See More +
+
+
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/home_c3e20cca6a65237ff4814aca14e321d0b6401e37.bladec b/cache/home_c3e20cca6a65237ff4814aca14e321d0b6401e37.bladec new file mode 100755 index 0000000..cee727d --- /dev/null +++ b/cache/home_c3e20cca6a65237ff4814aca14e321d0b6401e37.bladec @@ -0,0 +1,87 @@ + + +startSection('title', 'SysMVC - PHP Framework'); ?> + +startSection('content'); ?> +
+

Welcome to SysMVC

+

PHP framework for website and app development.

+ Learn More Details +
+ +
+
+
+ Image +
+
Database Usage
+

Learn how to use the database in SysMVC with CRUD examples.

+ See More +
+
+
+
+
+ Image +
+
Dependency Injection
+

Learn how to use dependency injection with PHP-DI in SysMVC.

+ See More +
+
+
+
+
+ Image +
+
App Projects
+

See how to use SysMVC as a base for application development.

+ See More +
+
+
+
+ +
+ +
+ +
+
+ Image +
+
Blade & Twig Templates Engine
+

Learn more about using Blade and/or Twig templates with SysMVC.

+ See More +
+
+
+ + + +
+
+ Image +
+
Security
+

Security implementations in SysMVC.

+ See More +
+
+
+ + +
+
+ Image +
+
Console CLI
+

Use the CLI console to manage your SysMVC project.

+ See More +
+
+
+
+stopSection(); ?> + +runChild('layout'); } ?> \ No newline at end of file diff --git a/cache/layout_56ac544973bfff9e6c00c452396225fce53b9d55.bladec b/cache/layout_56ac544973bfff9e6c00c452396225fce53b9d55.bladec new file mode 100755 index 0000000..3425667 --- /dev/null +++ b/cache/layout_56ac544973bfff9e6c00c452396225fce53b9d55.bladec @@ -0,0 +1,97 @@ + + + + + + <?php echo $this->yieldContent('title', 'Default Title'); ?> + + + + + + + + + + + + + + + + + + + + +
+ yieldContent('content'); ?> +
+ + + + + + + + + + + + + + + + + diff --git a/cache/layout_61d625cce8d73fa5a4bdd25fd2592bba4196d57c.bladec b/cache/layout_61d625cce8d73fa5a4bdd25fd2592bba4196d57c.bladec new file mode 100644 index 0000000..3425667 --- /dev/null +++ b/cache/layout_61d625cce8d73fa5a4bdd25fd2592bba4196d57c.bladec @@ -0,0 +1,97 @@ + + + + + + <?php echo $this->yieldContent('title', 'Default Title'); ?> + + + + + + + + + + + + + + + + + + + + +
+ yieldContent('content'); ?> +
+ + + + + + + + + + + + + + + + + diff --git a/cache/layout_c675d3c0958e134a30d03f96711e91b560ce4860.bladec b/cache/layout_c675d3c0958e134a30d03f96711e91b560ce4860.bladec new file mode 100644 index 0000000..3425667 --- /dev/null +++ b/cache/layout_c675d3c0958e134a30d03f96711e91b560ce4860.bladec @@ -0,0 +1,97 @@ + + + + + + <?php echo $this->yieldContent('title', 'Default Title'); ?> + + + + + + + + + + + + + + + + + + + + +
+ yieldContent('content'); ?> +
+ + + + + + + + + + + + + + + + + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4860a0f --- /dev/null +++ b/composer.json @@ -0,0 +1,48 @@ +{ + "name": "sysmvc/sysmvc", + "description": "PHP Framework", + "version": "1.0.0", + "date": "2025-03-08", + "authors": [ + { + "name": "Marco Costa", + "email": "syspanel@gmx.com", + "role": "Developer" + } + ], + "license": "MIT", + "homepage": "https://sysmvc.duckdns.org", + "require": { + "illuminate/database": "^8.0", + "phpauth/phpauth": "^1.0", + "monolog/monolog": "^2.0", + "eftec/bladeone": "^4.0", + "symfony/console": "^5.0", + "robmorgan/phinx": "^0.12.0", + "defuse/php-encryption": "^2.2", + "paragonie/random_compat": "^9.99", + "rakit/validation": "^1.4", + "nesbot/carbon": "^2.0", + "league/flysystem": "^1.1", + "intervention/image": "^2.5", + "symfony/cache": "^5.0", + "predis/predis": "^1.1", + "php-di/php-di": "^7.0", + "symfony/dotenv": "^6.4", + "eftec/bladeonehtml": "^2.5", + "pecee/simple-router": "^5.4", + "nyholm/psr7": "^1.8", + "fakerphp/faker": "^1.24", + "symfony/mailer": "^7.2", + "delight-im/auth": "^8.3", + "twig/twig": "^3.20" + }, + "minimum-stability": "stable", + "prefer-stable": true, + "autoload": { + "psr-4": { + "App\\": "app/", + "Symfony\\Component\\Dotenv\\": "vendor/symfony/dotenv/" + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d3572db --- /dev/null +++ b/composer.lock @@ -0,0 +1,5179 @@ +{ + "_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": "0b15a058d25bf01dd877f04a74de6dc4", + "packages": [ + { + "name": "cakephp/core", + "version": "4.5.9", + "source": { + "type": "git", + "url": "https://github.com/cakephp/core.git", + "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/core/zipball/c2f4dff110d41e475d1041f2abe236f1c62d0cd0", + "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0", + "shasum": "" + }, + "require": { + "cakephp/utility": "^4.0", + "php": ">=7.4.0" + }, + "provide": { + "psr/container-implementation": "^1.0 || ^2.0" + }, + "suggest": { + "cakephp/cache": "To use Configure::store() and restore().", + "cakephp/event": "To use PluginApplicationInterface or plugin applications.", + "league/container": "To use Container and ServiceProvider classes" + }, + "type": "library", + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Cake\\Core\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/core/graphs/contributors" + } + ], + "description": "CakePHP Framework Core classes", + "homepage": "https://cakephp.org", + "keywords": [ + "cakephp", + "core", + "framework" + ], + "support": { + "forum": "https://stackoverflow.com/tags/cakephp", + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/cakephp/issues", + "source": "https://github.com/cakephp/core" + }, + "time": "2023-10-21T13:30:46+00:00" + }, + { + "name": "cakephp/database", + "version": "4.5.9", + "source": { + "type": "git", + "url": "https://github.com/cakephp/database.git", + "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/database/zipball/317739cc32060ef19b6c19c87ac6b64848d78e27", + "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27", + "shasum": "" + }, + "require": { + "cakephp/core": "^4.0", + "cakephp/datasource": "^4.0", + "php": ">=7.4.0" + }, + "suggest": { + "cakephp/i18n": "If you are using locale-aware datetime formats or Chronos types.", + "cakephp/log": "If you want to use query logging without providing a logger yourself." + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\Database\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/database/graphs/contributors" + } + ], + "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API", + "homepage": "https://cakephp.org", + "keywords": [ + "abstraction", + "cakephp", + "database", + "database abstraction", + "pdo" + ], + "support": { + "forum": "https://stackoverflow.com/tags/cakephp", + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/cakephp/issues", + "source": "https://github.com/cakephp/database" + }, + "time": "2023-12-07T12:23:54+00:00" + }, + { + "name": "cakephp/datasource", + "version": "4.5.9", + "source": { + "type": "git", + "url": "https://github.com/cakephp/datasource.git", + "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/datasource/zipball/073bb5f3b082b87c20309c1b25b1ac2a238d97b3", + "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3", + "shasum": "" + }, + "require": { + "cakephp/core": "^4.0", + "php": ">=7.4.0", + "psr/log": "^1.0 || ^2.0", + "psr/simple-cache": "^1.0 || ^2.0" + }, + "suggest": { + "cakephp/cache": "If you decide to use Query caching.", + "cakephp/collection": "If you decide to use ResultSetInterface.", + "cakephp/utility": "If you decide to use EntityTrait." + }, + "type": "library", + "autoload": { + "psr-4": { + "Cake\\Datasource\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/datasource/graphs/contributors" + } + ], + "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores", + "homepage": "https://cakephp.org", + "keywords": [ + "cakephp", + "connection management", + "datasource", + "entity", + "query" + ], + "support": { + "forum": "https://stackoverflow.com/tags/cakephp", + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/cakephp/issues", + "source": "https://github.com/cakephp/datasource" + }, + "time": "2024-11-19T19:41:00+00:00" + }, + { + "name": "cakephp/utility", + "version": "4.5.9", + "source": { + "type": "git", + "url": "https://github.com/cakephp/utility.git", + "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/utility/zipball/708929115e5b400e1b5b76d8120ca2e51e2de199", + "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199", + "shasum": "" + }, + "require": { + "cakephp/core": "^4.0", + "php": ">=7.4.0" + }, + "suggest": { + "ext-intl": "To use Text::transliterate() or Text::slug()", + "lib-ICU": "To use Text::transliterate() or Text::slug()" + }, + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Cake\\Utility\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/utility/graphs/contributors" + } + ], + "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security", + "homepage": "https://cakephp.org", + "keywords": [ + "cakephp", + "hash", + "inflector", + "security", + "string", + "utility" + ], + "support": { + "forum": "https://stackoverflow.com/tags/cakephp", + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/cakephp/issues", + "source": "https://github.com/cakephp/utility" + }, + "time": "2024-06-23T00:11:14+00:00" + }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "defuse/php-encryption", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/defuse/php-encryption.git", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828", + "reference": "f53396c2d34225064647a05ca76c1da9d99e5828", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "paragonie/random_compat": ">= 2", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^5|^6|^7|^8|^9|^10", + "yoast/phpunit-polyfills": "^2.0.0" + }, + "bin": [ + "bin/generate-defuse-key" + ], + "type": "library", + "autoload": { + "psr-4": { + "Defuse\\Crypto\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Hornby", + "email": "taylor@defuse.ca", + "homepage": "https://defuse.ca/" + }, + { + "name": "Scott Arciszewski", + "email": "info@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "Secure PHP Encryption Library", + "keywords": [ + "aes", + "authenticated encryption", + "cipher", + "crypto", + "cryptography", + "encrypt", + "encryption", + "openssl", + "security", + "symmetric key cryptography" + ], + "support": { + "issues": "https://github.com/defuse/php-encryption/issues", + "source": "https://github.com/defuse/php-encryption/tree/v2.4.0" + }, + "time": "2023-06-19T06:10:36+00:00" + }, + { + "name": "delight-im/auth", + "version": "v8.3.0", + "source": { + "type": "git", + "url": "https://github.com/delight-im/PHP-Auth.git", + "reference": "7bce546defa2bec75485d4bf1d68b72cf311c489" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/delight-im/PHP-Auth/zipball/7bce546defa2bec75485d4bf1d68b72cf311c489", + "reference": "7bce546defa2bec75485d4bf1d68b72cf311c489", + "shasum": "" + }, + "require": { + "delight-im/base64": "^1.0", + "delight-im/cookie": "^3.1", + "delight-im/db": "^1.3", + "ext-openssl": "*", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Delight\\Auth\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Authentication for PHP. Simple, lightweight and secure.", + "homepage": "https://github.com/delight-im/PHP-Auth", + "keywords": [ + "Authentication", + "auth", + "login", + "security" + ], + "support": { + "issues": "https://github.com/delight-im/PHP-Auth/issues", + "source": "https://github.com/delight-im/PHP-Auth/tree/v8.3.0" + }, + "time": "2021-04-21T14:39:10+00:00" + }, + { + "name": "delight-im/base64", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/delight-im/PHP-Base64.git", + "reference": "687b2a49f663e162030a8d27b32838bbe7f91c78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/delight-im/PHP-Base64/zipball/687b2a49f663e162030a8d27b32838bbe7f91c78", + "reference": "687b2a49f663e162030a8d27b32838bbe7f91c78", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Delight\\Base64\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Simple and convenient Base64 encoding and decoding for PHP", + "homepage": "https://github.com/delight-im/PHP-Base64", + "keywords": [ + "URL-safe", + "base-64", + "base64", + "decode", + "decoding", + "encode", + "encoding", + "url" + ], + "support": { + "issues": "https://github.com/delight-im/PHP-Base64/issues", + "source": "https://github.com/delight-im/PHP-Base64/tree/master" + }, + "time": "2017-07-24T18:59:51+00:00" + }, + { + "name": "delight-im/cookie", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/delight-im/PHP-Cookie.git", + "reference": "67065d34272377d63bab0bd58f984f9b228c803f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/delight-im/PHP-Cookie/zipball/67065d34272377d63bab0bd58f984f9b228c803f", + "reference": "67065d34272377d63bab0bd58f984f9b228c803f", + "shasum": "" + }, + "require": { + "delight-im/http": "^2.0", + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Delight\\Cookie\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Modern cookie management for PHP", + "homepage": "https://github.com/delight-im/PHP-Cookie", + "keywords": [ + "cookie", + "cookies", + "csrf", + "http", + "same-site", + "samesite", + "xss" + ], + "support": { + "issues": "https://github.com/delight-im/PHP-Cookie/issues", + "source": "https://github.com/delight-im/PHP-Cookie/tree/v3.4.0" + }, + "time": "2020-04-16T11:01:26+00:00" + }, + { + "name": "delight-im/db", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/delight-im/PHP-DB.git", + "reference": "7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/delight-im/PHP-DB/zipball/7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c", + "reference": "7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "php": ">=5.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Delight\\Db\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Safe and convenient SQL database access in a driver-agnostic way", + "homepage": "https://github.com/delight-im/PHP-DB", + "keywords": [ + "database", + "mysql", + "pdo", + "pgsql", + "postgresql", + "sql", + "sqlite" + ], + "support": { + "issues": "https://github.com/delight-im/PHP-DB/issues", + "source": "https://github.com/delight-im/PHP-DB/tree/v1.3.1" + }, + "time": "2020-02-21T10:46:03+00:00" + }, + { + "name": "delight-im/http", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/delight-im/PHP-HTTP.git", + "reference": "a5c2c4eae1dd3207f797984e8f64f2d71ed889dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/delight-im/PHP-HTTP/zipball/a5c2c4eae1dd3207f797984e8f64f2d71ed889dd", + "reference": "a5c2c4eae1dd3207f797984e8f64f2d71ed889dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Delight\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Hypertext Transfer Protocol (HTTP) utilities for PHP", + "homepage": "https://github.com/delight-im/PHP-HTTP", + "keywords": [ + "headers", + "http", + "https" + ], + "support": { + "issues": "https://github.com/delight-im/PHP-HTTP/issues", + "source": "https://github.com/delight-im/PHP-HTTP/tree/v2.1.0" + }, + "time": "2021-10-12T18:52:29+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "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 || ^5.4" + }, + "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.10" + }, + "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": "2024-02-18T20:23:39+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "eftec/bladeone", + "version": "4.18", + "source": { + "type": "git", + "url": "https://github.com/EFTEC/BladeOne.git", + "reference": "fb51dcd21ba6c998b96d26ac5babfca1bd05acdf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/EFTEC/BladeOne/zipball/fb51dcd21ba6c998b96d26ac5babfca1bd05acdf", + "reference": "fb51dcd21ba6c998b96d26ac5babfca1bd05acdf", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.4" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.23" + }, + "suggest": { + "eftec/bladeonehtml": "Extension to create forms", + "ext-mbstring": "This extension is used if it's active" + }, + "bin": [ + "lib/bladeonecli" + ], + "type": "library", + "autoload": { + "psr-4": { + "eftec\\bladeone\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jorge Patricio Castro Castillo", + "email": "jcastro@eftec.cl" + } + ], + "description": "The standalone version Blade Template Engine from Laravel in a single php file", + "homepage": "https://github.com/EFTEC/BladeOne", + "keywords": [ + "blade", + "php", + "template", + "templating", + "view" + ], + "support": { + "issues": "https://github.com/EFTEC/BladeOne/issues", + "source": "https://github.com/EFTEC/BladeOne/tree/4.18" + }, + "time": "2025-02-22T00:12:47+00:00" + }, + { + "name": "eftec/bladeonehtml", + "version": "2.5", + "source": { + "type": "git", + "url": "https://github.com/EFTEC/BladeOneHtml.git", + "reference": "4f0169f756a98f73b9df988eeb3f865261041a3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/EFTEC/BladeOneHtml/zipball/4f0169f756a98f73b9df988eeb3f865261041a3c", + "reference": "4f0169f756a98f73b9df988eeb3f865261041a3c", + "shasum": "" + }, + "require": { + "eftec/bladeone": "^4.12", + "eftec/messagecontainer": "^2.8", + "ext-json": "*", + "php": ">=7.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "eftec\\bladeonehtml\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jorge Patricio Castro Castillo", + "email": "jcastro@eftec.cl" + } + ], + "description": "The standalone version Blade Template Engine from Laravel in a single php file", + "homepage": "https://github.com/EFTEC/BladeOneHtml", + "keywords": [ + "blade", + "php", + "template", + "templating", + "view" + ], + "support": { + "issues": "https://github.com/EFTEC/BladeOneHtml/issues", + "source": "https://github.com/EFTEC/BladeOneHtml/tree/2.5" + }, + "time": "2024-12-31T11:19:16+00:00" + }, + { + "name": "eftec/messagecontainer", + "version": "2.9", + "source": { + "type": "git", + "url": "https://github.com/EFTEC/MessageContainer.git", + "reference": "de7f0bacee59deae7e9376c9a2432e824bcf15d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/EFTEC/MessageContainer/zipball/de7f0bacee59deae7e9376c9a2432e824bcf15d5", + "reference": "de7f0bacee59deae7e9376c9a2432e824bcf15d5", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=7.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "eftec\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jorge Castro", + "email": "jcastro@eftec.cl" + } + ], + "description": "MessageContainer is a simple a minimalist message-system where messages (strings) could be stored in a tree-like structure", + "homepage": "https://github.com/EFTEC/MessageContainer", + "support": { + "issues": "https://github.com/EFTEC/MessageContainer/issues", + "source": "https://github.com/EFTEC/MessageContainer/tree/2.9" + }, + "time": "2024-03-02T16:26:06+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "b115554301161fa21467629f1e1391c1936de517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", + "reference": "b115554301161fa21467629f1e1391c1936de517", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2024-12-27T00:36:43+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "google/recaptcha", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/google/recaptcha.git", + "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/recaptcha/zipball/d59a801e98a4e9174814a6d71bbc268dff1202df", + "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df", + "shasum": "" + }, + "require": { + "php": ">=8" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.14", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", + "homepage": "https://www.google.com/recaptcha/", + "keywords": [ + "Abuse", + "captcha", + "recaptcha", + "spam" + ], + "support": { + "forum": "https://groups.google.com/forum/#!forum/recaptcha", + "issues": "https://github.com/google/recaptcha/issues", + "source": "https://github.com/google/recaptcha" + }, + "time": "2023-02-18T17:41:46+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2024-07-18T11:15:46+00:00" + }, + { + "name": "illuminate/collections", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/collections.git", + "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/collections/zipball/705a4e1ef93cd492c45b9b3e7911cccc990a07f4", + "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0", + "illuminate/macroable": "^8.0", + "php": "^7.3|^8.0" + }, + "suggest": { + "symfony/var-dumper": "Required to use the dump method (^5.4)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Collections package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-06-23T15:29:49+00:00" + }, + { + "name": "illuminate/container", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/container.git", + "reference": "14062628d05f75047c5a1360b9350028427d568e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/container/zipball/14062628d05f75047c5a1360b9350028427d568e", + "reference": "14062628d05f75047c5a1360b9350028427d568e", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^8.0", + "php": "^7.3|^8.0", + "psr/container": "^1.0" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Container\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Container package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-02-02T21:03:35+00:00" + }, + { + "name": "illuminate/contracts", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/contracts.git", + "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", + "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Contracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Contracts package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-01-13T14:47:47+00:00" + }, + { + "name": "illuminate/database", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/database.git", + "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/database/zipball/1a5b0e4e6913415464fa2aab554a38b9e6fa44b1", + "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/collections": "^8.0", + "illuminate/container": "^8.0", + "illuminate/contracts": "^8.0", + "illuminate/macroable": "^8.0", + "illuminate/support": "^8.0", + "php": "^7.3|^8.0", + "symfony/console": "^5.4" + }, + "suggest": { + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "illuminate/console": "Required to use the database commands (^8.0).", + "illuminate/events": "Required to use the observers with Eloquent (^8.0).", + "illuminate/filesystem": "Required to use the migrations (^8.0).", + "illuminate/pagination": "Required to paginate the result set (^8.0).", + "symfony/finder": "Required to use Eloquent model factories (^5.4)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Database\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Database package.", + "homepage": "https://laravel.com", + "keywords": [ + "database", + "laravel", + "orm", + "sql" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-08-31T16:16:06+00:00" + }, + { + "name": "illuminate/macroable", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/macroable.git", + "reference": "aed81891a6e046fdee72edd497f822190f61c162" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162", + "reference": "aed81891a6e046fdee72edd497f822190f61c162", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Macroable package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2021-11-16T13:57:03+00:00" + }, + { + "name": "illuminate/support", + "version": "v8.83.27", + "source": { + "type": "git", + "url": "https://github.com/illuminate/support.git", + "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/support/zipball/1c79242468d3bbd9a0f7477df34f9647dde2a09b", + "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/collections": "^8.0", + "illuminate/contracts": "^8.0", + "illuminate/macroable": "^8.0", + "nesbot/carbon": "^2.53.1", + "php": "^7.3|^8.0", + "voku/portable-ascii": "^1.6.1" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "suggest": { + "illuminate/filesystem": "Required to use the composer class (^8.0).", + "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).", + "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).", + "symfony/process": "Required to use the composer class (^5.4).", + "symfony/var-dumper": "Required to use the dd function (^5.4).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Support package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-09-21T21:30:03+00:00" + }, + { + "name": "intervention/image", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "04be355f8d6734c826045d02a1079ad658322dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + }, + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/2.7.2" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2022-05-21T17:30:32+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "f379c13663245f7aa4512a7869f62eb14095f23f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f", + "reference": "f379c13663245f7aa4512a7869f62eb14095f23f", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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": "2025-02-11T15:03:05+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.10", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7", + "reference": "5cf826f2991858b54d5c3809bee745560a1042a7", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^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", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8.5.38 || ^9.6.19", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "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": "2.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/2.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2024-11-12T12:43:37+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.73.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "*", + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2025-01-08T20:10:23+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "pecee/simple-router", + "version": "5.4.1.7", + "source": { + "type": "git", + "url": "https://github.com/skipperbent/simple-php-router.git", + "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/skipperbent/simple-php-router/zipball/a2843d5b1e037f8b61cc99f27eab52a28bf41dfd", + "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.4" + }, + "require-dev": { + "mockery/mockery": "^1", + "phpstan/phpstan": "^1", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1", + "phpunit/phpunit": "^8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pecee\\": "src/Pecee/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Simon Sessingø", + "email": "simon.sessingoe@gmail.com" + } + ], + "description": "Simple, fast PHP router that is easy to get integrated and in almost any project. Heavily inspired by the Laravel router.", + "keywords": [ + "framework", + "input-handler", + "laravel", + "pecee", + "php", + "request-handler", + "route", + "router", + "routing", + "routing-engine", + "simple-php-router", + "url-handling" + ], + "support": { + "issues": "https://github.com/skipperbent/simple-php-router/issues", + "source": "https://github.com/skipperbent/simple-php-router/issues" + }, + "time": "2023-12-11T21:48:25+00:00" + }, + { + "name": "php-di/invoker", + "version": "2.3.6", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576", + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Invoker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" + ], + "support": { + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + } + ], + "time": "2025-01-17T12:49:27+00:00" + }, + { + "name": "php-di/php-di", + "version": "7.0.9", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "d8480267f5cf239650debba704f3ecd15b638cde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d8480267f5cf239650debba704f3ecd15b638cde", + "reference": "d8480267f5cf239650debba704f3ecd15b638cde", + "shasum": "" + }, + "require": { + "laravel/serializable-closure": "^1.0 || ^2.0", + "php": ">=8.0", + "php-di/invoker": "^2.0", + "psr/container": "^1.1 || ^2.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/proxy-manager-lts": "^1", + "mnapoli/phpunit-easymock": "^1.3", + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^5|^6" + }, + "suggest": { + "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "DI\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ], + "support": { + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.9" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "type": "tidelift" + } + ], + "time": "2025-02-28T12:46:35+00:00" + }, + { + "name": "phpauth/phpauth", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/PHPAuth/PHPAuth.git", + "reference": "f77d23bd4a0c8099b23c47b305b810f42a6067d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPAuth/PHPAuth/zipball/f77d23bd4a0c8099b23c47b305b810f42a6067d6", + "reference": "f77d23bd4a0c8099b23c47b305b810f42a6067d6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-pdo": "*", + "google/recaptcha": "^1.2", + "php": ">=7.2.0", + "phpmailer/phpmailer": "^6.0" + }, + "require-dev": { + "phpauth/phpauth.email-validator": "^0.1.1", + "phpauth/phpauth.l10n": "^0.1.0", + "phpunit/phpunit": "6.*" + }, + "suggest": { + "bjeavons/zxcvbn-php": "^1.0", + "ganlvtech/kcaptcha": "^1.0", + "phpauth/phpauth.email-validator": "^0.1.1", + "phpauth/phpauth.l10n": "^0.1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPAuth\\": "sources/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A secure user authentication class for PHP websites, using a powerful password hashing system and attack blocking to keep your website and users secure.", + "homepage": "https://phpauth.github.io/PHPAuth/", + "keywords": [ + "Authentication", + "class", + "secure" + ], + "support": { + "issues": "https://github.com/PHPAuth/PHPAuth/issues", + "source": "https://github.com/PHPAuth/PHPAuth/tree/1.5.0" + }, + "time": "2023-06-28T17:41:59+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.9.3", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e", + "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.2", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication", + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2024-11-24T18:04:13+00:00" + }, + { + "name": "predis/predis", + "version": "v1.1.10", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e", + "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net", + "role": "Creator & Maintainer" + }, + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v1.1.10" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2022-01-05T17:46:08+00:00" + }, + { + "name": "psr/cache", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/2.0.0" + }, + "time": "2021-02-03T23:23:37+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "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/1.1.2" + }, + "time": "2021-11-05T16:50:12+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-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.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/2.0.0" + }, + "time": "2021-07-14T16:41:46+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "rakit/validation", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/rakit/validation.git", + "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rakit/validation/zipball/ff003a35cdf5030a5f2482299f4c93f344a35b29", + "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=7.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^6.5", + "squizlabs/php_codesniffer": "^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rakit\\Validation\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Muhammad Syifa", + "email": "emsifa@gmail.com" + } + ], + "description": "PHP Laravel like standalone validation library", + "support": { + "issues": "https://github.com/rakit/validation/issues", + "source": "https://github.com/rakit/validation/tree/v1.4.0" + }, + "time": "2020-08-27T05:07:01+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": "robmorgan/phinx", + "version": "0.12.13", + "source": { + "type": "git", + "url": "https://github.com/cakephp/phinx.git", + "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/phinx/zipball/6eb0f295e140ed2804d93396755f0ce9ada4ec07", + "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07", + "shasum": "" + }, + "require": { + "cakephp/database": "^4.0", + "php": ">=7.2", + "psr/container": "^1.0 || ^2.0", + "symfony/config": "^3.4|^4.0|^5.0|^6.0", + "symfony/console": "^3.4|^4.0|^5.0|^6.0" + }, + "require-dev": { + "cakephp/cakephp-codesniffer": "^4.0", + "ext-json": "*", + "ext-pdo": "*", + "phpunit/phpunit": "^8.5|^9.3", + "sebastian/comparator": ">=1.2.3", + "symfony/yaml": "^3.4|^4.0|^5.0" + }, + "suggest": { + "ext-json": "Install if using JSON configuration format", + "ext-pdo": "PDO extension is needed", + "symfony/yaml": "Install if using YAML configuration format" + }, + "bin": [ + "bin/phinx" + ], + "type": "library", + "autoload": { + "psr-4": { + "Phinx\\": "src/Phinx/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Morgan", + "email": "robbym@gmail.com", + "homepage": "https://robmorgan.id.au", + "role": "Lead Developer" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com", + "homepage": "https://shadowhand.me", + "role": "Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Developer" + }, + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/phinx/graphs/contributors", + "role": "Developer" + } + ], + "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.", + "homepage": "https://phinx.org", + "keywords": [ + "database", + "database migrations", + "db", + "migrations", + "phinx" + ], + "support": { + "issues": "https://github.com/cakephp/phinx/issues", + "source": "https://github.com/cakephp/phinx/tree/0.12.13" + }, + "time": "2022-10-03T04:57:40+00:00" + }, + { + "name": "symfony/cache", + "version": "v5.4.46", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", + "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "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 extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.46" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-04T11:43:55+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e", + "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "2.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:11:13+00:00" + }, + { + "name": "symfony/config", + "version": "v6.4.14", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", + "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "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 you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.4.14" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-04T11:33:53+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^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/v5.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-06T11:30:55+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.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": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v6.4.16", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "symfony/console": "<5.4", + "symfony/process": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "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": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v6.4.16" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-27T11:08:19+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.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": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "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 basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-10-25T15:15:23+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^7.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.2.3" + }, + "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": "2025-01-27T11:08:17+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.2.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", + "reference": "87ca22046b78c3feaff04b337f33b38510fd686b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.2.4" + }, + "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": "2025-02-19T08:51:20+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "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 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.5.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": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "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.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.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.4.15" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-11-13T13:31:12+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.4.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e", + "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.4.19" + }, + "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": "2025-02-13T10:18:43+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.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": "2024-09-25T14:20:29+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.4.19", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "be6e71b0c257884c1107313de5d247741cfea172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172", + "reference": "be6e71b0c257884c1107313de5d247741cfea172", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "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": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.4.19" + }, + "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": "2025-02-13T09:33:32+00:00" + }, + { + "name": "twig/twig", + "version": "v3.20.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "3468920399451a384bef53cf7996965f7cd40183" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", + "reference": "3468920399451a384bef53cf7996965f7cd40183", + "shasum": "" + }, + "require": { + "php": ">=8.1.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.20.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2025-02-13T08:34:43+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "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/1.6.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-01-24T18:55:24+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": true, + "prefer-lowest": false, + "platform": {}, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/config/container.php b/config/container.php new file mode 100755 index 0000000..19fc80e --- /dev/null +++ b/config/container.php @@ -0,0 +1,47 @@ +useAutowiring(true); // Enable autowiring + +$containerBuilder->addDefinitions([ + BladeOne::class => function () { + return new BladeOne(VIEWS_PATH, CACHE_PATH, BladeOne::MODE_AUTO); + }, + Logger::class => function () { + $logger = new Logger('app'); + $logger->pushHandler(new StreamHandler(__DIR__ . '/../logs/app.log', Logger::DEBUG)); + return $logger; + }, + Environment::class => function () { + $loader = new FilesystemLoader(VIEWS_PATH); + $twig = new Environment($loader); + + // Register the PHP function getCsrfToken + $csrfFunction = new TwigFunction('csrf', function () { + return getCsrfToken(); + }); + + $twig->addFunction($csrfFunction); + return $twig; + } +]); + +$container = $containerBuilder->build(); + +// Make the container globally available +$GLOBALS['container'] = $container; + + + + + + + diff --git a/config/database.php b/config/database.php new file mode 100755 index 0000000..49b4a61 --- /dev/null +++ b/config/database.php @@ -0,0 +1,24 @@ +addConnection([ + 'driver' => $_ENV['DB_CONNECTION'], + 'host' => $_ENV['DB_HOST'], + 'database' => $_ENV['DB_DATABASE'], + 'username' => $_ENV['DB_USERNAME'], + 'password' => $_ENV['DB_PASSWORD'], + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'prefix' => '', +]); + +// Set the Capsule as the global manager for Eloquent ORM +$capsule->setAsGlobal(); + +// Initialize Eloquent ORM +$capsule->bootEloquent(); + + diff --git a/config/envread.php b/config/envread.php new file mode 100755 index 0000000..64e38c8 --- /dev/null +++ b/config/envread.php @@ -0,0 +1,45 @@ +getMessage(); +} diff --git a/config/paths.php b/config/paths.php new file mode 100755 index 0000000..0bd0c0b --- /dev/null +++ b/config/paths.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/config/templateengine.php b/config/templateengine.php new file mode 100755 index 0000000..d782499 --- /dev/null +++ b/config/templateengine.php @@ -0,0 +1,10 @@ +'; +} + +function csrf() { + echo csrfField(); +} +?> \ No newline at end of file diff --git a/database/crudexample.sql b/database/crudexample.sql new file mode 100755 index 0000000..692ec69 --- /dev/null +++ b/database/crudexample.sql @@ -0,0 +1,13 @@ +CREATE TABLE `crudexample` ( + `id` int NOT NULL AUTO_INCREMENT, + `company` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `phone` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; diff --git a/logs/app.log b/logs/app.log new file mode 100755 index 0000000..c09f0b7 --- /dev/null +++ b/logs/app.log @@ -0,0 +1,2212 @@ + +[2025-08-29T18:54:40.371246+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-29T18:54:42.966713+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T18:57:33.977546+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T18:57:36.057569+00:00] app.ERROR: Error when updating record: Invalid CSRF token. [] [] +[2025-08-29T18:57:40.104017+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T18:58:36.970223+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-29T18:58:39.130039+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T18:59:51.263526+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T18:59:58.296302+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-29T18:59:59.978015+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-08-29T19:00:01.890513+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-29T19:01:20.674623+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-08-29T19:01:22.587993+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-08-29T19:01:27.531210+00:00] app.INFO: Record with ID: 1 updated successfully. [] [] +[2025-08-29T19:01:27.564694+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-08-29T19:01:33.028370+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-29T19:03:36.172631+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-29T19:27:19.672959+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-29T19:27:30.076232+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-29T19:55:38.440299+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-08-30T14:34:19.754757+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-08-30T15:21:14.608813+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-08-30T15:21:17.188442+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-08-30T15:23:25.007438+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-08-30T15:25:46.715494+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-30T15:42:47.827984+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-30T15:51:41.497360+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-30T15:54:15.609086+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T15:54:40.277521+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-08-30T15:54:50.166546+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-08-30T15:54:56.265902+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-08-30T15:55:00.203608+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T15:56:26.424112+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T15:56:34.157870+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T15:56:54.065366+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T16:01:35.885342+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-08-30T16:02:54.295420+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-30T16:03:06.863752+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-30T16:04:07.971536+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-30T16:06:19.424256+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-30T16:06:53.024952+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-30T16:07:38.629210+00:00] app.INFO: Displaying the About page. [] [] +[2025-08-31T08:05:37.424153+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-01T08:26:33.884523+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-02T18:53:18.066393+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-04T13:37:49.683537+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-05T09:00:56.136891+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-05T09:10:24.035543+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-05T09:20:40.326624+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-05T09:31:55.143365+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-05T09:41:14.241883+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-05T09:49:08.520203+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-05T10:00:56.242351+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-05T10:13:04.311974+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-05T10:20:17.931423+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-09-05T10:31:52.562150+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-06T06:21:47.568566+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-06T06:21:58.127879+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-06T06:22:10.814802+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-06T06:22:24.884644+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-06T06:22:38.557808+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-06T06:22:49.844990+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-06T06:23:13.231705+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-06T06:23:33.183897+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-06T06:23:43.989839+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-09-06T06:23:56.247500+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-06T06:24:26.971850+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-09-06T06:24:39.459280+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-09-06T06:24:50.188216+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-06T06:25:20.997227+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-06T06:26:30.973908+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-09-06T06:27:06.715211+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-09-06T06:28:27.667863+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-09-06T06:29:28.012375+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-06T06:31:21.899378+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-09-06T06:32:24.833866+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-06T06:33:34.752969+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-09-06T06:33:54.830702+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-09-06T06:34:06.701509+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-09-06T06:34:22.601245+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-09-06T06:34:48.668028+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-09-06T06:35:20.671463+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-09-06T06:35:36.102230+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-09-06T06:35:50.064385+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-09-06T06:37:00.196980+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-09-06T06:37:20.085869+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-09-06T06:37:57.826255+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-09-06T06:38:10.989713+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-09-06T06:38:24.291864+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-06T06:38:46.362115+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-09-06T06:38:58.762390+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-09-06T06:39:13.254428+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-09-06T06:39:55.293384+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-09-06T06:40:11.938689+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-09-06T06:40:28.088350+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-09-06T06:40:58.985413+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-06T06:41:12.250101+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-06T06:41:26.611925+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-09-06T06:42:13.760047+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-06T06:43:23.355032+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-09-06T06:44:48.373552+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-06T06:45:04.820779+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-06T06:45:23.278286+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-09-06T06:45:37.664665+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-09-06T06:46:04.586391+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-06T06:46:38.942558+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-09-06T06:47:20.677069+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-09-06T06:47:39.787802+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-09-06T06:49:05.461388+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-09-06T06:49:28.082122+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-09-06T06:50:57.428252+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-06T06:51:14.583484+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-06T06:51:44.903671+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-09-06T06:52:23.011172+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-09-06T06:53:10.173281+00:00] app.INFO: Displaying the record with ID: 1. [] [] +[2025-09-06T06:53:25.553273+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-09-06T06:53:41.780016+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-09-06T06:53:58.576062+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-09-06T06:54:15.323786+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-09-06T06:54:27.271231+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-09-06T06:54:41.074296+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-09-06T06:55:06.924785+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-06T06:55:24.075515+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-09-06T06:55:42.497181+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-09-06T06:56:02.072698+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-09-06T06:56:29.691497+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-09-06T06:56:49.630546+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-09-06T06:57:35.229041+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-09-06T06:57:53.412243+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-09-06T06:58:05.373784+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-09-06T06:58:14.650339+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-09-06T06:58:27.204417+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-09-06T06:58:44.599104+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-09-06T06:59:04.013555+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-09-06T06:59:24.592200+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-09-06T06:59:51.207486+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-09-06T07:00:06.749403+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-09-06T07:00:23.604932+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-09-06T07:00:44.096172+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-09-06T07:01:11.051243+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-06T07:01:33.144653+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-09-06T07:01:58.469933+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-09-06T07:02:11.806429+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-09-06T07:02:24.358156+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-09-06T07:02:40.027248+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-09-06T07:02:56.683558+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-09-06T07:03:06.741631+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-09-06T07:03:15.761886+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-09-06T07:03:42.757041+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-09-06T07:04:02.582996+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-09-06T07:05:10.806629+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-09-06T07:05:20.390765+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-09-06T09:23:17.295859+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-06T10:51:30.900287+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-06T10:51:34.980588+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-06T10:51:37.101505+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-06T10:51:50.738426+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-06T10:51:52.812810+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-06T10:51:55.315662+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-06T10:51:57.662594+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-06T10:52:00.309854+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-06T10:52:02.604979+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-06T10:52:04.536717+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-06T10:52:08.180667+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-06T13:01:41.991898+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-09-06T13:01:43.761390+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-09-06T13:01:45.373108+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-09-06T13:01:47.024491+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-09-06T13:01:48.744793+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-09-06T13:01:50.633023+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-06T13:01:52.451569+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-06T13:01:54.473180+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-09-06T13:01:56.255669+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-09-06T13:01:57.983283+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-09-06T13:02:00.063097+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-09-06T13:02:01.978036+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-09-06T13:02:03.747267+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-09-06T13:02:05.455282+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-09-06T13:02:07.172232+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-09-06T13:02:08.840607+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-06T13:02:10.696500+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-09-06T13:02:12.493155+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-09-06T13:02:14.168892+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-09-06T13:02:15.966830+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-09-06T13:02:17.712044+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-09-06T13:02:19.310655+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-09-06T13:02:21.097441+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-09-06T13:02:22.854102+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-09-06T13:02:24.632379+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-09-06T13:02:26.284449+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-09-06T13:02:27.843680+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-09-06T13:02:29.579241+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-09-06T13:03:18.792149+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-09-06T13:03:20.536007+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-09-06T13:03:22.117432+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-09-06T13:03:23.845886+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-09-06T13:03:25.606247+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-09-06T13:03:27.496151+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-09-06T13:03:29.215472+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-09-06T13:03:30.809430+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-09-06T13:03:32.569268+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-09-06T13:03:34.157055+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-09-06T13:03:35.770789+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-09-06T13:03:37.518238+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-06T13:03:39.394509+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-09-06T13:03:41.149400+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-09-06T13:03:42.877602+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-09-06T13:03:44.465204+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-09-06T13:03:46.223700+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-09-06T13:03:48.097696+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-09-06T13:03:49.838072+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-06T13:03:51.433209+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-09-06T13:03:53.020055+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-09-06T13:03:54.737255+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-09-06T13:03:56.474639+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-09-06T13:03:58.196560+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-09-06T13:03:59.897890+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-09-06T13:04:01.627593+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-09-06T13:04:03.361457+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-09-06T13:04:05.062543+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-09-06T13:04:06.640981+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-09-06T13:04:08.343123+00:00] app.INFO: Displaying the record with ID: 1. [] [] +[2025-09-06T13:04:10.090445+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-06T13:04:11.802745+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-09-06T13:04:13.523843+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-09-06T13:04:15.224432+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-06T13:04:16.949952+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-09-06T13:04:18.635452+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-09-06T13:04:20.356987+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-09-06T13:04:22.221267+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-06T13:04:23.924042+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-06T13:04:25.628222+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-09-06T13:04:27.369596+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-09-06T13:04:29.081430+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-09-06T13:04:30.801461+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-09-06T13:04:32.498912+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-06T13:04:34.086554+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-09-06T13:04:35.935721+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-09-06T13:04:37.636506+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-09-06T13:04:39.318975+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-06T13:04:41.039423+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-09-06T13:04:42.740910+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-09-06T13:04:44.440922+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-09-06T13:04:46.144840+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-09-06T13:04:47.866427+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-09-06T13:04:49.724486+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-09-06T13:04:51.410987+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-06T13:04:53.099744+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-06T13:04:54.882219+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-09-07T23:00:03.793121+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-08T12:47:45.710852+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-08T12:52:24.923231+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-08T12:54:01.501984+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-08T12:56:30.396999+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-08T12:57:08.916291+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-08T13:01:14.144601+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-08T13:08:06.192957+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-08T13:09:50.404399+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-08T13:10:36.107104+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-08T13:13:56.646521+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-08T13:13:56.786161+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-08T13:16:59.891081+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-08T13:23:50.513701+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-08T13:35:53.823781+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-09T02:30:25.702469+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-09T06:03:45.733693+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-09T07:50:53.817059+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-09T08:14:54.275651+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-09T09:49:57.682620+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-09T10:25:14.767535+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-09T13:03:26.496922+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-09T15:41:29.855091+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-09T15:59:41.949333+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-09T19:46:19.060017+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-10T00:37:52.686771+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-10T02:11:15.415018+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-09-10T03:51:59.236041+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-09-10T03:52:03.807020+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-10T04:12:55.660591+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-09-10T04:12:59.253322+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-09-10T04:13:03.743683+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-09-10T04:41:31.729506+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-09-10T04:41:35.146460+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-09-10T04:41:39.882072+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-09-10T05:19:35.954732+00:00] app.INFO: Displaying the record with ID: 1. [] [] +[2025-09-10T05:19:40.261010+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-09-10T05:19:45.004696+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-09-10T05:53:32.017162+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-09-10T05:53:36.026975+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-09-10T06:13:39.525305+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-09-10T06:13:44.513313+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-09-10T06:13:47.952347+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-09-10T06:13:52.102856+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-09-10T06:48:12.195092+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-09-10T07:14:16.048634+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-10T08:41:35.444852+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-09-10T08:41:39.381969+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-09-10T08:41:44.579718+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-09-10T09:14:59.686898+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-09-10T09:15:03.462310+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-10T09:50:39.853334+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-09-10T09:51:55.520829+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-09-10T10:06:11.764297+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-10T10:06:15.422197+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-09-10T10:06:19.716222+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-09-10T10:35:11.339377+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-09-10T11:08:43.519952+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-09-10T11:36:15.811693+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-10T12:41:51.318397+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-09-10T12:41:55.466126+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-09-10T12:41:59.963204+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-09-10T12:47:23.756280+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-09-10T13:02:55.991611+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-10T13:35:48.565130+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-09-10T13:35:52.085498+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-09-10T13:35:55.599709+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-09-10T13:35:59.683869+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-09-10T13:36:03.785513+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-09-10T13:59:28.307716+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-09-10T13:59:32.510185+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-09-10T14:38:36.746111+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-09-10T14:38:40.497933+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-10T14:48:45.026978+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-10T15:08:36.643159+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-10T15:08:40.635375+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-09-10T15:08:43.944983+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-09-10T15:08:48.158158+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-09-10T15:37:20.514408+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-10T16:04:51.976178+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-09-10T16:04:55.368557+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-09-10T16:05:00.282358+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-09-10T16:05:04.908639+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-09-10T16:30:27.493032+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-09-10T16:30:33.257836+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-09-10T17:12:15.585113+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-09-10T17:12:19.962737+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-09-10T17:12:24.435772+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-09-10T18:01:55.666054+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-09-10T18:01:59.328990+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-09-10T18:02:04.276198+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-09-10T18:02:07.560748+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-09-10T18:29:43.642959+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-10T18:29:48.068565+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-09-10T18:29:51.671362+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-09-10T19:04:44.271175+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-10T19:04:48.684402+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-09-10T19:39:00.069985+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-09-10T19:39:04.830532+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-10T19:59:11.436996+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-09-10T20:37:20.035777+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-09-10T20:37:23.523400+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-09-10T20:37:27.664110+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-09-10T21:32:39.783089+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-10T21:32:44.623196+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-09-10T21:32:48.105877+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-09-10T21:32:51.921008+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-09-10T21:52:40.337743+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-09-10T23:00:36.018715+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-09-10T23:15:39.234272+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-09-10T23:15:44.016792+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-09-11T00:33:59.228459+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-09-12T14:14:30.194683+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-14T13:28:26.433542+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-15T11:43:06.793906+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-15T11:43:22.519064+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-15T11:43:38.226992+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-15T11:43:54.181462+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-15T11:44:10.171202+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-15T11:44:26.620166+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-15T11:44:42.330244+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-15T11:44:58.088328+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-15T11:45:13.762129+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-15T11:45:36.582427+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-15T22:46:31.277622+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-16T06:28:58.681903+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-16T07:12:20.140697+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-16T08:40:48.959840+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-17T18:57:28.917479+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-17T19:13:04.153931+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-17T19:20:04.239248+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-17T19:26:52.494010+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-17T19:43:50.331939+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-17T19:55:28.675462+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-17T20:03:45.774999+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-09-17T20:14:41.154050+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-17T20:23:48.892227+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-17T20:34:29.282034+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-18T02:57:41.310185+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-18T06:00:17.788158+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-19T00:05:29.309360+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-19T01:05:27.428926+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-19T02:35:27.520737+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-19T04:05:27.422934+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-19T04:30:28.206497+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-19T04:33:41.577716+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-19T04:33:46.036016+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-19T04:41:43.201838+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-19T04:52:58.205541+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-19T05:04:13.211806+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-19T05:15:28.225359+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-19T05:37:58.254046+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-09-19T07:23:33.825671+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-19T07:46:03.631421+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-19T08:44:24.486146+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-19T08:57:15.911308+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-19T09:10:07.307968+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-19T09:48:41.842213+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-09-19T11:38:33.419604+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-19T11:41:11.592035+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-09-19T14:38:34.870373+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-19T15:35:34.204617+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-09-19T17:41:11.872179+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-19T18:55:35.250959+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-19T19:41:11.947719+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-09-19T20:41:11.814795+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-19T21:59:11.668597+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-09-19T22:15:41.552399+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-19T22:17:11.650308+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-19T22:35:11.626903+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-19T22:53:11.809491+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-09-19T23:11:11.579564+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-09-19T23:29:11.604209+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-19T23:47:11.593964+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-09-20T00:05:11.806267+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-09-20T00:25:11.571908+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-20T00:45:12.193907+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-20T01:05:11.581683+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-20T01:25:11.775434+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-09-20T01:45:11.590181+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-09-20T02:05:11.633873+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-20T02:25:11.581826+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-09-20T02:45:11.533698+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-09-20T06:02:13.661862+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-21T03:48:03.255232+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-21T06:48:02.474847+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-09-21T08:23:26.651463+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-21T08:23:58.718170+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-09-21T08:24:14.434929+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-09-21T08:24:31.761235+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-09-21T08:24:47.722429+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-09-21T08:25:03.425536+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-09-21T08:25:19.102954+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-09-21T08:25:35.469328+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-09-21T08:25:51.458091+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-09-21T08:26:09.147643+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-09-21T08:26:26.755513+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-09-21T08:26:43.836141+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-09-21T08:27:00.184652+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-09-21T08:27:15.887330+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-09-21T08:27:32.469356+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-09-21T08:27:48.167715+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-09-21T08:28:04.155915+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-21T08:28:20.470926+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-09-21T08:28:37.082327+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-09-21T08:28:53.452491+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-09-21T08:29:09.142531+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-09-21T08:29:25.511930+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-09-21T08:29:41.527732+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-09-21T08:29:59.121026+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-09-21T08:30:15.066427+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-21T08:30:30.799122+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-09-21T08:37:43.565774+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-09-21T08:38:00.162433+00:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2025-09-21T08:38:15.933867+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-09-21T08:38:31.660914+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-09-21T08:38:47.387187+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-09-21T08:39:04.146005+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-09-21T08:39:20.807562+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-09-21T08:39:36.570298+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-09-21T08:39:53.319089+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-09-21T08:40:10.091908+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-09-21T08:40:25.997951+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-21T08:40:42.718179+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-21T08:40:58.666489+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-21T08:41:14.626917+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-21T08:41:34.066243+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-09-21T08:41:50.230942+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-21T08:42:06.557959+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-09-21T08:42:22.297466+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-09-21T08:42:38.659505+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-09-21T08:42:54.360322+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-09-21T08:43:10.742022+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-09-21T08:43:27.110539+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-09-21T08:43:42.776747+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-09-21T08:43:59.303206+00:00] app.INFO: Displaying the record with ID: 1. [] [] +[2025-09-21T08:44:15.034338+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-09-21T08:44:31.773831+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-09-21T08:44:47.499614+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-09-21T08:45:04.099892+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-09-21T08:45:19.841878+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-09-21T08:45:35.569938+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-09-21T08:45:52.304844+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-09-21T08:46:08.234008+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-21T08:46:23.933126+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-09-21T08:46:40.660728+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-09-21T08:46:56.769198+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-09-21T08:47:14.373819+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-09-21T08:47:31.187173+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-09-21T08:47:47.216095+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-09-21T08:48:06.563148+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-09-21T08:48:22.309479+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-21T08:48:38.067366+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-21T08:48:55.477555+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-09-21T08:49:11.420686+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-09-21T08:49:27.172785+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-09-21T08:49:43.224719+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-09-21T08:49:58.960088+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-09-21T08:50:14.714016+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-09-21T08:50:30.423993+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-09-21T08:50:46.154637+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-09-21T19:18:33.433879+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-21T19:31:38.150650+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-21T19:31:43.224739+00:00] app.INFO: Record with ID: 1 deleted successfully. [] [] +[2025-09-21T19:31:43.253317+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-21T22:33:15.987805+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-21T23:03:35.720765+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-22T06:09:12.322817+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-22T09:10:21.350252+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-22T11:37:23.256619+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-22T12:10:11.062977+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-22T16:34:57.881406+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-22T17:18:09.012497+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-22T17:26:40.916756+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-09-22T17:36:51.087009+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-22T17:45:39.986520+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-22T17:54:28.163262+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-22T18:05:32.617740+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-22T18:15:15.410740+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-09-22T18:25:32.055628+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-22T18:37:22.786553+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-22T18:47:13.392288+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-23T05:21:34.531014+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-09-23T08:34:33.943155+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-09-23T08:52:15.348822+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-23T16:17:01.433281+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-23T16:17:06.020896+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-09-24T06:30:44.675336+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-24T12:30:04.352472+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-09-24T15:37:04.290918+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-09-24T19:00:40.478140+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-09-25T19:52:12.661901+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-25T19:52:37.305013+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-25T19:52:42.640469+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-25T19:52:50.410540+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-26T06:57:31.534805+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-26T18:36:27.183904+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-09-26T18:36:28.166837+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-09-26T21:36:26.493713+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-09-26T22:40:34.124137+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-26T22:40:51.890185+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-26T22:41:07.811384+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-26T22:41:23.531350+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-26T22:41:39.232808+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-26T22:41:55.372857+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-26T22:42:11.102730+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-26T22:42:27.684743+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-26T22:42:43.427400+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-26T22:43:00.380321+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-26T22:43:48.936666+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-09-26T22:44:04.821388+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-09-26T22:44:22.239362+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-09-26T22:44:38.172416+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-26T22:44:54.008723+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-09-26T22:45:09.818340+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-09-26T22:45:25.659227+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-09-26T22:45:41.671649+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-09-26T22:45:57.399465+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-09-27T02:45:26.481040+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-09-27T05:45:26.455007+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-09-27T16:57:22.565457+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-09-27T17:07:10.784575+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-09-27T17:19:00.936807+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-27T17:27:46.281559+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-09-27T17:39:15.772353+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-09-27T17:48:55.476875+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-27T17:57:09.221304+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-09-27T18:17:51.392904+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-27T18:28:38.083898+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-09-28T05:48:10.589101+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-28T09:32:38.876061+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-09-28T22:55:41.189441+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-09-29T08:23:55.803983+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-09-29T09:05:55.629247+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-29T12:59:49.736568+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-09-29T14:34:38.428309+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-29T14:35:27.506311+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-09-30T04:58:11.609043+00:00] app.INFO: Displaying the About page. [] [] +[2025-09-30T07:21:12.758354+00:00] app.INFO: Displaying the Security page. [] [] +[2025-09-30T11:47:20.102736+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-01T03:26:17.496848+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-01T16:11:07.432686+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-02T01:09:49.058764+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-02T04:47:07.608002+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-02T04:58:31.057515+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-02T07:38:52.183510+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-02T07:38:56.862043+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-02T07:39:05.329362+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-02T07:39:05.652589+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-02T07:39:16.652672+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-02T07:39:17.947103+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-02T07:39:18.642534+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-02T07:39:20.249198+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-02T07:39:27.298766+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-02T07:39:38.079831+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-02T07:39:38.609834+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-02T14:02:22.071618+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-02T14:02:43.231027+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-02T14:03:03.107087+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-02T14:03:24.583810+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-02T14:03:45.367705+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-02T14:04:06.044479+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-02T14:04:25.103280+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-02T14:04:46.541971+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-02T14:05:06.752661+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-02T14:05:27.409966+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-02T14:05:48.651075+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-02T14:06:09.196070+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-02T14:06:37.070417+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-02T14:06:56.031142+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-02T14:07:16.248201+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-02T14:07:36.433009+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-02T14:07:57.206206+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-02T14:13:30.455489+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-02T14:13:51.966359+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-02T14:14:13.096201+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-02T14:14:33.667902+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-02T14:14:56.551654+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-02T14:15:17.494971+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-02T14:15:37.722733+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-02T14:15:57.555456+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-02T14:16:18.121940+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-02T14:16:38.107848+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-02T14:16:58.265987+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-02T14:17:17.067416+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-02T14:17:38.724990+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-02T14:18:01.563843+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-02T14:18:23.496635+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-02T14:18:44.628666+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-02T14:19:06.091563+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-02T14:19:26.675582+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-02T14:19:46.604338+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-02T14:20:06.585717+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-02T14:20:26.783585+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-02T14:20:49.163592+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-02T14:21:09.925977+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-10-02T14:21:31.424559+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-02T14:21:51.872442+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-02T14:22:11.873813+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-02T14:22:31.625810+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-02T14:22:51.791651+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-02T14:23:12.771410+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-02T14:23:33.808784+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-02T14:23:54.796868+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-02T14:24:14.348848+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-02T14:24:34.589087+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-02T14:24:54.725525+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-02T14:25:15.701787+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-02T14:25:36.303754+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-02T14:25:57.220567+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-02T14:26:18.810475+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-02T14:26:39.576629+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-02T14:27:00.434948+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-02T14:27:20.666591+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-02T14:27:42.358993+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-02T14:28:02.495707+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-02T14:28:25.167409+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-02T14:28:45.065693+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-02T14:29:05.054123+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-02T14:29:25.683859+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-02T14:29:46.661989+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-02T17:21:48.801610+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-02T20:14:46.027227+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-02T20:25:20.612251+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-02T21:54:52.048205+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-02T23:14:45.365590+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-03T04:20:28.093346+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-03T05:57:37.642645+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-03T06:06:14.310455+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-03T06:19:39.551197+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-03T06:28:38.284855+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-03T06:37:13.566510+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-03T06:45:22.546514+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-03T06:57:21.171554+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-03T07:07:23.905791+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-03T07:16:50.157817+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-03T07:26:16.164067+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-03T07:35:56.928973+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-03T11:10:46.236483+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-03T16:23:11.228315+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-03T19:14:27.807952+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-03T21:14:30.744776+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-04T04:52:17.282822+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-04T20:57:47.766913+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-05T00:53:06.920650+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-05T03:20:13.594039+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-05T05:57:47.030810+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-05T22:46:24.693625+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-06T03:39:59.640141+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-06T06:24:57.938448+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-06T08:44:10.680471+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-06T11:28:30.441621+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-06T20:07:46.997072+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-06T20:15:58.920930+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-07T09:39:28.160369+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-07T09:46:14.489471+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-07T10:32:45.221084+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-07T12:25:17.329043+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-07T12:54:17.653145+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-07T13:02:30.964702+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-07T13:07:01.166428+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-07T13:33:11.550915+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-07T14:12:57.197315+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-07T14:31:16.412170+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-07T15:23:39.790381+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-07T18:27:59.835747+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-07T19:45:12.969080+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-07T22:20:11.610300+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-07T22:35:19.123093+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-07T23:15:54.816637+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-08T01:35:38.090337+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-08T02:37:28.951646+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-08T05:23:37.952239+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-08T05:32:42.005381+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-08T05:41:01.845497+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-08T05:49:59.796584+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-08T06:01:43.745546+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-08T06:10:59.207789+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-08T06:22:42.408198+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-08T06:42:22.903659+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-08T06:49:54.719362+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-08T07:00:35.419304+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-08T07:00:52.052505+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-08T07:01:08.306244+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-08T07:01:24.000018+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-08T07:01:40.661018+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-08T07:01:57.767783+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-08T07:04:07.006034+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-08T07:04:23.417323+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-10-08T07:04:39.470470+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-08T07:04:56.523504+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-08T07:05:12.371712+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-08T07:05:28.852529+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-08T07:05:44.868969+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-08T07:06:02.155417+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-08T07:06:18.381844+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-08T07:06:34.057855+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-08T07:06:50.004146+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-08T07:07:06.396395+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-08T07:13:19.479022+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-08T07:40:57.306007+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-09T15:11:37.838516+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-09T15:24:07.965921+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-10T02:03:39.475334+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-10T03:02:08.965351+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-10T03:08:12.671853+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-10T06:21:51.957006+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-10T12:46:30.871269+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-11T06:13:08.773970+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-11T07:13:09.852628+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-11T10:15:58.613636+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-11T10:16:39.487634+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-11T20:51:30.085960+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-11T20:53:07.699993+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-11T21:23:42.234538+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-11T21:44:19.626114+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-11T22:25:38.573827+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-12T01:43:32.024456+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-12T01:43:33.050851+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-12T02:14:57.315737+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-12T02:43:25.246960+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-12T09:36:41.366217+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-12T11:56:54.805574+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-12T13:33:13.202803+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-12T14:16:39.446211+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-12T15:57:43.368913+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-12T16:46:42.698478+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-12T17:29:15.011038+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-12T18:26:43.526104+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-12T22:47:40.635813+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-13T00:01:53.540520+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-13T00:56:35.486144+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-13T03:26:48.805263+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-13T03:40:46.162941+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-13T03:46:03.757648+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-13T03:48:03.951016+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-13T03:58:01.134324+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-13T04:07:31.980720+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-13T04:18:59.677683+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-13T04:29:39.583287+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-13T04:48:29.543006+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-13T04:54:42.876283+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-13T04:58:45.738693+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-13T06:19:27.654291+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-13T06:40:50.726583+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-13T08:46:33.417188+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-13T11:14:48.109314+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-13T13:28:32.021972+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-13T16:19:48.318819+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-13T19:47:38.234062+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-13T20:33:39.866158+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-13T21:15:00.318521+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-14T01:27:37.788429+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-14T01:28:04.270573+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-14T01:28:27.358767+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-14T01:28:48.674230+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-14T01:29:11.584699+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-14T01:29:33.844314+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-14T01:29:55.336499+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-14T01:30:19.736800+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-14T01:30:42.539019+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-14T01:31:06.499500+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-14T01:31:31.739017+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-14T01:31:54.955311+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-14T01:37:49.411016+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-14T01:38:16.447600+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-14T01:38:41.232908+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-14T01:39:06.073384+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-14T01:39:31.032899+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-14T01:39:56.396157+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-14T01:40:20.644692+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-14T01:40:46.466064+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-14T01:41:08.959186+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-14T01:41:32.329179+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-14T01:41:58.320085+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-14T01:42:21.938392+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-14T01:42:45.378241+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-14T01:43:11.120080+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-14T01:43:33.199589+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-14T01:43:56.971450+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-14T01:44:22.196402+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-14T01:44:44.239936+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-10-14T01:45:07.511455+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-14T01:45:30.886718+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-14T01:45:53.572601+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-14T01:46:17.983670+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-14T01:46:41.554955+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-14T01:47:04.293769+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-14T01:47:31.092867+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-14T01:47:55.207514+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-14T01:48:18.112063+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-14T01:48:44.520807+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-14T01:49:08.768409+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-14T01:49:31.393266+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-14T01:49:55.478782+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-14T01:50:19.402661+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-14T01:50:40.906936+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-14T01:51:05.485907+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-14T01:51:28.219949+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-14T01:51:50.106875+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-14T01:52:13.746265+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-14T01:52:34.473236+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-14T01:52:58.726667+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-14T01:53:22.014224+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-14T01:53:44.278455+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-14T01:54:09.035892+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-14T01:54:32.656869+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-14T02:18:47.197623+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-14T02:18:51.353438+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-14T02:42:26.227312+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-14T03:46:44.638171+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-14T03:46:47.394354+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-14T04:12:16.481554+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-14T04:12:19.824783+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-14T04:41:25.573732+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-14T04:41:31.422590+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-14T04:41:33.264687+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-14T04:41:35.789686+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-14T05:10:07.446961+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-14T05:35:35.518414+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-14T05:35:39.482241+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-14T06:18:25.587822+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-14T06:18:27.572306+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-14T06:18:34.730260+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-14T06:18:37.169186+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-14T06:18:41.176275+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-14T06:47:47.481045+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-14T07:09:05.439827+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-14T08:13:19.792713+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-14T08:13:23.952671+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-14T08:45:16.118053+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-14T08:45:20.846634+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-14T08:45:23.876953+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-14T09:03:35.638817+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-14T09:33:15.411594+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-14T09:33:20.416686+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-14T10:14:36.105694+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-14T10:14:44.081031+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-14T10:14:44.145092+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-14T10:43:24.955495+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-14T10:43:33.499558+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-14T10:43:35.371138+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-14T10:43:44.272619+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-14T10:43:44.504872+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-14T10:55:46.601397+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-14T11:11:49.478411+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-14T11:31:57.960238+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-14T11:31:58.452018+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-14T11:31:58.986982+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-14T11:33:12.648343+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-14T11:34:58.862361+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-14T11:36:02.598982+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-14T11:38:48.331405+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-14T11:38:48.537932+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-14T11:39:06.951541+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-14T11:40:22.863867+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-14T11:42:19.521861+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-14T12:08:03.141185+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-14T12:33:05.103582+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-14T12:33:08.435343+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-14T12:33:11.867818+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-14T12:33:16.821623+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-14T13:34:47.722514+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-14T13:34:52.176137+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-14T13:34:55.399107+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-14T13:35:00.324915+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-14T13:35:05.762431+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-14T14:11:56.721793+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-14T14:11:56.975281+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-14T14:12:00.066714+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-14T14:45:40.299940+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-14T14:46:16.642880+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-14T14:51:49.858301+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-14T14:51:50.848505+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-14T14:51:51.360291+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-14T14:51:51.854230+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-14T14:51:52.160090+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-14T14:51:52.459966+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-14T14:51:52.778426+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-14T14:51:53.061060+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-14T14:51:53.360967+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-14T14:52:18.228889+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-14T14:52:18.621187+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-14T14:52:18.930083+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-14T14:52:19.530248+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-14T14:52:19.756538+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-14T14:52:19.981624+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-14T14:52:50.947801+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-14T14:52:51.118296+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-14T14:52:51.204087+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-14T14:52:51.939694+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-14T14:52:52.143957+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-14T14:52:52.302156+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-14T14:55:03.498046+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-14T14:55:08.181611+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-14T14:55:08.295151+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-14T14:55:08.383181+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-14T14:55:08.450115+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-14T14:55:08.510276+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-14T14:55:08.687666+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-14T14:55:09.055105+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-14T14:55:09.157402+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-14T14:55:28.399997+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-14T14:55:28.772430+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-14T14:55:28.797265+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-14T14:55:28.993225+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-14T14:55:29.041223+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-14T14:55:29.202041+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-14T14:55:29.246208+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-14T14:55:29.294496+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-14T14:55:29.380142+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-14T14:55:57.981782+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-14T14:55:58.046445+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-14T14:55:58.314903+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-14T14:55:58.319994+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-14T14:55:58.469733+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-14T14:55:58.504301+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-14T14:55:58.546540+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-14T14:55:58.553699+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-14T14:55:58.689598+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-14T14:55:58.814200+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-14T14:55:58.940621+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-14T14:58:13.431602+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-14T14:58:13.569555+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-14T14:58:13.643443+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-14T14:58:13.782494+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-14T14:58:13.813729+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-14T14:58:13.878011+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-14T14:58:13.879732+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-14T14:58:14.035659+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-14T14:58:14.138165+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-14T14:58:55.002922+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-14T14:58:55.005901+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-14T14:58:55.044264+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-14T14:58:55.197024+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-14T14:58:55.240877+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-14T14:58:55.245400+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-14T14:58:55.282586+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-14T14:58:55.414701+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-14T14:59:23.217893+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-14T14:59:23.359598+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-14T14:59:23.411859+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-14T14:59:23.621299+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-14T14:59:23.661898+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-14T14:59:23.820847+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-14T14:59:23.856328+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-14T15:01:59.186251+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-14T15:01:59.242761+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-14T15:01:59.383612+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-14T15:01:59.443397+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-14T15:01:59.477255+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-14T15:01:59.566558+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-14T15:01:59.648540+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-14T15:01:59.751679+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-14T15:01:59.845498+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-14T15:11:34.806280+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-14T15:11:36.773298+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-14T15:11:40.849187+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-14T15:35:04.501095+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-14T16:10:49.229406+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-14T16:10:53.011293+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-14T16:10:57.644137+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-14T16:11:00.413285+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-14T16:57:15.198606+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-14T17:09:53.777705+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-14T17:09:56.317235+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-14T17:28:32.861099+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-14T17:28:38.276759+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-14T17:28:40.898485+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-14T18:20:40.926443+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-14T18:20:44.317777+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-14T18:20:48.840384+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-14T18:36:16.253106+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-14T19:00:34.765041+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-14T19:00:37.444666+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-14T19:08:15.734476+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-14T19:08:19.150384+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-14T19:20:11.994453+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-14T19:20:15.518541+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-14T20:02:32.585177+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-14T20:02:38.912056+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-14T20:02:39.787552+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-14T20:23:15.908156+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-14T20:23:18.783159+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-14T20:30:59.553292+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-14T20:52:35.273420+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-14T20:56:05.902291+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-14T21:12:15.766571+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-14T21:12:16.401948+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-14T21:15:17.400758+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-14T21:34:15.038048+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-14T21:34:17.044455+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-14T21:34:20.455674+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-14T21:36:29.564125+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-14T22:07:38.489297+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-14T22:07:39.790991+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-14T22:27:16.082904+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-14T22:27:17.128121+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-14T22:28:42.888287+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-14T22:59:20.498398+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-14T22:59:24.249915+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-14T23:24:00.966041+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-14T23:24:03.842715+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-15T00:34:59.725741+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-15T05:15:24.335650+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-15T06:01:11.597690+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-15T07:06:29.151303+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-15T07:15:24.891876+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-15T08:59:42.413430+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-15T12:33:12.725478+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-15T13:23:22.816565+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-15T15:15:31.569481+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-15T15:16:43.855046+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-15T16:43:01.563027+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-15T17:11:05.772709+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-15T17:15:34.019011+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-15T17:29:31.066935+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-16T00:30:35.908131+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-16T02:35:35.505643+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-16T02:58:56.723793+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-16T03:20:43.787221+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-16T09:51:30.884423+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-16T10:37:12.682580+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-16T17:30:32.491502+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-16T22:05:58.317113+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-16T23:26:10.055927+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-17T02:10:42.582460+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-17T02:31:50.099015+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-17T03:22:05.095516+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-17T03:47:30.068713+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-17T05:58:00.360368+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-17T06:35:21.421844+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-17T06:58:02.185607+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-17T07:47:20.773072+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-17T08:35:59.612619+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-17T08:36:12.977949+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-17T08:36:16.420201+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-17T08:36:19.496083+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-17T08:36:22.107567+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-17T11:01:54.834344+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-17T11:02:42.280690+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-17T12:38:12.953262+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-17T14:15:38.262261+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-17T14:15:43.307750+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-17T15:53:38.537404+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-17T17:37:56.918622+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-17T17:47:57.828465+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-17T17:55:40.332981+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-17T18:07:41.389329+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-17T18:17:15.941713+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-17T18:27:45.636608+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-17T18:40:12.581834+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-17T18:46:11.945548+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-17T18:57:11.742365+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-17T19:09:23.201036+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-17T19:09:28.237533+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-17T19:09:46.505357+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-17T19:17:46.648770+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-17T20:48:31.863920+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-17T20:48:37.717273+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-17T21:37:39.917648+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-17T21:37:49.343997+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-17T22:26:43.357241+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-17T22:26:49.020655+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-17T22:26:53.485130+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-17T23:15:25.485544+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-17T23:15:31.222214+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-18T00:53:41.627360+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-18T00:53:47.483201+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-18T01:43:52.313973+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-18T03:06:04.297114+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-18T05:01:44.378497+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-18T05:50:17.449403+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-18T06:39:12.348638+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-18T06:39:18.504291+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-18T06:39:25.639490+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-18T08:18:19.420241+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-18T08:57:22.499796+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-18T09:06:38.093085+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-18T09:56:04.261470+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-18T09:56:16.468229+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-18T09:56:27.209997+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-18T10:44:01.443666+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-18T11:29:06.512186+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-18T11:32:59.168413+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-18T11:33:09.363608+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-18T12:15:39.222813+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-18T12:21:53.472581+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-18T12:48:58.236599+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-18T12:48:58.251652+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-18T12:49:00.210371+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-18T12:49:01.039459+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-18T12:49:01.046382+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-18T12:49:01.079675+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-18T12:49:01.095430+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-18T12:49:02.432005+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-18T12:49:02.489805+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-18T12:49:03.551293+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-18T12:49:04.315237+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-18T12:49:04.315239+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-18T12:49:04.319872+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-18T12:49:04.322615+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-18T12:49:04.328064+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-18T12:49:05.498229+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-18T12:49:05.624254+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-18T12:49:06.016735+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-18T12:49:06.052716+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-18T12:49:07.826533+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-18T12:49:09.104713+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-18T12:49:10.080758+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-18T12:49:10.623280+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-18T12:49:10.832701+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-18T12:49:10.852968+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-18T12:49:10.856563+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-18T12:49:11.167275+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-18T12:49:11.487118+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-18T12:49:11.775696+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-18T12:49:12.614757+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-18T12:49:17.769995+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-18T12:49:18.454396+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-18T12:49:21.133933+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-18T12:49:21.396567+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-18T12:49:22.526049+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-18T12:49:22.816058+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-18T12:49:24.916420+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-18T12:49:27.954264+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-18T12:49:29.201076+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-18T12:49:29.847438+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-18T12:49:29.908081+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-18T12:49:30.177543+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-18T12:49:30.438491+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-18T12:49:30.482718+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-18T12:49:31.028213+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-18T12:49:33.771096+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-18T12:49:33.895835+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-18T12:49:37.460102+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-18T12:49:39.288693+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-18T12:49:39.445635+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-18T12:49:41.719026+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-18T12:49:41.841436+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-18T12:49:44.594324+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-18T12:49:46.503885+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-18T12:49:48.476273+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-18T12:49:48.863509+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-18T12:49:50.230227+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-18T12:49:50.544817+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-18T12:49:52.900409+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-18T12:49:53.798888+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-18T12:49:54.032841+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-18T12:49:54.393878+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-18T12:49:54.907586+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-18T12:49:54.952061+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-18T12:49:56.651644+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-18T12:50:01.762646+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-18T12:50:02.086458+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-18T12:50:02.093583+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-18T12:50:02.121439+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-18T12:50:05.144858+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-18T12:50:05.146267+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-18T12:50:05.172709+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-18T12:50:06.406533+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-18T12:50:06.655890+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-18T12:50:06.697297+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-18T12:50:07.004457+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-18T12:50:07.140628+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-18T12:50:07.344589+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-18T12:50:07.435713+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-18T12:50:10.324061+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-18T12:50:10.645512+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-18T12:50:10.704467+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-18T12:50:11.180701+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-18T12:50:12.645104+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-18T12:50:13.135678+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-18T12:50:14.138791+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-18T12:50:14.529743+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-18T12:50:19.472866+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-18T12:50:19.611770+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-18T12:50:23.701492+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-18T12:50:28.316179+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-18T14:49:02.628330+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-18T15:38:27.402199+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-18T15:38:39.172790+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-18T16:27:33.782809+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-18T16:27:40.300753+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-18T16:46:24.501489+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-18T17:17:18.237911+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-18T18:07:07.107165+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-18T18:07:12.759703+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-18T19:46:37.020199+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-18T21:24:28.463850+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-18T23:58:15.879145+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-19T01:59:10.525768+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-19T05:59:22.870037+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-19T05:59:27.308130+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-19T05:59:31.196121+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-19T06:18:48.813619+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-19T07:33:58.883048+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-19T08:21:09.734283+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-19T08:21:14.820953+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-19T09:57:21.083446+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-19T10:45:40.096687+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-19T11:34:40.184722+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-19T12:23:42.243430+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-19T13:13:02.468329+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-19T14:01:30.409357+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-19T14:01:35.496014+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-19T14:01:39.901328+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-19T14:50:04.550613+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-19T14:50:09.616779+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-19T14:50:13.987319+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-19T14:50:17.778847+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-19T14:57:33.582639+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-19T14:58:03.017145+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-19T14:58:09.906024+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-19T14:58:16.805420+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-19T14:58:28.271547+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-19T14:58:32.061918+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-19T14:58:36.902961+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-19T14:58:59.540474+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-19T14:59:07.779153+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-19T14:59:23.758528+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-19T14:59:37.728444+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-19T14:59:54.760227+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-19T16:27:08.244700+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-19T18:49:30.391679+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-19T20:29:36.027229+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-19T21:17:44.317797+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-19T21:28:18.563990+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-19T21:28:34.587910+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-19T21:28:50.800577+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-19T21:29:06.517151+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-19T21:29:22.502212+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-19T21:29:38.152029+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-10-19T21:29:55.111662+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-19T21:32:41.456761+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-19T21:32:58.331527+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-10-19T21:33:14.568805+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-19T21:33:30.388068+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-19T21:33:46.602006+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-19T21:34:02.866955+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-19T21:34:20.196428+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-19T21:34:36.746961+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-19T21:34:53.271317+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-19T21:35:10.135541+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-19T21:35:27.733945+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-19T21:35:45.705929+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-19T21:36:02.563799+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-19T21:36:18.669076+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-19T21:36:36.555501+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-19T22:06:20.255490+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-19T22:44:17.968493+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-20T02:54:14.728349+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-20T02:54:17.377354+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-20T03:09:26.853174+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-20T05:13:28.308595+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-20T06:04:14.954485+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-20T06:58:03.521711+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-20T07:14:24.815183+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-20T08:29:42.159751+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-20T10:06:01.221237+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-20T10:40:24.766781+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-20T10:53:35.304839+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-20T12:27:47.417445+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-20T12:32:21.037429+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-20T14:17:45.060619+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-20T14:17:50.693910+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-20T20:53:49.011558+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-21T02:39:09.554811+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-21T05:24:30.949975+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-21T06:06:43.581221+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-21T08:47:19.494149+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-21T12:33:26.306849+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-21T12:33:30.400875+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-21T12:33:34.561068+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-21T12:33:38.818190+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-21T12:33:42.942458+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-21T12:33:47.043603+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-21T12:33:51.136157+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-21T12:33:55.231979+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-21T12:33:59.352753+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-21T12:34:03.451913+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-21T12:34:07.560525+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-21T17:23:04.839980+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-22T00:22:07.713242+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-22T01:53:28.103383+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-22T03:14:27.181750+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-22T06:14:59.863709+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-22T08:07:10.679594+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-22T09:15:29.701836+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-22T10:51:18.223106+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-22T12:18:19.777453+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-22T14:48:53.501112+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-22T14:48:57.862814+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-22T14:49:01.747287+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-22T16:23:01.729027+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-22T17:09:42.345564+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-22T17:09:47.488522+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-22T18:44:42.109904+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-22T19:32:08.836473+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-22T20:20:03.955350+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-22T21:07:18.270961+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-22T23:14:38.801118+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-22T23:28:24.427379+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-22T23:28:29.549422+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-22T23:28:37.495427+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-23T01:02:51.341988+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-23T05:00:30.899908+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-23T05:02:40.626049+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-23T05:18:22.431885+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-23T05:50:12.597731+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-23T05:55:11.108849+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-23T06:05:33.777563+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-23T06:39:16.989934+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-23T06:55:47.283064+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-23T07:06:46.220834+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-23T17:50:12.476377+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-24T03:27:20.592508+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-24T09:46:03.044022+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-24T13:19:41.281147+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-24T15:21:09.513566+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-25T06:11:56.341274+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-25T06:11:59.830405+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-25T06:12:03.081713+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-25T06:12:06.320947+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-25T06:12:09.568987+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-25T06:12:12.820836+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-25T06:12:35.677280+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-25T06:12:38.991364+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-25T06:12:42.278993+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-25T06:12:45.564687+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-25T06:12:48.890586+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-25T06:12:52.227898+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-25T06:12:55.523117+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-25T06:12:58.814072+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-25T06:13:02.072449+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-25T06:13:05.330217+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-25T06:13:08.602992+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-25T06:13:11.918075+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-25T06:13:15.191703+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-25T06:13:18.443413+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-25T06:13:21.688178+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-25T06:13:24.926436+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-25T06:13:28.163283+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-25T06:13:31.412750+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-25T06:13:34.656570+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-25T06:13:37.891489+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-25T06:13:41.116712+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-25T06:13:44.348187+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-25T06:13:47.591263+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-25T06:13:50.841393+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-25T06:13:54.092210+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-25T06:13:57.325536+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-25T06:14:00.586382+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-25T06:14:03.845308+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-25T06:14:07.103663+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-25T06:14:10.355346+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-25T06:14:13.608726+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-25T06:14:16.860165+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-25T06:14:20.120999+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-25T06:14:23.367383+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-25T06:15:35.260497+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-25T06:15:38.560818+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-25T06:15:41.922909+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-25T06:15:45.193660+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-25T06:15:48.451467+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-25T06:15:51.736140+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-25T06:15:54.984336+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-25T06:15:58.240569+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-25T06:16:01.510322+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-25T06:16:04.767497+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-25T06:16:08.034654+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-25T06:16:11.321191+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-25T06:16:14.592970+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-25T06:16:17.856175+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-25T06:16:21.126198+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-25T06:16:24.382115+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-25T06:16:27.630032+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-25T06:16:30.871412+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-25T06:16:34.131439+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-25T06:16:37.402150+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-25T06:16:40.668248+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-25T06:16:43.928101+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-25T06:16:47.179546+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-25T06:16:50.438231+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-25T06:16:53.687237+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-25T06:16:56.945089+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-25T06:17:00.198895+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-25T06:17:03.448824+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-25T06:17:06.698201+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-25T06:17:09.956507+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-25T06:17:13.228894+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-25T06:17:16.497042+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-25T06:17:19.769480+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-25T06:17:23.037547+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-25T06:17:26.308718+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-25T06:17:29.588098+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-25T06:17:32.835178+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-25T06:17:36.094027+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-25T06:17:39.356961+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-25T06:17:42.617163+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-25T06:17:45.889964+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-25T06:17:49.150516+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-25T16:17:00.846772+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-25T16:57:19.250202+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-25T16:57:24.525020+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-25T16:57:27.130528+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-25T16:57:34.983906+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-25T16:57:36.483216+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-25T16:57:37.843508+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-25T16:57:40.184697+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-25T16:57:45.422046+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-25T16:57:50.087911+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-25T16:57:53.396588+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-25T16:57:55.562617+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-25T16:58:01.184362+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-25T16:58:03.495830+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-25T16:58:05.786748+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-25T16:58:06.937813+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-25T16:58:08.053393+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-25T16:58:11.597156+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-25T16:58:12.796284+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-25T16:58:17.465138+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-25T16:58:18.575858+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-25T16:58:28.859621+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-25T16:58:29.993597+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-25T16:58:31.103216+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-25T16:58:32.232626+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-25T16:58:33.389746+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-25T16:58:34.569950+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-25T16:58:35.759781+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-25T16:58:36.924914+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-25T18:03:11.891733+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-25T18:22:55.496822+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-25T18:23:13.346454+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-25T18:23:45.456735+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-25T18:24:03.855188+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-25T18:24:19.793620+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-25T18:24:36.865605+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-25T18:24:52.612699+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-25T18:25:09.363295+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-25T18:25:26.938648+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-25T18:25:43.961058+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-25T18:26:00.087671+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-25T18:26:19.567928+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-25T18:26:35.547730+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-25T18:26:52.270053+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-25T18:27:08.963399+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-25T18:28:13.633576+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-25T18:28:29.887578+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-25T18:28:46.115261+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-25T18:29:02.204832+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-25T18:29:18.619754+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-25T18:29:36.572711+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-25T18:29:53.125045+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-25T18:30:08.920755+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-25T18:30:25.365838+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-25T18:30:42.221433+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-25T18:30:57.939316+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-25T18:31:13.694267+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-25T18:31:30.330883+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-25T18:31:46.292512+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-25T18:32:03.036680+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-25T18:32:19.780554+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-25T18:32:36.712280+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-25T18:32:52.495990+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-25T18:33:08.228467+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-25T18:33:24.007284+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-25T18:33:41.041239+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-25T18:33:56.978240+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-25T18:34:13.812998+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-25T18:34:29.751983+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-25T18:34:48.532389+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-25T18:35:04.306364+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-25T18:35:20.372470+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-25T18:35:36.406376+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-25T18:35:52.753547+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-25T18:36:09.195437+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-25T18:36:25.159595+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-25T18:36:41.413849+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-25T18:37:00.146566+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-25T18:37:16.840490+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-25T18:37:33.006600+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-25T18:37:48.964000+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-25T18:38:05.653872+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-25T18:38:21.727092+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-25T18:38:38.697947+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-25T18:38:54.565750+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-25T18:39:12.302768+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-25T18:39:34.269508+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-26T09:31:25.541391+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-26T16:05:43.223174+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-26T19:46:43.470712+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-26T20:55:04.952624+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-26T21:47:43.123481+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-26T22:48:14.226306+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-27T03:25:10.571951+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-27T03:47:52.138772+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-27T16:10:40.392512+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-27T18:10:08.464168+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-27T18:20:04.762471+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-27T18:29:46.439408+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-27T18:39:34.069422+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-27T18:48:37.373127+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-27T19:01:36.846834+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-27T19:08:23.125421+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-27T19:30:38.127198+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-27T19:44:08.295818+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-27T19:54:00.731180+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-27T19:55:08.780571+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-28T03:18:21.780960+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-28T03:18:22.598000+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-28T03:30:17.441768+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-28T03:51:14.539210+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-28T04:11:23.563520+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-28T09:03:44.432430+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-28T19:12:58.650278+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-28T19:55:26.883279+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-28T19:55:32.449117+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-28T21:27:54.581482+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-29T04:43:37.619546+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-29T07:26:22.819192+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-29T20:12:01.767756+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-29T22:04:31.563455+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-29T23:05:27.399871+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-30T00:43:53.144400+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-30T00:54:54.784042+00:00] app.INFO: Displaying the Security page. [] [] +[2025-10-30T00:55:41.447781+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-10-30T00:56:34.089985+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-10-30T00:57:20.139622+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-10-30T00:58:09.779065+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-30T00:58:59.092008+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-10-30T01:04:23.602510+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-30T01:05:18.613366+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-10-30T01:05:48.661820+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-10-30T01:06:02.453805+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-10-30T01:07:23.802172+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-30T01:07:36.680346+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-10-30T01:08:04.581799+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-10-30T01:08:31.145717+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-30T01:09:29.269850+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-30T01:09:40.855721+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-10-30T01:10:10.047075+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-10-30T01:11:48.643071+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-10-30T01:12:42.283642+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-10-30T01:13:11.924689+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-30T01:13:27.318271+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-10-30T01:13:42.050515+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-10-30T01:14:27.417505+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-30T01:14:41.209570+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-10-30T01:14:57.733369+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-10-30T01:15:51.524616+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-10-30T01:16:05.051540+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-10-30T01:16:19.714309+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-10-30T01:16:49.888047+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-10-30T01:17:03.504357+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-10-30T01:17:16.940895+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-30T01:17:32.832827+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-30T01:17:46.628235+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-10-30T01:17:59.939872+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-10-30T01:18:12.949429+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-30T01:18:28.561098+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-10-30T01:18:44.312703+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-10-30T01:18:56.148606+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-10-30T01:19:10.179695+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-10-30T01:19:25.859478+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-10-30T01:19:38.760782+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-10-30T01:20:07.875546+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-10-30T01:20:41.365176+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-30T01:21:10.854842+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-30T01:21:23.929064+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-30T01:21:37.168790+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-10-30T01:21:50.648671+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-10-30T01:22:04.509790+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-30T01:22:17.364952+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-10-30T01:22:46.143337+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-10-30T01:22:57.457661+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-10-30T01:23:24.598840+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-10-30T01:23:38.055459+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-10-30T01:24:22.470402+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-10-30T01:24:52.162585+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-10-30T01:25:07.832954+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-10-30T01:25:24.290324+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-10-30T01:25:41.533750+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-10-30T01:25:56.137393+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-10-30T01:26:39.046470+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-10-30T01:27:25.215526+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-10-30T01:27:56.468031+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-10-30T01:28:09.919590+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-10-30T01:28:25.145719+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-10-30T01:28:39.240539+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-10-30T01:28:53.426622+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-10-30T01:29:05.764423+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-10-30T01:29:20.835111+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-10-30T01:29:35.575276+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-10-30T01:29:47.857097+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-10-30T01:30:03.497492+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-10-30T01:30:16.473317+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-10-30T01:30:31.561555+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-10-30T01:30:48.054576+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-10-30T01:31:01.013928+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-10-30T01:31:13.960715+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-10-30T01:31:29.244199+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-10-30T01:31:40.653932+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-10-30T01:31:54.951295+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-30T01:32:07.832714+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-10-30T01:32:18.846282+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-10-30T01:32:31.421141+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-10-30T01:32:44.900020+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-30T01:32:57.438582+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-10-30T01:33:10.943115+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-10-30T01:33:23.460906+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-10-30T01:33:34.624844+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-30T01:33:46.626042+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-10-30T01:34:07.545638+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-10-30T01:34:24.026665+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-10-30T01:34:38.448705+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-10-30T01:34:50.052088+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-10-30T01:35:18.936811+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-10-30T05:43:53.222675+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-10-30T06:45:16.985194+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-10-30T06:48:05.581314+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-10-30T20:18:07.402793+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-10-31T02:32:42.857192+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-10-31T03:19:44.628961+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-10-31T03:48:11.541631+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-10-31T05:23:17.429525+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-10-31T07:20:20.913810+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-10-31T07:39:43.308892+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-10-31T16:37:37.682699+00:00] app.INFO: Displaying the About page. [] [] +[2025-10-31T16:37:56.293850+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-10-31T16:38:14.527440+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-10-31T16:38:32.761156+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-10-31T16:38:51.971809+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-10-31T16:39:11.421958+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-10-31T16:39:31.476529+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-10-31T16:44:18.315038+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-11-01T07:40:42.929508+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-02T00:49:23.735520+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-02T00:49:33.313190+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-02T00:49:33.433123+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-02T00:49:35.235122+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-02T00:49:36.471720+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-02T00:49:38.134765+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-02T00:49:38.814855+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-02T00:49:43.315901+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-02T00:49:43.893656+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-02T07:15:33.481854+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-02T07:22:22.566425+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-02T07:42:04.414949+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-11-02T08:22:10.509396+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-02T12:14:54.151146+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-02T14:47:10.043964+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-11-02T14:47:10.464026+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-11-02T14:47:10.688285+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-02T14:47:10.748700+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-11-02T14:47:11.793276+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-02T14:47:13.937722+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-02T14:47:16.800158+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-11-02T14:47:17.159981+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-11-02T14:47:18.958796+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-11-02T14:47:19.041630+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-11-02T14:47:22.466119+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-11-02T14:47:24.575544+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-11-02T14:47:25.640124+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-11-02T14:47:27.122428+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-11-02T14:47:29.243004+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-11-02T14:47:29.845619+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-11-02T14:47:31.042043+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-11-02T14:47:32.703690+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-11-02T14:47:34.868442+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-11-02T14:47:34.983149+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-02T14:47:37.193764+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-02T14:47:38.427553+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-11-02T14:47:39.781362+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-11-02T14:47:42.622998+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-11-02T14:47:44.290395+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-02T14:47:45.414692+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-11-02T14:47:45.914513+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-11-02T14:47:46.518723+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-11-02T14:47:47.960164+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-02T14:47:49.497860+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-02T14:47:51.080394+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-11-02T14:47:57.561900+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-11-02T14:47:58.542479+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-11-02T14:47:59.728066+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-11-02T14:48:00.469214+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-11-02T14:48:01.274344+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-11-02T14:48:02.499136+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-11-02T14:48:02.929612+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-11-02T14:48:03.883693+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-11-02T14:48:04.338478+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-11-02T14:48:05.337847+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-11-02T14:48:06.161871+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-11-02T14:48:07.510303+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-11-02T14:48:09.222044+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-11-02T14:48:09.321684+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-11-02T14:48:11.499311+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-11-02T14:48:12.551075+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-11-02T14:48:12.892194+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-11-02T14:48:13.822622+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-11-02T14:48:15.455607+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-11-02T14:48:17.034677+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-11-02T18:04:38.128727+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-11-02T18:04:48.938448+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-11-02T22:40:45.013240+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-03T08:40:53.584257+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-03T08:41:07.325104+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-11-03T11:51:21.331556+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-04T08:38:35.944778+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-04T15:19:09.041173+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-11-04T15:21:52.137169+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-05T01:19:00.366822+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-05T05:12:04.765631+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-11-05T05:22:04.684576+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-05T09:25:22.108743+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-05T13:20:11.032821+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-11-06T15:43:23.573814+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-06T15:43:40.239489+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-11-06T15:43:56.417860+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-11-06T15:44:12.867915+00:00] app.INFO: Editing record with ID: 1 [] [] +[2025-11-06T15:44:29.337775+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-06T15:44:46.007859+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-06T15:45:02.315855+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-06T15:45:18.774754+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-11-06T15:45:35.640699+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-11-06T15:47:34.060801+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-11-06T15:47:51.511563+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-06T15:48:09.548740+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-11-06T15:48:25.612399+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-11-06T15:48:41.913965+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-11-06T15:48:59.982660+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-11-06T17:00:45.735330+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-06T17:13:06.880951+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-06T17:22:44.047241+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-06T17:31:35.925737+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-06T17:48:53.261988+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-06T17:54:36.030167+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-11-06T18:00:29.021685+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-11-06T18:03:22.000424+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-06T18:15:20.465248+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-06T21:38:34.180431+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-06T23:30:25.922352+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-06T23:30:29.190002+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-06T23:30:32.772355+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-06T23:30:36.719982+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-06T23:30:40.498302+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-06T23:30:44.099159+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-06T23:30:48.157246+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-06T23:30:51.530509+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-06T23:30:54.989790+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-06T23:30:58.420455+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-06T23:31:01.780252+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-07T01:22:58.543396+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-07T01:24:32.920776+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-07T13:34:42.308536+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-08T16:47:19.780308+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-11-08T16:47:23.426012+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-11-08T16:47:27.060126+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-11-08T16:47:30.556779+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-11-08T16:47:39.803715+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-11-08T16:47:43.212436+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-08T16:48:07.872321+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-11-08T16:48:12.087889+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-11-08T16:48:15.623098+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-11-08T16:48:18.916785+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-11-08T16:48:22.482028+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-11-08T16:48:26.191428+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-11-08T16:48:29.833043+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-11-08T16:48:36.162709+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-11-08T16:48:40.123331+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-11-08T16:48:43.543018+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-11-08T16:48:46.867049+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-08T16:48:50.227801+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-08T16:48:53.678975+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-11-08T16:48:57.248567+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-08T16:49:01.334415+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-08T16:49:04.627476+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-11-08T16:49:08.142809+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-11-08T16:49:11.406444+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-11-08T16:49:14.667824+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-11-08T16:49:17.970543+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-11-08T16:49:21.409707+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-11-08T16:49:24.866305+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-11-08T16:49:28.268410+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-11-08T16:49:32.963915+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-11-08T16:50:05.157910+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-08T16:50:08.429083+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-11-08T16:50:11.713344+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-11-08T16:50:15.073790+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-11-08T16:50:18.982544+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-11-08T16:50:22.571979+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-11-08T16:50:26.161368+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-11-08T16:50:29.716318+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-11-08T16:50:33.013629+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-11-08T16:50:37.786482+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-08T16:51:52.522857+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-11-08T16:51:56.078006+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-11-08T16:51:59.502497+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-11-08T16:52:02.744947+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-11-08T16:52:06.182077+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-11-08T16:52:37.314956+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-11-08T16:52:40.627155+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-11-08T16:52:45.318012+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-11-08T16:52:48.751645+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-11-08T16:52:52.273650+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-11-08T16:52:56.435170+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-11-08T16:52:59.754251+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-11-08T16:53:03.107364+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-11-08T16:53:06.412149+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-11-08T16:53:09.755502+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-11-08T16:53:13.215779+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-11-08T16:53:16.858690+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-11-08T16:53:20.730757+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-11-08T16:53:24.163727+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-11-08T16:53:27.748220+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-11-08T16:53:31.037139+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-11-08T16:53:34.314734+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-08T16:53:38.246576+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-11-08T16:53:41.641415+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-11-08T16:53:45.164802+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-11-08T16:53:48.674988+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-11-08T16:53:52.207586+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-11-08T16:53:55.457261+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-08T16:53:58.839822+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-11-08T16:54:02.229592+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-08T16:54:06.450445+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-11-08T16:54:09.721045+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-11-08T16:54:13.224320+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-08T16:54:16.749785+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-08T16:54:20.453024+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-11-08T16:54:24.200833+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-11-08T16:54:27.601895+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-11-08T16:54:30.937517+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-08T16:54:34.247510+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-11-08T16:54:37.604381+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-11-08T16:54:41.086701+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-11-08T16:54:44.695532+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-11-09T05:05:20.022313+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-11-09T12:01:17.754430+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-09T13:16:17.161992+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-09T16:37:51.350073+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-09T16:39:52.268277+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-09T17:15:26.560372+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-09T18:23:46.845006+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-09T20:08:47.166640+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-09T20:48:12.836818+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-09T21:12:50.148273+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-09T21:22:47.217499+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-11-09T22:50:03.361449+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-10T01:09:47.506759+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-10T03:29:07.814264+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-10T03:29:07.863535+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-10T03:29:07.866779+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-10T03:29:08.015397+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-10T03:29:08.053496+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-10T03:29:08.187782+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-10T03:29:08.256814+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-10T03:29:09.960681+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-10T03:29:10.934386+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-10T03:29:11.608516+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-10T03:29:12.265965+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-10T03:29:17.130721+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-11-10T03:29:17.508336+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-11-10T03:29:17.540057+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-11-10T03:29:18.662235+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-11-10T03:29:18.888246+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-11-10T03:29:19.303199+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-11-10T03:29:19.373026+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-11-10T03:29:19.376598+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-11-10T03:29:19.425207+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-11-10T03:29:19.608106+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-10T03:29:19.667651+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-11-10T03:29:19.680170+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-11-10T03:29:20.258817+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-11-10T03:29:20.390748+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-10T03:29:20.987420+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-10T03:29:21.547390+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-11-10T03:29:21.795687+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-10T03:29:22.244718+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-11-10T03:29:22.273723+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-11-10T03:29:22.294465+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-11-10T03:29:23.043061+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-10T03:29:23.244061+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-11-10T03:29:23.660211+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-11-10T03:29:23.661122+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-10T03:29:24.885186+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-11-10T03:29:25.693852+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-11-10T03:29:25.969010+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-11-10T03:29:26.949840+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-11-10T03:29:27.356002+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-11-10T03:29:27.898004+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-11-10T03:29:28.785021+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-11-10T03:29:28.902617+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-11-10T03:29:29.143441+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-11-10T03:29:30.462798+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-11-10T03:29:30.810505+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-11-10T03:29:30.908994+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-11-10T03:29:30.961456+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-11-10T03:29:32.640065+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-11-10T03:29:33.280038+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-11-10T03:29:34.371003+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-11-10T03:29:34.589732+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-11-10T03:29:34.608451+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-11-10T03:29:35.077195+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-10T03:29:35.448586+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-11-10T03:29:35.732179+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-11-10T03:29:36.036068+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-10T03:29:36.631512+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-11-10T03:29:36.897229+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-11-10T03:29:37.290390+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-11-10T03:29:37.905490+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-11-10T03:29:38.699207+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-11-10T03:29:38.703154+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-11-10T03:29:38.722468+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-11-10T03:29:38.774721+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-10T03:29:40.555529+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-10T03:29:41.417509+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-10T03:29:41.570280+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-11-10T03:29:42.554577+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-11-10T03:29:42.665181+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-11-10T03:29:43.485674+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-11-10T03:29:44.156668+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-11-10T03:29:44.189087+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-11-10T03:29:44.516012+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-11-10T03:29:44.603414+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-11-10T03:29:45.057618+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-11-10T03:29:45.531715+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-11-10T03:29:46.009772+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-10T03:29:46.516174+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-11-10T03:29:46.995198+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-11-10T03:29:47.290085+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-11-10T03:29:47.555015+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-11-10T03:29:47.681943+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-11-10T03:29:48.085635+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-11-10T03:29:59.500386+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-11-10T03:30:02.486422+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-11-10T03:30:05.816289+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-11-10T08:54:59.535544+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-10T10:47:25.186388+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-10T16:53:03.822589+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-11T04:09:06.649189+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-11T07:44:39.580672+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-11T07:47:53.219086+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-11T07:56:02.171437+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-11T08:13:52.461869+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-11T08:17:15.430453+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-11T08:27:25.351447+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-11T09:39:16.488365+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-11T09:47:57.037045+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-11T09:59:32.465729+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-11T10:04:32.272242+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-11T10:21:22.290296+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-11-11T14:08:56.773903+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-11T17:09:22.394373+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-11T18:58:18.123131+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-12T03:11:06.151770+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-12T03:11:07.730048+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-12T14:01:12.293163+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-12T15:29:43.724709+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-12T15:38:05.167381+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-12T15:53:30.181821+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-12T15:59:54.796023+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-12T16:07:21.620821+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-12T16:16:58.823171+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-12T16:23:31.962636+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-12T16:23:49.039670+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-12T16:24:05.783740+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-11-12T16:26:06.065786+00:00] app.WARNING: Record with ID 1 not found. [] [] +[2025-11-12T16:26:21.820621+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-11-12T16:26:38.443839+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-11-12T16:28:52.331187+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-12T17:08:15.946817+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-11-12T17:19:54.440690+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-13T04:38:36.435450+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-13T11:53:44.181002+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-13T19:42:11.028529+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-13T20:19:40.864732+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-14T02:24:10.390815+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-14T06:24:42.278059+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-14T07:55:00.659018+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-14T07:55:05.474607+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-14T09:56:49.306690+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-14T10:25:10.572787+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-14T10:41:08.309113+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-11-14T12:58:08.006626+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-14T14:59:22.442997+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-14T15:28:08.687969+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-14T15:50:05.708540+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-14T17:45:28.949874+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-11-14T18:58:13.040287+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-14T19:55:28.728874+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-15T02:36:12.287077+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-11-15T03:59:11.063957+00:00] app.INFO: Displaying the edit page for the record with ID: 2. [] [] +[2025-11-15T04:00:36.951285+00:00] app.INFO: Displaying the edit page for the record with ID: 19. [] [] +[2025-11-15T04:25:40.266808+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-11-15T04:25:40.979804+00:00] app.INFO: Displaying the edit page for the record with ID: 12. [] [] +[2025-11-15T04:25:46.054121+00:00] app.INFO: Displaying the edit page for the record with ID: 30. [] [] +[2025-11-15T04:56:56.094514+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-11-15T04:56:56.449236+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-11-15T04:57:02.398217+00:00] app.INFO: Displaying the edit page for the record with ID: 26. [] [] +[2025-11-15T05:12:25.426715+00:00] app.INFO: Editing record with ID: 2 [] [] +[2025-11-15T05:15:23.879639+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-15T05:17:20.486000+00:00] app.INFO: Displaying the edit page for the record with ID: 9. [] [] +[2025-11-15T05:40:32.204080+00:00] app.INFO: Displaying the record with ID: 24. [] [] +[2025-11-15T05:40:37.098764+00:00] app.INFO: Displaying the edit page for the record with ID: 8. [] [] +[2025-11-15T05:57:32.018475+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-15T06:20:55.993730+00:00] app.INFO: Displaying the record with ID: 29. [] [] +[2025-11-15T06:20:58.141723+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-11-15T06:21:01.932225+00:00] app.INFO: Displaying the edit page for the record with ID: 5. [] [] +[2025-11-15T06:21:06.918076+00:00] app.INFO: Displaying the edit page for the record with ID: 29. [] [] +[2025-11-15T06:42:28.338322+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-15T07:25:56.578073+00:00] app.INFO: Displaying the record with ID: 8. [] [] +[2025-11-15T08:45:17.403904+00:00] app.INFO: Displaying the record with ID: 15. [] [] +[2025-11-15T08:45:29.922120+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-15T08:45:31.333095+00:00] app.INFO: Displaying the edit page for the record with ID: 23. [] [] +[2025-11-15T09:11:53.598105+00:00] app.INFO: Displaying the edit page for the record with ID: 7. [] [] +[2025-11-15T09:11:57.179867+00:00] app.INFO: Displaying the edit page for the record with ID: 25. [] [] +[2025-11-15T09:42:05.326483+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-11-15T09:42:09.127149+00:00] app.INFO: Editing record with ID: 27 [] [] +[2025-11-15T10:12:29.164094+00:00] app.INFO: Displaying the record with ID: 22. [] [] +[2025-11-15T10:12:37.488089+00:00] app.INFO: Editing record with ID: 5 [] [] +[2025-11-15T10:12:40.526480+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-11-15T11:01:04.444076+00:00] app.INFO: Displaying the edit page for the record with ID: 18. [] [] +[2025-11-15T11:15:40.473031+00:00] app.INFO: Displaying the record with ID: 2. [] [] +[2025-11-15T11:47:00.818256+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-15T12:43:33.504599+00:00] app.INFO: Displaying the record with ID: 27. [] [] +[2025-11-15T12:43:36.458351+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-11-15T12:43:41.126481+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-11-15T12:43:46.874691+00:00] app.INFO: Editing record with ID: 20 [] [] +[2025-11-15T13:17:13.139620+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-11-15T13:35:54.266291+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-11-15T13:35:58.006240+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-11-15T13:36:01.025428+00:00] app.INFO: Displaying the edit page for the record with ID: 10. [] [] +[2025-11-15T13:36:04.182986+00:00] app.INFO: Displaying the edit page for the record with ID: 6. [] [] +[2025-11-15T13:36:09.134821+00:00] app.INFO: Displaying the edit page for the record with ID: 15. [] [] +[2025-11-15T14:12:25.238846+00:00] app.INFO: Displaying the record with ID: 19. [] [] +[2025-11-15T14:12:31.871391+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-11-15T14:40:48.500294+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-11-15T14:40:53.328872+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-11-15T14:40:59.690365+00:00] app.INFO: Editing record with ID: 23 [] [] +[2025-11-15T15:05:17.361672+00:00] app.INFO: Editing record with ID: 12 [] [] +[2025-11-15T15:05:21.861190+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-11-15T15:32:17.178595+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-11-15T16:14:16.384437+00:00] app.INFO: Displaying the record with ID: 23. [] [] +[2025-11-15T16:14:21.200180+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-11-15T16:14:25.250161+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-11-15T16:14:47.111486+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-11-15T16:44:54.931403+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-11-15T16:44:56.670397+00:00] app.INFO: Displaying the edit page for the record with ID: 16. [] [] +[2025-11-15T17:12:01.774654+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-11-15T17:12:05.728379+00:00] app.INFO: Displaying the record with ID: 20. [] [] +[2025-11-15T17:12:13.923969+00:00] app.INFO: Displaying the edit page for the record with ID: 11. [] [] +[2025-11-15T18:03:00.834559+00:00] app.INFO: Displaying the record with ID: 5. [] [] +[2025-11-15T18:03:07.776724+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-11-15T18:03:10.140433+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-15T18:03:16.551501+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-11-15T18:29:44.577967+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-15T18:29:49.286122+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-15T18:29:57.630553+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-11-15T19:08:36.490208+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-15T19:08:48.123210+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-15T19:27:05.256327+00:00] app.INFO: Displaying the record with ID: 12. [] [] +[2025-11-15T19:27:08.763770+00:00] app.INFO: Editing record with ID: 15 [] [] +[2025-11-15T20:02:46.343912+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-11-15T20:35:01.559500+00:00] app.INFO: Displaying the record with ID: 11. [] [] +[2025-11-15T20:35:04.756641+00:00] app.INFO: Displaying the edit page for the record with ID: 21. [] [] +[2025-11-15T21:34:20.296452+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-15T21:34:25.293634+00:00] app.INFO: Displaying the edit page for the record with ID: 17. [] [] +[2025-11-15T21:34:29.510858+00:00] app.INFO: Displaying the edit page for the record with ID: 27. [] [] +[2025-11-15T22:01:30.096205+00:00] app.INFO: Displaying the record with ID: 16. [] [] +[2025-11-15T22:01:33.439839+00:00] app.INFO: Displaying the record with ID: 25. [] [] +[2025-11-15T22:51:24.359021+00:00] app.INFO: Displaying the record with ID: 9. [] [] +[2025-11-15T23:25:28.419605+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-11-15T23:51:00.561274+00:00] app.INFO: Displaying the record with ID: 21. [] [] +[2025-11-16T00:32:00.318021+00:00] app.INFO: Displaying the edit page for the record with ID: 24. [] [] +[2025-11-16T22:16:07.195620+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-11-16T22:40:57.511817+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-16T23:47:16.049982+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-16T23:55:14.379269+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-17T00:12:51.851867+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-17T00:19:46.012060+00:00] app.INFO: Displaying the Database Usage page. [] [] +[2025-11-17T00:30:09.828766+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-17T00:39:41.663027+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-17T06:43:24.993082+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-17T08:43:25.441830+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-17T09:24:49.748235+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-17T11:24:50.341727+00:00] app.INFO: Displaying the record with ID: 26. [] [] +[2025-11-17T13:24:51.064296+00:00] app.INFO: Displaying the record with ID: 18. [] [] +[2025-11-17T15:24:55.779253+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-17T17:00:58.173393+00:00] app.INFO: Displaying the record with ID: 6. [] [] +[2025-11-17T17:25:01.275476+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-11-18T07:55:06.973516+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-11-18T08:52:13.861710+00:00] app.INFO: Displaying the creation page of the TwigExampleController. [] [] +[2025-11-18T18:31:33.288339+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-18T18:31:50.105627+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-18T18:32:05.906785+00:00] app.INFO: Editing record with ID: 6 [] [] +[2025-11-18T18:32:21.667144+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-18T18:32:37.373242+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-11-18T18:32:53.115597+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-18T18:33:08.921904+00:00] app.INFO: Editing record with ID: 19 [] [] +[2025-11-18T18:33:24.665652+00:00] app.INFO: Editing record with ID: 16 [] [] +[2025-11-18T18:33:40.397549+00:00] app.INFO: Editing record with ID: 24 [] [] +[2025-11-18T18:33:56.465118+00:00] app.INFO: Editing record with ID: 25 [] [] +[2025-11-18T18:34:12.274365+00:00] app.INFO: Editing record with ID: 22 [] [] +[2025-11-18T18:34:28.892148+00:00] app.INFO: Editing record with ID: 14 [] [] +[2025-11-18T18:36:26.037967+00:00] app.INFO: Editing record with ID: 28 [] [] +[2025-11-18T18:36:42.744013+00:00] app.INFO: Editing record with ID: 26 [] [] +[2025-11-19T01:26:27.882162+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-19T19:25:28.176872+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-11-19T21:02:48.218688+00:00] app.INFO: Editing record with ID: 10 [] [] +[2025-11-19T21:25:28.788352+00:00] app.INFO: Displaying the record with ID: 30. [] [] +[2025-11-19T21:40:18.216044+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-19T22:17:48.511433+00:00] app.INFO: Displaying the edit page for the record with ID: 28. [] [] +[2025-11-20T00:58:51.388568+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-20T02:20:16.554055+00:00] app.INFO: Editing record with ID: 18 [] [] +[2025-11-20T03:25:30.409480+00:00] app.INFO: Editing record with ID: 30 [] [] +[2025-11-20T06:15:35.768779+00:00] app.INFO: Displaying the edit page for the record with ID: 22. [] [] +[2025-11-20T06:54:34.759676+00:00] app.INFO: Displaying the record with ID: 17. [] [] +[2025-11-20T07:25:31.169293+00:00] app.INFO: Editing record with ID: 7 [] [] +[2025-11-20T07:30:35.823947+00:00] app.INFO: Displaying the edit page for the record with ID: 20. [] [] +[2025-11-20T08:41:31.435801+00:00] app.INFO: Editing record with ID: 9 [] [] +[2025-11-20T09:06:32.043725+00:00] app.INFO: Displaying the edit page for the record with ID: 14. [] [] +[2025-11-20T09:25:32.230711+00:00] app.INFO: Displaying the record with ID: 28. [] [] +[2025-11-20T12:58:35.178959+00:00] app.INFO: Displaying the record with ID: 13. [] [] +[2025-11-20T13:21:17.709345+00:00] app.INFO: Editing record with ID: 17 [] [] +[2025-11-20T14:24:09.420230+00:00] app.INFO: Displaying the edit page for the record with ID: 13. [] [] +[2025-11-20T14:34:52.088628+00:00] app.INFO: Displaying the record with ID: 14. [] [] +[2025-11-20T16:56:28.768442+00:00] app.INFO: Displaying the record with ID: 10. [] [] +[2025-11-20T19:26:28.959976+00:00] app.INFO: Displaying the Security page. [] [] +[2025-11-21T17:27:04.319981+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-21T18:24:10.884297+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-21T18:32:07.013254+00:00] app.INFO: Displaying the About page. [] [] +[2025-11-21T22:26:32.377191+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-23T03:50:03.660483+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-23T22:43:28.456774+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-24T01:28:47.302597+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-24T08:53:09.925721+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-24T13:57:45.970834+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-24T18:00:28.292331+00:00] app.INFO: Displaying the record with ID: 7. [] [] +[2025-11-24T20:52:30.742695+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-24T20:52:30.767630+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-24T20:53:47.303769+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-24T20:53:53.398208+00:00] app.INFO: Displaying the Blade Templates page. [] [] +[2025-11-24T21:18:48.606711+00:00] app.INFO: Displaying the Learn More page. [] [] +[2025-11-24T21:19:05.601770+00:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2025-11-24T21:19:22.048659+00:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2025-11-24T21:19:38.993937+00:00] app.INFO: Displaying the Console CLI page. [] [] +[2025-11-24T21:19:57.128050+00:00] app.INFO: Displaying the App Development page. [] [] +[2025-11-24T21:20:35.218710+00:00] app.INFO: Displaying the Dependency Injection page. [] [] +[2025-11-24T21:20:52.590624+00:00] app.INFO: Editing record with ID: 8 [] [] +[2025-11-24T21:21:09.006747+00:00] app.INFO: Editing record with ID: 11 [] [] +[2025-11-24T21:21:26.046408+00:00] app.INFO: Editing record with ID: 21 [] [] +[2025-11-24T21:21:42.387042+00:00] app.INFO: Editing record with ID: 13 [] [] +[2025-11-24T21:21:58.137298+00:00] app.INFO: Editing record with ID: 29 [] [] +[2025-11-25T03:43:25.596413+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-25T03:43:26.553621+00:00] app.INFO: Displaying the ReadMe page. [] [] +[2025-11-25T08:09:11.979841+00:00] app.INFO: Editing record with ID: 12 [] [] +[2026-09-04T14:43:02.863735-03:00] app.INFO: Displaying the CrudExampleController page. [] [] +[2026-09-04T14:43:04.729230-03:00] app.INFO: Displaying the TwigExampleController page. [] [] +[2026-09-04T14:43:07.979793-03:00] app.INFO: Displaying the record with ID: 1. [] [] +[2026-09-04T14:43:09.782276-03:00] app.INFO: Displaying the edit page for the record with ID: 1. [] [] +[2026-09-04T14:53:02.894368-03:00] app.ERROR: Error when querying the database: SQLSTATE[HY000] [1045] Access denied for user 'sysmvc'@'localhost' (using password: YES) (SQL: select * from `crudexample`) [] [] diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..aa7a5f6 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,5 @@ +RewriteEngine on +RewriteCond %{SCRIPT_FILENAME} !-f +RewriteCond %{SCRIPT_FILENAME} !-d +RewriteCond %{SCRIPT_FILENAME} !-l +RewriteRule ^(.*)$ index.php/$1 \ No newline at end of file diff --git a/public/consent/cookieconsent.min.css b/public/consent/cookieconsent.min.css new file mode 100755 index 0000000..31b650f --- /dev/null +++ b/public/consent/cookieconsent.min.css @@ -0,0 +1,6 @@ +.cc-window{opacity:1;transition:opacity 1s ease}.cc-window.cc-invisible{opacity:0}.cc-animate.cc-revoke{transition:transform 1s ease}.cc-animate.cc-revoke.cc-top{transform:translateY(-2em)}.cc-animate.cc-revoke.cc-bottom{transform:translateY(2em)}.cc-animate.cc-revoke.cc-active.cc-bottom,.cc-animate.cc-revoke.cc-active.cc-top,.cc-revoke:hover{transform:translateY(0)}.cc-grower{max-height:0;overflow:hidden;transition:max-height 1s} +.cc-link,.cc-revoke:hover{text-decoration:underline}.cc-revoke,.cc-window{position:fixed;overflow:hidden;box-sizing:border-box;font-family:Helvetica,Calibri,Arial,sans-serif;font-size:16px;line-height:1.5em;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;z-index:9999}.cc-window.cc-static{position:static}.cc-window.cc-floating{padding:2em;max-width:24em;-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner{padding:1em 1.8em;width:100%;-ms-flex-direction:row;flex-direction:row}.cc-revoke{padding:.5em}.cc-header{font-size:18px;font-weight:700}.cc-btn,.cc-close,.cc-link,.cc-revoke{cursor:pointer}.cc-link{opacity:.8;display:inline-block;padding:.2em}.cc-link:hover{opacity:1}.cc-link:active,.cc-link:visited{color:initial}.cc-btn{display:block;padding:.4em .8em;font-size:.9em;font-weight:700;border-width:2px;border-style:solid;text-align:center;white-space:nowrap}.cc-banner .cc-btn:last-child{min-width:140px}.cc-highlight .cc-btn:first-child{background-color:transparent;border-color:transparent}.cc-highlight .cc-btn:first-child:focus,.cc-highlight .cc-btn:first-child:hover{background-color:transparent;text-decoration:underline}.cc-close{display:block;position:absolute;top:.5em;right:.5em;font-size:1.6em;opacity:.9;line-height:.75}.cc-close:focus,.cc-close:hover{opacity:1} +.cc-revoke.cc-top{top:0;left:3em;border-bottom-left-radius:.5em;border-bottom-right-radius:.5em}.cc-revoke.cc-bottom{bottom:0;left:3em;border-top-left-radius:.5em;border-top-right-radius:.5em}.cc-revoke.cc-left{left:3em;right:unset}.cc-revoke.cc-right{right:3em;left:unset}.cc-top{top:1em}.cc-left{left:1em}.cc-right{right:1em}.cc-bottom{bottom:1em}.cc-floating>.cc-link{margin-bottom:1em}.cc-floating .cc-message{display:block;margin-bottom:1em}.cc-window.cc-floating .cc-compliance{-ms-flex:1;flex:1}.cc-window.cc-banner{-ms-flex-align:center;align-items:center}.cc-banner.cc-top{left:0;right:0;top:0}.cc-banner.cc-bottom{left:0;right:0;bottom:0}.cc-banner .cc-message{-ms-flex:1;flex:1}.cc-compliance{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-line-pack:justify;align-content:space-between}.cc-compliance>.cc-btn{-ms-flex:1;flex:1}.cc-btn+.cc-btn{margin-left:.5em} +@media print{.cc-revoke,.cc-window{display:none}}@media screen and (max-width:900px){.cc-btn{white-space:normal}}@media screen and (max-width:414px) and (orientation:portrait),screen and (max-width:736px) and (orientation:landscape){.cc-window.cc-top{top:0}.cc-window.cc-bottom{bottom:0}.cc-window.cc-banner,.cc-window.cc-left,.cc-window.cc-right{left:0;right:0}.cc-window.cc-banner{-ms-flex-direction:column;flex-direction:column}.cc-window.cc-banner .cc-compliance{-ms-flex:1;flex:1}.cc-window.cc-floating{max-width:none}.cc-window .cc-message{margin-bottom:1em}.cc-window.cc-banner{-ms-flex-align:unset;align-items:unset}} +.cc-floating.cc-theme-classic{padding:1.2em;border-radius:5px}.cc-floating.cc-type-info.cc-theme-classic .cc-compliance{text-align:center;display:inline;-ms-flex:none;flex:none}.cc-theme-classic .cc-btn{border-radius:5px}.cc-theme-classic .cc-btn:last-child{min-width:140px}.cc-floating.cc-type-info.cc-theme-classic .cc-btn{display:inline-block} +.cc-theme-edgeless.cc-window{padding:0}.cc-floating.cc-theme-edgeless .cc-message{margin:2em 2em 1.5em}.cc-banner.cc-theme-edgeless .cc-btn{margin:0;padding:.8em 1.8em;height:100%}.cc-banner.cc-theme-edgeless .cc-message{margin-left:1em}.cc-floating.cc-theme-edgeless .cc-btn+.cc-btn{margin-left:0} diff --git a/public/consent/cookieconsent.min.js b/public/consent/cookieconsent.min.js new file mode 100755 index 0000000..b08dd18 --- /dev/null +++ b/public/consent/cookieconsent.min.js @@ -0,0 +1 @@ +!function(e){if(!e.hasInitialised){var t={escapeRegExp:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},hasClass:function(e,t){var i=" ";return 1===e.nodeType&&(i+e.className+i).replace(/[\n\t]/g,i).indexOf(i+t+i)>=0},addClass:function(e,t){e.className+=" "+t},removeClass:function(e,t){var i=new RegExp("\\b"+this.escapeRegExp(t)+"\\b");e.className=e.className.replace(i,"")},interpolateString:function(e,t){var i=/{{([a-z][a-z0-9\-_]*)}}/gi;return e.replace(i,function(e){return t(arguments[1])||""})},getCookie:function(e){var t="; "+document.cookie,i=t.split("; "+e+"=");return 2!=i.length?void 0:i.pop().split(";").shift()},setCookie:function(e,t,i,n,o){var s=new Date;s.setDate(s.getDate()+(i||365));var r=[e+"="+t,"expires="+s.toUTCString(),"path="+(o||"/")];n&&r.push("domain="+n),document.cookie=r.join(";")},deepExtend:function(e,t){for(var i in t)t.hasOwnProperty(i)&&(i in e&&this.isPlainObject(e[i])&&this.isPlainObject(t[i])?this.deepExtend(e[i],t[i]):e[i]=t[i]);return e},throttle:function(e,t){var i=!1;return function(){i||(e.apply(this,arguments),i=!0,setTimeout(function(){i=!1},t))}},hash:function(e){var t,i,n,o=0;if(0===e.length)return o;for(t=0,n=e.length;t=128?"#000":"#fff"},getLuminance:function(e){var t=parseInt(this.normaliseHex(e),16),i=38,n=(t>>16)+i,o=(t>>8&255)+i,s=(255&t)+i,r=(16777216+65536*(n<255?n<1?0:n:255)+256*(o<255?o<1?0:o:255)+(s<255?s<1?0:s:255)).toString(16).slice(1);return"#"+r},isMobile:function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},isPlainObject:function(e){return"object"==typeof e&&null!==e&&e.constructor==Object}};e.status={deny:"deny",allow:"allow",dismiss:"dismiss"},e.transitionEnd=function(){var e=document.createElement("div"),t={t:"transitionend",OT:"oTransitionEnd",msT:"MSTransitionEnd",MozT:"transitionend",WebkitT:"webkitTransitionEnd"};for(var i in t)if(t.hasOwnProperty(i)&&"undefined"!=typeof e.style[i+"ransition"])return t[i];return""}(),e.hasTransition=!!e.transitionEnd;var i=Object.keys(e.status).map(t.escapeRegExp);e.customStyles={},e.Popup=function(){function n(){this.initialise.apply(this,arguments)}function o(e){this.openingTimeout=null,t.removeClass(e,"cc-invisible")}function s(t){t.style.display="none",t.removeEventListener(e.transitionEnd,this.afterTransition),this.afterTransition=null}function r(){var t=this.options.onInitialise.bind(this);if(!window.navigator.cookieEnabled)return t(e.status.deny),!0;if(window.CookiesOK||window.navigator.CookiesOK)return t(e.status.allow),!0;var i=Object.keys(e.status),n=this.getStatus(),o=i.indexOf(n)>=0;return o&&t(n),o}function a(){var e=this.options.position.split("-"),t=[];return e.forEach(function(e){t.push("cc-"+e)}),t}function c(){var e=this.options,i="top"==e.position||"bottom"==e.position?"banner":"floating";t.isMobile()&&(i="floating");var n=["cc-"+i,"cc-type-"+e.type,"cc-theme-"+e.theme];e["static"]&&n.push("cc-static"),n.push.apply(n,a.call(this));p.call(this,this.options.palette);return this.customStyleSelector&&n.push(this.customStyleSelector),n}function l(){var e={},i=this.options;i.showLink||(i.elements.link="",i.elements.messagelink=i.elements.message),Object.keys(i.elements).forEach(function(n){e[n]=t.interpolateString(i.elements[n],function(e){var t=i.content[e];return e&&"string"==typeof t&&t.length?t:""})});var n=i.compliance[i.type];n||(n=i.compliance.info),e.compliance=t.interpolateString(n,function(t){return e[t]});var o=i.layouts[i.layout];return o||(o=i.layouts.basic),t.interpolateString(o,function(t){return e[t]})}function u(i){var n=this.options,o=document.createElement("div"),s=n.container&&1===n.container.nodeType?n.container:document.body;o.innerHTML=i;var r=o.children[0];return r.style.display="none",t.hasClass(r,"cc-window")&&e.hasTransition&&t.addClass(r,"cc-invisible"),this.onButtonClick=h.bind(this),r.addEventListener("click",this.onButtonClick),n.autoAttach&&(s.firstChild?s.insertBefore(r,s.firstChild):s.appendChild(r)),r}function h(n){var o=n.target;if(t.hasClass(o,"cc-btn")){var s=o.className.match(new RegExp("\\bcc-("+i.join("|")+")\\b")),r=s&&s[1]||!1;r&&(this.setStatus(r),this.close(!0))}t.hasClass(o,"cc-close")&&(this.setStatus(e.status.dismiss),this.close(!0)),t.hasClass(o,"cc-revoke")&&this.revokeChoice()}function p(e){var i=t.hash(JSON.stringify(e)),n="cc-color-override-"+i,o=t.isPlainObject(e);return this.customStyleSelector=o?n:null,o&&d(i,e,"."+n),o}function d(i,n,o){if(e.customStyles[i])return void++e.customStyles[i].references;var s={},r=n.popup,a=n.button,c=n.highlight;r&&(r.text=r.text?r.text:t.getContrast(r.background),r.link=r.link?r.link:r.text,s[o+".cc-window"]=["color: "+r.text,"background-color: "+r.background],s[o+".cc-revoke"]=["color: "+r.text,"background-color: "+r.background],s[o+" .cc-link,"+o+" .cc-link:active,"+o+" .cc-link:visited"]=["color: "+r.link],a&&(a.text=a.text?a.text:t.getContrast(a.background),a.border=a.border?a.border:"transparent",s[o+" .cc-btn"]=["color: "+a.text,"border-color: "+a.border,"background-color: "+a.background],"transparent"!=a.background&&(s[o+" .cc-btn:hover, "+o+" .cc-btn:focus"]=["background-color: "+v(a.background)]),c?(c.text=c.text?c.text:t.getContrast(c.background),c.border=c.border?c.border:"transparent",s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+c.text,"border-color: "+c.border,"background-color: "+c.background]):s[o+" .cc-highlight .cc-btn:first-child"]=["color: "+r.text]));var l=document.createElement("style");document.head.appendChild(l),e.customStyles[i]={references:1,element:l.sheet};var u=-1;for(var h in s)s.hasOwnProperty(h)&&l.sheet.insertRule(h+"{"+s[h].join(";")+"}",++u)}function v(e){return e=t.normaliseHex(e),"000000"==e?"#222":t.getLuminance(e)}function f(i){if(t.isPlainObject(i)){var n=t.hash(JSON.stringify(i)),o=e.customStyles[n];if(o&&!--o.references){var s=o.element.ownerNode;s&&s.parentNode&&s.parentNode.removeChild(s),e.customStyles[n]=null}}}function m(e,t){for(var i=0,n=e.length;i=0&&(this.dismissTimeout=window.setTimeout(function(){t(e.status.dismiss)},Math.floor(i)));var n=this.options.dismissOnScroll;if("number"==typeof n&&n>=0){var o=function(i){window.pageYOffset>Math.floor(n)&&(t(e.status.dismiss),window.removeEventListener("scroll",o),this.onWindowScroll=null)};this.onWindowScroll=o,window.addEventListener("scroll",o)}}function y(){if("info"!=this.options.type&&(this.options.revokable=!0),t.isMobile()&&(this.options.animateRevokable=!1),this.options.revokable){var e=a.call(this);this.options.animateRevokable&&e.push("cc-animate"),this.customStyleSelector&&e.push(this.customStyleSelector);var i=this.options.revokeBtn.replace("{{classes}}",e.join(" "));this.revokeBtn=u.call(this,i);var n=this.revokeBtn;if(this.options.animateRevokable){var o=t.throttle(function(e){var i=!1,o=20,s=window.innerHeight-20;t.hasClass(n,"cc-top")&&e.clientYs&&(i=!0),i?t.hasClass(n,"cc-active")||t.addClass(n,"cc-active"):t.hasClass(n,"cc-active")&&t.removeClass(n,"cc-active")},200);this.onMouseMove=o,window.addEventListener("mousemove",o)}}}var g={enabled:!0,container:null,cookie:{name:"cookieconsent_status",path:"/",domain:"",expiryDays:365},onPopupOpen:function(){},onPopupClose:function(){},onInitialise:function(e){},onStatusChange:function(e,t){},onRevokeChoice:function(){},content:{header:"Cookies used on the website!",message:"This website uses cookies to ensure you get the best experience on our website.",dismiss:"Got it!",allow:"Allow cookies",deny:"Decline",link:"Termos de Uso",href:"http://cookiesandyou.com",close:"❌"},elements:{header:'{{header}} ',message:'{{message}}',messagelink:'{{message}} {{link}}',dismiss:'{{dismiss}}',allow:'{{allow}}',deny:'{{deny}}',link:'{{link}}',close:'{{close}}'},window:'',revokeBtn:'
Cookie Policy
',compliance:{info:'
{{dismiss}}
',"opt-in":'
{{dismiss}}{{allow}}
',"opt-out":'
{{deny}}{{dismiss}}
'},type:"info",layouts:{basic:"{{messagelink}}{{compliance}}","basic-close":"{{messagelink}}{{compliance}}{{close}}","basic-header":"{{header}}{{message}}{{link}}{{compliance}}"},layout:"basic",position:"bottom",theme:"block","static":!1,palette:null,revokable:!1,animateRevokable:!0,showLink:!0,dismissOnScroll:!1,dismissOnTimeout:!1,autoOpen:!0,autoAttach:!0,whitelistPage:[],blacklistPage:[],overrideHTML:null};return n.prototype.initialise=function(e){this.options&&this.destroy(),t.deepExtend(this.options={},g),t.isPlainObject(e)&&t.deepExtend(this.options,e),r.call(this)&&(this.options.enabled=!1),m(this.options.blacklistPage,location.pathname)&&(this.options.enabled=!1),m(this.options.whitelistPage,location.pathname)&&(this.options.enabled=!0);var i=this.options.window.replace("{{classes}}",c.call(this).join(" ")).replace("{{children}}",l.call(this)),n=this.options.overrideHTML;if("string"==typeof n&&n.length&&(i=n),this.options["static"]){var o=u.call(this,'
'+i+"
");o.style.display="",this.element=o.firstChild,this.element.style.display="none",t.addClass(this.element,"cc-invisible")}else this.element=u.call(this,i);b.call(this),y.call(this),this.options.autoOpen&&this.autoOpen()},n.prototype.destroy=function(){this.onButtonClick&&this.element&&(this.element.removeEventListener("click",this.onButtonClick),this.onButtonClick=null),this.dismissTimeout&&(clearTimeout(this.dismissTimeout),this.dismissTimeout=null),this.onWindowScroll&&(window.removeEventListener("scroll",this.onWindowScroll),this.onWindowScroll=null),this.onMouseMove&&(window.removeEventListener("mousemove",this.onMouseMove),this.onMouseMove=null),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element),this.element=null,this.revokeBtn&&this.revokeBtn.parentNode&&this.revokeBtn.parentNode.removeChild(this.revokeBtn),this.revokeBtn=null,f(this.options.palette),this.options=null},n.prototype.open=function(t){if(this.element)return this.isOpen()||(e.hasTransition?this.fadeIn():this.element.style.display="",this.options.revokable&&this.toggleRevokeButton(),this.options.onPopupOpen.call(this)),this},n.prototype.close=function(t){if(this.element)return this.isOpen()&&(e.hasTransition?this.fadeOut():this.element.style.display="none",t&&this.options.revokable&&this.toggleRevokeButton(!0),this.options.onPopupClose.call(this)),this},n.prototype.fadeIn=function(){var i=this.element;if(e.hasTransition&&i&&(this.afterTransition&&s.call(this,i),t.hasClass(i,"cc-invisible"))){if(i.style.display="",this.options["static"]){var n=this.element.clientHeight;this.element.parentNode.style.maxHeight=n+"px"}var r=20;this.openingTimeout=setTimeout(o.bind(this,i),r)}},n.prototype.fadeOut=function(){var i=this.element;e.hasTransition&&i&&(this.openingTimeout&&(clearTimeout(this.openingTimeout),o.bind(this,i)),t.hasClass(i,"cc-invisible")||(this.options["static"]&&(this.element.parentNode.style.maxHeight=""),this.afterTransition=s.bind(this,i),i.addEventListener(e.transitionEnd,this.afterTransition),t.addClass(i,"cc-invisible")))},n.prototype.isOpen=function(){return this.element&&""==this.element.style.display&&(!e.hasTransition||!t.hasClass(this.element,"cc-invisible"))},n.prototype.toggleRevokeButton=function(e){this.revokeBtn&&(this.revokeBtn.style.display=e?"":"none")},n.prototype.revokeChoice=function(e){this.options.enabled=!0,this.clearStatus(),this.options.onRevokeChoice.call(this),e||this.autoOpen()},n.prototype.hasAnswered=function(t){return Object.keys(e.status).indexOf(this.getStatus())>=0},n.prototype.hasConsented=function(t){var i=this.getStatus();return i==e.status.allow||i==e.status.dismiss},n.prototype.autoOpen=function(e){!this.hasAnswered()&&this.options.enabled&&this.open()},n.prototype.setStatus=function(i){var n=this.options.cookie,o=t.getCookie(n.name),s=Object.keys(e.status).indexOf(o)>=0;Object.keys(e.status).indexOf(i)>=0?(t.setCookie(n.name,i,n.expiryDays,n.domain,n.path),this.options.onStatusChange.call(this,i,s)):this.clearStatus()},n.prototype.getStatus=function(){return t.getCookie(this.options.cookie.name)},n.prototype.clearStatus=function(){var e=this.options.cookie;t.setCookie(e.name,"",-1,e.domain,e.path)},n}(),e.Location=function(){function e(e){t.deepExtend(this.options={},s),t.isPlainObject(e)&&t.deepExtend(this.options,e),this.currentServiceIndex=-1}function i(e,t,i){var n,o=document.createElement("script");o.type="text/"+(e.type||"javascript"),o.src=e.src||e,o.async=!1,o.onreadystatechange=o.onload=function(){var e=o.readyState;clearTimeout(n),t.done||e&&!/loaded|complete/.test(e)||(t.done=!0,t(),o.onreadystatechange=o.onload=null)},document.body.appendChild(o),n=setTimeout(function(){t.done=!0,t(),o.onreadystatechange=o.onload=null},i)}function n(e,t,i,n,o){var s=new(window.XMLHttpRequest||window.ActiveXObject)("MSXML2.XMLHTTP.3.0");if(s.open(n?"POST":"GET",e,1),s.setRequestHeader("X-Requested-With","XMLHttpRequest"),s.setRequestHeader("Content-type","application/x-www-form-urlencoded"),Array.isArray(o))for(var r=0,a=o.length;r3&&t(s)}),s.send(n)}function o(e){return new Error("Error ["+(e.code||"UNKNOWN")+"]: "+e.error)}var s={timeout:5e3,services:["freegeoip","ipinfo","maxmind"],serviceDefinitions:{freegeoip:function(){return{url:"//freegeoip.net/json/?callback={callback}",isScript:!0,callback:function(e,t){try{var i=JSON.parse(t);return i.error?o(i):{code:i.country_code}}catch(n){return o({error:"Invalid response ("+n+")"})}}}},ipinfo:function(){return{url:"//ipinfo.io",headers:["Accept: application/json"],callback:function(e,t){try{var i=JSON.parse(t);return i.error?o(i):{code:i.country}}catch(n){return o({error:"Invalid response ("+n+")"})}}}},ipinfodb:function(e){return{url:"//api.ipinfodb.com/v3/ip-country/?key={api_key}&format=json&callback={callback}",isScript:!0,callback:function(e,t){try{var i=JSON.parse(t);return"ERROR"==i.statusCode?o({error:i.statusMessage}):{code:i.countryCode}}catch(n){return o({error:"Invalid response ("+n+")"})}}}},maxmind:function(){return{url:"//js.maxmind.com/js/apis/geoip2/v2.1/geoip2.js",isScript:!0,callback:function(e){return window.geoip2?void geoip2.country(function(t){try{e({code:t.country.iso_code})}catch(i){e(o(i))}},function(t){e(o(t))}):void e(new Error("Unexpected response format. The downloaded script should have exported `geoip2` to the global scope"))}}}}};return e.prototype.getNextService=function(){var e;do e=this.getServiceByIdx(++this.currentServiceIndex);while(this.currentServiceIndex=0,revokable:t.revokable.indexOf(e)>=0,explicitAction:t.explicitAction.indexOf(e)>=0}},e.prototype.applyLaw=function(e,t){var i=this.get(t);return i.hasLaw||(e.enabled=!1),this.options.regionalLaw&&(i.revokable&&(e.revokable=!0),i.explicitAction&&(e.dismissOnScroll=!1,e.dismissOnTimeout=!1)),e},e}(),e.initialise=function(t,i,n){var o=new e.Law(t.law);i||(i=function(){}),n||(n=function(){}),e.getCountryCode(t,function(n){delete t.law,delete t.location,n.code&&(t=o.applyLaw(t,n.code)),i(new e.Popup(t))},function(i){delete t.law,delete t.location,n(i,new e.Popup(t))})},e.getCountryCode=function(t,i,n){if(t.law&&t.law.countryCode)return void i({code:t.law.countryCode});if(t.location){var o=new e.Location(t.location);return void o.locate(function(e){i(e||{})},n)}i({})},e.utils=t,e.hasInitialised=!0,window.cookieconsent=e}}(window.cookieconsent||{}); diff --git a/public/consent/termosdeuso.html b/public/consent/termosdeuso.html new file mode 100755 index 0000000..291ef61 --- /dev/null +++ b/public/consent/termosdeuso.html @@ -0,0 +1,60 @@ + + + + + + + + + + +

+

+

TERMS OF USE

+

Welcome,

+

This project is maintained by Marco Costa, Email: syspanel@gmx.com - MG - Brazil, +hereafter referred to simply as “SysMVC”. +

+

Using our website implies your agreement with our Terms of Use. If you disagree with these Terms, please do not navigate through our website.

+

If you are a minor, you should only access our website after your parents (or legal guardian) have read and agreed to our Terms of Use.

+

To contact us regarding our Terms of Use or for any other reason, please reach out to our team using the form available on the page, or via email at: contato@hardmodinfo.com

+

1. OBJECTIVE AND OPERATION OF THE WEBSITE

+

1.1. SysMVC makes available digital content on its website related to services concerning brands and others.

+

1.2. Any digital content on the site may be changed, removed, moved, reorganized, re-recorded, re-edited, and merged with others by SysMVC or specifically by any third party it authorizes to do so.

+

1.3. Under no circumstances should the content available on the site be understood as individual advice, and it does not substitute consultation with a qualified professional.

+

1.4. By accepting these Terms of Use, you explicitly agree with the Privacy Policy of SysMVC.

+

2. INTELLECTUAL PROPERTY RIGHTS

+

2.1. All content provided by SysMVC is protected by applicable copyright and industrial property laws and treaties, and no user is allowed to dispose of, modify, or commercialize the content of SysMVC's website.

+

3. LIMITATION OF LIABILITY

+

3.1. In some areas of our website, areas may be available for comments, which may contain opinions from other users. These cannot be attributed to SysMVC, and it is not responsible for any damages that may be caused to third parties.

+

4. POLICIES AND RULES

+

4.1. You agree not to use this website to disclose, make accessible, or send any content or materials:

+

a) Illegal, defamatory, obscene, or with advertising purposes;

+

b) Violating any intellectual or industrial property rights, such as trademarks, patents, industrial secrets, copyrights, trade dress, among others;

+

c) Software viruses or other programming codes designed to interfere with the functionality of any computer systems or internet networks, email, etc.

+

4.2. You agree that your anonymity is prohibited within the SysMVC site.

+

4.3. You agree that you cannot impersonate others, nor can you, under any circumstances, provide information that could lead SysMVC or third parties to error regarding your identity, such as a fake email address.

+

4.4. Except in cases where written authorization is granted, you may not use the trademark or other intellectual and industrial property rights of SysMVC.

+

4.5. No part or content of SysMVC's website may be reproduced and/or stored on any other website or included in any other public or private electronic system or service without prior written authorization from SysMVC.

+

5. CHANGES TO THIS PRIVACY POLICY

+

5.1. SysMVC reserves the right to change these Terms of Use at any time. Any changes, modifications, additions, or deletions will take effect immediately.

+

5.2. You acknowledge and agree that it is your responsibility to review this website and these Terms of Use periodically and be aware of any modifications. Your continued use of the site after such changes will constitute your acknowledgment of the modified Terms and your agreement to comply with and be governed by them.

+

6. JURISDICTION

+

6.1. The jurisdiction of Santa Rita do Sapucaí/MG is elected for the resolution of any disputes arising from these Terms of Use.

+


+

+ + diff --git a/public/css/bootstrap-grid.css b/public/css/bootstrap-grid.css new file mode 100755 index 0000000..8aab9c1 --- /dev/null +++ b/public/css/bootstrap-grid.css @@ -0,0 +1,3872 @@ +/*! + * Bootstrap Grid v4.6.2 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +html { + box-sizing: border-box; + -ms-overflow-style: scrollbar; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +.container, +.container-fluid, +.container-sm, +.container-md, +.container-lg, +.container-xl { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container, .container-sm { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container, .container-sm, .container-md { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container, .container-sm, .container-md, .container-lg { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container, .container-sm, .container-md, .container-lg, .container-xl { + max-width: 1140px; + } +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.row-cols-1 > * { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.row-cols-2 > * { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.row-cols-3 > * { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.row-cols-4 > * { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.row-cols-5 > * { + -ms-flex: 0 0 20%; + flex: 0 0 20%; + max-width: 20%; +} + +.row-cols-6 > * { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + -ms-flex-order: -1; + order: -1; +} + +.order-last { + -ms-flex-order: 13; + order: 13; +} + +.order-0 { + -ms-flex-order: 0; + order: 0; +} + +.order-1 { + -ms-flex-order: 1; + order: 1; +} + +.order-2 { + -ms-flex-order: 2; + order: 2; +} + +.order-3 { + -ms-flex-order: 3; + order: 3; +} + +.order-4 { + -ms-flex-order: 4; + order: 4; +} + +.order-5 { + -ms-flex-order: 5; + order: 5; +} + +.order-6 { + -ms-flex-order: 6; + order: 6; +} + +.order-7 { + -ms-flex-order: 7; + order: 7; +} + +.order-8 { + -ms-flex-order: 8; + order: 8; +} + +.order-9 { + -ms-flex-order: 9; + order: 9; +} + +.order-10 { + -ms-flex-order: 10; + order: 10; +} + +.order-11 { + -ms-flex-order: 11; + order: 11; +} + +.order-12 { + -ms-flex-order: 12; + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .row-cols-sm-1 > * { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-sm-2 > * { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-sm-3 > * { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-sm-4 > * { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-sm-5 > * { + -ms-flex: 0 0 20%; + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-sm-6 > * { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + -ms-flex-order: -1; + order: -1; + } + .order-sm-last { + -ms-flex-order: 13; + order: 13; + } + .order-sm-0 { + -ms-flex-order: 0; + order: 0; + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1; + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2; + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3; + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4; + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5; + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6; + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7; + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8; + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9; + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10; + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11; + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .row-cols-md-1 > * { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-md-2 > * { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-md-3 > * { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-md-4 > * { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-md-5 > * { + -ms-flex: 0 0 20%; + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-md-6 > * { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + -ms-flex-order: -1; + order: -1; + } + .order-md-last { + -ms-flex-order: 13; + order: 13; + } + .order-md-0 { + -ms-flex-order: 0; + order: 0; + } + .order-md-1 { + -ms-flex-order: 1; + order: 1; + } + .order-md-2 { + -ms-flex-order: 2; + order: 2; + } + .order-md-3 { + -ms-flex-order: 3; + order: 3; + } + .order-md-4 { + -ms-flex-order: 4; + order: 4; + } + .order-md-5 { + -ms-flex-order: 5; + order: 5; + } + .order-md-6 { + -ms-flex-order: 6; + order: 6; + } + .order-md-7 { + -ms-flex-order: 7; + order: 7; + } + .order-md-8 { + -ms-flex-order: 8; + order: 8; + } + .order-md-9 { + -ms-flex-order: 9; + order: 9; + } + .order-md-10 { + -ms-flex-order: 10; + order: 10; + } + .order-md-11 { + -ms-flex-order: 11; + order: 11; + } + .order-md-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .row-cols-lg-1 > * { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-lg-2 > * { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-lg-3 > * { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-lg-4 > * { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-lg-5 > * { + -ms-flex: 0 0 20%; + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-lg-6 > * { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + -ms-flex-order: -1; + order: -1; + } + .order-lg-last { + -ms-flex-order: 13; + order: 13; + } + .order-lg-0 { + -ms-flex-order: 0; + order: 0; + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1; + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2; + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3; + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4; + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5; + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6; + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7; + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8; + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9; + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10; + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11; + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .row-cols-xl-1 > * { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-xl-2 > * { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-xl-3 > * { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-xl-4 > * { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-xl-5 > * { + -ms-flex: 0 0 20%; + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-xl-6 > * { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + -ms-flex-order: -1; + order: -1; + } + .order-xl-last { + -ms-flex-order: 13; + order: 13; + } + .order-xl-0 { + -ms-flex-order: 0; + order: 0; + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1; + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2; + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3; + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4; + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5; + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6; + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7; + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8; + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9; + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10; + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11; + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: -ms-flexbox !important; + display: flex !important; + } + .d-print-inline-flex { + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.flex-row { + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; +} + +.flex-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; +} + +.flex-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; +} + +.flex-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; +} + +.justify-content-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -ms-flex-item-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-sm-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-md-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-md-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-lg-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + -ms-flex: 1 1 auto !important; + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + -ms-flex-positive: 0 !important; + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + -ms-flex-positive: 1 !important; + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + -ms-flex-negative: 0 !important; + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + -ms-flex-negative: 1 !important; + flex-shrink: 1 !important; + } + .justify-content-xl-start { + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -ms-flex-item-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -ms-flex-item-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch !important; + align-self: stretch !important; + } +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.25rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.25rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.5rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.5rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.mt-3, +.my-3 { + margin-top: 1rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 1rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 1rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.mt-4, +.my-4 { + margin-top: 1.5rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 1.5rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.mt-5, +.my-5 { + margin-top: 3rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 3rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 3rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 3rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.25rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.25rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.5rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.5rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.pt-3, +.py-3 { + padding-top: 1rem !important; +} + +.pr-3, +.px-3 { + padding-right: 1rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 1rem !important; +} + +.pl-3, +.px-3 { + padding-left: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.pt-4, +.py-4 { + padding-top: 1.5rem !important; +} + +.pr-4, +.px-4 { + padding-right: 1.5rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4, +.px-4 { + padding-left: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.pt-5, +.py-5 { + padding-top: 3rem !important; +} + +.pr-5, +.px-5 { + padding-right: 3rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 3rem !important; +} + +.pl-5, +.px-5 { + padding-left: 3rem !important; +} + +.m-n1 { + margin: -0.25rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.25rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.25rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.25rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.25rem !important; +} + +.m-n2 { + margin: -0.5rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.5rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.5rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.5rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.5rem !important; +} + +.m-n3 { + margin: -1rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -1rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -1rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -1rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -1rem !important; +} + +.m-n4 { + margin: -1.5rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -1.5rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -1.5rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -1.5rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -1.5rem !important; +} + +.m-n5 { + margin: -3rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -3rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -3rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -3rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 3rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 3rem !important; + } + .m-sm-n1 { + margin: -0.25rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.25rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.25rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.25rem !important; + } + .m-sm-n2 { + margin: -0.5rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.5rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.5rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.5rem !important; + } + .m-sm-n3 { + margin: -1rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -1rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -1rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -1rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -1rem !important; + } + .m-sm-n4 { + margin: -1.5rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -1.5rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -1.5rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -1.5rem !important; + } + .m-sm-n5 { + margin: -3rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -3rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -3rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -3rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 1rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 1rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 3rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 3rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 3rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 1rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 1rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 3rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 3rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 3rem !important; + } + .m-md-n1 { + margin: -0.25rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.25rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.25rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.25rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.25rem !important; + } + .m-md-n2 { + margin: -0.5rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.5rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.5rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.5rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.5rem !important; + } + .m-md-n3 { + margin: -1rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -1rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -1rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -1rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -1rem !important; + } + .m-md-n4 { + margin: -1.5rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -1.5rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -1.5rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -1.5rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -1.5rem !important; + } + .m-md-n5 { + margin: -3rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -3rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -3rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -3rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 3rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 3rem !important; + } + .m-lg-n1 { + margin: -0.25rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.25rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.25rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.25rem !important; + } + .m-lg-n2 { + margin: -0.5rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.5rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.5rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.5rem !important; + } + .m-lg-n3 { + margin: -1rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -1rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -1rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -1rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -1rem !important; + } + .m-lg-n4 { + margin: -1.5rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -1.5rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -1.5rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -1.5rem !important; + } + .m-lg-n5 { + margin: -3rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -3rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -3rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -3rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 3rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 3rem !important; + } + .m-xl-n1 { + margin: -0.25rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.25rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.25rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.25rem !important; + } + .m-xl-n2 { + margin: -0.5rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.5rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.5rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.5rem !important; + } + .m-xl-n3 { + margin: -1rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -1rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -1rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -1rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -1rem !important; + } + .m-xl-n4 { + margin: -1.5rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -1.5rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -1.5rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -1.5rem !important; + } + .m-xl-n5 { + margin: -3rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -3rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -3rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -3rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/public/css/bootstrap-grid.css.map b/public/css/bootstrap-grid.css.map new file mode 100755 index 0000000..75e5988 --- /dev/null +++ b/public/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/mixins/_grid-framework.scss","../../scss/_functions.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"AAAA;;;;;ECKE;ADEF;EACE,sBAAsB;EACtB,6BAA6B;ACA/B;;ADGA;;;EAGE,mBAAmB;ACArB;;ACTE;;;;;;ECDA,WAAW;EACX,mBAA2B;EAC3B,kBAA0B;EAC1B,kBAAkB;EAClB,iBAAiB;AFmBnB;;AGgCI;EFzCE;IACE,gBG+LG;EJlLT;AACF;;AG0BI;EFzCE;IACE,gBGgMG;EJ7KT;AACF;;AGoBI;EFzCE;IACE,gBGiMG;EJxKT;AACF;;AGcI;EFzCE;IACE,iBGkMI;EJnKV;AACF;;ACJE;ECnCA,oBAAa;EAAb,aAAa;EACb,mBAAe;EAAf,eAAe;EACf,mBAA2B;EAC3B,kBAA0B;AF2C5B;;ACLE;EACE,eAAe;EACf,cAAc;ADQlB;;ACVE;;EAMI,gBAAgB;EAChB,eAAe;ADSrB;;AK/DE;;;;;;EACE,kBAAkB;EAClB,WAAW;EACX,mBAA2B;EAC3B,kBAA0B;ALuE9B;;AKjDM;EACE,0BAAa;EAAb,aAAa;EACb,oBAAY;EAAZ,YAAY;EACZ,eAAe;ALoDvB;;AK/CU;EHwBN,kBIyHqD;EJzHrD,cIyHqD;EJxHrD,eIwHqD;AN7FzD;;AKpDU;EHwBN,iBIyHqD;EJzHrD,aIyHqD;EJxHrD,cIwHqD;ANxFzD;;AKzDU;EHwBN,wBIyHqD;EJzHrD,oBIyHqD;EJxHrD,qBIwHqD;ANnFzD;;AK9DU;EHwBN,iBIyHqD;EJzHrD,aIyHqD;EJxHrD,cIwHqD;AN9EzD;;AKnEU;EHwBN,iBIyHqD;EJzHrD,aIyHqD;EJxHrD,cIwHqD;ANzEzD;;AKxEU;EHwBN,wBIyHqD;EJzHrD,oBIyHqD;EJxHrD,qBIwHqD;ANpEzD;;AKvEM;EHCJ,kBAAc;EAAd,cAAc;EACd,WAAW;EACX,eAAe;AF0EjB;;AKvEU;EHbR,uBAA6C;EAA7C,mBAA6C;EAI7C,oBAA8C;AFqFhD;;AK5EU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AF0FhD;;AKjFU;EHbR,iBAA6C;EAA7C,aAA6C;EAI7C,cAA8C;AF+FhD;;AKtFU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFoGhD;;AK3FU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFyGhD;;AKhGU;EHbR,iBAA6C;EAA7C,aAA6C;EAI7C,cAA8C;AF8GhD;;AKrGU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFmHhD;;AK1GU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFwHhD;;AK/GU;EHbR,iBAA6C;EAA7C,aAA6C;EAI7C,cAA8C;AF6HhD;;AKpHU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFkIhD;;AKzHU;EHbR,wBAA6C;EAA7C,oBAA6C;EAI7C,qBAA8C;AFuIhD;;AK9HU;EHbR,kBAA6C;EAA7C,cAA6C;EAI7C,eAA8C;AF4IhD;;AK7HM;EAAwB,kBAAS;EAAT,SAAS;ALiIvC;;AK/HM;EAAuB,kBDmKG;ECnKH,SDmKG;AJhChC;;AKhIQ;EAAwB,iBADZ;EACY,QADZ;ALqIpB;;AKpIQ;EAAwB,iBADZ;EACY,QADZ;ALyIpB;;AKxIQ;EAAwB,iBADZ;EACY,QADZ;AL6IpB;;AK5IQ;EAAwB,iBADZ;EACY,QADZ;ALiJpB;;AKhJQ;EAAwB,iBADZ;EACY,QADZ;ALqJpB;;AKpJQ;EAAwB,iBADZ;EACY,QADZ;ALyJpB;;AKxJQ;EAAwB,iBADZ;EACY,QADZ;AL6JpB;;AK5JQ;EAAwB,iBADZ;EACY,QADZ;ALiKpB;;AKhKQ;EAAwB,iBADZ;EACY,QADZ;ALqKpB;;AKpKQ;EAAwB,iBADZ;EACY,QADZ;ALyKpB;;AKxKQ;EAAwB,kBADZ;EACY,SADZ;AL6KpB;;AK5KQ;EAAwB,kBADZ;EACY,SADZ;ALiLpB;;AKhLQ;EAAwB,kBADZ;EACY,SADZ;ALqLpB;;AK7KY;EHhBV,sBAA8C;AFiMhD;;AKjLY;EHhBV,uBAA8C;AFqMhD;;AKrLY;EHhBV,gBAA8C;AFyMhD;;AKzLY;EHhBV,uBAA8C;AF6MhD;;AK7LY;EHhBV,uBAA8C;AFiNhD;;AKjMY;EHhBV,gBAA8C;AFqNhD;;AKrMY;EHhBV,uBAA8C;AFyNhD;;AKzMY;EHhBV,uBAA8C;AF6NhD;;AK7MY;EHhBV,gBAA8C;AFiOhD;;AKjNY;EHhBV,uBAA8C;AFqOhD;;AKrNY;EHhBV,uBAA8C;AFyOhD;;AGpOI;EE3BE;IACE,0BAAa;IAAb,aAAa;IACb,oBAAY;IAAZ,YAAY;IACZ,eAAe;ELmQrB;EK9PQ;IHwBN,kBIyHqD;IJzHrD,cIyHqD;IJxHrD,eIwHqD;ENiHvD;EKlQQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENqHvD;EKtQQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;ENyHvD;EK1QQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;EN6HvD;EK9QQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENiIvD;EKlRQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;ENqIvD;EKhRI;IHCJ,kBAAc;IAAd,cAAc;IACd,WAAW;IACX,eAAe;EFkRf;EK/QQ;IHbR,uBAA6C;IAA7C,mBAA6C;IAI7C,oBAA8C;EF4R9C;EKnRQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFgS9C;EKvRQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFoS9C;EK3RQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFwS9C;EK/RQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF4S9C;EKnSQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFgT9C;EKvSQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFoT9C;EK3SQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFwT9C;EK/SQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EF4T9C;EKnTQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFgU9C;EKvTQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFoU9C;EK3TQ;IHbR,kBAA6C;IAA7C,cAA6C;IAI7C,eAA8C;EFwU9C;EKzTI;IAAwB,kBAAS;IAAT,SAAS;EL4TrC;EK1TI;IAAuB,kBDmKG;ICnKH,SDmKG;EJ0J9B;EK1TM;IAAwB,iBADZ;IACY,QADZ;EL8TlB;EK7TM;IAAwB,iBADZ;IACY,QADZ;ELiUlB;EKhUM;IAAwB,iBADZ;IACY,QADZ;ELoUlB;EKnUM;IAAwB,iBADZ;IACY,QADZ;ELuUlB;EKtUM;IAAwB,iBADZ;IACY,QADZ;EL0UlB;EKzUM;IAAwB,iBADZ;IACY,QADZ;EL6UlB;EK5UM;IAAwB,iBADZ;IACY,QADZ;ELgVlB;EK/UM;IAAwB,iBADZ;IACY,QADZ;ELmVlB;EKlVM;IAAwB,iBADZ;IACY,QADZ;ELsVlB;EKrVM;IAAwB,iBADZ;IACY,QADZ;ELyVlB;EKxVM;IAAwB,kBADZ;IACY,SADZ;EL4VlB;EK3VM;IAAwB,kBADZ;IACY,SADZ;EL+VlB;EK9VM;IAAwB,kBADZ;IACY,SADZ;ELkWlB;EK1VU;IHhBV,cAA4B;EF6W5B;EK7VU;IHhBV,sBAA8C;EFgX9C;EKhWU;IHhBV,uBAA8C;EFmX9C;EKnWU;IHhBV,gBAA8C;EFsX9C;EKtWU;IHhBV,uBAA8C;EFyX9C;EKzWU;IHhBV,uBAA8C;EF4X9C;EK5WU;IHhBV,gBAA8C;EF+X9C;EK/WU;IHhBV,uBAA8C;EFkY9C;EKlXU;IHhBV,uBAA8C;EFqY9C;EKrXU;IHhBV,gBAA8C;EFwY9C;EKxXU;IHhBV,uBAA8C;EF2Y9C;EK3XU;IHhBV,uBAA8C;EF8Y9C;AACF;;AG1YI;EE3BE;IACE,0BAAa;IAAb,aAAa;IACb,oBAAY;IAAZ,YAAY;IACZ,eAAe;ELyarB;EKpaQ;IHwBN,kBIyHqD;IJzHrD,cIyHqD;IJxHrD,eIwHqD;ENuRvD;EKxaQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;EN2RvD;EK5aQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;EN+RvD;EKhbQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENmSvD;EKpbQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENuSvD;EKxbQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;EN2SvD;EKtbI;IHCJ,kBAAc;IAAd,cAAc;IACd,WAAW;IACX,eAAe;EFwbf;EKrbQ;IHbR,uBAA6C;IAA7C,mBAA6C;IAI7C,oBAA8C;EFkc9C;EKzbQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFsc9C;EK7bQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EF0c9C;EKjcQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF8c9C;EKrcQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFkd9C;EKzcQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFsd9C;EK7cQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF0d9C;EKjdQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF8d9C;EKrdQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFke9C;EKzdQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFse9C;EK7dQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF0e9C;EKjeQ;IHbR,kBAA6C;IAA7C,cAA6C;IAI7C,eAA8C;EF8e9C;EK/dI;IAAwB,kBAAS;IAAT,SAAS;ELkerC;EKheI;IAAuB,kBDmKG;ICnKH,SDmKG;EJgU9B;EKheM;IAAwB,iBADZ;IACY,QADZ;ELoelB;EKneM;IAAwB,iBADZ;IACY,QADZ;ELuelB;EKteM;IAAwB,iBADZ;IACY,QADZ;EL0elB;EKzeM;IAAwB,iBADZ;IACY,QADZ;EL6elB;EK5eM;IAAwB,iBADZ;IACY,QADZ;ELgflB;EK/eM;IAAwB,iBADZ;IACY,QADZ;ELmflB;EKlfM;IAAwB,iBADZ;IACY,QADZ;ELsflB;EKrfM;IAAwB,iBADZ;IACY,QADZ;ELyflB;EKxfM;IAAwB,iBADZ;IACY,QADZ;EL4flB;EK3fM;IAAwB,iBADZ;IACY,QADZ;EL+flB;EK9fM;IAAwB,kBADZ;IACY,SADZ;ELkgBlB;EKjgBM;IAAwB,kBADZ;IACY,SADZ;ELqgBlB;EKpgBM;IAAwB,kBADZ;IACY,SADZ;ELwgBlB;EKhgBU;IHhBV,cAA4B;EFmhB5B;EKngBU;IHhBV,sBAA8C;EFshB9C;EKtgBU;IHhBV,uBAA8C;EFyhB9C;EKzgBU;IHhBV,gBAA8C;EF4hB9C;EK5gBU;IHhBV,uBAA8C;EF+hB9C;EK/gBU;IHhBV,uBAA8C;EFkiB9C;EKlhBU;IHhBV,gBAA8C;EFqiB9C;EKrhBU;IHhBV,uBAA8C;EFwiB9C;EKxhBU;IHhBV,uBAA8C;EF2iB9C;EK3hBU;IHhBV,gBAA8C;EF8iB9C;EK9hBU;IHhBV,uBAA8C;EFijB9C;EKjiBU;IHhBV,uBAA8C;EFojB9C;AACF;;AGhjBI;EE3BE;IACE,0BAAa;IAAb,aAAa;IACb,oBAAY;IAAZ,YAAY;IACZ,eAAe;EL+kBrB;EK1kBQ;IHwBN,kBIyHqD;IJzHrD,cIyHqD;IJxHrD,eIwHqD;EN6bvD;EK9kBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENicvD;EKllBQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;ENqcvD;EKtlBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENycvD;EK1lBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;EN6cvD;EK9lBQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;ENidvD;EK5lBI;IHCJ,kBAAc;IAAd,cAAc;IACd,WAAW;IACX,eAAe;EF8lBf;EK3lBQ;IHbR,uBAA6C;IAA7C,mBAA6C;IAI7C,oBAA8C;EFwmB9C;EK/lBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF4mB9C;EKnmBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFgnB9C;EKvmBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFonB9C;EK3mBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFwnB9C;EK/mBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EF4nB9C;EKnnBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFgoB9C;EKvnBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFooB9C;EK3nBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFwoB9C;EK/nBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF4oB9C;EKnoBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFgpB9C;EKvoBQ;IHbR,kBAA6C;IAA7C,cAA6C;IAI7C,eAA8C;EFopB9C;EKroBI;IAAwB,kBAAS;IAAT,SAAS;ELwoBrC;EKtoBI;IAAuB,kBDmKG;ICnKH,SDmKG;EJse9B;EKtoBM;IAAwB,iBADZ;IACY,QADZ;EL0oBlB;EKzoBM;IAAwB,iBADZ;IACY,QADZ;EL6oBlB;EK5oBM;IAAwB,iBADZ;IACY,QADZ;ELgpBlB;EK/oBM;IAAwB,iBADZ;IACY,QADZ;ELmpBlB;EKlpBM;IAAwB,iBADZ;IACY,QADZ;ELspBlB;EKrpBM;IAAwB,iBADZ;IACY,QADZ;ELypBlB;EKxpBM;IAAwB,iBADZ;IACY,QADZ;EL4pBlB;EK3pBM;IAAwB,iBADZ;IACY,QADZ;EL+pBlB;EK9pBM;IAAwB,iBADZ;IACY,QADZ;ELkqBlB;EKjqBM;IAAwB,iBADZ;IACY,QADZ;ELqqBlB;EKpqBM;IAAwB,kBADZ;IACY,SADZ;ELwqBlB;EKvqBM;IAAwB,kBADZ;IACY,SADZ;EL2qBlB;EK1qBM;IAAwB,kBADZ;IACY,SADZ;EL8qBlB;EKtqBU;IHhBV,cAA4B;EFyrB5B;EKzqBU;IHhBV,sBAA8C;EF4rB9C;EK5qBU;IHhBV,uBAA8C;EF+rB9C;EK/qBU;IHhBV,gBAA8C;EFksB9C;EKlrBU;IHhBV,uBAA8C;EFqsB9C;EKrrBU;IHhBV,uBAA8C;EFwsB9C;EKxrBU;IHhBV,gBAA8C;EF2sB9C;EK3rBU;IHhBV,uBAA8C;EF8sB9C;EK9rBU;IHhBV,uBAA8C;EFitB9C;EKjsBU;IHhBV,gBAA8C;EFotB9C;EKpsBU;IHhBV,uBAA8C;EFutB9C;EKvsBU;IHhBV,uBAA8C;EF0tB9C;AACF;;AGttBI;EE3BE;IACE,0BAAa;IAAb,aAAa;IACb,oBAAY;IAAZ,YAAY;IACZ,eAAe;ELqvBrB;EKhvBQ;IHwBN,kBIyHqD;IJzHrD,cIyHqD;IJxHrD,eIwHqD;ENmmBvD;EKpvBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENumBvD;EKxvBQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;EN2mBvD;EK5vBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;EN+mBvD;EKhwBQ;IHwBN,iBIyHqD;IJzHrD,aIyHqD;IJxHrD,cIwHqD;ENmnBvD;EKpwBQ;IHwBN,wBIyHqD;IJzHrD,oBIyHqD;IJxHrD,qBIwHqD;ENunBvD;EKlwBI;IHCJ,kBAAc;IAAd,cAAc;IACd,WAAW;IACX,eAAe;EFowBf;EKjwBQ;IHbR,uBAA6C;IAA7C,mBAA6C;IAI7C,oBAA8C;EF8wB9C;EKrwBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFkxB9C;EKzwBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFsxB9C;EK7wBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF0xB9C;EKjxBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF8xB9C;EKrxBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EFkyB9C;EKzxBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFsyB9C;EK7xBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EF0yB9C;EKjyBQ;IHbR,iBAA6C;IAA7C,aAA6C;IAI7C,cAA8C;EF8yB9C;EKryBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFkzB9C;EKzyBQ;IHbR,wBAA6C;IAA7C,oBAA6C;IAI7C,qBAA8C;EFszB9C;EK7yBQ;IHbR,kBAA6C;IAA7C,cAA6C;IAI7C,eAA8C;EF0zB9C;EK3yBI;IAAwB,kBAAS;IAAT,SAAS;EL8yBrC;EK5yBI;IAAuB,kBDmKG;ICnKH,SDmKG;EJ4oB9B;EK5yBM;IAAwB,iBADZ;IACY,QADZ;ELgzBlB;EK/yBM;IAAwB,iBADZ;IACY,QADZ;ELmzBlB;EKlzBM;IAAwB,iBADZ;IACY,QADZ;ELszBlB;EKrzBM;IAAwB,iBADZ;IACY,QADZ;ELyzBlB;EKxzBM;IAAwB,iBADZ;IACY,QADZ;EL4zBlB;EK3zBM;IAAwB,iBADZ;IACY,QADZ;EL+zBlB;EK9zBM;IAAwB,iBADZ;IACY,QADZ;ELk0BlB;EKj0BM;IAAwB,iBADZ;IACY,QADZ;ELq0BlB;EKp0BM;IAAwB,iBADZ;IACY,QADZ;ELw0BlB;EKv0BM;IAAwB,iBADZ;IACY,QADZ;EL20BlB;EK10BM;IAAwB,kBADZ;IACY,SADZ;EL80BlB;EK70BM;IAAwB,kBADZ;IACY,SADZ;ELi1BlB;EKh1BM;IAAwB,kBADZ;IACY,SADZ;ELo1BlB;EK50BU;IHhBV,cAA4B;EF+1B5B;EK/0BU;IHhBV,sBAA8C;EFk2B9C;EKl1BU;IHhBV,uBAA8C;EFq2B9C;EKr1BU;IHhBV,gBAA8C;EFw2B9C;EKx1BU;IHhBV,uBAA8C;EF22B9C;EK31BU;IHhBV,uBAA8C;EF82B9C;EK91BU;IHhBV,gBAA8C;EFi3B9C;EKj2BU;IHhBV,uBAA8C;EFo3B9C;EKp2BU;IHhBV,uBAA8C;EFu3B9C;EKv2BU;IHhBV,gBAA8C;EF03B9C;EK12BU;IHhBV,uBAA8C;EF63B9C;EK72BU;IHhBV,uBAA8C;EFg4B9C;AACF;;AO76BM;EAAwB,wBAA0B;APi7BxD;;AOj7BM;EAAwB,0BAA0B;APq7BxD;;AOr7BM;EAAwB,gCAA0B;APy7BxD;;AOz7BM;EAAwB,yBAA0B;AP67BxD;;AO77BM;EAAwB,yBAA0B;APi8BxD;;AOj8BM;EAAwB,6BAA0B;APq8BxD;;AOr8BM;EAAwB,8BAA0B;APy8BxD;;AOz8BM;EAAwB,+BAA0B;EAA1B,wBAA0B;AP68BxD;;AO78BM;EAAwB,sCAA0B;EAA1B,+BAA0B;APi9BxD;;AGh6BI;EIjDE;IAAwB,wBAA0B;EPs9BtD;EOt9BI;IAAwB,0BAA0B;EPy9BtD;EOz9BI;IAAwB,gCAA0B;EP49BtD;EO59BI;IAAwB,yBAA0B;EP+9BtD;EO/9BI;IAAwB,yBAA0B;EPk+BtD;EOl+BI;IAAwB,6BAA0B;EPq+BtD;EOr+BI;IAAwB,8BAA0B;EPw+BtD;EOx+BI;IAAwB,+BAA0B;IAA1B,wBAA0B;EP2+BtD;EO3+BI;IAAwB,sCAA0B;IAA1B,+BAA0B;EP8+BtD;AACF;;AG97BI;EIjDE;IAAwB,wBAA0B;EPo/BtD;EOp/BI;IAAwB,0BAA0B;EPu/BtD;EOv/BI;IAAwB,gCAA0B;EP0/BtD;EO1/BI;IAAwB,yBAA0B;EP6/BtD;EO7/BI;IAAwB,yBAA0B;EPggCtD;EOhgCI;IAAwB,6BAA0B;EPmgCtD;EOngCI;IAAwB,8BAA0B;EPsgCtD;EOtgCI;IAAwB,+BAA0B;IAA1B,wBAA0B;EPygCtD;EOzgCI;IAAwB,sCAA0B;IAA1B,+BAA0B;EP4gCtD;AACF;;AG59BI;EIjDE;IAAwB,wBAA0B;EPkhCtD;EOlhCI;IAAwB,0BAA0B;EPqhCtD;EOrhCI;IAAwB,gCAA0B;EPwhCtD;EOxhCI;IAAwB,yBAA0B;EP2hCtD;EO3hCI;IAAwB,yBAA0B;EP8hCtD;EO9hCI;IAAwB,6BAA0B;EPiiCtD;EOjiCI;IAAwB,8BAA0B;EPoiCtD;EOpiCI;IAAwB,+BAA0B;IAA1B,wBAA0B;EPuiCtD;EOviCI;IAAwB,sCAA0B;IAA1B,+BAA0B;EP0iCtD;AACF;;AG1/BI;EIjDE;IAAwB,wBAA0B;EPgjCtD;EOhjCI;IAAwB,0BAA0B;EPmjCtD;EOnjCI;IAAwB,gCAA0B;EPsjCtD;EOtjCI;IAAwB,yBAA0B;EPyjCtD;EOzjCI;IAAwB,yBAA0B;EP4jCtD;EO5jCI;IAAwB,6BAA0B;EP+jCtD;EO/jCI;IAAwB,8BAA0B;EPkkCtD;EOlkCI;IAAwB,+BAA0B;IAA1B,wBAA0B;EPqkCtD;EOrkCI;IAAwB,sCAA0B;IAA1B,+BAA0B;EPwkCtD;AACF;;AO/jCA;EAEI;IAAqB,wBAA0B;EPkkCjD;EOlkCE;IAAqB,0BAA0B;EPqkCjD;EOrkCE;IAAqB,gCAA0B;EPwkCjD;EOxkCE;IAAqB,yBAA0B;EP2kCjD;EO3kCE;IAAqB,yBAA0B;EP8kCjD;EO9kCE;IAAqB,6BAA0B;EPilCjD;EOjlCE;IAAqB,8BAA0B;EPolCjD;EOplCE;IAAqB,+BAA0B;IAA1B,wBAA0B;EPulCjD;EOvlCE;IAAqB,sCAA0B;IAA1B,+BAA0B;EP0lCjD;AACF;;AQxmCI;EAAgC,kCAA8B;EAA9B,8BAA8B;AR4mClE;;AQ3mCI;EAAgC,qCAAiC;EAAjC,iCAAiC;AR+mCrE;;AQ9mCI;EAAgC,0CAAsC;EAAtC,sCAAsC;ARknC1E;;AQjnCI;EAAgC,6CAAyC;EAAzC,yCAAyC;ARqnC7E;;AQnnCI;EAA8B,8BAA0B;EAA1B,0BAA0B;ARunC5D;;AQtnCI;EAA8B,gCAA4B;EAA5B,4BAA4B;AR0nC9D;;AQznCI;EAA8B,sCAAkC;EAAlC,kCAAkC;AR6nCpE;;AQ5nCI;EAA8B,6BAAyB;EAAzB,yBAAyB;ARgoC3D;;AQ/nCI;EAA8B,+BAAuB;EAAvB,uBAAuB;ARmoCzD;;AQloCI;EAA8B,+BAAuB;EAAvB,uBAAuB;ARsoCzD;;AQroCI;EAA8B,+BAAyB;EAAzB,yBAAyB;ARyoC3D;;AQxoCI;EAA8B,+BAAyB;EAAzB,yBAAyB;AR4oC3D;;AQ1oCI;EAAoC,+BAAsC;EAAtC,sCAAsC;AR8oC9E;;AQ7oCI;EAAoC,6BAAoC;EAApC,oCAAoC;ARipC5E;;AQhpCI;EAAoC,gCAAkC;EAAlC,kCAAkC;ARopC1E;;AQnpCI;EAAoC,iCAAyC;EAAzC,yCAAyC;ARupCjF;;AQtpCI;EAAoC,oCAAwC;EAAxC,wCAAwC;AR0pChF;;AQxpCI;EAAiC,gCAAkC;EAAlC,kCAAkC;AR4pCvE;;AQ3pCI;EAAiC,8BAAgC;EAAhC,gCAAgC;AR+pCrE;;AQ9pCI;EAAiC,iCAA8B;EAA9B,8BAA8B;ARkqCnE;;AQjqCI;EAAiC,mCAAgC;EAAhC,gCAAgC;ARqqCrE;;AQpqCI;EAAiC,kCAA+B;EAA/B,+BAA+B;ARwqCpE;;AQtqCI;EAAkC,oCAAoC;EAApC,oCAAoC;AR0qC1E;;AQzqCI;EAAkC,kCAAkC;EAAlC,kCAAkC;AR6qCxE;;AQ5qCI;EAAkC,qCAAgC;EAAhC,gCAAgC;ARgrCtE;;AQ/qCI;EAAkC,sCAAuC;EAAvC,uCAAuC;ARmrC7E;;AQlrCI;EAAkC,yCAAsC;EAAtC,sCAAsC;ARsrC5E;;AQrrCI;EAAkC,sCAAiC;EAAjC,iCAAiC;ARyrCvE;;AQvrCI;EAAgC,oCAA2B;EAA3B,2BAA2B;AR2rC/D;;AQ1rCI;EAAgC,qCAAiC;EAAjC,iCAAiC;AR8rCrE;;AQ7rCI;EAAgC,mCAA+B;EAA/B,+BAA+B;ARisCnE;;AQhsCI;EAAgC,sCAA6B;EAA7B,6BAA6B;ARosCjE;;AQnsCI;EAAgC,wCAA+B;EAA/B,+BAA+B;ARusCnE;;AQtsCI;EAAgC,uCAA8B;EAA9B,8BAA8B;AR0sClE;;AG9rCI;EKlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;ERqvChE;EQpvCE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERuvCnE;EQtvCE;IAAgC,0CAAsC;IAAtC,sCAAsC;ERyvCxE;EQxvCE;IAAgC,6CAAyC;IAAzC,yCAAyC;ER2vC3E;EQzvCE;IAA8B,8BAA0B;IAA1B,0BAA0B;ER4vC1D;EQ3vCE;IAA8B,gCAA4B;IAA5B,4BAA4B;ER8vC5D;EQ7vCE;IAA8B,sCAAkC;IAAlC,kCAAkC;ERgwClE;EQ/vCE;IAA8B,6BAAyB;IAAzB,yBAAyB;ERkwCzD;EQjwCE;IAA8B,+BAAuB;IAAvB,uBAAuB;ERowCvD;EQnwCE;IAA8B,+BAAuB;IAAvB,uBAAuB;ERswCvD;EQrwCE;IAA8B,+BAAyB;IAAzB,yBAAyB;ERwwCzD;EQvwCE;IAA8B,+BAAyB;IAAzB,yBAAyB;ER0wCzD;EQxwCE;IAAoC,+BAAsC;IAAtC,sCAAsC;ER2wC5E;EQ1wCE;IAAoC,6BAAoC;IAApC,oCAAoC;ER6wC1E;EQ5wCE;IAAoC,gCAAkC;IAAlC,kCAAkC;ER+wCxE;EQ9wCE;IAAoC,iCAAyC;IAAzC,yCAAyC;ERixC/E;EQhxCE;IAAoC,oCAAwC;IAAxC,wCAAwC;ERmxC9E;EQjxCE;IAAiC,gCAAkC;IAAlC,kCAAkC;ERoxCrE;EQnxCE;IAAiC,8BAAgC;IAAhC,gCAAgC;ERsxCnE;EQrxCE;IAAiC,iCAA8B;IAA9B,8BAA8B;ERwxCjE;EQvxCE;IAAiC,mCAAgC;IAAhC,gCAAgC;ER0xCnE;EQzxCE;IAAiC,kCAA+B;IAA/B,+BAA+B;ER4xClE;EQ1xCE;IAAkC,oCAAoC;IAApC,oCAAoC;ER6xCxE;EQ5xCE;IAAkC,kCAAkC;IAAlC,kCAAkC;ER+xCtE;EQ9xCE;IAAkC,qCAAgC;IAAhC,gCAAgC;ERiyCpE;EQhyCE;IAAkC,sCAAuC;IAAvC,uCAAuC;ERmyC3E;EQlyCE;IAAkC,yCAAsC;IAAtC,sCAAsC;ERqyC1E;EQpyCE;IAAkC,sCAAiC;IAAjC,iCAAiC;ERuyCrE;EQryCE;IAAgC,oCAA2B;IAA3B,2BAA2B;ERwyC7D;EQvyCE;IAAgC,qCAAiC;IAAjC,iCAAiC;ER0yCnE;EQzyCE;IAAgC,mCAA+B;IAA/B,+BAA+B;ER4yCjE;EQ3yCE;IAAgC,sCAA6B;IAA7B,6BAA6B;ER8yC/D;EQ7yCE;IAAgC,wCAA+B;IAA/B,+BAA+B;ERgzCjE;EQ/yCE;IAAgC,uCAA8B;IAA9B,8BAA8B;ERkzChE;AACF;;AGvyCI;EKlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;ER81ChE;EQ71CE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERg2CnE;EQ/1CE;IAAgC,0CAAsC;IAAtC,sCAAsC;ERk2CxE;EQj2CE;IAAgC,6CAAyC;IAAzC,yCAAyC;ERo2C3E;EQl2CE;IAA8B,8BAA0B;IAA1B,0BAA0B;ERq2C1D;EQp2CE;IAA8B,gCAA4B;IAA5B,4BAA4B;ERu2C5D;EQt2CE;IAA8B,sCAAkC;IAAlC,kCAAkC;ERy2ClE;EQx2CE;IAA8B,6BAAyB;IAAzB,yBAAyB;ER22CzD;EQ12CE;IAA8B,+BAAuB;IAAvB,uBAAuB;ER62CvD;EQ52CE;IAA8B,+BAAuB;IAAvB,uBAAuB;ER+2CvD;EQ92CE;IAA8B,+BAAyB;IAAzB,yBAAyB;ERi3CzD;EQh3CE;IAA8B,+BAAyB;IAAzB,yBAAyB;ERm3CzD;EQj3CE;IAAoC,+BAAsC;IAAtC,sCAAsC;ERo3C5E;EQn3CE;IAAoC,6BAAoC;IAApC,oCAAoC;ERs3C1E;EQr3CE;IAAoC,gCAAkC;IAAlC,kCAAkC;ERw3CxE;EQv3CE;IAAoC,iCAAyC;IAAzC,yCAAyC;ER03C/E;EQz3CE;IAAoC,oCAAwC;IAAxC,wCAAwC;ER43C9E;EQ13CE;IAAiC,gCAAkC;IAAlC,kCAAkC;ER63CrE;EQ53CE;IAAiC,8BAAgC;IAAhC,gCAAgC;ER+3CnE;EQ93CE;IAAiC,iCAA8B;IAA9B,8BAA8B;ERi4CjE;EQh4CE;IAAiC,mCAAgC;IAAhC,gCAAgC;ERm4CnE;EQl4CE;IAAiC,kCAA+B;IAA/B,+BAA+B;ERq4ClE;EQn4CE;IAAkC,oCAAoC;IAApC,oCAAoC;ERs4CxE;EQr4CE;IAAkC,kCAAkC;IAAlC,kCAAkC;ERw4CtE;EQv4CE;IAAkC,qCAAgC;IAAhC,gCAAgC;ER04CpE;EQz4CE;IAAkC,sCAAuC;IAAvC,uCAAuC;ER44C3E;EQ34CE;IAAkC,yCAAsC;IAAtC,sCAAsC;ER84C1E;EQ74CE;IAAkC,sCAAiC;IAAjC,iCAAiC;ERg5CrE;EQ94CE;IAAgC,oCAA2B;IAA3B,2BAA2B;ERi5C7D;EQh5CE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERm5CnE;EQl5CE;IAAgC,mCAA+B;IAA/B,+BAA+B;ERq5CjE;EQp5CE;IAAgC,sCAA6B;IAA7B,6BAA6B;ERu5C/D;EQt5CE;IAAgC,wCAA+B;IAA/B,+BAA+B;ERy5CjE;EQx5CE;IAAgC,uCAA8B;IAA9B,8BAA8B;ER25ChE;AACF;;AGh5CI;EKlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;ERu8ChE;EQt8CE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERy8CnE;EQx8CE;IAAgC,0CAAsC;IAAtC,sCAAsC;ER28CxE;EQ18CE;IAAgC,6CAAyC;IAAzC,yCAAyC;ER68C3E;EQ38CE;IAA8B,8BAA0B;IAA1B,0BAA0B;ER88C1D;EQ78CE;IAA8B,gCAA4B;IAA5B,4BAA4B;ERg9C5D;EQ/8CE;IAA8B,sCAAkC;IAAlC,kCAAkC;ERk9ClE;EQj9CE;IAA8B,6BAAyB;IAAzB,yBAAyB;ERo9CzD;EQn9CE;IAA8B,+BAAuB;IAAvB,uBAAuB;ERs9CvD;EQr9CE;IAA8B,+BAAuB;IAAvB,uBAAuB;ERw9CvD;EQv9CE;IAA8B,+BAAyB;IAAzB,yBAAyB;ER09CzD;EQz9CE;IAA8B,+BAAyB;IAAzB,yBAAyB;ER49CzD;EQ19CE;IAAoC,+BAAsC;IAAtC,sCAAsC;ER69C5E;EQ59CE;IAAoC,6BAAoC;IAApC,oCAAoC;ER+9C1E;EQ99CE;IAAoC,gCAAkC;IAAlC,kCAAkC;ERi+CxE;EQh+CE;IAAoC,iCAAyC;IAAzC,yCAAyC;ERm+C/E;EQl+CE;IAAoC,oCAAwC;IAAxC,wCAAwC;ERq+C9E;EQn+CE;IAAiC,gCAAkC;IAAlC,kCAAkC;ERs+CrE;EQr+CE;IAAiC,8BAAgC;IAAhC,gCAAgC;ERw+CnE;EQv+CE;IAAiC,iCAA8B;IAA9B,8BAA8B;ER0+CjE;EQz+CE;IAAiC,mCAAgC;IAAhC,gCAAgC;ER4+CnE;EQ3+CE;IAAiC,kCAA+B;IAA/B,+BAA+B;ER8+ClE;EQ5+CE;IAAkC,oCAAoC;IAApC,oCAAoC;ER++CxE;EQ9+CE;IAAkC,kCAAkC;IAAlC,kCAAkC;ERi/CtE;EQh/CE;IAAkC,qCAAgC;IAAhC,gCAAgC;ERm/CpE;EQl/CE;IAAkC,sCAAuC;IAAvC,uCAAuC;ERq/C3E;EQp/CE;IAAkC,yCAAsC;IAAtC,sCAAsC;ERu/C1E;EQt/CE;IAAkC,sCAAiC;IAAjC,iCAAiC;ERy/CrE;EQv/CE;IAAgC,oCAA2B;IAA3B,2BAA2B;ER0/C7D;EQz/CE;IAAgC,qCAAiC;IAAjC,iCAAiC;ER4/CnE;EQ3/CE;IAAgC,mCAA+B;IAA/B,+BAA+B;ER8/CjE;EQ7/CE;IAAgC,sCAA6B;IAA7B,6BAA6B;ERggD/D;EQ//CE;IAAgC,wCAA+B;IAA/B,+BAA+B;ERkgDjE;EQjgDE;IAAgC,uCAA8B;IAA9B,8BAA8B;ERogDhE;AACF;;AGz/CI;EKlDA;IAAgC,kCAA8B;IAA9B,8BAA8B;ERgjDhE;EQ/iDE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERkjDnE;EQjjDE;IAAgC,0CAAsC;IAAtC,sCAAsC;ERojDxE;EQnjDE;IAAgC,6CAAyC;IAAzC,yCAAyC;ERsjD3E;EQpjDE;IAA8B,8BAA0B;IAA1B,0BAA0B;ERujD1D;EQtjDE;IAA8B,gCAA4B;IAA5B,4BAA4B;ERyjD5D;EQxjDE;IAA8B,sCAAkC;IAAlC,kCAAkC;ER2jDlE;EQ1jDE;IAA8B,6BAAyB;IAAzB,yBAAyB;ER6jDzD;EQ5jDE;IAA8B,+BAAuB;IAAvB,uBAAuB;ER+jDvD;EQ9jDE;IAA8B,+BAAuB;IAAvB,uBAAuB;ERikDvD;EQhkDE;IAA8B,+BAAyB;IAAzB,yBAAyB;ERmkDzD;EQlkDE;IAA8B,+BAAyB;IAAzB,yBAAyB;ERqkDzD;EQnkDE;IAAoC,+BAAsC;IAAtC,sCAAsC;ERskD5E;EQrkDE;IAAoC,6BAAoC;IAApC,oCAAoC;ERwkD1E;EQvkDE;IAAoC,gCAAkC;IAAlC,kCAAkC;ER0kDxE;EQzkDE;IAAoC,iCAAyC;IAAzC,yCAAyC;ER4kD/E;EQ3kDE;IAAoC,oCAAwC;IAAxC,wCAAwC;ER8kD9E;EQ5kDE;IAAiC,gCAAkC;IAAlC,kCAAkC;ER+kDrE;EQ9kDE;IAAiC,8BAAgC;IAAhC,gCAAgC;ERilDnE;EQhlDE;IAAiC,iCAA8B;IAA9B,8BAA8B;ERmlDjE;EQllDE;IAAiC,mCAAgC;IAAhC,gCAAgC;ERqlDnE;EQplDE;IAAiC,kCAA+B;IAA/B,+BAA+B;ERulDlE;EQrlDE;IAAkC,oCAAoC;IAApC,oCAAoC;ERwlDxE;EQvlDE;IAAkC,kCAAkC;IAAlC,kCAAkC;ER0lDtE;EQzlDE;IAAkC,qCAAgC;IAAhC,gCAAgC;ER4lDpE;EQ3lDE;IAAkC,sCAAuC;IAAvC,uCAAuC;ER8lD3E;EQ7lDE;IAAkC,yCAAsC;IAAtC,sCAAsC;ERgmD1E;EQ/lDE;IAAkC,sCAAiC;IAAjC,iCAAiC;ERkmDrE;EQhmDE;IAAgC,oCAA2B;IAA3B,2BAA2B;ERmmD7D;EQlmDE;IAAgC,qCAAiC;IAAjC,iCAAiC;ERqmDnE;EQpmDE;IAAgC,mCAA+B;IAA/B,+BAA+B;ERumDjE;EQtmDE;IAAgC,sCAA6B;IAA7B,6BAA6B;ERymD/D;EQxmDE;IAAgC,wCAA+B;IAA/B,+BAA+B;ER2mDjE;EQ1mDE;IAAgC,uCAA8B;IAA9B,8BAA8B;ER6mDhE;AACF;;ASppDQ;EAAgC,oBAA4B;ATwpDpE;;ASvpDQ;;EAEE,wBAAoC;AT0pD9C;;ASxpDQ;;EAEE,0BAAwC;AT2pDlD;;ASzpDQ;;EAEE,2BAA0C;AT4pDpD;;AS1pDQ;;EAEE,yBAAsC;AT6pDhD;;AS5qDQ;EAAgC,0BAA4B;ATgrDpE;;AS/qDQ;;EAEE,8BAAoC;ATkrD9C;;AShrDQ;;EAEE,gCAAwC;ATmrDlD;;ASjrDQ;;EAEE,iCAA0C;ATorDpD;;ASlrDQ;;EAEE,+BAAsC;ATqrDhD;;ASpsDQ;EAAgC,yBAA4B;ATwsDpE;;ASvsDQ;;EAEE,6BAAoC;AT0sD9C;;ASxsDQ;;EAEE,+BAAwC;AT2sDlD;;ASzsDQ;;EAEE,gCAA0C;AT4sDpD;;AS1sDQ;;EAEE,8BAAsC;AT6sDhD;;AS5tDQ;EAAgC,uBAA4B;ATguDpE;;AS/tDQ;;EAEE,2BAAoC;ATkuD9C;;AShuDQ;;EAEE,6BAAwC;ATmuDlD;;ASjuDQ;;EAEE,8BAA0C;ATouDpD;;ASluDQ;;EAEE,4BAAsC;ATquDhD;;ASpvDQ;EAAgC,yBAA4B;ATwvDpE;;ASvvDQ;;EAEE,6BAAoC;AT0vD9C;;ASxvDQ;;EAEE,+BAAwC;AT2vDlD;;ASzvDQ;;EAEE,gCAA0C;AT4vDpD;;AS1vDQ;;EAEE,8BAAsC;AT6vDhD;;AS5wDQ;EAAgC,uBAA4B;ATgxDpE;;AS/wDQ;;EAEE,2BAAoC;ATkxD9C;;AShxDQ;;EAEE,6BAAwC;ATmxDlD;;ASjxDQ;;EAEE,8BAA0C;AToxDpD;;ASlxDQ;;EAEE,4BAAsC;ATqxDhD;;ASpyDQ;EAAgC,qBAA4B;ATwyDpE;;ASvyDQ;;EAEE,yBAAoC;AT0yD9C;;ASxyDQ;;EAEE,2BAAwC;AT2yDlD;;ASzyDQ;;EAEE,4BAA0C;AT4yDpD;;AS1yDQ;;EAEE,0BAAsC;AT6yDhD;;AS5zDQ;EAAgC,2BAA4B;ATg0DpE;;AS/zDQ;;EAEE,+BAAoC;ATk0D9C;;ASh0DQ;;EAEE,iCAAwC;ATm0DlD;;ASj0DQ;;EAEE,kCAA0C;ATo0DpD;;ASl0DQ;;EAEE,gCAAsC;ATq0DhD;;ASp1DQ;EAAgC,0BAA4B;ATw1DpE;;ASv1DQ;;EAEE,8BAAoC;AT01D9C;;ASx1DQ;;EAEE,gCAAwC;AT21DlD;;ASz1DQ;;EAEE,iCAA0C;AT41DpD;;AS11DQ;;EAEE,+BAAsC;AT61DhD;;AS52DQ;EAAgC,wBAA4B;ATg3DpE;;AS/2DQ;;EAEE,4BAAoC;ATk3D9C;;ASh3DQ;;EAEE,8BAAwC;ATm3DlD;;ASj3DQ;;EAEE,+BAA0C;ATo3DpD;;ASl3DQ;;EAEE,6BAAsC;ATq3DhD;;ASp4DQ;EAAgC,0BAA4B;ATw4DpE;;ASv4DQ;;EAEE,8BAAoC;AT04D9C;;ASx4DQ;;EAEE,gCAAwC;AT24DlD;;ASz4DQ;;EAEE,iCAA0C;AT44DpD;;AS14DQ;;EAEE,+BAAsC;AT64DhD;;AS55DQ;EAAgC,wBAA4B;ATg6DpE;;AS/5DQ;;EAEE,4BAAoC;ATk6D9C;;ASh6DQ;;EAEE,8BAAwC;ATm6DlD;;ASj6DQ;;EAEE,+BAA0C;ATo6DpD;;ASl6DQ;;EAEE,6BAAsC;ATq6DhD;;AS75DQ;EAAwB,2BAA2B;ATi6D3D;;ASh6DQ;;EAEE,+BAA+B;ATm6DzC;;ASj6DQ;;EAEE,iCAAiC;ATo6D3C;;ASl6DQ;;EAEE,kCAAkC;ATq6D5C;;ASn6DQ;;EAEE,gCAAgC;ATs6D1C;;ASr7DQ;EAAwB,0BAA2B;ATy7D3D;;ASx7DQ;;EAEE,8BAA+B;AT27DzC;;ASz7DQ;;EAEE,gCAAiC;AT47D3C;;AS17DQ;;EAEE,iCAAkC;AT67D5C;;AS37DQ;;EAEE,+BAAgC;AT87D1C;;AS78DQ;EAAwB,wBAA2B;ATi9D3D;;ASh9DQ;;EAEE,4BAA+B;ATm9DzC;;ASj9DQ;;EAEE,8BAAiC;ATo9D3C;;ASl9DQ;;EAEE,+BAAkC;ATq9D5C;;ASn9DQ;;EAEE,6BAAgC;ATs9D1C;;ASr+DQ;EAAwB,0BAA2B;ATy+D3D;;ASx+DQ;;EAEE,8BAA+B;AT2+DzC;;ASz+DQ;;EAEE,gCAAiC;AT4+D3C;;AS1+DQ;;EAEE,iCAAkC;AT6+D5C;;AS3+DQ;;EAEE,+BAAgC;AT8+D1C;;AS7/DQ;EAAwB,wBAA2B;ATigE3D;;AShgEQ;;EAEE,4BAA+B;ATmgEzC;;ASjgEQ;;EAEE,8BAAiC;ATogE3C;;ASlgEQ;;EAEE,+BAAkC;ATqgE5C;;ASngEQ;;EAEE,6BAAgC;ATsgE1C;;AShgEI;EAAmB,uBAAuB;ATogE9C;;ASngEI;;EAEE,2BAA2B;ATsgEjC;;ASpgEI;;EAEE,6BAA6B;ATugEnC;;ASrgEI;;EAEE,8BAA8B;ATwgEpC;;AStgEI;;EAEE,4BAA4B;ATygElC;;AGlhEI;EMlDI;IAAgC,oBAA4B;ETykElE;ESxkEM;;IAEE,wBAAoC;ET0kE5C;ESxkEM;;IAEE,0BAAwC;ET0kEhD;ESxkEM;;IAEE,2BAA0C;ET0kElD;ESxkEM;;IAEE,yBAAsC;ET0kE9C;ESzlEM;IAAgC,0BAA4B;ET4lElE;ES3lEM;;IAEE,8BAAoC;ET6lE5C;ES3lEM;;IAEE,gCAAwC;ET6lEhD;ES3lEM;;IAEE,iCAA0C;ET6lElD;ES3lEM;;IAEE,+BAAsC;ET6lE9C;ES5mEM;IAAgC,yBAA4B;ET+mElE;ES9mEM;;IAEE,6BAAoC;ETgnE5C;ES9mEM;;IAEE,+BAAwC;ETgnEhD;ES9mEM;;IAEE,gCAA0C;ETgnElD;ES9mEM;;IAEE,8BAAsC;ETgnE9C;ES/nEM;IAAgC,uBAA4B;ETkoElE;ESjoEM;;IAEE,2BAAoC;ETmoE5C;ESjoEM;;IAEE,6BAAwC;ETmoEhD;ESjoEM;;IAEE,8BAA0C;ETmoElD;ESjoEM;;IAEE,4BAAsC;ETmoE9C;ESlpEM;IAAgC,yBAA4B;ETqpElE;ESppEM;;IAEE,6BAAoC;ETspE5C;ESppEM;;IAEE,+BAAwC;ETspEhD;ESppEM;;IAEE,gCAA0C;ETspElD;ESppEM;;IAEE,8BAAsC;ETspE9C;ESrqEM;IAAgC,uBAA4B;ETwqElE;ESvqEM;;IAEE,2BAAoC;ETyqE5C;ESvqEM;;IAEE,6BAAwC;ETyqEhD;ESvqEM;;IAEE,8BAA0C;ETyqElD;ESvqEM;;IAEE,4BAAsC;ETyqE9C;ESxrEM;IAAgC,qBAA4B;ET2rElE;ES1rEM;;IAEE,yBAAoC;ET4rE5C;ES1rEM;;IAEE,2BAAwC;ET4rEhD;ES1rEM;;IAEE,4BAA0C;ET4rElD;ES1rEM;;IAEE,0BAAsC;ET4rE9C;ES3sEM;IAAgC,2BAA4B;ET8sElE;ES7sEM;;IAEE,+BAAoC;ET+sE5C;ES7sEM;;IAEE,iCAAwC;ET+sEhD;ES7sEM;;IAEE,kCAA0C;ET+sElD;ES7sEM;;IAEE,gCAAsC;ET+sE9C;ES9tEM;IAAgC,0BAA4B;ETiuElE;EShuEM;;IAEE,8BAAoC;ETkuE5C;EShuEM;;IAEE,gCAAwC;ETkuEhD;EShuEM;;IAEE,iCAA0C;ETkuElD;EShuEM;;IAEE,+BAAsC;ETkuE9C;ESjvEM;IAAgC,wBAA4B;ETovElE;ESnvEM;;IAEE,4BAAoC;ETqvE5C;ESnvEM;;IAEE,8BAAwC;ETqvEhD;ESnvEM;;IAEE,+BAA0C;ETqvElD;ESnvEM;;IAEE,6BAAsC;ETqvE9C;ESpwEM;IAAgC,0BAA4B;ETuwElE;EStwEM;;IAEE,8BAAoC;ETwwE5C;EStwEM;;IAEE,gCAAwC;ETwwEhD;EStwEM;;IAEE,iCAA0C;ETwwElD;EStwEM;;IAEE,+BAAsC;ETwwE9C;ESvxEM;IAAgC,wBAA4B;ET0xElE;ESzxEM;;IAEE,4BAAoC;ET2xE5C;ESzxEM;;IAEE,8BAAwC;ET2xEhD;ESzxEM;;IAEE,+BAA0C;ET2xElD;ESzxEM;;IAEE,6BAAsC;ET2xE9C;ESnxEM;IAAwB,2BAA2B;ETsxEzD;ESrxEM;;IAEE,+BAA+B;ETuxEvC;ESrxEM;;IAEE,iCAAiC;ETuxEzC;ESrxEM;;IAEE,kCAAkC;ETuxE1C;ESrxEM;;IAEE,gCAAgC;ETuxExC;EStyEM;IAAwB,0BAA2B;ETyyEzD;ESxyEM;;IAEE,8BAA+B;ET0yEvC;ESxyEM;;IAEE,gCAAiC;ET0yEzC;ESxyEM;;IAEE,iCAAkC;ET0yE1C;ESxyEM;;IAEE,+BAAgC;ET0yExC;ESzzEM;IAAwB,wBAA2B;ET4zEzD;ES3zEM;;IAEE,4BAA+B;ET6zEvC;ES3zEM;;IAEE,8BAAiC;ET6zEzC;ES3zEM;;IAEE,+BAAkC;ET6zE1C;ES3zEM;;IAEE,6BAAgC;ET6zExC;ES50EM;IAAwB,0BAA2B;ET+0EzD;ES90EM;;IAEE,8BAA+B;ETg1EvC;ES90EM;;IAEE,gCAAiC;ETg1EzC;ES90EM;;IAEE,iCAAkC;ETg1E1C;ES90EM;;IAEE,+BAAgC;ETg1ExC;ES/1EM;IAAwB,wBAA2B;ETk2EzD;ESj2EM;;IAEE,4BAA+B;ETm2EvC;ESj2EM;;IAEE,8BAAiC;ETm2EzC;ESj2EM;;IAEE,+BAAkC;ETm2E1C;ESj2EM;;IAEE,6BAAgC;ETm2ExC;ES71EE;IAAmB,uBAAuB;ETg2E5C;ES/1EE;;IAEE,2BAA2B;ETi2E/B;ES/1EE;;IAEE,6BAA6B;ETi2EjC;ES/1EE;;IAEE,8BAA8B;ETi2ElC;ES/1EE;;IAEE,4BAA4B;ETi2EhC;AACF;;AG32EI;EMlDI;IAAgC,oBAA4B;ETk6ElE;ESj6EM;;IAEE,wBAAoC;ETm6E5C;ESj6EM;;IAEE,0BAAwC;ETm6EhD;ESj6EM;;IAEE,2BAA0C;ETm6ElD;ESj6EM;;IAEE,yBAAsC;ETm6E9C;ESl7EM;IAAgC,0BAA4B;ETq7ElE;ESp7EM;;IAEE,8BAAoC;ETs7E5C;ESp7EM;;IAEE,gCAAwC;ETs7EhD;ESp7EM;;IAEE,iCAA0C;ETs7ElD;ESp7EM;;IAEE,+BAAsC;ETs7E9C;ESr8EM;IAAgC,yBAA4B;ETw8ElE;ESv8EM;;IAEE,6BAAoC;ETy8E5C;ESv8EM;;IAEE,+BAAwC;ETy8EhD;ESv8EM;;IAEE,gCAA0C;ETy8ElD;ESv8EM;;IAEE,8BAAsC;ETy8E9C;ESx9EM;IAAgC,uBAA4B;ET29ElE;ES19EM;;IAEE,2BAAoC;ET49E5C;ES19EM;;IAEE,6BAAwC;ET49EhD;ES19EM;;IAEE,8BAA0C;ET49ElD;ES19EM;;IAEE,4BAAsC;ET49E9C;ES3+EM;IAAgC,yBAA4B;ET8+ElE;ES7+EM;;IAEE,6BAAoC;ET++E5C;ES7+EM;;IAEE,+BAAwC;ET++EhD;ES7+EM;;IAEE,gCAA0C;ET++ElD;ES7+EM;;IAEE,8BAAsC;ET++E9C;ES9/EM;IAAgC,uBAA4B;ETigFlE;EShgFM;;IAEE,2BAAoC;ETkgF5C;EShgFM;;IAEE,6BAAwC;ETkgFhD;EShgFM;;IAEE,8BAA0C;ETkgFlD;EShgFM;;IAEE,4BAAsC;ETkgF9C;ESjhFM;IAAgC,qBAA4B;ETohFlE;ESnhFM;;IAEE,yBAAoC;ETqhF5C;ESnhFM;;IAEE,2BAAwC;ETqhFhD;ESnhFM;;IAEE,4BAA0C;ETqhFlD;ESnhFM;;IAEE,0BAAsC;ETqhF9C;ESpiFM;IAAgC,2BAA4B;ETuiFlE;EStiFM;;IAEE,+BAAoC;ETwiF5C;EStiFM;;IAEE,iCAAwC;ETwiFhD;EStiFM;;IAEE,kCAA0C;ETwiFlD;EStiFM;;IAEE,gCAAsC;ETwiF9C;ESvjFM;IAAgC,0BAA4B;ET0jFlE;ESzjFM;;IAEE,8BAAoC;ET2jF5C;ESzjFM;;IAEE,gCAAwC;ET2jFhD;ESzjFM;;IAEE,iCAA0C;ET2jFlD;ESzjFM;;IAEE,+BAAsC;ET2jF9C;ES1kFM;IAAgC,wBAA4B;ET6kFlE;ES5kFM;;IAEE,4BAAoC;ET8kF5C;ES5kFM;;IAEE,8BAAwC;ET8kFhD;ES5kFM;;IAEE,+BAA0C;ET8kFlD;ES5kFM;;IAEE,6BAAsC;ET8kF9C;ES7lFM;IAAgC,0BAA4B;ETgmFlE;ES/lFM;;IAEE,8BAAoC;ETimF5C;ES/lFM;;IAEE,gCAAwC;ETimFhD;ES/lFM;;IAEE,iCAA0C;ETimFlD;ES/lFM;;IAEE,+BAAsC;ETimF9C;EShnFM;IAAgC,wBAA4B;ETmnFlE;ESlnFM;;IAEE,4BAAoC;ETonF5C;ESlnFM;;IAEE,8BAAwC;ETonFhD;ESlnFM;;IAEE,+BAA0C;ETonFlD;ESlnFM;;IAEE,6BAAsC;ETonF9C;ES5mFM;IAAwB,2BAA2B;ET+mFzD;ES9mFM;;IAEE,+BAA+B;ETgnFvC;ES9mFM;;IAEE,iCAAiC;ETgnFzC;ES9mFM;;IAEE,kCAAkC;ETgnF1C;ES9mFM;;IAEE,gCAAgC;ETgnFxC;ES/nFM;IAAwB,0BAA2B;ETkoFzD;ESjoFM;;IAEE,8BAA+B;ETmoFvC;ESjoFM;;IAEE,gCAAiC;ETmoFzC;ESjoFM;;IAEE,iCAAkC;ETmoF1C;ESjoFM;;IAEE,+BAAgC;ETmoFxC;ESlpFM;IAAwB,wBAA2B;ETqpFzD;ESppFM;;IAEE,4BAA+B;ETspFvC;ESppFM;;IAEE,8BAAiC;ETspFzC;ESppFM;;IAEE,+BAAkC;ETspF1C;ESppFM;;IAEE,6BAAgC;ETspFxC;ESrqFM;IAAwB,0BAA2B;ETwqFzD;ESvqFM;;IAEE,8BAA+B;ETyqFvC;ESvqFM;;IAEE,gCAAiC;ETyqFzC;ESvqFM;;IAEE,iCAAkC;ETyqF1C;ESvqFM;;IAEE,+BAAgC;ETyqFxC;ESxrFM;IAAwB,wBAA2B;ET2rFzD;ES1rFM;;IAEE,4BAA+B;ET4rFvC;ES1rFM;;IAEE,8BAAiC;ET4rFzC;ES1rFM;;IAEE,+BAAkC;ET4rF1C;ES1rFM;;IAEE,6BAAgC;ET4rFxC;EStrFE;IAAmB,uBAAuB;ETyrF5C;ESxrFE;;IAEE,2BAA2B;ET0rF/B;ESxrFE;;IAEE,6BAA6B;ET0rFjC;ESxrFE;;IAEE,8BAA8B;ET0rFlC;ESxrFE;;IAEE,4BAA4B;ET0rFhC;AACF;;AGpsFI;EMlDI;IAAgC,oBAA4B;ET2vFlE;ES1vFM;;IAEE,wBAAoC;ET4vF5C;ES1vFM;;IAEE,0BAAwC;ET4vFhD;ES1vFM;;IAEE,2BAA0C;ET4vFlD;ES1vFM;;IAEE,yBAAsC;ET4vF9C;ES3wFM;IAAgC,0BAA4B;ET8wFlE;ES7wFM;;IAEE,8BAAoC;ET+wF5C;ES7wFM;;IAEE,gCAAwC;ET+wFhD;ES7wFM;;IAEE,iCAA0C;ET+wFlD;ES7wFM;;IAEE,+BAAsC;ET+wF9C;ES9xFM;IAAgC,yBAA4B;ETiyFlE;EShyFM;;IAEE,6BAAoC;ETkyF5C;EShyFM;;IAEE,+BAAwC;ETkyFhD;EShyFM;;IAEE,gCAA0C;ETkyFlD;EShyFM;;IAEE,8BAAsC;ETkyF9C;ESjzFM;IAAgC,uBAA4B;ETozFlE;ESnzFM;;IAEE,2BAAoC;ETqzF5C;ESnzFM;;IAEE,6BAAwC;ETqzFhD;ESnzFM;;IAEE,8BAA0C;ETqzFlD;ESnzFM;;IAEE,4BAAsC;ETqzF9C;ESp0FM;IAAgC,yBAA4B;ETu0FlE;ESt0FM;;IAEE,6BAAoC;ETw0F5C;ESt0FM;;IAEE,+BAAwC;ETw0FhD;ESt0FM;;IAEE,gCAA0C;ETw0FlD;ESt0FM;;IAEE,8BAAsC;ETw0F9C;ESv1FM;IAAgC,uBAA4B;ET01FlE;ESz1FM;;IAEE,2BAAoC;ET21F5C;ESz1FM;;IAEE,6BAAwC;ET21FhD;ESz1FM;;IAEE,8BAA0C;ET21FlD;ESz1FM;;IAEE,4BAAsC;ET21F9C;ES12FM;IAAgC,qBAA4B;ET62FlE;ES52FM;;IAEE,yBAAoC;ET82F5C;ES52FM;;IAEE,2BAAwC;ET82FhD;ES52FM;;IAEE,4BAA0C;ET82FlD;ES52FM;;IAEE,0BAAsC;ET82F9C;ES73FM;IAAgC,2BAA4B;ETg4FlE;ES/3FM;;IAEE,+BAAoC;ETi4F5C;ES/3FM;;IAEE,iCAAwC;ETi4FhD;ES/3FM;;IAEE,kCAA0C;ETi4FlD;ES/3FM;;IAEE,gCAAsC;ETi4F9C;ESh5FM;IAAgC,0BAA4B;ETm5FlE;ESl5FM;;IAEE,8BAAoC;ETo5F5C;ESl5FM;;IAEE,gCAAwC;ETo5FhD;ESl5FM;;IAEE,iCAA0C;ETo5FlD;ESl5FM;;IAEE,+BAAsC;ETo5F9C;ESn6FM;IAAgC,wBAA4B;ETs6FlE;ESr6FM;;IAEE,4BAAoC;ETu6F5C;ESr6FM;;IAEE,8BAAwC;ETu6FhD;ESr6FM;;IAEE,+BAA0C;ETu6FlD;ESr6FM;;IAEE,6BAAsC;ETu6F9C;ESt7FM;IAAgC,0BAA4B;ETy7FlE;ESx7FM;;IAEE,8BAAoC;ET07F5C;ESx7FM;;IAEE,gCAAwC;ET07FhD;ESx7FM;;IAEE,iCAA0C;ET07FlD;ESx7FM;;IAEE,+BAAsC;ET07F9C;ESz8FM;IAAgC,wBAA4B;ET48FlE;ES38FM;;IAEE,4BAAoC;ET68F5C;ES38FM;;IAEE,8BAAwC;ET68FhD;ES38FM;;IAEE,+BAA0C;ET68FlD;ES38FM;;IAEE,6BAAsC;ET68F9C;ESr8FM;IAAwB,2BAA2B;ETw8FzD;ESv8FM;;IAEE,+BAA+B;ETy8FvC;ESv8FM;;IAEE,iCAAiC;ETy8FzC;ESv8FM;;IAEE,kCAAkC;ETy8F1C;ESv8FM;;IAEE,gCAAgC;ETy8FxC;ESx9FM;IAAwB,0BAA2B;ET29FzD;ES19FM;;IAEE,8BAA+B;ET49FvC;ES19FM;;IAEE,gCAAiC;ET49FzC;ES19FM;;IAEE,iCAAkC;ET49F1C;ES19FM;;IAEE,+BAAgC;ET49FxC;ES3+FM;IAAwB,wBAA2B;ET8+FzD;ES7+FM;;IAEE,4BAA+B;ET++FvC;ES7+FM;;IAEE,8BAAiC;ET++FzC;ES7+FM;;IAEE,+BAAkC;ET++F1C;ES7+FM;;IAEE,6BAAgC;ET++FxC;ES9/FM;IAAwB,0BAA2B;ETigGzD;EShgGM;;IAEE,8BAA+B;ETkgGvC;EShgGM;;IAEE,gCAAiC;ETkgGzC;EShgGM;;IAEE,iCAAkC;ETkgG1C;EShgGM;;IAEE,+BAAgC;ETkgGxC;ESjhGM;IAAwB,wBAA2B;ETohGzD;ESnhGM;;IAEE,4BAA+B;ETqhGvC;ESnhGM;;IAEE,8BAAiC;ETqhGzC;ESnhGM;;IAEE,+BAAkC;ETqhG1C;ESnhGM;;IAEE,6BAAgC;ETqhGxC;ES/gGE;IAAmB,uBAAuB;ETkhG5C;ESjhGE;;IAEE,2BAA2B;ETmhG/B;ESjhGE;;IAEE,6BAA6B;ETmhGjC;ESjhGE;;IAEE,8BAA8B;ETmhGlC;ESjhGE;;IAEE,4BAA4B;ETmhGhC;AACF;;AG7hGI;EMlDI;IAAgC,oBAA4B;ETolGlE;ESnlGM;;IAEE,wBAAoC;ETqlG5C;ESnlGM;;IAEE,0BAAwC;ETqlGhD;ESnlGM;;IAEE,2BAA0C;ETqlGlD;ESnlGM;;IAEE,yBAAsC;ETqlG9C;ESpmGM;IAAgC,0BAA4B;ETumGlE;EStmGM;;IAEE,8BAAoC;ETwmG5C;EStmGM;;IAEE,gCAAwC;ETwmGhD;EStmGM;;IAEE,iCAA0C;ETwmGlD;EStmGM;;IAEE,+BAAsC;ETwmG9C;ESvnGM;IAAgC,yBAA4B;ET0nGlE;ESznGM;;IAEE,6BAAoC;ET2nG5C;ESznGM;;IAEE,+BAAwC;ET2nGhD;ESznGM;;IAEE,gCAA0C;ET2nGlD;ESznGM;;IAEE,8BAAsC;ET2nG9C;ES1oGM;IAAgC,uBAA4B;ET6oGlE;ES5oGM;;IAEE,2BAAoC;ET8oG5C;ES5oGM;;IAEE,6BAAwC;ET8oGhD;ES5oGM;;IAEE,8BAA0C;ET8oGlD;ES5oGM;;IAEE,4BAAsC;ET8oG9C;ES7pGM;IAAgC,yBAA4B;ETgqGlE;ES/pGM;;IAEE,6BAAoC;ETiqG5C;ES/pGM;;IAEE,+BAAwC;ETiqGhD;ES/pGM;;IAEE,gCAA0C;ETiqGlD;ES/pGM;;IAEE,8BAAsC;ETiqG9C;EShrGM;IAAgC,uBAA4B;ETmrGlE;ESlrGM;;IAEE,2BAAoC;ETorG5C;ESlrGM;;IAEE,6BAAwC;ETorGhD;ESlrGM;;IAEE,8BAA0C;ETorGlD;ESlrGM;;IAEE,4BAAsC;ETorG9C;ESnsGM;IAAgC,qBAA4B;ETssGlE;ESrsGM;;IAEE,yBAAoC;ETusG5C;ESrsGM;;IAEE,2BAAwC;ETusGhD;ESrsGM;;IAEE,4BAA0C;ETusGlD;ESrsGM;;IAEE,0BAAsC;ETusG9C;ESttGM;IAAgC,2BAA4B;ETytGlE;ESxtGM;;IAEE,+BAAoC;ET0tG5C;ESxtGM;;IAEE,iCAAwC;ET0tGhD;ESxtGM;;IAEE,kCAA0C;ET0tGlD;ESxtGM;;IAEE,gCAAsC;ET0tG9C;ESzuGM;IAAgC,0BAA4B;ET4uGlE;ES3uGM;;IAEE,8BAAoC;ET6uG5C;ES3uGM;;IAEE,gCAAwC;ET6uGhD;ES3uGM;;IAEE,iCAA0C;ET6uGlD;ES3uGM;;IAEE,+BAAsC;ET6uG9C;ES5vGM;IAAgC,wBAA4B;ET+vGlE;ES9vGM;;IAEE,4BAAoC;ETgwG5C;ES9vGM;;IAEE,8BAAwC;ETgwGhD;ES9vGM;;IAEE,+BAA0C;ETgwGlD;ES9vGM;;IAEE,6BAAsC;ETgwG9C;ES/wGM;IAAgC,0BAA4B;ETkxGlE;ESjxGM;;IAEE,8BAAoC;ETmxG5C;ESjxGM;;IAEE,gCAAwC;ETmxGhD;ESjxGM;;IAEE,iCAA0C;ETmxGlD;ESjxGM;;IAEE,+BAAsC;ETmxG9C;ESlyGM;IAAgC,wBAA4B;ETqyGlE;ESpyGM;;IAEE,4BAAoC;ETsyG5C;ESpyGM;;IAEE,8BAAwC;ETsyGhD;ESpyGM;;IAEE,+BAA0C;ETsyGlD;ESpyGM;;IAEE,6BAAsC;ETsyG9C;ES9xGM;IAAwB,2BAA2B;ETiyGzD;EShyGM;;IAEE,+BAA+B;ETkyGvC;EShyGM;;IAEE,iCAAiC;ETkyGzC;EShyGM;;IAEE,kCAAkC;ETkyG1C;EShyGM;;IAEE,gCAAgC;ETkyGxC;ESjzGM;IAAwB,0BAA2B;ETozGzD;ESnzGM;;IAEE,8BAA+B;ETqzGvC;ESnzGM;;IAEE,gCAAiC;ETqzGzC;ESnzGM;;IAEE,iCAAkC;ETqzG1C;ESnzGM;;IAEE,+BAAgC;ETqzGxC;ESp0GM;IAAwB,wBAA2B;ETu0GzD;ESt0GM;;IAEE,4BAA+B;ETw0GvC;ESt0GM;;IAEE,8BAAiC;ETw0GzC;ESt0GM;;IAEE,+BAAkC;ETw0G1C;ESt0GM;;IAEE,6BAAgC;ETw0GxC;ESv1GM;IAAwB,0BAA2B;ET01GzD;ESz1GM;;IAEE,8BAA+B;ET21GvC;ESz1GM;;IAEE,gCAAiC;ET21GzC;ESz1GM;;IAEE,iCAAkC;ET21G1C;ESz1GM;;IAEE,+BAAgC;ET21GxC;ES12GM;IAAwB,wBAA2B;ET62GzD;ES52GM;;IAEE,4BAA+B;ET82GvC;ES52GM;;IAEE,8BAAiC;ET82GzC;ES52GM;;IAEE,+BAAkC;ET82G1C;ES52GM;;IAEE,6BAAgC;ET82GxC;ESx2GE;IAAmB,uBAAuB;ET22G5C;ES12GE;;IAEE,2BAA2B;ET42G/B;ES12GE;;IAEE,6BAA6B;ET42GjC;ES12GE;;IAEE,8BAA8B;ET42GlC;ES12GE;;IAEE,4BAA4B;ET42GhC;AACF","file":"bootstrap-grid.css","sourcesContent":["/*!\n * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/deprecate\";\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter * .5;\n margin-left: -$gutter * .5;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage(divide($size, $columns));\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage(divide($size, $columns));\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 divide(100%, $count);\n max-width: divide(100%, $count);\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$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;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size * .5 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer * .5 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width * .5 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$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`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// Bootstrap functions\n//\n// Utility mixins and functions for evaluating source code across our variables, maps, and mixins.\n\n// Ascending\n// Used to evaluate Sass maps like our grid breakpoints.\n@mixin _assert-ascending($map, $map-name) {\n $prev-key: null;\n $prev-num: null;\n @each $key, $num in $map {\n @if $prev-num == null or unit($num) == \"%\" or unit($prev-num) == \"%\" {\n // Do nothing\n } @else if not comparable($prev-num, $num) {\n @warn \"Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n } @else if $prev-num >= $num {\n @warn \"Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !\";\n }\n $prev-key: $key;\n $prev-num: $num;\n }\n}\n\n// Starts at zero\n// Used to ensure the min-width of the lowest breakpoint starts at 0.\n@mixin _assert-starts-at-zero($map, $map-name: \"$grid-breakpoints\") {\n @if length($map) > 0 {\n $values: map-values($map);\n $first-value: nth($values, 1);\n @if $first-value != 0 {\n @warn \"First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.\";\n }\n }\n}\n\n// Replace `$search` with `$replace` in `$string`\n// Used on our SVG icon backgrounds for custom forms.\n//\n// @author Hugo Giraudel\n// @param {String} $string - Initial string\n// @param {String} $search - Substring to replace\n// @param {String} $replace ('') - New value\n// @return {String} - Updated string\n@function str-replace($string, $search, $replace: \"\") {\n $index: str-index($string, $search);\n\n @if $index {\n @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\n }\n\n @return $string;\n}\n\n// See https://codepen.io/kevinweber/pen/dXWoRw\n//\n// Requires the use of quotes around data URIs.\n\n@function escape-svg($string) {\n @if str-index($string, \"data:image/svg+xml\") {\n @each $char, $encoded in $escaped-characters {\n // Do not escape the url brackets\n @if str-index($string, \"url(\") == 1 {\n $string: url(\"#{str-replace(str-slice($string, 6, -3), $char, $encoded)}\");\n } @else {\n $string: str-replace($string, $char, $encoded);\n }\n }\n }\n\n @return $string;\n}\n\n// Color contrast\n@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {\n $r: red($color);\n $g: green($color);\n $b: blue($color);\n\n $yiq: (($r * 299) + ($g * 587) + ($b * 114)) * .001;\n\n @if ($yiq >= $yiq-contrasted-threshold) {\n @return $dark;\n } @else {\n @return $light;\n }\n}\n\n// Retrieve color Sass maps\n@function color($key: \"blue\") {\n @return map-get($colors, $key);\n}\n\n@function theme-color($key: \"primary\") {\n @return map-get($theme-colors, $key);\n}\n\n@function gray($key: \"100\") {\n @return map-get($grays, $key);\n}\n\n// Request a theme color level\n@function theme-color-level($color-name: \"primary\", $level: 0) {\n $color: theme-color($color-name);\n $color-base: if($level > 0, $black, $white);\n $level: abs($level);\n\n @return mix($color-base, $color, $level * $theme-color-interval);\n}\n\n// Return valid calc\n@function add($value1, $value2, $return-calc: true) {\n @if $value1 == null {\n @return $value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 + $value2;\n }\n\n @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(\" + \") + $value2);\n}\n\n@function subtract($value1, $value2, $return-calc: true) {\n @if $value1 == null and $value2 == null {\n @return null;\n }\n\n @if $value1 == null {\n @return -$value2;\n }\n\n @if $value2 == null {\n @return $value1;\n }\n\n @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) {\n @return $value1 - $value2;\n }\n\n @if type-of($value2) != number {\n $value2: unquote(\"(\") + $value2 + unquote(\")\");\n }\n\n @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(\" - \") + $value2);\n}\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if \"#{$size}\" != \"0\" {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/public/css/bootstrap-grid.min.css b/public/css/bootstrap-grid.min.css new file mode 100755 index 0000000..48af2a2 --- /dev/null +++ b/public/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v4.6.2 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */html{box-sizing:border-box;-ms-overflow-style:scrollbar}*,::after,::before{box-sizing:inherit}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.flex-row{-ms-flex-direction:row!important;flex-direction:row]ˆÔþU]ˆÔþU€�ÔþU°�ÔþUh]ˆÔþU ]ˆÔþU@ ]ˆÔþUverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:]ˆÔþU]ˆÔþU€�ÔþU°�ÔþUh]ˆÔþU ]ˆÔþU@ ]ˆÔþU.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/public/css/bootstrap-grid.min.css.map b/public/css/bootstrap-grid.min.css.map new file mode 100755 index 0000000..136605e --- /dev/null +++ b/public/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-grid.scss","dist/css/bootstrap-grid.css","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/utilities/_display.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_spacing.scss"],"names":[],"mappings":"AAAA;;;;;AAOA,KACE,WAAA,WACA,mBAAA,UAGF,ECCA,QADA,SDGE,WAAA,QETA,WDYF,iBAGA,cADA,cADA,cAGA,cEjBE,MAAA,KACA,cAAA,KACA,aAAA,KACA,aAAA,KACA,YAAA,KCmDE,yBFzCE,WAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cACE,UAAA,OEwCJ,yBFzCE,WAAA,cAAA,cAAA,cACE,UAAA,OEwCJ,0BFzCE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QA4BN,KCnCA,QAAA,YAAA,QAAA,KACA,cAAA,KAAA,UAAA,KACA,aAAA,MACA,YAAA,MDsCA,YACE,aAAA,EACA,YAAA,EAFF,iBDeF,0BCTM,cAAA,EACA,aAAA,EGtDJ,KAAA,OAAA,QAAA,QAAA,QAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OAAA,OJoEF,UAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aAFkJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACnG,aAEqJ,QAAvI,UAAmG,WAAY,WAAY,WAAhH,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UAAW,UACtG,aIvEI,SAAA,SACA,MAAA,KACA,cAAA,KACA,aAAA,KAsBE,KACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,cFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,cFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,UFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,OFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,OFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,QFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,aAAwB,eAAA,GAAA,MAAA,GAExB,YAAuB,eAAA,GAAA,MAAA,GAGrB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,SAAwB,eAAA,EAAA,MAAA,EAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAAxB,UAAwB,eAAA,GAAA,MAAA,GAOpB,UFhBV,YAAA,UEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,WEgBU,UFhBV,YAAA,IEgBU,WFhBV,YAAA,WEgBU,WFhBV,YAAA,WCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,yBC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YCKE,0BC3BE,QACE,wBAAA,EAAA,WAAA,EACA,kBAAA,EAAA,UAAA,EACA,UAAA,KAKE,iBFwBN,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,UAAA,KEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IACA,UAAA,IEzBM,iBFwBN,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WACA,UAAA,WEnBE,aFCJ,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,UAAA,KEGQ,UFbR,SAAA,EAAA,EAAA,UAAA,KAAA,EAAA,EAAA,UAIA,UAAA,UESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,UFbR,SAAA,EAAA,EAAA,IAAA,KAAA,EAAA,EAAA,IAIA,UAAA,IESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,WAAA,KAAA,EAAA,EAAA,WAIA,UAAA,WESQ,WFbR,SAAA,EAAA,EAAA,KAAA,KAAA,EAAA,EAAA,KAIA,UAAA,KEeI,gBAAwB,eAAA,GAAA,MAAA,GAExB,eAAuB,eAAA,GAAA,MAAA,GAGrB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,YAAwB,eAAA,EAAA,MAAA,EAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAAxB,aAAwB,eAAA,GAAA,MAAA,GAOpB,aFhBV,YAAA,EEgBU,aFhBV,YAAA,UEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,WEgBU,aFhBV,YAAA,IEgBU,cFhBV,YAAA,WEgBU,cFhBV,YAAA,YG5CI,QAAwB,QAAA,eAAxB,UAAwB,QAAA,iBAAxB,gBAAwB,QAAA,uBAAxB,SAAwB,QAAA,gBAAxB,SAAwB,QAAA,gBAAxB,aAAwB,QAAA,oBAAxB,cAAwB,QAAA,qBAAxB,QAAwB,QAAA,sBAAA,QAAA,eAAxB,eAAwB,QAAA,6BAAA,QAAA,sBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,yBEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBFiD1B,0BEjDE,WAAwB,QAAA,eAAxB,aAAwB,QAAA,iBAAxB,mBAAwB,QAAA,uBAAxB,YAAwB,QAAA,gBAAxB,YAAwB,QAAA,gBAAxB,gBAAwB,QAAA,oBAAxB,iBAAwB,QAAA,qBAAxB,WAAwB,QAAA,sBAAA,QAAA,eAAxB,kBAAwB,QAAA,6BAAA,QAAA,uBAU9B,aAEI,cAAqB,QAAA,eAArB,gBAAqB,QAAA,iBAArB,sBAAqB,QAAA,uBAArB,eAAqB,QAAA,gBAArB,eAAqB,QAAA,gBAArB,mBAAqB,QAAA,oBAArB,oBAAqB,QAAA,qBAArB,cAAqB,QAAA,sBAAA,QAAA,eAArB,qBAAqB,QAAA,6BAAA,QAAA,uBCbrB,UAAgC,mBAAA,cAAA,eAAA,cAChC,aAAgC,mBAAA,iBAAA,eAAA,iBAChC,kBAAgC,mBAAA,sBAAA,eAAA,sBAChC,qBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,WAA8B,cAAA,eAAA,UAAA,eAC9B,aAA8B,cAAA,iBAAA,UAAA,iBAC9B,mBAA8B,cAAA,uBAAA,UAAA,uBAC9B,WAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,aAA8B,kBAAA,YAAA,UAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAC9B,eAA8B,kBAAA,YAAA,YAAA,YAE9B,uBAAoC,cAAA,gBAAA,gBAAA,qBACpC,qBAAoC,cAAA,cAAA,gBAAA,mBACpC,wBAAoC,cAAA,iBAAA,gBAAA,iBACpC,yBAAoC,cAAA,kBAAA,gBAAA,wBACpC,wBAAoC,cAAA,qBAAA,gBAAA,uBAEpC,mBAAiC,eAAA,gBAAA,YAAA,qBACjC,iBAAiC,eAAA,cAAA,YAAA,mBACjC,oBAAiC,eAAA,iBAAA,YAAA,iBACjC,sBAAiC,eAAA,mBAAA,YAAA,mBACjC,qBAAiC,eAAA,kBAAA,YAAA,kBAEjC,qBAAkC,mBAAA,gBAAA,cAAA,qBAClC,mBAAkC,mBAAA,cAAA,cAAA,mBAClC,sBAAkC,mBAAA,iBAAA,cAAA,iBAClC,uBAAkC,mBAAA,kBAAA,cAAA,wBAClC,sBAAkC,mBAAA,qBAAA,cAAA,uBAClC,uBAAkC,mBAAA,kBAAA,cAAA,kBAElC,iBAAgC,oBAAA,eAAA,WAAA,eAChC,kBAAgC,oBAAA,gBAAA,WAAA,qBAChC,gBAAgC,oBAAA,cAAA,WAAA,mBAChC,mBAAgC,oBAAA,iBAAA,WAAA,iBAChC,qBAAgC,oBAAA,mBAAA,WAAA,mBAChC,oBAAgC,oBAAA,kBAAA,WAAA,kBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,yBGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBHYhC,0BGlDA,aAAgC,mBAAA,cAAA,eAAA,cAChC,gBAAgC,mBAAA,iBAAA,eAAA,iBAChC,qBAAgC,mBAAA,sBAAA,eAAA,sBAChC,wBAAgC,mBAAA,yBAAA,eAAA,yBAEhC,cAA8B,cAAA,eAAA,UAAA,eAC9B,gBAA8B,cAAA,iBAAA,UAAA,iBAC9B,sBAA8B,cAAA,uBAAA,UAAA,uBAC9B,cAA8B,SAAA,EAAA,EAAA,eAAA,KAAA,EAAA,EAAA,eAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,gBAA8B,kBAAA,YAAA,UAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAC9B,kBAA8B,kBAAA,YAAA,YAAA,YAE9B,0BAAoC,cAAA,gBAAA,gBAAA,qBACpC,wBAAoC,cAAA,cAAA,gBAAA,mBACpC,2BAAoC,cAAA,iBAAA,gBAAA,iBACpC,4BAAoC,cAAA,kBAAA,gBAAA,wBACpC,2BAAoC,cAAA,qBAAA,gBAAA,uBAEpC,sBAAiC,eAAA,gBAAA,YAAA,qBACjC,oBAAiC,eAAA,cAAA,YAAA,mBACjC,uBAAiC,eAAA,iBAAA,YAAA,iBACjC,yBAAiC,eAAA,mBAAA,YAAA,mBACjC,wBAAiC,eAAA,kBAAA,YAAA,kBAEjC,wBAAkC,mBAAA,gBAAA,cAAA,qBAClC,sBAAkC,mBAAA,cAAA,cAAA,mBAClC,yBAAkC,mBAAA,iBAAA,cAAA,iBAClC,0BAAkC,mBAAA,kBAAA,cAAA,wBAClC,yBAAkC,mBAAA,qBAAA,cAAA,uBAClC,0BAAkC,mBAAA,kBAAA,cAAA,kBAElC,oBAAgC,oBAAA,eAAA,WAAA,eAChC,qBAAgC,oBAAA,gBAAA,WAAA,qBAChC,mBAAgC,oBAAA,cAAA,WAAA,mBAChC,sBAAgC,oBAAA,iBAAA,WAAA,iBAChC,wBAAgC,oBAAA,mBAAA,WAAA,mBAChC,uBAAgC,oBAAA,kBAAA,WAAA,mBCtC5B,KAAgC,OAAA,YAChC,MPsgER,MOpgEU,WAAA,YAEF,MPugER,MOrgEU,aAAA,YAEF,MPwgER,MOtgEU,cAAA,YAEF,MPygER,MOvgEU,YAAA,YAfF,KAAgC,OAAA,iBAChC,MP8hER,MO5hEU,WAAA,iBAEF,MP+hER,MO7hEU,aAAA,iBAEF,MPgiER,MO9hEU,cAAA,iBAEF,MPiiER,MO/hEU,YAAA,iBAfF,KAAgC,OAAA,gBAChC,MPsjER,MOpjEU,WAAA,gBAEF,MPujER,MOrjEU,aAAA,gBAEF,MPwjER,MOtjEU,cAAA,gBAEF,MPyjER,MOvjEU,YAAA,gBAfF,KAAgC,OAAA,eAChC,MP8kER,MO5kEU,WAAA,eAEF,MP+kER,MO7kEU,aAAA,eAEF,MPglER,MO9kEU,cAAA,eAEF,MPilER,MO/kEU,YAAA,eAfF,KAAgC,OAAA,iBAChC,MPsmER,MOpmEU,WAAA,iBAEF,MPumER,MOrmEU,aAAA,iBAEF,MPwmER,MOtmEU,cAAA,iBAEF,MPymER,MOvmEU,YAAA,iBAfF,KAAgC,OAAA,eAChC,MP8nER,MO5nEU,WAAA,eAEF,MP+nER,MO7nEU,aAAA,eAEF,MPgoER,MO9nEU,cAAA,eAEF,MPioER,MO/nEU,YAAA,eAfF,KAAgC,QAAA,YAChC,MPspER,MOppEU,YAAA,YAEF,MPupER,MOrpEU,cAAA,YAEF,MPwpER,MOtpEU,eAAA,YAEF,MPypER,MOvpEU,aAAA,YAfF,KAAgC,QAAA,iBAChC,MP8qER,MO5qEU,YAAA,iBAEF,MP+qER,MO7qEU,cAAA,iBAEF,MPgrER,MO9qEU,eAAA,iBAEF,MPirER,MO/qEU,aAAA,iBAfF,KAAgC,QAAA,gBAChC,MPssER,MOpsEU,YAAA,gBAEF,MPusER,MOrsEU,cAAA,gBAEF,MPwsER,MOtsEU,eAAA,gBAEF,MPysER,MOvsEU,aAAA,gBAfF,KAAgC,QAAA,eAChC,MP8tER,MO5tEU,YAAA,eAEF,MP+tER,MO7tEU,cAAA,eAEF,MPguER,MO9tEU,eAAA,eAEF,MPiuER,MO/tEU,aAAA,eAfF,KAAgC,QAAA,iBAChC,MPsvER,MOpvEU,YAAA,iBAEF,MPuvER,MOrvEU,cAAA,iBAEF,MPwvER,MOtvEU,eAAA,iBAEF,MPyvER,MOvvEU,aAAA,iBAfF,KAAgC,QAAA,eAChC,MP8wER,MO5wEU,YAAA,eAEF,MP+wER,MO7wEU,cAAA,eAEF,MPgxER,MO9wEU,eAAA,eAEF,MPixER,MO/wEU,aAAA,eAQF,MAAwB,OAAA,kBACxB,OP+wER,OO7wEU,WAAA,kBAEF,OPgxER,OO9wEU,aAAA,kBAEF,OPixER,OO/wEU,cAAA,kBAEF,OPkxER,OOhxEU,YAAA,kBAfF,MAAwB,OAAA,iBACxB,OPuyER,OOryEU,WAAA,iBAEF,OPwyER,OOtyEU,aAAA,iBAEF,OPyyER,OOvyEU,cAAA,iBAEF,OP0yER,OOxyEU,YAAA,iBAfF,MAAwB,OAAA,gBACxB,OP+zER,OO7zEU,WAAA,gBAEF,OPg0ER,OO9zEU,aAAA,gBAEF,OPi0ER,OO/zEU,cAAA,gBAEF,OPk0ER,OOh0EU,YAAA,gBAfF,MAAwB,OAAA,kBACxB,OPu1ER,OOr1EU,WAAA,kBAEF,OPw1ER,OOt1EU,aAAA,kBAEF,OPy1ER,OOv1EU,cAAA,kBAEF,OP01ER,OOx1EU,YAAA,kBAfF,MAAwB,OAAA,gBACxB,OP+2ER,OO72EU,WAAA,gBAEF,OPg3ER,OO92EU,aAAA,gBAEF,OPi3ER,OO/2EU,cAAA,gBAEF,OPk3ER,OOh3EU,YAAA,gBAMN,QAAmB,OAAA,eACnB,SPk3EJ,SOh3EM,WAAA,eAEF,SPm3EJ,SOj3EM,aAAA,eAEF,SPo3EJ,SOl3EM,cAAA,eAEF,SPq3EJ,SOn3EM,YAAA,eJTF,yBIlDI,QAAgC,OAAA,YAChC,SPs7EN,SOp7EQ,WAAA,YAEF,SPs7EN,SOp7EQ,aAAA,YAEF,SPs7EN,SOp7EQ,cAAA,YAEF,SPs7EN,SOp7EQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPy8EN,SOv8EQ,WAAA,iBAEF,SPy8EN,SOv8EQ,aAAA,iBAEF,SPy8EN,SOv8EQ,cAAA,iBAEF,SPy8EN,SOv8EQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SP49EN,SO19EQ,WAAA,gBAEF,SP49EN,SO19EQ,aAAA,gBAEF,SP49EN,SO19EQ,cAAA,gBAEF,SP49EN,SO19EQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SP++EN,SO7+EQ,WAAA,eAEF,SP++EN,SO7+EQ,aAAA,eAEF,SP++EN,SO7+EQ,cAAA,eAEF,SP++EN,SO7+EQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SPkgFN,SOhgFQ,WAAA,iBAEF,SPkgFN,SOhgFQ,aAAA,iBAEF,SPkgFN,SOhgFQ,cAAA,iBAEF,SPkgFN,SOhgFQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPqhFN,SOnhFQ,WAAA,eAEF,SPqhFN,SOnhFQ,aAAA,eAEF,SPqhFN,SOnhFQ,cAAA,eAEF,SPqhFN,SOnhFQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPwiFN,SOtiFQ,YAAA,YAEF,SPwiFN,SOtiFQ,cAAA,YAEF,SPwiFN,SOtiFQ,eAAA,YAEF,SPwiFN,SOtiFQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SP2jFN,SOzjFQ,YAAA,iBAEF,SP2jFN,SOzjFQ,cAAA,iBAEF,SP2jFN,SOzjFQ,eAAA,iBAEF,SP2jFN,SOzjFQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SP8kFN,SO5kFQ,YAAA,gBAEF,SP8kFN,SO5kFQ,cAAA,gBAEF,SP8kFN,SO5kFQ,eAAA,gBAEF,SP8kFN,SO5kFQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SPimFN,SO/lFQ,YAAA,eAEF,SPimFN,SO/lFQ,cAAA,eAEF,SPimFN,SO/lFQ,eAAA,eAEF,SPimFN,SO/lFQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SPonFN,SOlnFQ,YAAA,iBAEF,SPonFN,SOlnFQ,cAAA,iBAEF,SPonFN,SOlnFQ,eAAA,iBAEF,SPonFN,SOlnFQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPuoFN,SOroFQ,YAAA,eAEF,SPuoFN,SOroFQ,cAAA,eAEF,SPuoFN,SOroFQ,eAAA,eAEF,SPuoFN,SOroFQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UPmoFN,UOjoFQ,WAAA,kBAEF,UPmoFN,UOjoFQ,aAAA,kBAEF,UPmoFN,UOjoFQ,cAAA,kBAEF,UPmoFN,UOjoFQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPspFN,UOppFQ,WAAA,iBAEF,UPspFN,UOppFQ,aAAA,iBAEF,UPspFN,UOppFQ,cAAA,iBAEF,UPspFN,UOppFQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPyqFN,UOvqFQ,WAAA,gBAEF,UPyqFN,UOvqFQ,aAAA,gBAEF,UPyqFN,UOvqFQ,cAAA,gBAEF,UPyqFN,UOvqFQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UP4rFN,UO1rFQ,WAAA,kBAEF,UP4rFN,UO1rFQ,aAAA,kBAEF,UP4rFN,UO1rFQ,cAAA,kBAEF,UP4rFN,UO1rFQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UP+sFN,UO7sFQ,WAAA,gBAEF,UP+sFN,UO7sFQ,aAAA,gBAEF,UP+sFN,UO7sFQ,cAAA,gBAEF,UP+sFN,UO7sFQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YP6sFF,YO3sFI,WAAA,eAEF,YP6sFF,YO3sFI,aAAA,eAEF,YP6sFF,YO3sFI,cAAA,eAEF,YP6sFF,YO3sFI,YAAA,gBJTF,yBIlDI,QAAgC,OAAA,YAChC,SP+wFN,SO7wFQ,WAAA,YAEF,SP+wFN,SO7wFQ,aAAA,YAEF,SP+wFN,SO7wFQ,cAAA,YAEF,SP+wFN,SO7wFQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPkyFN,SOhyFQ,WAAA,iBAEF,SPkyFN,SOhyFQ,aAAA,iBAEF,SPkyFN,SOhyFQ,cAAA,iBAEF,SPkyFN,SOhyFQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SPqzFN,SOnzFQ,WAAA,gBAEF,SPqzFN,SOnzFQ,aAAA,gBAEF,SPqzFN,SOnzFQ,cAAA,gBAEF,SPqzFN,SOnzFQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SPw0FN,SOt0FQ,WAAA,eAEF,SPw0FN,SOt0FQ,aAAA,eAEF,SPw0FN,SOt0FQ,cAAA,eAEF,SPw0FN,SOt0FQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SP21FN,SOz1FQ,WAAA,iBAEF,SP21FN,SOz1FQ,aAAA,iBAEF,SP21FN,SOz1FQ,cAAA,iBAEF,SP21FN,SOz1FQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SP82FN,SO52FQ,WAAA,eAEF,SP82FN,SO52FQ,aAAA,eAEF,SP82FN,SO52FQ,cAAA,eAEF,SP82FN,SO52FQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPi4FN,SO/3FQ,YAAA,YAEF,SPi4FN,SO/3FQ,cAAA,YAEF,SPi4FN,SO/3FQ,eAAA,YAEF,SPi4FN,SO/3FQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SPo5FN,SOl5FQ,YAAA,iBAEF,SPo5FN,SOl5FQ,cAAA,iBAEF,SPo5FN,SOl5FQ,eAAA,iBAEF,SPo5FN,SOl5FQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPu6FN,SOr6FQ,YAAA,gBAEF,SPu6FN,SOr6FQ,cAAA,gBAEF,SPu6FN,SOr6FQ,eAAA,gBAEF,SPu6FN,SOr6FQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SP07FN,SOx7FQ,YAAA,eAEF,SP07FN,SOx7FQ,cAAA,eAEF,SP07FN,SOx7FQ,eAAA,eAEF,SP07FN,SOx7FQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SP68FN,SO38FQ,YAAA,iBAEF,SP68FN,SO38FQ,cAAA,iBAEF,SP68FN,SO38FQ,eAAA,iBAEF,SP68FN,SO38FQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPg+FN,SO99FQ,YAAA,eAEF,SPg+FN,SO99FQ,cAAA,eAEF,SPg+FN,SO99FQ,eAAA,eAEF,SPg+FN,SO99FQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UP49FN,UO19FQ,WAAA,kBAEF,UP49FN,UO19FQ,aAAA,kBAEF,UP49FN,UO19FQ,cAAA,kBAEF,UP49FN,UO19FQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UP++FN,UO7+FQ,WAAA,iBAEF,UP++FN,UO7+FQ,aAAA,iBAEF,UP++FN,UO7+FQ,cAAA,iBAEF,UP++FN,UO7+FQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPkgGN,UOhgGQ,WAAA,gBAEF,UPkgGN,UOhgGQ,aAAA,gBAEF,UPkgGN,UOhgGQ,cAAA,gBAEF,UPkgGN,UOhgGQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UPqhGN,UOnhGQ,WAAA,kBAEF,UPqhGN,UOnhGQ,aAAA,kBAEF,UPqhGN,UOnhGQ,cAAA,kBAEF,UPqhGN,UOnhGQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UPwiGN,UOtiGQ,WAAA,gBAEF,UPwiGN,UOtiGQ,aAAA,gBAEF,UPwiGN,UOtiGQ,cAAA,gBAEF,UPwiGN,UOtiGQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YPsiGF,YOpiGI,WAAA,eAEF,YPsiGF,YOpiGI,aAAA,eAEF,YPsiGF,YOpiGI,cAAA,eAEF,YPsiGF,YOpiGI,YAAA,gBJTF,yBIlDI,QAAgC,OAAA,YAChC,SPwmGN,SOtmGQ,WAAA,YAEF,SPwmGN,SOtmGQ,aAAA,YAEF,SPwmGN,SOtmGQ,cAAA,YAEF,SPwmGN,SOtmGQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SP2nGN,SOznGQ,WAAA,iBAEF,SP2nGN,SOznGQ,aAAA,iBAEF,SP2nGN,SOznGQ,cAAA,iBAEF,SP2nGN,SOznGQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SP8oGN,SO5oGQ,WAAA,gBAEF,SP8oGN,SO5oGQ,aAAA,gBAEF,SP8oGN,SO5oGQ,cAAA,gBAEF,SP8oGN,SO5oGQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SPiqGN,SO/pGQ,WAAA,eAEF,SPiqGN,SO/pGQ,aAAA,eAEF,SPiqGN,SO/pGQ,cAAA,eAEF,SPiqGN,SO/pGQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SPorGN,SOlrGQ,WAAA,iBAEF,SPorGN,SOlrGQ,aAAA,iBAEF,SPorGN,SOlrGQ,cAAA,iBAEF,SPorGN,SOlrGQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPusGN,SOrsGQ,WAAA,eAEF,SPusGN,SOrsGQ,aAAA,eAEF,SPusGN,SOrsGQ,cAAA,eAEF,SPusGN,SOrsGQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SP0tGN,SOxtGQ,YAAA,YAEF,SP0tGN,SOxtGQ,cAAA,YAEF,SP0tGN,SOxtGQ,eAAA,YAEF,SP0tGN,SOxtGQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SP6uGN,SO3uGQ,YAAA,iBAEF,SP6uGN,SO3uGQ,cAAA,iBAEF,SP6uGN,SO3uGQ,eAAA,iBAEF,SP6uGN,SO3uGQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPgwGN,SO9vGQ,YAAA,gBAEF,SPgwGN,SO9vGQ,cAAA,gBAEF,SPgwGN,SO9vGQ,eAAA,gBAEF,SPgwGN,SO9vGQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SPmxGN,SOjxGQ,YAAA,eAEF,SPmxGN,SOjxGQ,cAAA,eAEF,SPmxGN,SOjxGQ,eAAA,eAEF,SPmxGN,SOjxGQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SPsyGN,SOpyGQ,YAAA,iBAEF,SPsyGN,SOpyGQ,cAAA,iBAEF,SPsyGN,SOpyGQ,eAAA,iBAEF,SPsyGN,SOpyGQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPyzGN,SOvzGQ,YAAA,eAEF,SPyzGN,SOvzGQ,cAAA,eAEF,SPyzGN,SOvzGQ,eAAA,eAEF,SPyzGN,SOvzGQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UPqzGN,UOnzGQ,WAAA,kBAEF,UPqzGN,UOnzGQ,aAAA,kBAEF,UPqzGN,UOnzGQ,cAAA,kBAEF,UPqzGN,UOnzGQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPw0GN,UOt0GQ,WAAA,iBAEF,UPw0GN,UOt0GQ,aAAA,iBAEF,UPw0GN,UOt0GQ,cAAA,iBAEF,UPw0GN,UOt0GQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UP21GN,UOz1GQ,WAAA,gBAEF,UP21GN,UOz1GQ,aAAA,gBAEF,UP21GN,UOz1GQ,cAAA,gBAEF,UP21GN,UOz1GQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UP82GN,UO52GQ,WAAA,kBAEF,UP82GN,UO52GQ,aAAA,kBAEF,UP82GN,UO52GQ,cAAA,kBAEF,UP82GN,UO52GQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UPi4GN,UO/3GQ,WAAA,gBAEF,UPi4GN,UO/3GQ,aAAA,gBAEF,UPi4GN,UO/3GQ,cAAA,gBAEF,UPi4GN,UO/3GQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YP+3GF,YO73GI,WAAA,eAEF,YP+3GF,YO73GI,aAAA,eAEF,YP+3GF,YO73GI,cAAA,eAEF,YP+3GF,YO73GI,YAAA,gBJTF,0BIlDI,QAAgC,OAAA,YAChC,SPi8GN,SO/7GQ,WAAA,YAEF,SPi8GN,SO/7GQ,aAAA,YAEF,SPi8GN,SO/7GQ,cAAA,YAEF,SPi8GN,SO/7GQ,YAAA,YAfF,QAAgC,OAAA,iBAChC,SPo9GN,SOl9GQ,WAAA,iBAEF,SPo9GN,SOl9GQ,aAAA,iBAEF,SPo9GN,SOl9GQ,cAAA,iBAEF,SPo9GN,SOl9GQ,YAAA,iBAfF,QAAgC,OAAA,gBAChC,SPu+GN,SOr+GQ,WAAA,gBAEF,SPu+GN,SOr+GQ,aAAA,gBAEF,SPu+GN,SOr+GQ,cAAA,gBAEF,SPu+GN,SOr+GQ,YAAA,gBAfF,QAAgC,OAAA,eAChC,SP0/GN,SOx/GQ,WAAA,eAEF,SP0/GN,SOx/GQ,aAAA,eAEF,SP0/GN,SOx/GQ,cAAA,eAEF,SP0/GN,SOx/GQ,YAAA,eAfF,QAAgC,OAAA,iBAChC,SP6gHN,SO3gHQ,WAAA,iBAEF,SP6gHN,SO3gHQ,aAAA,iBAEF,SP6gHN,SO3gHQ,cAAA,iBAEF,SP6gHN,SO3gHQ,YAAA,iBAfF,QAAgC,OAAA,eAChC,SPgiHN,SO9hHQ,WAAA,eAEF,SPgiHN,SO9hHQ,aAAA,eAEF,SPgiHN,SO9hHQ,cAAA,eAEF,SPgiHN,SO9hHQ,YAAA,eAfF,QAAgC,QAAA,YAChC,SPmjHN,SOjjHQ,YAAA,YAEF,SPmjHN,SOjjHQ,cAAA,YAEF,SPmjHN,SOjjHQ,eAAA,YAEF,SPmjHN,SOjjHQ,aAAA,YAfF,QAAgC,QAAA,iBAChC,SPskHN,SOpkHQ,YAAA,iBAEF,SPskHN,SOpkHQ,cAAA,iBAEF,SPskHN,SOpkHQ,eAAA,iBAEF,SPskHN,SOpkHQ,aAAA,iBAfF,QAAgC,QAAA,gBAChC,SPylHN,SOvlHQ,YAAA,gBAEF,SPylHN,SOvlHQ,cAAA,gBAEF,SPylHN,SOvlHQ,eAAA,gBAEF,SPylHN,SOvlHQ,aAAA,gBAfF,QAAgC,QAAA,eAChC,SP4mHN,SO1mHQ,YAAA,eAEF,SP4mHN,SO1mHQ,cAAA,eAEF,SP4mHN,SO1mHQ,eAAA,eAEF,SP4mHN,SO1mHQ,aAAA,eAfF,QAAgC,QAAA,iBAChC,SP+nHN,SO7nHQ,YAAA,iBAEF,SP+nHN,SO7nHQ,cAAA,iBAEF,SP+nHN,SO7nHQ,eAAA,iBAEF,SP+nHN,SO7nHQ,aAAA,iBAfF,QAAgC,QAAA,eAChC,SPkpHN,SOhpHQ,YAAA,eAEF,SPkpHN,SOhpHQ,cAAA,eAEF,SPkpHN,SOhpHQ,eAAA,eAEF,SPkpHN,SOhpHQ,aAAA,eAQF,SAAwB,OAAA,kBACxB,UP8oHN,UO5oHQ,WAAA,kBAEF,UP8oHN,UO5oHQ,aAAA,kBAEF,UP8oHN,UO5oHQ,cAAA,kBAEF,UP8oHN,UO5oHQ,YAAA,kBAfF,SAAwB,OAAA,iBACxB,UPiqHN,UO/pHQ,WAAA,iBAEF,UPiqHN,UO/pHQ,aAAA,iBAEF,UPiqHN,UO/pHQ,cAAA,iBAEF,UPiqHN,UO/pHQ,YAAA,iBAfF,SAAwB,OAAA,gBACxB,UPorHN,UOlrHQ,WAAA,gBAEF,UPorHN,UOlrHQ,aAAA,gBAEF,UPorHN,UOlrHQ,cAAA,gBAEF,UPorHN,UOlrHQ,YAAA,gBAfF,SAAwB,OAAA,kBACxB,UPusHN,UOrsHQ,WAAA,kBAEF,UPusHN,UOrsHQ,aAAA,kBAEF,UPusHN,UOrsHQ,cAAA,kBAEF,UPusHN,UOrsHQ,YAAA,kBAfF,SAAwB,OAAA,gBACxB,UP0tHN,UOxtHQ,WAAA,gBAEF,UP0tHN,UOxtHQ,aAAA,gBAEF,UP0tHN,UOxtHQ,cAAA,gBAEF,UP0tHN,UOxtHQ,YAAA,gBAMN,WAAmB,OAAA,eACnB,YPwtHF,YOttHI,WAAA,eAEF,YPwtHF,YOttHI,aAAA,eAEF,YPwtHF,YOttHI,cAAA,eAEF,YPwtHF,YOttHI,YAAA","sourcesContent":["/*!\n * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n@import \"functions\";\n@import \"variables\";\n\n@import \"mixins/deprecate\";\n@import \"mixins/breakpoints\";\n@import \"mixins/grid-framework\";\n@import \"mixins/grid\";\n\n@import \"grid\";\n@import \"utilities/display\";\n@import \"utilities/flex\";\n@import \"utilities/spacing\";\n","/*!\n * Bootstrap Grid v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nhtml {\n box-sizing: border-box;\n -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: inherit;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container, .container-sm {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container, .container-sm, .container-md {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container, .container-sm, .container-md, .container-lg {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container, .container-sm, .container-md, .container-lg, .container-xl {\n max-width: 1140px;\n }\n}\n\n.row {\n display: -ms-flexbox;\n display: flex;\n -ms-flex-wrap: wrap;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.row-cols-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.row-cols-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.row-cols-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.row-cols-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.row-cols-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n}\n\n.row-cols-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n -ms-flex-order: -1;\n order: -1;\n}\n\n.order-last {\n -ms-flex-order: 13;\n order: 13;\n}\n\n.order-0 {\n -ms-flex-order: 0;\n order: 0;\n}\n\n.order-1 {\n -ms-flex-order: 1;\n order: 1;\n}\n\n.order-2 {\n -ms-flex-order: 2;\n order: 2;\n}\n\n.order-3 {\n -ms-flex-order: 3;\n order: 3;\n}\n\n.order-4 {\n -ms-flex-order: 4;\n order: 4;\n}\n\n.order-5 {\n -ms-flex-order: 5;\n order: 5;\n}\n\n.order-6 {\n -ms-flex-order: 6;\n order: 6;\n}\n\n.order-7 {\n -ms-flex-order: 7;\n order: 7;\n}\n\n.order-8 {\n -ms-flex-order: 8;\n order: 8;\n}\n\n.order-9 {\n -ms-flex-order: 9;\n order: 9;\n}\n\n.order-10 {\n -ms-flex-order: 10;\n order: 10;\n}\n\n.order-11 {\n -ms-flex-order: 11;\n order: 11;\n}\n\n.order-12 {\n -ms-flex-order: 12;\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-sm-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-sm-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-sm-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-sm-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-sm-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-sm-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-sm-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-sm-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-sm-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-sm-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-sm-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-sm-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-sm-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-sm-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-sm-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-sm-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-sm-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-sm-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-sm-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-sm-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-md-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-md-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-md-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-md-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-md-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-md-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-md-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-md-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-md-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-md-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-md-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-md-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-md-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-md-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-md-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-md-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-md-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-md-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-md-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-md-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-lg-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-lg-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-lg-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-lg-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-lg-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-lg-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-lg-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-lg-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-lg-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-lg-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-lg-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-lg-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-lg-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-lg-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-lg-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-lg-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-lg-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-lg-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-lg-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-lg-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n -ms-flex-preferred-size: 0;\n flex-basis: 0;\n -ms-flex-positive: 1;\n flex-grow: 1;\n max-width: 100%;\n }\n .row-cols-xl-1 > * {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .row-cols-xl-2 > * {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .row-cols-xl-3 > * {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .row-cols-xl-4 > * {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .row-cols-xl-5 > * {\n -ms-flex: 0 0 20%;\n flex: 0 0 20%;\n max-width: 20%;\n }\n .row-cols-xl-6 > * {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-auto {\n -ms-flex: 0 0 auto;\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n -ms-flex: 0 0 8.333333%;\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n -ms-flex: 0 0 16.666667%;\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n -ms-flex: 0 0 25%;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n -ms-flex: 0 0 33.333333%;\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n -ms-flex: 0 0 41.666667%;\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n -ms-flex: 0 0 50%;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n -ms-flex: 0 0 58.333333%;\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n -ms-flex: 0 0 66.666667%;\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n -ms-flex: 0 0 75%;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n -ms-flex: 0 0 83.333333%;\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n -ms-flex: 0 0 91.666667%;\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n -ms-flex: 0 0 100%;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n -ms-flex-order: -1;\n order: -1;\n }\n .order-xl-last {\n -ms-flex-order: 13;\n order: 13;\n }\n .order-xl-0 {\n -ms-flex-order: 0;\n order: 0;\n }\n .order-xl-1 {\n -ms-flex-order: 1;\n order: 1;\n }\n .order-xl-2 {\n -ms-flex-order: 2;\n order: 2;\n }\n .order-xl-3 {\n -ms-flex-order: 3;\n order: 3;\n }\n .order-xl-4 {\n -ms-flex-order: 4;\n order: 4;\n }\n .order-xl-5 {\n -ms-flex-order: 5;\n order: 5;\n }\n .order-xl-6 {\n -ms-flex-order: 6;\n order: 6;\n }\n .order-xl-7 {\n -ms-flex-order: 7;\n order: 7;\n }\n .order-xl-8 {\n -ms-flex-order: 8;\n order: 8;\n }\n .order-xl-9 {\n -ms-flex-order: 9;\n order: 9;\n }\n .order-xl-10 {\n -ms-flex-order: 10;\n order: 10;\n }\n .order-xl-11 {\n -ms-flex-order: 11;\n order: 11;\n }\n .order-xl-12 {\n -ms-flex-order: 12;\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n}\n\n.d-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-md-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: -ms-flexbox !important;\n display: flex !important;\n }\n .d-print-inline-flex {\n display: -ms-inline-flexbox !important;\n display: inline-flex !important;\n }\n}\n\n.flex-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n}\n\n.flex-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n}\n\n.justify-content-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n}\n\n.align-items-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n}\n\n.align-items-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n}\n\n.align-items-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n}\n\n.align-items-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n}\n\n.align-content-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n}\n\n.align-content-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n}\n\n.align-content-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n}\n\n.align-content-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n}\n\n.align-content-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n}\n\n.align-self-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n}\n\n.align-self-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n}\n\n.align-self-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n}\n\n.align-self-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n}\n\n.align-self-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-sm-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-sm-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-sm-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-sm-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-sm-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-sm-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-sm-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-sm-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-md-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-md-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-md-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-md-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-md-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-md-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-md-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-md-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-md-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-md-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-md-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-md-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-md-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-md-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-md-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-md-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-lg-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-lg-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-lg-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-lg-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-lg-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-lg-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-lg-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-lg-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n -ms-flex-direction: row !important;\n flex-direction: row !important;\n }\n .flex-xl-column {\n -ms-flex-direction: column !important;\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n -ms-flex-direction: row-reverse !important;\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n -ms-flex-direction: column-reverse !important;\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n -ms-flex-wrap: wrap !important;\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n -ms-flex-wrap: nowrap !important;\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n -ms-flex-wrap: wrap-reverse !important;\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n -ms-flex: 1 1 auto !important;\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n -ms-flex-positive: 0 !important;\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n -ms-flex-positive: 1 !important;\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n -ms-flex-negative: 0 !important;\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n -ms-flex-negative: 1 !important;\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n -ms-flex-pack: start !important;\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n -ms-flex-pack: end !important;\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n -ms-flex-pack: center !important;\n justify-content: center !important;\n }\n .justify-content-xl-between {\n -ms-flex-pack: justify !important;\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n -ms-flex-pack: distribute !important;\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n -ms-flex-align: start !important;\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n -ms-flex-align: end !important;\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n -ms-flex-align: center !important;\n align-items: center !important;\n }\n .align-items-xl-baseline {\n -ms-flex-align: baseline !important;\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n -ms-flex-align: stretch !important;\n align-items: stretch !important;\n }\n .align-content-xl-start {\n -ms-flex-line-pack: start !important;\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n -ms-flex-line-pack: end !important;\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n -ms-flex-line-pack: center !important;\n align-content: center !important;\n }\n .align-content-xl-between {\n -ms-flex-line-pack: justify !important;\n align-content: space-between !important;\n }\n .align-content-xl-around {\n -ms-flex-line-pack: distribute !important;\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n -ms-flex-line-pack: stretch !important;\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n -ms-flex-item-align: auto !important;\n align-self: auto !important;\n }\n .align-self-xl-start {\n -ms-flex-item-align: start !important;\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n -ms-flex-item-align: end !important;\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n -ms-flex-item-align: center !important;\n align-self: center !important;\n }\n .align-self-xl-baseline {\n -ms-flex-item-align: baseline !important;\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n -ms-flex-item-align: stretch !important;\n align-self: stretch !important;\n }\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n\n\n// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n margin-right: auto;\n margin-left: auto;\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter * .5;\n margin-left: -$gutter * .5;\n}\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n @include deprecate(\"The `make-container-max-widths` mixin\", \"v4.5.2\", \"v5\");\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage(divide($size, $columns));\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage(divide($size, $columns));\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// numberof columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 divide(100%, $count);\n max-width: divide(100%, $count);\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter * .5;\n padding-left: $gutter * .5;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @if $columns > 0 {\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n }\n\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n @if $columns > 0 {\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n }\n}\n","// stylelint-disable declaration-no-important\n\n//\n// Utilities for common `display` values\n//\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $value in $displays {\n .d#{$infix}-#{$value} { display: $value !important; }\n }\n }\n}\n\n\n//\n// Utilities for toggling `display` in print\n//\n\n@media print {\n @each $value in $displays {\n .d-print-#{$value} { display: $value !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Flex variation\n//\n// Custom styles for additional flex alignment options.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .flex#{$infix}-row { flex-direction: row !important; }\n .flex#{$infix}-column { flex-direction: column !important; }\n .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; }\n .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; }\n\n .flex#{$infix}-wrap { flex-wrap: wrap !important; }\n .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }\n .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }\n .flex#{$infix}-fill { flex: 1 1 auto !important; }\n .flex#{$infix}-grow-0 { flex-grow: 0 !important; }\n .flex#{$infix}-grow-1 { flex-grow: 1 !important; }\n .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }\n .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }\n\n .justify-content#{$infix}-start { justify-content: flex-start !important; }\n .justify-content#{$infix}-end { justify-content: flex-end !important; }\n .justify-content#{$infix}-center { justify-content: center !important; }\n .justify-content#{$infix}-between { justify-content: space-between !important; }\n .justify-content#{$infix}-around { justify-content: space-around !important; }\n\n .align-items#{$infix}-start { align-items: flex-start !important; }\n .align-items#{$infix}-end { align-items: flex-end !important; }\n .align-items#{$infix}-center { align-items: center !important; }\n .align-items#{$infix}-baseline { align-items: baseline !important; }\n .align-items#{$infix}-stretch { align-items: stretch !important; }\n\n .align-content#{$infix}-start { align-content: flex-start !important; }\n .align-content#{$infix}-end { align-content: flex-end !important; }\n .align-content#{$infix}-center { align-content: center !important; }\n .align-content#{$infix}-between { align-content: space-between !important; }\n .align-content#{$infix}-around { align-content: space-around !important; }\n .align-content#{$infix}-stretch { align-content: stretch !important; }\n\n .align-self#{$infix}-auto { align-self: auto !important; }\n .align-self#{$infix}-start { align-self: flex-start !important; }\n .align-self#{$infix}-end { align-self: flex-end !important; }\n .align-self#{$infix}-center { align-self: center !important; }\n .align-self#{$infix}-baseline { align-self: baseline !important; }\n .align-self#{$infix}-stretch { align-self: stretch !important; }\n }\n}\n","// stylelint-disable declaration-no-important\n\n// Margin and Padding\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; }\n .#{$abbrev}t#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b#{$infix}-#{$size},\n .#{$abbrev}y#{$infix}-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l#{$infix}-#{$size},\n .#{$abbrev}x#{$infix}-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n }\n\n // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`)\n @each $size, $length in $spacers {\n @if \"#{$size}\" != \"0\" {\n .m#{$infix}-n#{$size} { margin: -$length !important; }\n .mt#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-top: -$length !important;\n }\n .mr#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-right: -$length !important;\n }\n .mb#{$infix}-n#{$size},\n .my#{$infix}-n#{$size} {\n margin-bottom: -$length !important;\n }\n .ml#{$infix}-n#{$size},\n .mx#{$infix}-n#{$size} {\n margin-left: -$length !important;\n }\n }\n }\n\n // Some special margin utils\n .m#{$infix}-auto { margin: auto !important; }\n .mt#{$infix}-auto,\n .my#{$infix}-auto {\n margin-top: auto !important;\n }\n .mr#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-right: auto !important;\n }\n .mb#{$infix}-auto,\n .my#{$infix}-auto {\n margin-bottom: auto !important;\n }\n .ml#{$infix}-auto,\n .mx#{$infix}-auto {\n margin-left: auto !important;\n }\n }\n}\n"]} \ No newline at end of file diff --git a/public/css/bootstrap-reboot.css b/public/css/bootstrap-reboot.css new file mode 100755 index 0000000..6e07c5c --- /dev/null +++ b/public/css/bootstrap-reboot.css @@ -0,0 +1,325 @@ +/*! + * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) + */ +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus:not(:focus-visible) { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #0056b3; + text-decoration: underline; +} + +a:not([href]):not([class]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[role="button"] { + cursor: pointer; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/public/css/bootstrap-reboot.css.map b/public/css/bootstrap-reboot.css.map new file mode 100755 index 0000000..21bb859 --- /dev/null +++ b/public/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/bootstrap-reboot.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"AAAA;;;;;;ECME;ACYF;;;EAGE,sBAAsB;ADVxB;;ACaA;EACE,uBAAuB;EACvB,iBAAiB;EACjB,8BAA8B;EAC9B,6CCXa;AFCf;;ACgBA;EACE,cAAc;ADbhB;;ACuBA;EACE,SAAS;EACT,qNCsOoO;ECjGhO,eAAW;EFnIf,gBC+O+B;ED9O/B,gBCmP+B;EDlP/B,cCnCgB;EDoChB,gBAAgB;EAChB,sBC9Ca;AF0Bf;;AAEA;EC+BE,qBAAqB;AD7BvB;;ACsCA;EACE,uBAAuB;EACvB,SAAS;EACT,iBAAiB;ADnCnB;;ACgDA;EACE,aAAa;EACb,qBCiNwC;AF9P1C;;ACoDA;EACE,aAAa;EACb,mBCoF8B;AFrIhC;;AC4DA;;EAEE,0BAA0B;EAC1B,yCAAiC;EAAjC,iCAAiC;EACjC,YAAY;EACZ,gBAAgB;EAChB,sCAA8B;EAA9B,8BAA8B;ADzDhC;;AC4DA;EACE,mBAAmB;EACnB,kBAAkB;EAClB,oBAAoB;ADzDtB;;AC4DA;;;EAGE,aAAa;EACb,mBAAmB;ADzDrB;;AC4DA;;;;EAIE,gBAAgB;ADzDlB;;AC4DA;EACE,gBCkJ+B;AF3MjC;;AC4DA;EACE,oBAAoB;EACpB,cAAc;ADzDhB;;AC4DA;EACE,gBAAgB;ADzDlB;;AC4DA;;EAEE,mBCqIkC;AF9LpC;;AC4DA;EEII,cAAW;AH5Df;;ACiEA;;EAEE,kBAAkB;EEPhB,cAAW;EFSb,cAAc;EACd,wBAAwB;AD9D1B;;ACiEA;EAAM,cAAc;AD7DpB;;AC8DA;EAAM,UAAU;AD1DhB;;ACiEA;EACE,cCvJe;EDwJf,qBCX4C;EDY5C,6BAA6B;AD9D/B;;AIlHE;EHmLE,cCd8D;EDe9D,0BCd+C;AF/CnD;;ACsEA;EACE,cAAc;EACd,qBAAqB;ADnEvB;;AI5HE;EHkME,cAAc;EACd,qBAAqB;ADlEzB;;AC2EA;;;;EAIE,iGC0DgH;EClH9G,cAAW;AHff;;AC2EA;EAEE,aAAa;EAEb,mBAAmB;EAEnB,cAAc;EAGd,6BAA6B;AD7E/B;;ACqFA;EAEE,gBAAgB;ADnFlB;;AC2FA;EACE,sBAAsB;EACtB,kBAAkB;ADxFpB;;AC2FA;EAGE,gBAAgB;EAChB,sBAAsB;AD1FxB;;ACkGA;EACE,yBAAyB;AD/F3B;;ACkGA;EACE,oBC8EkC;ED7ElC,uBC6EkC;ED5ElC,cCtQgB;EDuQhB,gBAAgB;EAChB,oBAAoB;AD/FtB;;ACsGA;EAEE,mBAAmB;EACnB,gCAAgC;ADpGlC;;AC4GA;EAEE,qBAAqB;EACrB,qBC4J2C;AFtQ7C;;ACgHA;EAEE,gBAAgB;AD9GlB;;ACsHA;EACE,UAAU;ADnHZ;;ACsHA;;;;;EAKE,SAAS;EACT,oBAAoB;EEhKlB,kBAAW;EFkKb,oBAAoB;ADnHtB;;ACsHA;;EAEE,iBAAiB;ADnHnB;;ACsHA;;EAEE,oBAAoB;ADnHtB;;AAEA;ECwHE,eAAe;ADtHjB;;AC4HA;EACE,iBAAiB;ADzHnB;;ACgIA;;;;EAIE,0BAA0B;AD7H5B;;ACkIE;;;;EAKI,eAAe;ADhIrB;;ACsIA;;;;EAIE,UAAU;EACV,kBAAkB;ADnIpB;;ACsIA;;EAEE,sBAAsB;EACtB,UAAU;ADnIZ;;ACuIA;EACE,cAAc;EAEd,gBAAgB;ADrIlB;;ACwIA;EAME,YAAY;EAEZ,UAAU;EACV,SAAS;EACT,SAAS;AD3IX;;ACgJA;EACE,cAAc;EACd,WAAW;EACX,eAAe;EACf,UAAU;EACV,oBAAoB;EE9OhB,iBAAW;EFgPf,oBAAoB;EACpB,cAAc;EACd,mBAAmB;AD7IrB;;ACgJA;EACE,wBAAwB;AD7I1B;;AAEA;;ECiJE,YAAY;AD9Id;;AAEA;ECoJE,oBAAoB;EACpB,wBAAwB;ADlJ1B;;AAEA;ECwJE,wBAAwB;ADtJ1B;;AC8JA;EACE,aAAa;EACb,0BAA0B;AD3J5B;;ACkKA;EACE,qBAAqB;AD/JvB;;ACkKA;EACE,kBAAkB;EAClB,eAAe;AD/JjB;;ACkKA;EACE,aAAa;AD/Jf;;AAEA;ECmKE,wBAAwB;ADjK1B","file":"bootstrap-reboot.css","sourcesContent":["/*!\n * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"reboot\";\n","/*!\n * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-` + + +@endsection diff --git a/resources/views/crudexample/delete.blade.php b/resources/views/crudexample/delete.blade.php new file mode 100755 index 0000000..d877119 --- /dev/null +++ b/resources/views/crudexample/delete.blade.php @@ -0,0 +1,24 @@ +@extends('layout') + +@section('title', 'Crud example Delete') + +@section('content') +

+@endsection + + + + + + + diff --git a/resources/views/crudexample/edit.blade.php b/resources/views/crudexample/edit.blade.php new file mode 100755 index 0000000..6d7b8a3 --- /dev/null +++ b/resources/views/crudexample/edit.blade.php @@ -0,0 +1,50 @@ +@extends('layout') + +@section('title', 'Crud Example Edit') + +@section('content') +
+

Blade - Crud Example Edit

+
+ + +
+ + +
+
+ + + Show Password + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+@endsection diff --git a/resources/views/crudexample/index.blade.php b/resources/views/crudexample/index.blade.php new file mode 100755 index 0000000..9a2a415 --- /dev/null +++ b/resources/views/crudexample/index.blade.php @@ -0,0 +1,43 @@ +@extends('layout') + +@section('title', 'Crud Example List') + +@section('content') +
+
+

Blade - Crud Example List

+ Add New Item +
+
+ + + + + + + + + + + @foreach ($crudexample as $item) + + + + + + + @endforeach + +
IDNameCompanyActions
{{ $item['id'] }}{{ $item['name'] }}{{ $item['company'] }} + View + Edit + + +
+ + +
+
+
+
+@endsection diff --git a/resources/views/crudexample/show.blade.php b/resources/views/crudexample/show.blade.php new file mode 100755 index 0000000..4f97c99 --- /dev/null +++ b/resources/views/crudexample/show.blade.php @@ -0,0 +1,48 @@ +@extends('layout') + +@section('title', 'Crud Example Show') + +@section('content') +
+

Blade - Crud Example Show

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID{{ $crudexample['id'] }}
Name{{ $crudexample['name'] }}
Company{{ $crudexample['company'] }}
Address{{ $crudexample['address'] }}
Phone{{ $crudexample['phone'] }}
Email{{ $crudexample['email'] }}
Notes{{ $crudexample['notes'] }}
+ Edit + + +
+ + +
+ + Back to List +
+@endsection diff --git a/resources/views/errors/403.html b/resources/views/errors/403.html new file mode 100755 index 0000000..25b73b1 --- /dev/null +++ b/resources/views/errors/403.html @@ -0,0 +1,57 @@ + + + + + + 403 - Forbidden + + + + + +
+

403 - Forbidden

+

+ Voltar para a Página Inicial +
+ + \ No newline at end of file diff --git a/resources/views/errors/404.html b/resources/views/errors/404.html new file mode 100755 index 0000000..c5a33b1 --- /dev/null +++ b/resources/views/errors/404.html @@ -0,0 +1,57 @@ + + + + + + 404 - Página Não Encontrada + + + + + +
+

404 - Página Não Encontrada

+

Desculpe, a página que você está procurando não foi encontrada.

+ Voltar para a Página Inicial +
+ + \ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100755 index 0000000..f50432f --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,85 @@ +@extends('layout') + +@section('title', 'SysMVC - PHP Framework') + +@section('content') +
+

Welcome to SysMVC

+

PHP framework for website and app development.

+ Learn More Details +
+ +
+
+
+ Image +
+
Database Usage
+

Learn how to use the database in SysMVC with CRUD examples.

+ See More +
+
+
+
+
+ Image +
+
Dependency Injection
+

Learn how to use dependency injection with PHP-DI in SysMVC.

+ See More +
+
+
+
+
+ Image +
+
App Projects
+

See how to use SysMVC as a base for application development.

+ See More +
+
+
+
+ +
+ +
+ +
+
+ Image +
+
Blade & Twig Templates Engine
+

Learn more about using Blade and/or Twig templates with SysMVC.

+ See More +
+
+
+ + + +
+
+ Image +
+
Security
+

Security implementations in SysMVC.

+ See More +
+
+
+ + +
+
+ Image +
+
Console CLI
+

Use the CLI console to manage your SysMVC project.

+ See More +
+
+
+
+@endsection diff --git a/resources/views/home/about.blade.php b/resources/views/home/about.blade.php new file mode 100755 index 0000000..bd898f8 --- /dev/null +++ b/resources/views/home/about.blade.php @@ -0,0 +1,24 @@ +@extends('layout') + +@section('title', 'About') + +@section('content') +
+

About Us

+

Welcome to SysMVC - PHP Framework!

+

SysMVC is a PHP framework developed to simplify the creation of robust and scalable web applications. We use the best development practices and modern tools to provide an efficient and enjoyable development experience.

+

Our mission is to help developers build high-quality web applications quickly and effectively. We offer a solid and flexible framework, allowing you to focus on what really matters: creating amazing features for your users.

+

If you have any questions or need support, feel free to contact us. We are here to help!

+

Marco Costa

+

Developer and Creator of SysMVC

+

Official website: sysmvc.syspanel.com.br

+

Contact email: syspanel@gmx.com

+

Github: https://github.com/syspanel/SysMVC.git

+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+@endsection diff --git a/resources/views/home/app-development.blade.php b/resources/views/home/app-development.blade.php new file mode 100755 index 0000000..6381d99 --- /dev/null +++ b/resources/views/home/app-development.blade.php @@ -0,0 +1,50 @@ +@extends('layout') + +@section('title', 'App Development with SysMVC') + +@section('content') +
+

App Development with SysMVC

+

How to use SysMVC as a base for application development.

+ +

SysMVC is a flexible and powerful framework, perfect for serving as the foundation for developing modern web applications.

+ +

Modular Structure

+

SysMVC allows you to create independent modules, making it easier to organize your code and maintain the project.

+ +

Simple Routing

+

With SysMVC's router, you can define your routes in a simple and intuitive way:

+

+Router::get('/home', 'HomeController@index');
+Router::post('/client', 'ClientController@store');
+    
+ +

Template Rendering

+

Use BladeOne to efficiently and neatly render your templates:

+

+echo $blade->run("home.index", ["clients" => $clients]);
+    
+ +

With these tools, SysMVC provides a solid foundation for developing robust and scalable web applications.

+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + + ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+@endsection diff --git a/resources/views/home/console-cli.blade.php b/resources/views/home/console-cli.blade.php new file mode 100755 index 0000000..b0d9034 --- /dev/null +++ b/resources/views/home/console-cli.blade.php @@ -0,0 +1,88 @@ +@extends('layout') + +@section('title', 'Console CLI') + +@section('content') +
+

Console CLI

+

The SysMVC CLI console, based on Symfony Console, allows you to efficiently manage your project using command-line commands.

+ +

Useful Commands

+
    +
  • php bin/console generate:app-key - Generates a new application key.
  • +
  • php bin/console app:say-hello - Hello.
  • +
+ +

Extending with More Commands

+

The Symfony Console allows you to create and extend custom commands. Here is an example of how to create a custom command:

+
+            
+                // src/Command/SayHelloCommand.php
+                namespace App\Command;
+
+                use Symfony\Component\Console\Command\Command;
+                use Symfony\Component\Console\Input\InputInterface;
+                use Symfony\Component\Console\Output\OutputInterface;
+
+                class SayHelloCommand extends Command
+                {
+                    protected static $defaultName = 'app:say-hello';
+
+                    protected function configure()
+                    {
+                        $this
+                            ->setDescription('Says hello.')
+                            ->setHelp('This command allows you to say hello...');
+                    }
+
+                    protected function execute(InputInterface $input, OutputInterface $output)
+                    {
+                        $output->writeln('Hello from SysMVC!');
+                        return Command::SUCCESS;
+                    }
+                }
+            
+        
+ +

To register the command, add it to the service in the config/services.yaml file:

+
+            
+                # config/services.yaml
+                services:
+                    App\Command\SayHelloCommand:
+                        tags: ['console.command']
+            
+        
+ +

Now you can execute the custom command:

+
+            
+                $ php bin/console app:say-hello
+            
+        
+ +

For more information about available commands and how to create custom commands, check the Symfony Console documentation.

+
+ + +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +
+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+@endsection diff --git a/resources/views/home/database.blade.php b/resources/views/home/database.blade.php new file mode 100755 index 0000000..1a24bdc --- /dev/null +++ b/resources/views/home/database.blade.php @@ -0,0 +1,66 @@ +@extends('layout') + +@section('title', 'Database Usage') + +@section('content') +
+

Database Usage

+

CRUD Example with SysMVC.

+ +

SysMVC makes it easy to interact with databases through the use of Eloquent ORM. You can easily create, read, update, and delete records in the database using intuitive methods.

+ +

CRUD Example

+

Below is a basic example of CRUD operations:

+ +

Creating a Record

+

+$client = new Client();
+$client->name = 'Client Name';
+$client->email = 'email@example.com';
+$client->save();
+    
+ +

Reading Records

+

+$clients = Client::all();
+foreach ($clients as $client) {
+    echo $client->name;
+}
+    
+ +

Updating a Record

+

+$client = Client::find(1);
+$client->name = 'New Name';
+$client->save();
+    
+ +

Deleting a Record

+

+$client = Client::find(1);
+$client->delete();
+    
+ +

With these examples, you can see how easy it is to work with databases using SysMVC.

+

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+@endsection diff --git a/resources/views/home/dependency-injection.blade.php b/resources/views/home/dependency-injection.blade.php new file mode 100755 index 0000000..bf86cf0 --- /dev/null +++ b/resources/views/home/dependency-injection.blade.php @@ -0,0 +1,65 @@ +@extends('layout') + +@section('title', 'Dependency Injection with PHP-DI') + +@section('content') +
+

Dependency Injection with PHP-DI

+

How to use PHP-DI in SysMVC.

+ +

SysMVC uses the PHP-DI library to manage dependency injection. This allows you to write more modular and testable code.

+ +

Basic Configuration

+

To configure PHP-DI, you can create a di-config.php file with the definitions of your dependencies:

+
{{ 
+'   use DI\ContainerBuilder;
+
+    return function (ContainerBuilder $containerBuilder) {
+        $containerBuilder->addDefinitions([
+            // Define your dependencies here
+            ClientRepository::class => \DI\create(MySqlClientRepository::class),
+        ]);
+    };' 
+}}
+ +

Usage

+

To use dependency injection in your classes, simply pass the dependencies through the constructor:

+
{{ 
+'   class ClientService {
+        private $clientRepository;
+        
+        public function __construct(ClientRepository $clientRepository) {
+            $this->clientRepository = $clientRepository;
+        }
+        
+        public function getClients() {
+            return $this->clientRepository->findAll();
+        }
+    }' 
+}}
+ +

With dependency injection, you can easily swap implementations and keep your code decoupled and more testable.

+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + + ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+
+@endsection + + diff --git a/resources/views/home/details.blade.php b/resources/views/home/details.blade.php new file mode 100755 index 0000000..2a7566b --- /dev/null +++ b/resources/views/home/details.blade.php @@ -0,0 +1,82 @@ +@extends('layout') + +@section('title', 'Learn More About SysMVC') + +@section('content') +
+ + + SysMVC + +

+

SysMVC - PHP Framework

+
+ +

Welcome to SysMVC - PHP Framework!

+

SysMVC is a PHP framework developed to facilitate the creation of robust and scalable web applications. We use best development practices and modern tools to provide an efficient and pleasant development experience.

+

Our mission is to help developers build high-quality web applications quickly and efficiently. We offer a solid and flexible framework, allowing you to focus on what really matters: creating amazing features for your users.

+

SysMVC has a fast learning curve, it's lightweight, fast, modern, straightforward, secure, and ideal for developing websites and apps both locally and in the cloud. It is also licensed under the MIT License, which is highly permissive for developers.

+ +

Main Features

+
    +
  • Advanced routing system for easy navigation
  • +
  • Support for Blade templates for efficient rendering
  • +
  • Integration with Monolog for a robust logging system
  • +
  • Modular and easy-to-maintain structure
  • +
  • ORM database support for simplified interaction with the database
  • +
  • Enhanced security with protection against CSRF, XSS, and more
  • +
  • Dependency injection
  • +
  • Environment variable loading
  • +
  • Handling of HTTP requests and responses
  • +
+
+

MIT License

+

SysMVC is licensed under the MIT License, which allows wide freedom of use and distribution. Here is the full text of the license:

+
+
+MIT License
+
+Copyright (c) 2025 Marco Costa
+
+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.
+    
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, get in touch:

+ + +
+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+@endsection diff --git a/resources/views/home/readme.blade.php b/resources/views/home/readme.blade.php new file mode 100755 index 0000000..59490c3 --- /dev/null +++ b/resources/views/home/readme.blade.php @@ -0,0 +1,154 @@ +@extends('layout') + +@section('title', 'Project Information') + +@section('content') +
+

SysMVC - PHP Framework

+ +
+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Project Information

+

SysMVC is a system developed by Marco Costa (syspanel@gmx.com), with source code licensed under the MIT License.

+

This software is offered for free and can be used, modified, and distributed under the terms of the MIT License.

+

Project website: https://sysmvc.syspanel.com.br

+ ## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+ +
+ +

🚀 Installation Tutorial

+ +

✅ Prerequisites

+
    +
  • PHP 8.1 or higher
  • +
  • Composer (dependency manager for PHP)
  • +
  • Web Server (Apache or Nginx)
  • +
  • MySQL or other compatible database
  • +
+ +

🔧 Step-by-Step

+ +

1️⃣ Unzip the File

+

Download and unzip the SysMVC file to your local environment:

+
unzip sysmvc.zip -d sysmvc
+cd sysmvc
+    
+ +

2️⃣ Install the Dependencies

+

Use Composer to install the project dependencies:

+
composer install
+    
+ +

3️⃣ Configure the Environment

+

Copy the .env.example file to .env and configure your environment variables:

+
cp .env.example .env
+    
+ +

Open the .env file and edit the following lines with your information:

+
DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=your_database
+DB_USERNAME=your_username
+DB_PASSWORD=your_password
+    
+ +

4️⃣ Set Permissions

+

Change the permissions of the storage and cache directories to ensure the web server can write to them:

+
chmod -R 775 storage
+chmod -R 775 bootstrap/cache
+    
+ +

5️⃣ Generate the Application Key

+
php bin/console generate:app-key
+    
+ +

6️⃣ Run the Migrations

+

Run the migrations to create the tables in the database:

+
php bin/console migrate:crudexample
+    
+ +

7️⃣ Configure the Web Server

+ +
📌 Apache
+

Add the following configuration to your Apache configuration file:

+
<VirtualHost *:80>
+    ServerName sysmvc.local
+    DocumentRoot /path/to/sysmvc/public
+
+    <Directory /path/to/sysmvc/public>
+        AllowOverride All
+        Require all granted
+    </Directory>
+</VirtualHost>
+    
+ +
📌 Nginx
+

Add the following configuration to your Nginx configuration file:

+
server {
+    listen 80;
+    server_name sysmvc.local;
+    root /path/to/sysmvc/public;
+
+    index index.php index.html index.htm;
+
+    location / {
+        try_files $uri $uri/ /index.php?$query_string;
+    }
+
+    location ~ \.php$ {
+        include snippets/fastcgi-php.conf;
+        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
+    }
+}
+    
+ +
+ +

📦 Dependencies Used

+

The project uses the following third-party packages, each with its respective license:

+ +

✅ Packages with MIT License

+ + +
+ +

📜 Terms of Use

+

This project is licensed under the MIT License.

+

You can use, copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software, provided that the license and copyright notice are included in all copies or substantial portions of the Software.

+

The Software is provided "as is", without any warranty of any kind. For more details, please consult the MIT License.

+

For more information, contact: sysmvc@syspanel.com.br

+ +

© 2025 Marco Costa - All rights reserved under the MIT License.

+
+@endsection diff --git a/resources/views/home/security.blade.php b/resources/views/home/security.blade.php new file mode 100755 index 0000000..c7888c7 --- /dev/null +++ b/resources/views/home/security.blade.php @@ -0,0 +1,39 @@ +@extends('layout') + +@section('title', 'Security') + +@section('content') +
+

Security

+

We have implemented several security measures in SysMVC to protect your application against threats. Here are some of the implementations:

+

CSRF Protection

+

We use CSRF tokens to protect against Cross-Site Request Forgery attacks.

+

Data Sanitization

+

All input and output data are sanitized to prevent code injections and other attacks.

+

Security Headers

+

We add HTTP security headers to protect against attacks like clickjacking and MIME-type sniffing.

+

For more information about security, refer to the OWASP documentation.

+
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, feel free to contact us:

+ + +
+

Donations via PAYPAL

+## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+@endsection diff --git a/resources/views/home/templates-blade.blade.php b/resources/views/home/templates-blade.blade.php new file mode 100755 index 0000000..cd820c7 --- /dev/null +++ b/resources/views/home/templates-blade.blade.php @@ -0,0 +1,50 @@ +@extends('layout') + +@section('title', 'SysMVC Advantages - Blade, Twig, and Pure PHP') + +@section('content') +
+

SysMVC: Support for Blade, Twig, and Pure PHP

+

SysMVC is a versatile PHP framework that supports three template rendering methods: Blade, Twig, and Pure PHP. This flexibility allows developers to choose the tool that best suits their needs, providing several advantages.

+ +

Blade Advantages

+

Blade is a simple yet powerful template engine developed for the Laravel framework. With Blade, developers can easily create reusable layouts and dynamic components. It is known for its clean and clear syntax, making template development fast and intuitive.

+

For more information, refer to the official Blade documentation.

+ +

Twig Advantages

+

Twig is a flexible and robust template engine, widely used in various PHP frameworks. It offers a series of advanced features such as template inheritance, filters, custom extensions, and more. Twig is known for its security and performance, making it a reliable choice for projects of any scale.

+

For more information, refer to the official Twig documentation.

+ +

Pure PHP Advantages

+

SysMVC also supports template rendering using pure PHP. This means you can directly include PHP files and render content dynamically. If you prefer not to use a template engine, you can simply use the include command to include template files and generate the desired content. This can be a simpler and more straightforward choice for smaller projects or developers more familiar with PHP.

+

Example of using pure PHP in SysMVC:

+
include('page.php');
+ +

Why Choose SysMVC?

+

With SysMVC, you don't have to worry about choosing between Blade, Twig, or Pure PHP. You can use any of these options, or even combine different approaches within the same project, depending on the context. This flexibility is a significant advantage, as it allows developers to take the best of each tool, adapting to their preferences and specific requirements.

+ +

Conclusion

+

Whether you're a Blade enthusiast, a Twig fan, or someone who prefers pure PHP, SysMVC is ready to meet your needs. The ability to switch between these options makes SysMVC an excellent choice for developers seeking efficiency, flexibility, and ease of use in their PHP projects.

+
+ +

+ +

Github: https://github.com/syspanel/SysMVC.git

+ +

+ +

Contact

+

If you're interested in SysMVC, feel free to contact us:

+ + +## Donations via PayPal + +If you wish to support the development of SysMVC, consider making a donation via PayPal to: + +

Donations via PAYPAL

+

If you wish to support the development of SysMVC, consider making a donation via PAYPAL to Donate via PayPal

+@endsection + diff --git a/resources/views/layout.blade.php b/resources/views/layout.blade.php new file mode 100755 index 0000000..f996852 --- /dev/null +++ b/resources/views/layout.blade.php @@ -0,0 +1,97 @@ + + + + + + @yield('title', 'Default Title') + + + + + + + + + + + + + + + + + + + + +
+ @yield('content') +
+ + + + + + + + + + + + + + + + + diff --git a/resources/views/layout.twig b/resources/views/layout.twig new file mode 100755 index 0000000..3a4a50c --- /dev/null +++ b/resources/views/layout.twig @@ -0,0 +1,95 @@ + + + + + + {% block title %}Default Title{% endblock %} + + + + + + + + + + + + + + + + + + + +
+ {% block content %}{% endblock %} +
+ + + + + + + + + + + + + + + + diff --git a/resources/views/layout.twig.php b/resources/views/layout.twig.php new file mode 100755 index 0000000..3a4a50c --- /dev/null +++ b/resources/views/layout.twig.php @@ -0,0 +1,95 @@ + + + + + + {% block title %}Default Title{% endblock %} + + + + + + + + + + + + + + + + + + + +
+ {% block content %}{% endblock %} +
+ + + + + + + + + + + + + + + + diff --git a/resources/views/test.blade.php b/resources/views/test.blade.php new file mode 100755 index 0000000..b5b6ca6 --- /dev/null +++ b/resources/views/test.blade.php @@ -0,0 +1,11 @@ + + + + {{ $title }} + + +

{{ $title }}

+

Esta é a página do TesteController.

+ + + diff --git a/resources/views/twigexample/create.twig b/resources/views/twigexample/create.twig new file mode 100755 index 0000000..abfb86e --- /dev/null +++ b/resources/views/twigexample/create.twig @@ -0,0 +1,50 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Create New Crud Example{% endblock %} + +{% block content %} +
+

Twig - Create New Crud Example

+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+{% endblock %} + diff --git a/resources/views/twigexample/create.twig.php b/resources/views/twigexample/create.twig.php new file mode 100755 index 0000000..abfb86e --- /dev/null +++ b/resources/views/twigexample/create.twig.php @@ -0,0 +1,50 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Create New Crud Example{% endblock %} + +{% block content %} +
+

Twig - Create New Crud Example

+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+{% endblock %} + diff --git a/resources/views/twigexample/edit.twig b/resources/views/twigexample/edit.twig new file mode 100755 index 0000000..7545b9b --- /dev/null +++ b/resources/views/twigexample/edit.twig @@ -0,0 +1,44 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Edit Crud Example{% endblock %} + +{% block content %} +
+

Twig - Edit Crud Example

+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+{% endblock %} diff --git a/resources/views/twigexample/edit.twig.php b/resources/views/twigexample/edit.twig.php new file mode 100755 index 0000000..7545b9b --- /dev/null +++ b/resources/views/twigexample/edit.twig.php @@ -0,0 +1,44 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Edit Crud Example{% endblock %} + +{% block content %} +
+

Twig - Edit Crud Example

+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+{% endblock %} diff --git a/resources/views/twigexample/index.twig b/resources/views/twigexample/index.twig new file mode 100755 index 0000000..f0c5ee6 --- /dev/null +++ b/resources/views/twigexample/index.twig @@ -0,0 +1,43 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Crud Example List{% endblock %} + +{% block content %} +
+
+

Twig - Crud Example List

+ Add New Item +
+
+ + + + + + + + + + + {% for item in twigexample %} + + + + + + + {% endfor %} + +
IDNameCompanyActions
{{ item.id }}{{ item.name }}{{ item.company }} + View + Edit + + +
+ + +
+
+
+
+{% endblock %} diff --git a/resources/views/twigexample/index.twig.php b/resources/views/twigexample/index.twig.php new file mode 100755 index 0000000..f0c5ee6 --- /dev/null +++ b/resources/views/twigexample/index.twig.php @@ -0,0 +1,43 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Crud Example List{% endblock %} + +{% block content %} +
+
+

Twig - Crud Example List

+ Add New Item +
+
+ + + + + + + + + + + {% for item in twigexample %} + + + + + + + {% endfor %} + +
IDNameCompanyActions
{{ item.id }}{{ item.name }}{{ item.company }} + View + Edit + + +
+ + +
+
+
+
+{% endblock %} diff --git a/resources/views/twigexample/show.twig b/resources/views/twigexample/show.twig new file mode 100755 index 0000000..3adae4c --- /dev/null +++ b/resources/views/twigexample/show.twig @@ -0,0 +1,45 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Show Crud Example{% endblock %} + +{% block content %} +
+

Twig - Show Crud Example

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID{{ twigexample.id }}
Name{{ twigexample.name }}
Company{{ twigexample.company }}
Address{{ twigexample.address }}
Phone{{ twigexample.phone }}
Email{{ twigexample.email }}
Notes{{ twigexample.notes }}
+ Edit +
+ +
+ Back to List +
+{% endblock %} + diff --git a/resources/views/twigexample/show.twig.php b/resources/views/twigexample/show.twig.php new file mode 100755 index 0000000..3adae4c --- /dev/null +++ b/resources/views/twigexample/show.twig.php @@ -0,0 +1,45 @@ +{% extends 'layout.twig.php' %} + +{% block title %}Show Crud Example{% endblock %} + +{% block content %} +
+

Twig - Show Crud Example

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID{{ twigexample.id }}
Name{{ twigexample.name }}
Company{{ twigexample.company }}
Address{{ twigexample.address }}
Phone{{ twigexample.phone }}
Email{{ twigexample.email }}
Notes{{ twigexample.notes }}
+ Edit +
+ +
+ Back to List +
+{% endblock %} + diff --git a/routes/api.php b/routes/api.php new file mode 100755 index 0000000..e69de29 diff --git a/routes/auth.php b/routes/auth.php new file mode 100755 index 0000000..e69de29 diff --git a/routes/web.php b/routes/web.php new file mode 100755 index 0000000..cd3d633 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,259 @@ +name('index'); + +Router::get('/', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/'); + return $controller->index($request); +})->name('home'); + +// Nova rota para TesteController +Router::get('/testecontainer', function () { + $container = $GLOBALS['container']; + $controller = $container->get(TesteController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/teste'); + return $controller->index($request); +})->name('teste'); + +Router::get('/about', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->about(); +})->name('about'); + +Router::get('/home/details', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->details(); +})->name('details'); + +Router::get('/readme', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->readme(); +})->name('readme'); + +Router::get('/home/database', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->database(); +})->name('database'); + +Router::get('/home/dependency-injection', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->dependencyInjection(); +})->name('dependency-injection'); + +Router::get('/home/app-development', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->appDevelopment(); +})->name('app-development'); + +// Novas rotas para os novos cards +Router::get('/home/templates-blade', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->templatesBlade(); +})->name('templates-blade'); + +Router::get('/home/security', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->security(); +})->name('security'); + +Router::get('/home/console-cli', function () { + $container = $GLOBALS['container']; + $controller = $container->get(HomeController::class); + return $controller->consoleCli(); +})->name('console-cli'); + + + + + +// Agrupamento de rotas para "crudexample" +Router::group(['prefix' => '/crudexample'], function () { + Router::get('/', function () { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/'); + return $controller->index($request); + })->name('crudexample.index'); + + Router::get('/create', function () { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/create'); + return $controller->create($request); + })->name('crudexample.create'); + + Router::post('/', function () { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/store'); + return $controller->store($request); + })->name('crudexample.store'); + + Router::get('/edit/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', "/edit/{$id}"); + return $controller->edit($request, $id); + })->name('crudexample.edit'); + + Router::post('/update/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + return $controller->update($id); + })->name('crudexample.update'); + + Router::post('/delete/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('POST', "/delete/{$id}"); + return $controller->delete($request, $id); + })->name('crudexample.delete'); + + Router::get('/show/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(CrudExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', "/show/{$id}"); + return $controller->show($request, $id); + })->name('crudexample.show'); +}); + + + + + + + + + + + + + + +// Agrupamento de rotas para "twigexample" +Router::group(['prefix' => '/twigexample'], function () { + Router::get('/', function () { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/'); + return $controller->index($request); + })->name('twigexample.index'); + + Router::get('/create', function () { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', '/create'); + return $controller->create($request); + })->name('twigexample.create'); + + Router::get('/edit/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', "/edit/$id"); + return $controller->edit($request, $id); + })->name('twigexample.edit'); + + Router::get('/show/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('GET', "/show/$id"); + return $controller->show($request, $id); + })->name('twigexample.show'); + + Router::post('/delete/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('POST', "/delete/$id"); + return $controller->delete($request, $id); + })->name('twigexample.delete'); + + Router::post('/store', function () { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('POST', '/store'); + return $controller->store($request); + })->name('twigexample.store'); + + Router::post('/update/{id}', function ($id) { + $container = $GLOBALS['container']; + $controller = $container->get(TwigExampleController::class); + $psrFactory = new Psr17Factory(); + $request = $psrFactory->createServerRequest('POST', "/update/$id"); + return $controller->update($request, $id); + })->name('twigexample.update'); +}); + + + + + + + + + + + + + + + +// Tratamento de erro 404, ignorando arquivos estáticos +Router::error(function ($request, \Exception $exception) { + $extensoesIgnoradas = ['css', 'js', 'png', 'jpg', 'jpeg', 'gif', 'ico', 'svg', 'webp', 'woff', 'woff2', 'ttf']; + $path = $request->getUrl()->getPath(); + $extensao = pathinfo($path, PATHINFO_EXTENSION); + + // Se a requisição for para um arquivo estático, apenas retorna sem tratamento + if (in_array(strtolower($extensao), $extensoesIgnoradas)) { + return; + } + + // Tratamento para erro 404 + if ($exception instanceof NotFoundHttpException) { + http_response_code(404); + echo file_get_contents(__DIR__ . '/../resources/views/errors/404.html'); + exit; + } + + // Tratamento para erro 403 + if ($exception instanceof NotFoundHttpException) { + http_response_code(403); + echo file_get_contents(__DIR__ . '/../resources/views/errors/403.html'); + exit; + } +}); diff --git a/vendor/autoload.php b/vendor/autoload.php new file mode 100755 index 0000000..5baffcc --- /dev/null +++ b/vendor/autoload.php @@ -0,0 +1,25 @@ +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if ( + (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) + || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) + ) { + return include("phpvfscomposer://" . __DIR__ . '/..'.'/nesbot/carbon/bin/carbon'); + } +} + +return include __DIR__ . '/..'.'/nesbot/carbon/bin/carbon'; diff --git a/vendor/bin/generate-defuse-key b/vendor/bin/generate-defuse-key new file mode 100755 index 0000000..2a4e979 --- /dev/null +++ b/vendor/bin/generate-defuse-key @@ -0,0 +1,119 @@ +#!/usr/bin/env php +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if ( + (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) + || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) + ) { + return include("phpvfscomposer://" . __DIR__ . '/..'.'/defuse/php-encryption/bin/generate-defuse-key'); + } +} + +return include __DIR__ . '/..'.'/defuse/php-encryption/bin/generate-defuse-key'; diff --git a/vendor/bin/phinx b/vendor/bin/phinx new file mode 100755 index 0000000..20ed10c --- /dev/null +++ b/vendor/bin/phinx @@ -0,0 +1,119 @@ +#!/usr/bin/env php +realpath = realpath($opened_path) ?: $opened_path; + $opened_path = $this->realpath; + $this->handle = fopen($this->realpath, $mode); + $this->position = 0; + + return (bool) $this->handle; + } + + public function stream_read($count) + { + $data = fread($this->handle, $count); + + if ($this->position === 0) { + $data = preg_replace('{^#!.*\r?\n}', '', $data); + } + + $this->position += strlen($data); + + return $data; + } + + public function stream_cast($castAs) + { + return $this->handle; + } + + public function stream_close() + { + fclose($this->handle); + } + + public function stream_lock($operation) + { + return $operation ? flock($this->handle, $operation) : true; + } + + public function stream_seek($offset, $whence) + { + if (0 === fseek($this->handle, $offset, $whence)) { + $this->position = ftell($this->handle); + return true; + } + + return false; + } + + public function stream_tell() + { + return $this->position; + } + + public function stream_eof() + { + return feof($this->handle); + } + + public function stream_stat() + { + return array(); + } + + public function stream_set_option($option, $arg1, $arg2) + { + return true; + } + + public function url_stat($path, $flags) + { + $path = substr($path, 17); + if (file_exists($path)) { + return stat($path); + } + + return false; + } + } + } + + if ( + (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) + || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) + ) { + return include("phpvfscomposer://" . __DIR__ . '/..'.'/robmorgan/phinx/bin/phinx'); + } +} + +return include __DIR__ . '/..'.'/robmorgan/phinx/bin/phinx'; diff --git a/vendor/cakephp/core/App.php b/vendor/cakephp/core/App.php new file mode 100755 index 0000000..3f5c9a0 --- /dev/null +++ b/vendor/cakephp/core/App.php @@ -0,0 +1,269 @@ + + * @link https://book.cakephp.org/4/en/core-libraries/app.html#finding-paths-to-namespaces + */ + public static function path(string $type, ?string $plugin = null): array + { + if ($plugin === null && $type[0] === strtolower($type[0])) { + return (array)Configure::read('App.paths.' . $type); + } + + if ($type === 'templates') { + /** @psalm-suppress PossiblyNullArgument */ + return [Plugin::templatePath($plugin)]; + } + + if ($type === 'locales') { + /** @psalm-suppress PossiblyNullArgument */ + return [Plugin::path($plugin) . 'resources' . DIRECTORY_SEPARATOR . 'locales' . DIRECTORY_SEPARATOR]; + } + + deprecationWarning( + 'App::path() is deprecated for class path.' + . ' Use \Cake\Core\App::classPath() or \Cake\Core\Plugin::classPath() instead.' + ); + + return static::classPath($type, $plugin); + } + + /** + * Gets the path to a class type in the application or a plugin. + * + * Example: + * + * ``` + * App::classPath('Model/Table'); + * ``` + * + * Will return the path for tables - e.g. `src/Model/Table/`. + * + * ``` + * App::classPath('Model/Table', 'My/Plugin'); + * ``` + * + * Will return the plugin based path for those. + * + * @param string $type Package type. + * @param string|null $plugin Plugin name. + * @return array + */ + public static function classPath(string $type, ?string $plugin = null): array + { + if ($plugin !== null) { + return [ + Plugin::classPath($plugin) . $type . DIRECTORY_SEPARATOR, + ]; + } + + return [APP . $type . DIRECTORY_SEPARATOR]; + } + + /** + * Returns the full path to a package inside the CakePHP core + * + * Usage: + * + * ``` + * App::core('Cache/Engine'); + * ``` + * + * Will return the full path to the cache engines package. + * + * @param string $type Package type. + * @return array Full path to package + */ + public static function core(string $type): array + { + if ($type === 'templates') { + return [CORE_PATH . 'templates' . DIRECTORY_SEPARATOR]; + } + + return [CAKE . str_replace('/', DIRECTORY_SEPARATOR, $type) . DIRECTORY_SEPARATOR]; + } +} diff --git a/vendor/cakephp/core/BasePlugin.php b/vendor/cakephp/core/BasePlugin.php new file mode 100755 index 0000000..a748be3 --- /dev/null +++ b/vendor/cakephp/core/BasePlugin.php @@ -0,0 +1,305 @@ + $options Options + */ + public function __construct(array $options = []) + { + foreach (static::VALID_HOOKS as $key) { + if (isset($options[$key])) { + $this->{"{$key}Enabled"} = (bool)$options[$key]; + } + } + foreach (['name', 'path', 'classPath', 'configPath', 'templatePath'] as $path) { + if (isset($options[$path])) { + $this->{$path} = $options[$path]; + } + } + + $this->initialize(); + } + + /** + * Initialization hook called from constructor. + * + * @return void + */ + public function initialize(): void + { + } + + /** + * @inheritDoc + */ + public function getName(): string + { + if ($this->name) { + return $this->name; + } + $parts = explode('\\', static::class); + array_pop($parts); + $this->name = implode('/', $parts); + + return $this->name; + } + + /** + * @inheritDoc + */ + public function getPath(): string + { + if ($this->path) { + return $this->path; + } + $reflection = new ReflectionClass($this); + $path = dirname($reflection->getFileName()); + + // Trim off src + if (substr($path, -3) === 'src') { + $path = substr($path, 0, -3); + } + $this->path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; + + return $this->path; + } + + /** + * @inheritDoc + */ + public function getConfigPath(): string + { + if ($this->configPath) { + return $this->configPath; + } + $path = $this->getPath(); + + return $path . 'config' . DIRECTORY_SEPARATOR; + } + + /** + * @inheritDoc + */ + public function getClassPath(): string + { + if ($this->classPath) { + return $this->classPath; + } + $path = $this->getPath(); + + return $path . 'src' . DIRECTORY_SEPARATOR; + } + + /** + * @inheritDoc + */ + public function getTemplatePath(): string + { + if ($this->templatePath) { + return $this->templatePath; + } + $path = $this->getPath(); + + return $this->templatePath = $path . 'templates' . DIRECTORY_SEPARATOR; + } + + /** + * @inheritDoc + */ + public function enable(string $hook) + { + $this->checkHook($hook); + $this->{"{$hook}Enabled"} = true; + + return $this; + } + + /** + * @inheritDoc + */ + public function disable(string $hook) + { + $this->checkHook($hook); + $this->{"{$hook}Enabled"} = false; + + return $this; + } + + /** + * @inheritDoc + */ + public function isEnabled(string $hook): bool + { + $this->checkHook($hook); + + return $this->{"{$hook}Enabled"} === true; + } + + /** + * Check if a hook name is valid + * + * @param string $hook The hook name to check + * @throws \InvalidArgumentException on invalid hooks + * @return void + */ + protected function checkHook(string $hook): void + { + if (!in_array($hook, static::VALID_HOOKS, true)) { + throw new InvalidArgumentException( + "`$hook` is not a valid hook name. Must be one of " . implode(', ', static::VALID_HOOKS) + ); + } + } + + /** + * @inheritDoc + */ + public function routes(RouteBuilder $routes): void + { + $path = $this->getConfigPath() . 'routes.php'; + if (is_file($path)) { + $return = require $path; + if ($return instanceof Closure) { + $return($routes); + } + } + } + + /** + * @inheritDoc + */ + public function bootstrap(PluginApplicationInterface $app): void + { + $bootstrap = $this->getConfigPath() . 'bootstrap.php'; + if (is_file($bootstrap)) { + require $bootstrap; + } + } + + /** + * @inheritDoc + */ + public function console(CommandCollection $commands): CommandCollection + { + return $commands->addMany($commands->discoverPlugin($this->getName())); + } + + /** + * @inheritDoc + */ + public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue + { + return $middlewareQueue; + } + + /** + * Register container services for this plugin. + * + * @param \Cake\Core\ContainerInterface $container The container to add services to. + * @return void + */ + public function services(ContainerInterface $container): void + { + } +} diff --git a/vendor/cakephp/core/ClassLoader.php b/vendor/cakephp/core/ClassLoader.php new file mode 100755 index 0000000..e2a7525 --- /dev/null +++ b/vendor/cakephp/core/ClassLoader.php @@ -0,0 +1,139 @@ + + */ + protected $_prefixes = []; + + /** + * Register loader with SPL autoloader stack. + * + * @return void + */ + public function register(): void + { + /** @var callable $callable */ + $callable = [$this, 'loadClass']; + spl_autoload_register($callable); + } + + /** + * Adds a base directory for a namespace prefix. + * + * @param string $prefix The namespace prefix. + * @param string $baseDir A base directory for class files in the + * namespace. + * @param bool $prepend If true, prepend the base directory to the stack + * instead of appending it; this causes it to be searched first rather + * than last. + * @return void + */ + public function addNamespace(string $prefix, string $baseDir, bool $prepend = false): void + { + $prefix = trim($prefix, '\\') . '\\'; + + $baseDir = rtrim($baseDir, '/') . DIRECTORY_SEPARATOR; + $baseDir = rtrim($baseDir, DIRECTORY_SEPARATOR) . '/'; + + $this->_prefixes[$prefix] = $this->_prefixes[$prefix] ?? []; + + if ($prepend) { + array_unshift($this->_prefixes[$prefix], $baseDir); + } else { + $this->_prefixes[$prefix][] = $baseDir; + } + } + + /** + * Loads the class file for a given class name. + * + * @param string $class The fully-qualified class name. + * @return string|false The mapped file name on success, or boolean false on + * failure. + */ + public function loadClass(string $class) + { + $prefix = $class; + + while (($pos = strrpos($prefix, '\\')) !== false) { + $prefix = substr($class, 0, $pos + 1); + $relativeClass = substr($class, $pos + 1); + + $mappedFile = $this->_loadMappedFile($prefix, $relativeClass); + if ($mappedFile) { + return $mappedFile; + } + + $prefix = rtrim($prefix, '\\'); + } + + return false; + } + + /** + * Load the mapped file for a namespace prefix and relative class. + * + * @param string $prefix The namespace prefix. + * @param string $relativeClass The relative class name. + * @return string|false Boolean false if no mapped file can be loaded, or the + * name of the mapped file that was loaded. + */ + protected function _loadMappedFile(string $prefix, string $relativeClass) + { + if (!isset($this->_prefixes[$prefix])) { + return false; + } + + foreach ($this->_prefixes[$prefix] as $baseDir) { + $file = $baseDir . str_replace('\\', DIRECTORY_SEPARATOR, $relativeClass) . '.php'; + + if ($this->_requireFile($file)) { + return $file; + } + } + + return false; + } + + /** + * If a file exists, require it from the file system. + * + * @param string $file The file to require. + * @return bool True if the file exists, false if not. + */ + protected function _requireFile(string $file): bool + { + if (file_exists($file)) { + require $file; + + return true; + } + + return false; + } +} diff --git a/vendor/cakephp/core/Configure.php b/vendor/cakephp/core/Configure.php new file mode 100755 index 0000000..99e8259 --- /dev/null +++ b/vendor/cakephp/core/Configure.php @@ -0,0 +1,498 @@ + + */ + protected static $_values = [ + 'debug' => false, + ]; + + /** + * Configured engine classes, used to load config files from resources + * + * @see \Cake\Core\Configure::load() + * @var array<\Cake\Core\Configure\ConfigEngineInterface> + */ + protected static $_engines = []; + + /** + * Flag to track whether ini_set exists. + * + * @var bool|null + */ + protected static $_hasIniSet; + + /** + * Used to store a dynamic variable in Configure. + * + * Usage: + * ``` + * Configure::write('One.key1', 'value of the Configure::One[key1]'); + * Configure::write(['One.key1' => 'value of the Configure::One[key1]']); + * Configure::write('One', [ + * 'key1' => 'value of the Configure::One[key1]', + * 'key2' => 'value of the Configure::One[key2]' + * ]); + * + * Configure::write([ + * 'One.key1' => 'value of the Configure::One[key1]', + * 'One.key2' => 'value of the Configure::One[key2]' + * ]); + * ``` + * + * @param array|string $config The key to write, can be a dot notation value. + * Alternatively can be an array containing key(s) and value(s). + * @param mixed $value Value to set for the given key. + * @return void + * @link https://book.cakephp.org/4/en/development/configuration.html#writing-configuration-data + */ + public static function write($config, $value = null): void + { + if (!is_array($config)) { + $config = [$config => $value]; + } + + foreach ($config as $name => $valueToInsert) { + static::$_values = Hash::insert(static::$_values, $name, $valueToInsert); + } + + if (isset($config['debug'])) { + if (static::$_hasIniSet === null) { + static::$_hasIniSet = function_exists('ini_set'); + } + if (static::$_hasIniSet) { + ini_set('display_errors', $config['debug'] ? '1' : '0'); + } + } + } + + /** + * Used to read information stored in Configure. It's not + * possible to store `null` values in Configure. + * + * Usage: + * ``` + * Configure::read('Name'); will return all values for Name + * Configure::read('Name.key'); will return only the value of Configure::Name[key] + * ``` + * + * @param string|null $var Variable to obtain. Use '.' to access array elements. + * @param mixed $default The return value when the configure does not exist + * @return mixed Value stored in configure, or null. + * @link https://book.cakephp.org/4/en/development/configuration.html#reading-configuration-data + */ + public static function read(?string $var = null, $default = null) + { + if ($var === null) { + return static::$_values; + } + + return Hash::get(static::$_values, $var, $default); + } + + /** + * Returns true if given variable is set in Configure. + * + * @param string $var Variable name to check for + * @return bool True if variable is there + */ + public static function check(string $var): bool + { + if (empty($var)) { + return false; + } + + return static::read($var) !== null; + } + + /** + * Used to get information stored in Configure. It's not + * possible to store `null` values in Configure. + * + * Acts as a wrapper around Configure::read() and Configure::check(). + * The configure key/value pair fetched via this method is expected to exist. + * In case it does not an exception will be thrown. + * + * Usage: + * ``` + * Configure::readOrFail('Name'); will return all values for Name + * Configure::readOrFail('Name.key'); will return only the value of Configure::Name[key] + * ``` + * + * @param string $var Variable to obtain. Use '.' to access array elements. + * @return mixed Value stored in configure. + * @throws \RuntimeException if the requested configuration is not set. + * @link https://book.cakephp.org/4/en/development/configuration.html#reading-configuration-data + */ + public static function readOrFail(string $var) + { + if (!static::check($var)) { + throw new RuntimeException(sprintf('Expected configuration key "%s" not found.', $var)); + } + + return static::read($var); + } + + /** + * Used to delete a variable from Configure. + * + * Usage: + * ``` + * Configure::delete('Name'); will delete the entire Configure::Name + * Configure::delete('Name.key'); will delete only the Configure::Name[key] + * ``` + * + * @param string $var the var to be deleted + * @return void + * @link https://book.cakephp.org/4/en/development/configuration.html#deleting-configuration-data + */ + public static function delete(string $var): void + { + static::$_values = Hash::remove(static::$_values, $var); + } + + /** + * Used to consume information stored in Configure. It's not + * possible to store `null` values in Configure. + * + * Acts as a wrapper around Configure::consume() and Configure::check(). + * The configure key/value pair consumed via this method is expected to exist. + * In case it does not an exception will be thrown. + * + * @param string $var Variable to consume. Use '.' to access array elements. + * @return mixed Value stored in configure. + * @throws \RuntimeException if the requested configuration is not set. + * @since 3.6.0 + */ + public static function consumeOrFail(string $var) + { + if (!static::check($var)) { + throw new RuntimeException(sprintf('Expected configuration key "%s" not found.', $var)); + } + + return static::consume($var); + } + + /** + * Used to read and delete a variable from Configure. + * + * This is primarily used during bootstrapping to move configuration data + * out of configure into the various other classes in CakePHP. + * + * @param string $var The key to read and remove. + * @return array|string|null + */ + public static function consume(string $var) + { + if (strpos($var, '.') === false) { + if (!isset(static::$_values[$var])) { + return null; + } + $value = static::$_values[$var]; + unset(static::$_values[$var]); + + return $value; + } + $value = Hash::get(static::$_values, $var); + static::delete($var); + + return $value; + } + + /** + * Add a new engine to Configure. Engines allow you to read configuration + * files in various formats/storage locations. CakePHP comes with two built-in engines + * PhpConfig and IniConfig. You can also implement your own engine classes in your application. + * + * To add a new engine to Configure: + * + * ``` + * Configure::config('ini', new IniConfig()); + * ``` + * + * @param string $name The name of the engine being configured. This alias is used later to + * read values from a specific engine. + * @param \Cake\Core\Configure\ConfigEngineInterface $engine The engine to append. + * @return void + */ + public static function config(string $name, ConfigEngineInterface $engine): void + { + static::$_engines[$name] = $engine; + } + + /** + * Returns true if the Engine objects is configured. + * + * @param string $name Engine name. + * @return bool + */ + public static function isConfigured(string $name): bool + { + return isset(static::$_engines[$name]); + } + + /** + * Gets the names of the configured Engine objects. + * + * @return array + */ + public static function configured(): array + { + $engines = array_keys(static::$_engines); + + return array_map(function ($key) { + return (string)$key; + }, $engines); + } + + /** + * Remove a configured engine. This will unset the engine + * and make any future attempts to use it cause an Exception. + * + * @param string $name Name of the engine to drop. + * @return bool Success + */ + public static function drop(string $name): bool + { + if (!isset(static::$_engines[$name])) { + return false; + } + unset(static::$_engines[$name]); + + return true; + } + + /** + * Loads stored configuration information from a resource. You can add + * config file resource engines with `Configure::config()`. + * + * Loaded configuration information will be merged with the current + * runtime configuration. You can load configuration files from plugins + * by preceding the filename with the plugin name. + * + * `Configure::load('Users.user', 'default')` + * + * Would load the 'user' config file using the default config engine. You can load + * app config files by giving the name of the resource you want loaded. + * + * ``` + * Configure::load('setup', 'default'); + * ``` + * + * If using `default` config and no engine has been configured for it yet, + * one will be automatically created using PhpConfig + * + * @param string $key name of configuration resource to load. + * @param string $config Name of the configured engine to use to read the resource identified by $key. + * @param bool $merge if config files should be merged instead of simply overridden + * @return bool True if load successful. + * @throws \Cake\Core\Exception\CakeException if the $config engine is not found + * @link https://book.cakephp.org/4/en/development/configuration.html#reading-and-writing-configuration-files + */ + public static function load(string $key, string $config = 'default', bool $merge = true): bool + { + $engine = static::_getEngine($config); + if (!$engine) { + throw new CakeException( + sprintf( + 'Config %s engine not found when attempting to load %s.', + $config, + $key + ) + ); + } + + $values = $engine->read($key); + + if ($merge) { + $values = Hash::merge(static::$_values, $values); + } + + static::write($values); + + return true; + } + + /** + * Dump data currently in Configure into $key. The serialization format + * is decided by the config engine attached as $config. For example, if the + * 'default' adapter is a PhpConfig, the generated file will be a PHP + * configuration file loadable by the PhpConfig. + * + * ### Usage + * + * Given that the 'default' engine is an instance of PhpConfig. + * Save all data in Configure to the file `my_config.php`: + * + * ``` + * Configure::dump('my_config', 'default'); + * ``` + * + * Save only the error handling configuration: + * + * ``` + * Configure::dump('error', 'default', ['Error', 'Exception']; + * ``` + * + * @param string $key The identifier to create in the config adapter. + * This could be a filename or a cache key depending on the adapter being used. + * @param string $config The name of the configured adapter to dump data with. + * @param array $keys The name of the top-level keys you want to dump. + * This allows you save only some data stored in Configure. + * @return bool Success + * @throws \Cake\Core\Exception\CakeException if the adapter does not implement a `dump` method. + */ + public static function dump(string $key, string $config = 'default', array $keys = []): bool + { + $engine = static::_getEngine($config); + if (!$engine) { + throw new CakeException(sprintf('There is no "%s" config engine.', $config)); + } + $values = static::$_values; + if (!empty($keys)) { + $values = array_intersect_key($values, array_flip($keys)); + } + + return $engine->dump($key, $values); + } + + /** + * Get the configured engine. Internally used by `Configure::load()` and `Configure::dump()` + * Will create new PhpConfig for default if not configured yet. + * + * @param string $config The name of the configured adapter + * @return \Cake\Core\Configure\ConfigEngineInterface|null Engine instance or null + */ + protected static function _getEngine(string $config): ?ConfigEngineInterface + { + if (!isset(static::$_engines[$config])) { + if ($config !== 'default') { + return null; + } + static::config($config, new PhpConfig()); + } + + return static::$_engines[$config]; + } + + /** + * Used to determine the current version of CakePHP. + * + * Usage + * ``` + * Configure::version(); + * ``` + * + * @return string Current version of CakePHP + */ + public static function version(): string + { + $version = static::read('Cake.version'); + if ($version !== null) { + return $version; + } + + $path = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'config/config.php'; + if (is_file($path)) { + $config = require $path; + static::write($config); + + return static::read('Cake.version'); + } + + return 'unknown'; + } + + /** + * Used to write runtime configuration into Cache. Stored runtime configuration can be + * restored using `Configure::restore()`. These methods can be used to enable configuration managers + * frontends, or other GUI type interfaces for configuration. + * + * @param string $name The storage name for the saved configuration. + * @param string $cacheConfig The cache configuration to save into. Defaults to 'default' + * @param array|null $data Either an array of data to store, or leave empty to store all values. + * @return bool Success + * @throws \RuntimeException + */ + public static function store(string $name, string $cacheConfig = 'default', ?array $data = null): bool + { + if ($data === null) { + $data = static::$_values; + } + if (!class_exists(Cache::class)) { + throw new RuntimeException('You must install cakephp/cache to use Configure::store()'); + } + + return Cache::write($name, $data, $cacheConfig); + } + + /** + * Restores configuration data stored in the Cache into configure. Restored + * values will overwrite existing ones. + * + * @param string $name Name of the stored config file to load. + * @param string $cacheConfig Name of the Cache configuration to read from. + * @return bool Success. + * @throws \RuntimeException + */ + public static function restore(string $name, string $cacheConfig = 'default'): bool + { + if (!class_exists(Cache::class)) { + throw new RuntimeException('You must install cakephp/cache to use Configure::restore()'); + } + $values = Cache::read($name, $cacheConfig); + if ($values) { + static::write($values); + + return true; + } + + return false; + } + + /** + * Clear all values stored in Configure. + * + * @return void + */ + public static function clear(): void + { + static::$_values = []; + } +} diff --git a/vendor/cakephp/core/Configure/ConfigEngineInterface.php b/vendor/cakephp/core/Configure/ConfigEngineInterface.php new file mode 100755 index 0000000..a8f59ad --- /dev/null +++ b/vendor/cakephp/core/Configure/ConfigEngineInterface.php @@ -0,0 +1,44 @@ + ['password' => 'secret']]` + * + * You can nest properties as deeply as needed using `.`'s. In addition to using `.` you + * can use standard ini section notation to create nested structures: + * + * ``` + * [section] + * key = value + * ``` + * + * Once loaded into Configure, the above would be accessed using: + * + * `Configure::read('section.key'); + * + * You can also use `.` separated values in section names to create more deeply + * nested structures. + * + * IniConfig also manipulates how the special ini values of + * 'yes', 'no', 'on', 'off', 'null' are handled. These values will be + * converted to their boolean equivalents. + * + * @see https://secure.php.net/parse_ini_file + */ +class IniConfig implements ConfigEngineInterface +{ + use FileConfigTrait; + + /** + * File extension. + * + * @var string + */ + protected $_extension = '.ini'; + + /** + * The section to read, if null all sections will be read. + * + * @var string|null + */ + protected $_section; + + /** + * Build and construct a new ini file parser. The parser can be used to read + * ini files that are on the filesystem. + * + * @param string|null $path Path to load ini config files from. Defaults to CONFIG. + * @param string|null $section Only get one section, leave null to parse and fetch + * all sections in the ini file. + */ + public function __construct(?string $path = null, ?string $section = null) + { + if ($path === null) { + $path = CONFIG; + } + $this->_path = $path; + $this->_section = $section; + } + + /** + * Read an ini file and return the results as an array. + * + * @param string $key The identifier to read from. If the key has a . it will be treated + * as a plugin prefix. The chosen file must be on the engine's path. + * @return array Parsed configuration values. + * @throws \Cake\Core\Exception\CakeException when files don't exist. + * Or when files contain '..' as this could lead to abusive reads. + */ + public function read(string $key): array + { + $file = $this->_getFilePath($key, true); + + $contents = parse_ini_file($file, true); + if ($this->_section && isset($contents[$this->_section])) { + $values = $this->_parseNestedValues($contents[$this->_section]); + } else { + $values = []; + foreach ($contents as $section => $attribs) { + if (is_array($attribs)) { + $values[$section] = $this->_parseNestedValues($attribs); + } else { + $parse = $this->_parseNestedValues([$attribs]); + $values[$section] = array_shift($parse); + } + } + } + + return $values; + } + + /** + * parses nested values out of keys. + * + * @param array $values Values to be exploded. + * @return array Array of values exploded + */ + protected function _parseNestedValues(array $values): array + { + foreach ($values as $key => $value) { + if ($value === '1') { + $value = true; + } + if ($value === '') { + $value = false; + } + unset($values[$key]); + if (strpos((string)$key, '.') !== false) { + $values = Hash::insert($values, $key, $value); + } else { + $values[$key] = $value; + } + } + + return $values; + } + + /** + * Dumps the state of Configure data into an ini formatted string. + * + * @param string $key The identifier to write to. If the key has a . it will be treated + * as a plugin prefix. + * @param array $data The data to convert to ini file. + * @return bool Success. + */ + public function dump(string $key, array $data): bool + { + $result = []; + foreach ($data as $k => $value) { + $isSection = false; + /** @psalm-suppress InvalidArrayAccess */ + if ($k[0] !== '[') { + $result[] = "[$k]"; + $isSection = true; + } + if (is_array($value)) { + $kValues = Hash::flatten($value, '.'); + foreach ($kValues as $k2 => $v) { + $result[] = "$k2 = " . $this->_value($v); + } + } + if ($isSection) { + $result[] = ''; + } + } + $contents = trim(implode("\n", $result)); + + $filename = $this->_getFilePath($key); + + return file_put_contents($filename, $contents) > 0; + } + + /** + * Converts a value into the ini equivalent + * + * @param mixed $value Value to export. + * @return string String value for ini file. + */ + protected function _value($value): string + { + if ($value === null) { + return 'null'; + } + if ($value === true) { + return 'true'; + } + if ($value === false) { + return 'false'; + } + + return (string)$value; + } +} diff --git a/vendor/cakephp/core/Configure/Engine/JsonConfig.php b/vendor/cakephp/core/Configure/Engine/JsonConfig.php new file mode 100755 index 0000000..66e8a90 --- /dev/null +++ b/vendor/cakephp/core/Configure/Engine/JsonConfig.php @@ -0,0 +1,115 @@ +_path = $path; + } + + /** + * Read a config file and return its contents. + * + * Files with `.` in the name will be treated as values in plugins. Instead of + * reading from the initialized path, plugin keys will be located using Plugin::path(). + * + * @param string $key The identifier to read from. If the key has a . it will be treated + * as a plugin prefix. + * @return array Parsed configuration values. + * @throws \Cake\Core\Exception\CakeException When files don't exist or when + * files contain '..' (as this could lead to abusive reads) or when there + * is an error parsing the JSON string. + */ + public function read(string $key): array + { + $file = $this->_getFilePath($key, true); + + $values = json_decode(file_get_contents($file), true); + if (json_last_error() !== JSON_ERROR_NONE) { + throw new CakeException(sprintf( + 'Error parsing JSON string fetched from config file "%s.json": %s', + $key, + json_last_error_msg() + )); + } + if (!is_array($values)) { + throw new CakeException(sprintf( + 'Decoding JSON config file "%s.json" did not return an array', + $key + )); + } + + return $values; + } + + /** + * Converts the provided $data into a JSON string that can be used saved + * into a file and loaded later. + * + * @param string $key The identifier to write to. If the key has a . it will + * be treated as a plugin prefix. + * @param array $data Data to dump. + * @return bool Success + */ + public function dump(string $key, array $data): bool + { + $filename = $this->_getFilePath($key); + + return file_put_contents($filename, json_encode($data, JSON_PRETTY_PRINT)) > 0; + } +} diff --git a/vendor/cakephp/core/Configure/Engine/PhpConfig.php b/vendor/cakephp/core/Configure/Engine/PhpConfig.php new file mode 100755 index 0000000..6bdf3a4 --- /dev/null +++ b/vendor/cakephp/core/Configure/Engine/PhpConfig.php @@ -0,0 +1,114 @@ + false, + * 'Security' => [ + * 'salt' => 'its-secret' + * ], + * 'App' => [ + * 'namespace' => 'App' + * ] + * ]; + * ``` + * + * @see \Cake\Core\Configure::load() for how to load custom configuration files. + */ +class PhpConfig implements ConfigEngineInterface +{ + use FileConfigTrait; + + /** + * File extension. + * + * @var string + */ + protected $_extension = '.php'; + + /** + * Constructor for PHP Config file reading. + * + * @param string|null $path The path to read config files from. Defaults to CONFIG. + */ + public function __construct(?string $path = null) + { + if ($path === null) { + $path = CONFIG; + } + $this->_path = $path; + } + + /** + * Read a config file and return its contents. + * + * Files with `.` in the name will be treated as values in plugins. Instead of + * reading from the initialized path, plugin keys will be located using Plugin::path(). + * + * @param string $key The identifier to read from. If the key has a . it will be treated + * as a plugin prefix. + * @return array Parsed configuration values. + * @throws \Cake\Core\Exception\CakeException when files don't exist or they don't contain `$config`. + * Or when files contain '..' as this could lead to abusive reads. + */ + public function read(string $key): array + { + $file = $this->_getFilePath($key, true); + + $config = null; + + $return = include $file; + if (is_array($return)) { + return $return; + } + + throw new CakeException(sprintf('Config file "%s" did not return an array', $key . '.php')); + } + + /** + * Converts the provided $data into a string of PHP code that can + * be used saved into a file and loaded later. + * + * @param string $key The identifier to write to. If the key has a . it will be treated + * as a plugin prefix. + * @param array $data Data to dump. + * @return bool Success + */ + public function dump(string $key, array $data): bool + { + $contents = '_getFilePath($key); + + return file_put_contents($filename, $contents) > 0; + } +} diff --git a/vendor/cakephp/core/Configure/FileConfigTrait.php b/vendor/cakephp/core/Configure/FileConfigTrait.php new file mode 100755 index 0000000..79bcdea --- /dev/null +++ b/vendor/cakephp/core/Configure/FileConfigTrait.php @@ -0,0 +1,72 @@ +_path . $key; + } + + $file .= $this->_extension; + + if (!$checkExists || is_file($file)) { + return $file; + } + + $realPath = realpath($file); + if ($realPath !== false && is_file($realPath)) { + return $realPath; + } + + throw new CakeException(sprintf('Could not load configuration file: %s', $file)); + } +} diff --git a/vendor/cakephp/core/ConsoleApplicationInterface.php b/vendor/cakephp/core/ConsoleApplicationInterface.php new file mode 100755 index 0000000..b2a532a --- /dev/null +++ b/vendor/cakephp/core/ConsoleApplicationInterface.php @@ -0,0 +1,42 @@ +_attributes = $message; + $message = vsprintf($this->_messageTemplate, $message); + } + parent::__construct($message, $code ?? $this->_defaultCode, $previous); + } + + /** + * Get the passed in attributes + * + * @return array + */ + public function getAttributes(): array + { + return $this->_attributes; + } + + /** + * Get/set the response header to be used + * + * See also {@link \Cake\Http\Response::withHeader()} + * + * @param array|string|null $header A single header string or an associative + * array of "header name" => "header value" + * @param string|null $value The header value. + * @return array|null + * @deprecated 4.2.0 Use `HttpException::setHeaders()` instead. Response headers + * should be set for HttpException only. + */ + public function responseHeader($header = null, $value = null): ?array + { + if ($header === null) { + return $this->_responseHeaders; + } + + deprecationWarning( + 'Setting HTTP response headers from Exception directly is deprecated. ' . + 'If your exceptions extend Exception, they must now extend HttpException. ' . + 'You should only set HTTP headers on HttpException instances via the `setHeaders()` method.' + ); + if (is_array($header)) { + return $this->_responseHeaders = $header; + } + + return $this->_responseHeaders = [$header => $value]; + } +} + +// phpcs:disable +class_alias( + 'Cake\Core\Exception\CakeException', + 'Cake\Core\Exception\Exception' +); +// phpcs:enable diff --git a/vendor/cakephp/core/Exception/Exception.php b/vendor/cakephp/core/Exception/Exception.php new file mode 100755 index 0000000..bd93c50 --- /dev/null +++ b/vendor/cakephp/core/Exception/Exception.php @@ -0,0 +1,21 @@ + + */ + protected $_config = []; + + /** + * Whether the config property has already been configured with defaults + * + * @var bool + */ + protected $_configInitialized = false; + + /** + * Sets the config. + * + * ### Usage + * + * Setting a specific value: + * + * ``` + * $this->setConfig('key', $value); + * ``` + * + * Setting a nested value: + * + * ``` + * $this->setConfig('some.nested.key', $value); + * ``` + * + * Updating multiple config settings at the same time: + * + * ``` + * $this->setConfig(['one' => 'value', 'another' => 'value']); + * ``` + * + * @param array|string $key The key to set, or a complete array of configs. + * @param mixed|null $value The value to set. + * @param bool $merge Whether to recursively merge or overwrite existing config, defaults to true. + * @return $this + * @throws \Cake\Core\Exception\CakeException When trying to set a key that is invalid. + */ + public function setConfig($key, $value = null, $merge = true) + { + if (!$this->_configInitialized) { + $this->_config = $this->_defaultConfig; + $this->_configInitialized = true; + } + + $this->_configWrite($key, $value, $merge); + + return $this; + } + + /** + * Returns the config. + * + * ### Usage + * + * Reading the whole config: + * + * ``` + * $this->getConfig(); + * ``` + * + * Reading a specific value: + * + * ``` + * $this->getConfig('key'); + * ``` + * + * Reading a nested value: + * + * ``` + * $this->getConfig('some.nested.key'); + * ``` + * + * Reading with default value: + * + * ``` + * $this->getConfig('some-key', 'default-value'); + * ``` + * + * @param string|null $key The key to get or null for the whole config. + * @param mixed $default The return value when the key does not exist. + * @return mixed Configuration data at the named key or null if the key does not exist. + */ + public function getConfig(?string $key = null, $default = null) + { + if (!$this->_configInitialized) { + $this->_config = $this->_defaultConfig; + $this->_configInitialized = true; + } + + $return = $this->_configRead($key); + + return $return ?? $default; + } + + /** + * Returns the config for this specific key. + * + * The config value for this key must exist, it can never be null. + * + * @param string $key The key to get. + * @return mixed Configuration data at the named key + * @throws \InvalidArgumentException + */ + public function getConfigOrFail(string $key) + { + $config = $this->getConfig($key); + if ($config === null) { + throw new InvalidArgumentException(sprintf('Expected configuration `%s` not found.', $key)); + } + + return $config; + } + + /** + * Merge provided config with existing config. Unlike `config()` which does + * a recursive merge for nested keys, this method does a simple merge. + * + * Setting a specific value: + * + * ``` + * $this->configShallow('key', $value); + * ``` + * + * Setting a nested value: + * + * ``` + * $this->configShallow('some.nested.key', $value); + * ``` + * + * Updating multiple config settings at the same time: + * + * ``` + * $this->configShallow(['one' => 'value', 'another' => 'value']); + * ``` + * + * @param array|string $key The key to set, or a complete array of configs. + * @param mixed|null $value The value to set. + * @return $this + */ + public function configShallow($key, $value = null) + { + if (!$this->_configInitialized) { + $this->_config = $this->_defaultConfig; + $this->_configInitialized = true; + } + + $this->_configWrite($key, $value, 'shallow'); + + return $this; + } + + /** + * Reads a config key. + * + * @param string|null $key Key to read. + * @return mixed + */ + protected function _configRead(?string $key) + { + if ($key === null) { + return $this->_config; + } + + if (strpos($key, '.') === false) { + return $this->_config[$key] ?? null; + } + + $return = $this->_config; + + foreach (explode('.', $key) as $k) { + if (!is_array($return) || !isset($return[$k])) { + $return = null; + break; + } + + $return = $return[$k]; + } + + return $return; + } + + /** + * Writes a config key. + * + * @param array|string $key Key to write to. + * @param mixed $value Value to write. + * @param string|bool $merge True to merge recursively, 'shallow' for simple merge, + * false to overwrite, defaults to false. + * @return void + * @throws \Cake\Core\Exception\CakeException if attempting to clobber existing config + */ + protected function _configWrite($key, $value, $merge = false): void + { + if (is_string($key) && $value === null) { + $this->_configDelete($key); + + return; + } + + if ($merge) { + $update = is_array($key) ? $key : [$key => $value]; + if ($merge === 'shallow') { + $this->_config = array_merge($this->_config, Hash::expand($update)); + } else { + $this->_config = Hash::merge($this->_config, Hash::expand($update)); + } + + return; + } + + if (is_array($key)) { + foreach ($key as $k => $val) { + $this->_configWrite($k, $val); + } + + return; + } + + if (strpos($key, '.') === false) { + $this->_config[$key] = $value; + + return; + } + + $update = &$this->_config; + $stack = explode('.', $key); + + foreach ($stack as $k) { + if (!is_array($update)) { + throw new CakeException(sprintf('Cannot set %s value', $key)); + } + + $update[$k] = $update[$k] ?? []; + + $update = &$update[$k]; + } + + $update = $value; + } + + /** + * Deletes a single config key. + * + * @param string $key Key to delete. + * @return void + * @throws \Cake\Core\Exception\CakeException if attempting to clobber existing config + */ + protected function _configDelete(string $key): void + { + if (strpos($key, '.') === false) { + unset($this->_config[$key]); + + return; + } + + $update = &$this->_config; + $stack = explode('.', $key); + $length = count($stack); + + foreach ($stack as $i => $k) { + if (!is_array($update)) { + throw new CakeException(sprintf('Cannot unset %s value', $key)); + } + + if (!isset($update[$k])) { + break; + } + + if ($i === $length - 1) { + unset($update[$k]); + break; + } + + $update = &$update[$k]; + } + } +} diff --git a/vendor/cakephp/core/LICENSE.txt b/vendor/cakephp/core/LICENSE.txt new file mode 100755 index 0000000..b938c9e --- /dev/null +++ b/vendor/cakephp/core/LICENSE.txt @@ -0,0 +1,22 @@ +The MIT License (MIT) + +CakePHP(tm) : The Rapid Development PHP Framework (https://cakephp.org) +Copyright (c) 2005-2020, Cake Software Foundation, Inc. (https://cakefoundation.org) + +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. diff --git a/vendor/cakephp/core/ObjectRegistry.php b/vendor/cakephp/core/ObjectRegistry.php new file mode 100755 index 0000000..25b8d16 --- /dev/null +++ b/vendor/cakephp/core/ObjectRegistry.php @@ -0,0 +1,416 @@ + + */ +abstract class ObjectRegistry implements Countable, IteratorAggregate +{ + /** + * Map of loaded objects. + * + * @var array + * @psalm-var array + */ + protected $_loaded = []; + + /** + * Loads/constructs an object instance. + * + * Will return the instance in the registry if it already exists. + * If a subclass provides event support, you can use `$config['enabled'] = false` + * to exclude constructed objects from being registered for events. + * + * Using {@link \Cake\Controller\Component::$components} as an example. You can alias + * an object by setting the 'className' key, i.e., + * + * ``` + * protected $components = [ + * 'Email' => [ + * 'className' => 'App\Controller\Component\AliasedEmailComponent' + * ]; + * ]; + * ``` + * + * All calls to the `Email` component would use `AliasedEmail` instead. + * + * @param string $name The name/class of the object to load. + * @param array $config Additional settings to use when loading the object. + * @return mixed + * @psalm-return TObject + * @throws \Exception If the class cannot be found. + */ + public function load(string $name, array $config = []) + { + if (isset($config['className'])) { + $objName = $name; + $name = $config['className']; + } else { + [, $objName] = pluginSplit($name); + } + + $loaded = isset($this->_loaded[$objName]); + if ($loaded && !empty($config)) { + $this->_checkDuplicate($objName, $config); + } + if ($loaded) { + return $this->_loaded[$objName]; + } + + $className = $name; + if (is_string($name)) { + $className = $this->_resolveClassName($name); + if ($className === null) { + [$plugin, $name] = pluginSplit($name); + $this->_throwMissingClassError($name, $plugin); + } + } + + /** + * @psalm-var TObject $instance + * @psalm-suppress PossiblyNullArgument + **/ + $instance = $this->_create($className, $objName, $config); + $this->_loaded[$objName] = $instance; + + return $instance; + } + + /** + * Check for duplicate object loading. + * + * If a duplicate is being loaded and has different configuration, that is + * bad and an exception will be raised. + * + * An exception is raised, as replacing the object will not update any + * references other objects may have. Additionally, simply updating the runtime + * configuration is not a good option as we may be missing important constructor + * logic dependent on the configuration. + * + * @param string $name The name of the alias in the registry. + * @param array $config The config data for the new instance. + * @return void + * @throws \RuntimeException When a duplicate is found. + */ + protected function _checkDuplicate(string $name, array $config): void + { + $existing = $this->_loaded[$name]; + $msg = sprintf('The "%s" alias has already been loaded.', $name); + $hasConfig = method_exists($existing, 'getConfig'); + if (!$hasConfig) { + throw new RuntimeException($msg); + } + if (empty($config)) { + return; + } + $existingConfig = $existing->getConfig(); + unset($config['enabled'], $existingConfig['enabled']); + + $failure = null; + foreach ($config as $key => $value) { + if (!array_key_exists($key, $existingConfig)) { + $failure = " The `{$key}` was not defined in the previous configuration data."; + break; + } + if (isset($existingConfig[$key]) && $existingConfig[$key] !== $value) { + $failure = sprintf( + ' The `%s` key has a value of `%s` but previously had a value of `%s`', + $key, + json_encode($value), + json_encode($existingConfig[$key]) + ); + break; + } + } + if ($failure) { + throw new RuntimeException($msg . $failure); + } + } + + /** + * Should resolve the classname for a given object type. + * + * @param string $class The class to resolve. + * @return string|null The resolved name or null for failure. + * @psalm-return class-string|null + */ + abstract protected function _resolveClassName(string $class): ?string; + + /** + * Throw an exception when the requested object name is missing. + * + * @param string $class The class that is missing. + * @param string|null $plugin The plugin $class is missing from. + * @return void + * @throws \Exception + */ + abstract protected function _throwMissingClassError(string $class, ?string $plugin): void; + + /** + * Create an instance of a given classname. + * + * This method should construct and do any other initialization logic + * required. + * + * @param object|string $class The class to build. + * @param string $alias The alias of the object. + * @param array $config The Configuration settings for construction + * @return object + * @psalm-param TObject|string $class + * @psalm-return TObject + */ + abstract protected function _create($class, string $alias, array $config); + + /** + * Get the list of loaded objects. + * + * @return array List of object names. + */ + public function loaded(): array + { + return array_keys($this->_loaded); + } + + /** + * Check whether a given object is loaded. + * + * @param string $name The object name to check for. + * @return bool True is object is loaded else false. + */ + public function has(string $name): bool + { + return isset($this->_loaded[$name]); + } + + /** + * Get loaded object instance. + * + * @param string $name Name of object. + * @return object Object instance. + * @throws \RuntimeException If not loaded or found. + * @psalm-return TObject + */ + public function get(string $name) + { + if (!isset($this->_loaded[$name])) { + throw new RuntimeException(sprintf('Unknown object "%s"', $name)); + } + + return $this->_loaded[$name]; + } + + /** + * Provide public read access to the loaded objects + * + * @param string $name Name of property to read + * @return object|null + * @psalm-return TObject|null + */ + public function __get(string $name) + { + return $this->_loaded[$name] ?? null; + } + + /** + * Provide isset access to _loaded + * + * @param string $name Name of object being checked. + * @return bool + */ + public function __isset(string $name): bool + { + return $this->has($name); + } + + /** + * Sets an object. + * + * @param string $name Name of a property to set. + * @param object $object Object to set. + * @psalm-param TObject $object + * @return void + */ + public function __set(string $name, $object): void + { + $this->set($name, $object); + } + + /** + * Unsets an object. + * + * @param string $name Name of a property to unset. + * @return void + */ + public function __unset(string $name): void + { + $this->unload($name); + } + + /** + * Normalizes an object array, creates an array that makes lazy loading + * easier + * + * @param array $objects Array of child objects to normalize. + * @return array Array of normalized objects. + */ + public function normalizeArray(array $objects): array + { + $normal = []; + foreach ($objects as $i => $objectName) { + $config = []; + if (!is_int($i)) { + $config = (array)$objectName; + $objectName = $i; + } + [, $name] = pluginSplit($objectName); + if (isset($config['class'])) { + $normal[$name] = $config + ['config' => []]; + } else { + $normal[$name] = ['class' => $objectName, 'config' => $config]; + } + } + + return $normal; + } + + /** + * Clear loaded instances in the registry. + * + * If the registry subclass has an event manager, the objects will be detached from events as well. + * + * @return $this + */ + public function reset() + { + foreach (array_keys($this->_loaded) as $name) { + $this->unload((string)$name); + } + + return $this; + } + + /** + * Set an object directly into the registry by name. + * + * If this collection implements events, the passed object will + * be attached into the event manager + * + * @param string $name The name of the object to set in the registry. + * @param object $object instance to store in the registry + * @return $this + * @psalm-param TObject $object + */ + public function set(string $name, object $object) + { + [, $objName] = pluginSplit($name); + + // Just call unload if the object was loaded before + if (array_key_exists($name, $this->_loaded)) { + $this->unload($name); + } + if ($this instanceof EventDispatcherInterface && $object instanceof EventListenerInterface) { + $this->getEventManager()->on($object); + } + $this->_loaded[$objName] = $object; + + return $this; + } + + /** + * Remove an object from the registry. + * + * If this registry has an event manager, the object will be detached from any events as well. + * + * @param string $name The name of the object to remove from the registry. + * @return $this + */ + public function unload(string $name) + { + if (empty($this->_loaded[$name])) { + [$plugin, $name] = pluginSplit($name); + $this->_throwMissingClassError($name, $plugin); + } + + $object = $this->_loaded[$name]; + if ($this instanceof EventDispatcherInterface && $object instanceof EventListenerInterface) { + $this->getEventManager()->off($object); + } + unset($this->_loaded[$name]); + + return $this; + } + + /** + * Returns an array iterator. + * + * @return \Traversable + * @psalm-return \Traversable + */ + public function getIterator(): Traversable + { + return new ArrayIterator($this->_loaded); + } + + /** + * Returns the number of loaded objects. + * + * @return int + */ + public function count(): int + { + return count($this->_loaded); + } + + /** + * Debug friendly object properties. + * + * @return array + */ + public function __debugInfo(): array + { + $properties = get_object_vars($this); + if (isset($properties['_loaded'])) { + $properties['_loaded'] = array_keys($properties['_loaded']); + } + + return $properties; + } +} diff --git a/vendor/cakephp/core/Plugin.php b/vendor/cakephp/core/Plugin.php new file mode 100755 index 0000000..67e1a63 --- /dev/null +++ b/vendor/cakephp/core/Plugin.php @@ -0,0 +1,136 @@ +get($name); + + return $plugin->getPath(); + } + + /** + * Returns the filesystem path for plugin's folder containing class files. + * + * @param string $name name of the plugin in CamelCase format. + * @return string Path to the plugin folder containing class files. + * @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded. + */ + public static function classPath(string $name): string + { + $plugin = static::getCollection()->get($name); + + return $plugin->getClassPath(); + } + + /** + * Returns the filesystem path for plugin's folder containing config files. + * + * @param string $name name of the plugin in CamelCase format. + * @return string Path to the plugin folder containing config files. + * @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded. + */ + public static function configPath(string $name): string + { + $plugin = static::getCollection()->get($name); + + return $plugin->getConfigPath(); + } + + /** + * Returns the filesystem path for plugin's folder containing template files. + * + * @param string $name name of the plugin in CamelCase format. + * @return string Path to the plugin folder containing template files. + * @throws \Cake\Core\Exception\MissingPluginException If plugin has not been loaded. + */ + public static function templatePath(string $name): string + { + $plugin = static::getCollection()->get($name); + + return $plugin->getTemplatePath(); + } + + /** + * Returns true if the plugin $plugin is already loaded. + * + * @param string $plugin Plugin name. + * @return bool + * @since 3.7.0 + */ + public static function isLoaded(string $plugin): bool + { + return static::getCollection()->has($plugin); + } + + /** + * Return a list of loaded plugins. + * + * @return array A list of plugins that have been loaded + */ + public static function loaded(): array + { + $names = []; + foreach (static::getCollection() as $plugin) { + $names[] = $plugin->getName(); + } + sort($names); + + return $names; + } + + /** + * Get the shared plugin collection. + * + * This method should generally not be used during application + * runtime as plugins should be set during Application startup. + * + * @return \Cake\Core\PluginCollection + */ + public static function getCollection(): PluginCollection + { + if (!isset(static::$plugins)) { + static::$plugins = new PluginCollection(); + } + + return static::$plugins; + } +} diff --git a/vendor/cakephp/core/PluginApplicationInterface.php b/vendor/cakephp/core/PluginApplicationInterface.php new file mode 100755 index 0000000..0ba0771 --- /dev/null +++ b/vendor/cakephp/core/PluginApplicationInterface.php @@ -0,0 +1,75 @@ + $config The configuration data for the plugin if using a string for $name + * @return $this + */ + public function addPlugin($name, array $config = []); + + /** + * Run bootstrap logic for loaded plugins. + * + * @return void + */ + public function pluginBootstrap(): void; + + /** + * Run routes hooks for loaded plugins + * + * @param \Cake\Routing\RouteBuilder $routes The route builder to use. + * @return \Cake\Routing\RouteBuilder + */ + public function pluginRoutes(RouteBuilder $routes): RouteBuilder; + + /** + * Run middleware hooks for plugins + * + * @param \Cake\Http\MiddlewareQueue $middleware The MiddlewareQueue to use. + * @return \Cake\Http\MiddlewareQueue + */ + public function pluginMiddleware(MiddlewareQueue $middleware): MiddlewareQueue; + + /** + * Run console hooks for plugins + * + * @param \Cake\Console\CommandCollection $commands The CommandCollection to use. + * @return \Cake\Console\CommandCollection + */ + public function pluginConsole(CommandCollection $commands): CommandCollection; +} diff --git a/vendor/cakephp/core/PluginCollection.php b/vendor/cakephp/core/PluginCollection.php new file mode 100755 index 0000000..a9fc4a1 --- /dev/null +++ b/vendor/cakephp/core/PluginCollection.php @@ -0,0 +1,363 @@ + + */ +class PluginCollection implements Iterator, Countable +{ + /** + * Plugin list + * + * @var array<\Cake\Core\PluginInterface> + */ + protected $plugins = []; + + /** + * Names of plugins + * + * @var array + */ + protected $names = []; + + /** + * Iterator position stack. + * + * @var array + */ + protected $positions = []; + + /** + * Loop depth + * + * @var int + */ + protected $loopDepth = -1; + + /** + * Constructor + * + * @param array<\Cake\Core\PluginInterface> $plugins The map of plugins to add to the collection. + */ + public function __construct(array $plugins = []) + { + foreach ($plugins as $plugin) { + $this->add($plugin); + } + $this->loadConfig(); + } + + /** + * Load the path information stored in vendor/cakephp-plugins.php + * + * This file is generated by the cakephp/plugin-installer package and used + * to locate plugins on the filesystem as applications can use `extra.plugin-paths` + * in their composer.json file to move plugin outside of vendor/ + * + * @internal + * @return void + */ + protected function loadConfig(): void + { + if (Configure::check('plugins')) { + return; + } + $vendorFile = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'cakephp-plugins.php'; + if (!is_file($vendorFile)) { + $vendorFile = dirname(dirname(dirname(dirname(__DIR__)))) . DIRECTORY_SEPARATOR . 'cakephp-plugins.php'; + if (!is_file($vendorFile)) { + Configure::write(['plugins' => []]); + + return; + } + } + + $config = require $vendorFile; + Configure::write($config); + } + + /** + * Locate a plugin path by looking at configuration data. + * + * This will use the `plugins` Configure key, and fallback to enumerating `App::path('plugins')` + * + * This method is not part of the official public API as plugins with + * no plugin class are being phased out. + * + * @param string $name The plugin name to locate a path for. + * @return string + * @throws \Cake\Core\Exception\MissingPluginException when a plugin path cannot be resolved. + * @internal + */ + public function findPath(string $name): string + { + // Ensure plugin config is loaded each time. This is necessary primarily + // for testing because the Configure::clear() call in TestCase::tearDown() + // wipes out all configuration including plugin paths config. + $this->loadConfig(); + + $path = Configure::read('plugins.' . $name); + if ($path) { + return $path; + } + + $pluginPath = str_replace('/', DIRECTORY_SEPARATOR, $name); + $paths = App::path('plugins'); + foreach ($paths as $path) { + if (is_dir($path . $pluginPath)) { + return $path . $pluginPath . DIRECTORY_SEPARATOR; + } + } + + throw new MissingPluginException(['plugin' => $name]); + } + + /** + * Add a plugin to the collection + * + * Plugins will be keyed by their names. + * + * @param \Cake\Core\PluginInterface $plugin The plugin to load. + * @return $this + */ + public function add(PluginInterface $plugin) + { + $name = $plugin->getName(); + $this->plugins[$name] = $plugin; + $this->names = array_keys($this->plugins); + + return $this; + } + + /** + * Remove a plugin from the collection if it exists. + * + * @param string $name The named plugin. + * @return $this + */ + public function remove(string $name) + { + unset($this->plugins[$name]); + $this->names = array_keys($this->plugins); + + return $this; + } + + /** + * Remove all plugins from the collection + * + * @return $this + */ + public function clear() + { + $this->plugins = []; + $this->names = []; + $this->positions = []; + $this->loopDepth = -1; + + return $this; + } + + /** + * Check whether the named plugin exists in the collection. + * + * @param string $name The named plugin. + * @return bool + */ + public function has(string $name): bool + { + return isset($this->plugins[$name]); + } + + /** + * Get the a plugin by name. + * + * If a plugin isn't already loaded it will be autoloaded on first access + * and that plugins loaded this way may miss some hook methods. + * + * @param string $name The plugin to get. + * @return \Cake\Core\PluginInterface The plugin. + * @throws \Cake\Core\Exception\MissingPluginException when unknown plugins are fetched. + */ + public function get(string $name): PluginInterface + { + if ($this->has($name)) { + return $this->plugins[$name]; + } + + $plugin = $this->create($name); + $this->add($plugin); + + return $plugin; + } + + /** + * Create a plugin instance from a name/classname and configuration. + * + * @param string $name The plugin name or classname + * @param array $config Configuration options for the plugin. + * @return \Cake\Core\PluginInterface + * @throws \Cake\Core\Exception\MissingPluginException When plugin instance could not be created. + */ + public function create(string $name, array $config = []): PluginInterface + { + if ($name === '') { + throw new CakeException('Cannot create a plugin with empty name'); + } + + if (strpos($name, '\\') !== false) { + /** @var \Cake\Core\PluginInterface */ + return new $name($config); + } + + $config += ['name' => $name]; + $namespace = str_replace('/', '\\', $name); + + $className = $namespace . '\\' . 'Plugin'; + // Check for [Vendor/]Foo/Plugin class + if (!class_exists($className)) { + $pos = strpos($name, '/'); + if ($pos === false) { + $className = $namespace . '\\' . $name . 'Plugin'; + } else { + $className = $namespace . '\\' . substr($name, $pos + 1) . 'Plugin'; + } + + // Check for [Vendor/]Foo/FooPlugin + if (!class_exists($className)) { + $className = BasePlugin::class; + if (empty($config['path'])) { + $config['path'] = $this->findPath($name); + } + } + } + + /** @var class-string<\Cake\Core\PluginInterface> $className */ + return new $className($config); + } + + /** + * Implementation of Countable. + * + * Get the number of plugins in the collection. + * + * @return int + */ + public function count(): int + { + return count($this->plugins); + } + + /** + * Part of Iterator Interface + * + * @return void + */ + public function next(): void + { + $this->positions[$this->loopDepth]++; + } + + /** + * Part of Iterator Interface + * + * @return string + */ + public function key(): string + { + return $this->names[$this->positions[$this->loopDepth]]; + } + + /** + * Part of Iterator Interface + * + * @return \Cake\Core\PluginInterface + */ + public function current(): PluginInterface + { + $position = $this->positions[$this->loopDepth]; + $name = $this->names[$position]; + + return $this->plugins[$name]; + } + + /** + * Part of Iterator Interface + * + * @return void + */ + public function rewind(): void + { + $this->positions[] = 0; + $this->loopDepth += 1; + } + + /** + * Part of Iterator Interface + * + * @return bool + */ + public function valid(): bool + { + $valid = isset($this->names[$this->positions[$this->loopDepth]]); + if (!$valid) { + array_pop($this->positions); + $this->loopDepth -= 1; + } + + return $valid; + } + + /** + * Filter the plugins to those with the named hook enabled. + * + * @param string $hook The hook to filter plugins by + * @return \Generator<\Cake\Core\PluginInterface> A generator containing matching plugins. + * @throws \InvalidArgumentException on invalid hooks + */ + public function with(string $hook): Generator + { + if (!in_array($hook, PluginInterface::VALID_HOOKS, true)) { + throw new InvalidArgumentException("The `{$hook}` hook is not a known plugin hook."); + } + foreach ($this as $plugin) { + if ($plugin->isEnabled($hook)) { + yield $plugin; + } + } + } +} diff --git a/vendor/cakephp/core/PluginInterface.php b/vendor/cakephp/core/PluginInterface.php new file mode 100755 index 0000000..e251cdf --- /dev/null +++ b/vendor/cakephp/core/PluginInterface.php @@ -0,0 +1,135 @@ + + */ + public const VALID_HOOKS = ['bootstrap', 'console', 'middleware', 'routes', 'services']; + + /** + * Get the name of this plugin. + * + * @return string + */ + public function getName(): string; + + /** + * Get the filesystem path to this plugin + * + * @return string + */ + public function getPath(): string; + + /** + * Get the filesystem path to configuration for this plugin + * + * @return string + */ + public function getConfigPath(): string; + + /** + * Get the filesystem path to configuration for this plugin + * + * @return string + */ + public function getClassPath(): string; + + /** + * Get the filesystem path to templates for this plugin + * + * @return string + */ + public function getTemplatePath(): string; + + /** + * Load all the application configuration and bootstrap logic. + * + * The default implementation of this method will include the `config/bootstrap.php` in the plugin if it exist. You + * can override this method to replace that behavior. + * + * The host application is provided as an argument. This allows you to load additional + * plugin dependencies, or attach events. + * + * @param \Cake\Core\PluginApplicationInterface $app The host application + * @return void + */ + public function bootstrap(PluginApplicationInterface $app): void; + + /** + * Add console commands for the plugin. + * + * @param \Cake\Console\CommandCollection $commands The command collection to update + * @return \Cake\Console\CommandCollection + */ + public function console(CommandCollection $commands): CommandCollection; + + /** + * Add middleware for the plugin. + * + * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to update. + * @return \Cake\Http\MiddlewareQueue + */ + public function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue; + + /** + * Add routes for the plugin. + * + * The default implementation of this method will include the `config/routes.php` in the plugin if it exists. You + * can override this method to replace that behavior. + * + * @param \Cake\Routing\RouteBuilder $routes The route builder to update. + * @return void + */ + public function routes(RouteBuilder $routes): void; + + /** + * Disables the named hook + * + * @param string $hook The hook to disable + * @return $this + */ + public function disable(string $hook); + + /** + * Enables the named hook + * + * @param string $hook The hook to disable + * @return $this + */ + public function enable(string $hook); + + /** + * Check if the named hook is enabled + * + * @param string $hook The hook to check + * @return bool + */ + public function isEnabled(string $hook): bool; +} diff --git a/vendor/cakephp/core/README.md b/vendor/cakephp/core/README.md new file mode 100755 index 0000000..f26cba6 --- /dev/null +++ b/vendor/cakephp/core/README.md @@ -0,0 +1,37 @@ +[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/core.svg?style=flat-square)](https://packagist.org/packages/cakephp/core) +[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE.txt) + +# CakePHP Core Classes + +A set of classes used for configuration files reading and storing. +This repository contains the classes that are used as glue for creating the CakePHP framework. + +## Usage + +You can use the `Configure` class to store arbitrary configuration data: + +```php +use Cake\Core\Configure; +use Cake\Core\Configure\Engine\PhpConfig; + +Configure::write('Company.name','Pizza, Inc.'); +Configure::read('Company.name'); // Returns: 'Pizza, Inc.' +``` + +It also possible to load configuration from external files: + +```php +Configure::config('default', new PhpConfig('/path/to/config/folder')); +Configure::load('app', 'default', false); +Configure::load('other_config', 'default'); +``` + +And write the configuration back into files: + +```php +Configure::dump('my_config', 'default'); +``` + +## Documentation + +Please make sure you check the [official documentation](https://book.cakephp.org/4/en/development/configuration.html) diff --git a/vendor/cakephp/core/Retry/CommandRetry.php b/vendor/cakephp/core/Retry/CommandRetry.php new file mode 100755 index 0000000..1211695 --- /dev/null +++ b/vendor/cakephp/core/Retry/CommandRetry.php @@ -0,0 +1,94 @@ +strategy = $strategy; + $this->maxRetries = $maxRetries; + } + + /** + * The number of retries to perform in case of failure + * + * @param callable $action The callable action to execute with a retry strategy + * @return mixed The return value of the passed action callable + * @throws \Exception + */ + public function run(callable $action) + { + $this->numRetries = 0; + while (true) { + try { + return $action(); + } catch (Exception $e) { + if ( + $this->numRetries < $this->maxRetries && + $this->strategy->shouldRetry($e, $this->numRetries) + ) { + $this->numRetries++; + continue; + } + + throw $e; + } + } + } + + /** + * Returns the last number of retry attemps. + * + * @return int + */ + public function getRetries(): int + { + return $this->numRetries; + } +} diff --git a/vendor/cakephp/core/Retry/RetryStrategyInterface.php b/vendor/cakephp/core/Retry/RetryStrategyInterface.php new file mode 100755 index 0000000..e2ef9e2 --- /dev/null +++ b/vendor/cakephp/core/Retry/RetryStrategyInterface.php @@ -0,0 +1,35 @@ + + * @see ServiceProvider::provides() + */ + protected $provides = []; + + /** + * Get the container. + * + * This method's actual return type and documented return type differ + * because PHP 7.2 doesn't support return type narrowing. + * + * @return \Cake\Core\ContainerInterface + */ + public function getContainer(): DefinitionContainerInterface + { + $container = parent::getContainer(); + + if (!($container instanceof ContainerInterface)) { + $message = sprintf( + 'Unexpected container type. Expected `%s` got `%s` instead.', + ContainerInterface::class, + getTypeName($container) + ); + throw new RuntimeException($message); + } + + return $container; + } + + /** + * Delegate to the bootstrap() method + * + * This method wraps the league/container function so users + * only need to use the CakePHP bootstrap() interface. + * + * @return void + */ + public function boot(): void + { + $this->bootstrap($this->getContainer()); + } + + /** + * Bootstrap hook for ServiceProviders + * + * This hook should be implemented if your service provider + * needs to register additional service providers, load configuration + * files or do any other work when the service provider is added to the + * container. + * + * @param \Cake\Core\ContainerInterface $container The container to add services to. + * @return void + */ + public function bootstrap(ContainerInterface $container): void + { + } + + /** + * Call the abstract services() method. + * + * This method primarily exists as a shim between the interface + * that league/container has and the one we want to offer in CakePHP. + * + * @return void + */ + public function register(): void + { + $this->services($this->getContainer()); + } + + /** + * The provides method is a way to let the container know that a service + * is provided by this service provider. + * + * Every service that is registered via this service provider must have an + * alias added to this array or it will be ignored. + * + * @param string $id Identifier. + * @return bool + */ + public function provides(string $id): bool + { + return in_array($id, $this->provides, true); + } + + /** + * Register the services in a provider. + * + * All services registered in this method should also be included in the $provides + * property so that services can be located. + * + * @param \Cake\Core\ContainerInterface $container The container to add services to. + * @return void + */ + abstract public function services(ContainerInterface $container): void; +} diff --git a/vendor/cakephp/core/StaticConfigTrait.php b/vendor/cakephp/core/StaticConfigTrait.php new file mode 100755 index 0000000..2db8624 --- /dev/null +++ b/vendor/cakephp/core/StaticConfigTrait.php @@ -0,0 +1,325 @@ + + */ + protected static $_config = []; + + /** + * This method can be used to define configuration adapters for an application. + * + * To change an adapter's configuration at runtime, first drop the adapter and then + * reconfigure it. + * + * Adapters will not be constructed until the first operation is done. + * + * ### Usage + * + * Assuming that the class' name is `Cache` the following scenarios + * are supported: + * + * Setting a cache engine up. + * + * ``` + * Cache::setConfig('default', $settings); + * ``` + * + * Injecting a constructed adapter in: + * + * ``` + * Cache::setConfig('default', $instance); + * ``` + * + * Configure multiple adapters at once: + * + * ``` + * Cache::setConfig($arrayOfConfig); + * ``` + * + * @param array|string $key The name of the configuration, or an array of multiple configs. + * @param mixed $config Configuration value. Generally an array of name => configuration data for adapter. + * @throws \BadMethodCallException When trying to modify an existing config. + * @throws \LogicException When trying to store an invalid structured config array. + * @return void + */ + public static function setConfig($key, $config = null): void + { + if ($config === null) { + if (!is_array($key)) { + throw new LogicException('If config is null, key must be an array.'); + } + foreach ($key as $name => $settings) { + static::setConfig($name, $settings); + } + + return; + } + + if (isset(static::$_config[$key])) { + /** @psalm-suppress PossiblyInvalidArgument */ + throw new BadMethodCallException(sprintf('Cannot reconfigure existing key "%s"', $key)); + } + + if (is_object($config)) { + $config = ['className' => $config]; + } + + if (is_array($config) && isset($config['url'])) { + $parsed = static::parseDsn($config['url']); + unset($config['url']); + $config = $parsed + $config; + } + + if (isset($config['engine']) && empty($config['className'])) { + $config['className'] = $config['engine']; + unset($config['engine']); + } + /** @psalm-suppress InvalidPropertyAssignmentValue */ + static::$_config[$key] = $config; + } + + /** + * Reads existing configuration. + * + * @param string $key The name of the configuration. + * @return mixed|null Configuration data at the named key or null if the key does not exist. + */ + public static function getConfig(string $key) + { + return static::$_config[$key] ?? null; + } + + /** + * Reads existing configuration for a specific key. + * + * The config value for this key must exist, it can never be null. + * + * @param string $key The name of the configuration. + * @return mixed Configuration data at the named key. + * @throws \InvalidArgumentException If value does not exist. + */ + public static function getConfigOrFail(string $key) + { + if (!isset(static::$_config[$key])) { + throw new InvalidArgumentException(sprintf('Expected configuration `%s` not found.', $key)); + } + + return static::$_config[$key]; + } + + /** + * Drops a constructed adapter. + * + * If you wish to modify an existing configuration, you should drop it, + * change configuration and then re-add it. + * + * If the implementing objects supports a `$_registry` object the named configuration + * will also be unloaded from the registry. + * + * @param string $config An existing configuration you wish to remove. + * @return bool Success of the removal, returns false when the config does not exist. + */ + public static function drop(string $config): bool + { + if (!isset(static::$_config[$config])) { + return false; + } + /** @psalm-suppress RedundantPropertyInitializationCheck */ + if (isset(static::$_registry)) { + static::$_registry->unload($config); + } + unset(static::$_config[$config]); + + return true; + } + + /** + * Returns an array containing the named configurations + * + * @return array Array of configurations. + */ + public static function configured(): array + { + $configurations = array_keys(static::$_config); + + return array_map(function ($key) { + return (string)$key; + }, $configurations); + } + + /** + * Parses a DSN into a valid connection configuration + * + * This method allows setting a DSN using formatting similar to that used by PEAR::DB. + * The following is an example of its usage: + * + * ``` + * $dsn = 'mysql://user:pass@localhost/database?'; + * $config = ConnectionManager::parseDsn($dsn); + * + * $dsn = 'Cake\Log\Engine\FileLog://?types=notice,info,debug&file=debug&path=LOGS'; + * $config = Log::parseDsn($dsn); + * + * $dsn = 'smtp://user:secret@localhost:25?timeout=30&client=null&tls=null'; + * $config = Email::parseDsn($dsn); + * + * $dsn = 'file:///?className=\My\Cache\Engine\FileEngine'; + * $config = Cache::parseDsn($dsn); + * + * $dsn = 'File://?prefix=myapp_cake_core_&serialize=true&duration=+2 minutes&path=/tmp/persistent/'; + * $config = Cache::parseDsn($dsn); + * ``` + * + * For all classes, the value of `scheme` is set as the value of both the `className` + * unless they have been otherwise specified. + * + * Note that querystring arguments are also parsed and set as values in the returned configuration. + * + * @param string $dsn The DSN string to convert to a configuration array + * @return array The configuration array to be stored after parsing the DSN + * @throws \InvalidArgumentException If not passed a string, or passed an invalid string + */ + public static function parseDsn(string $dsn): array + { + if (empty($dsn)) { + return []; + } + + $pattern = <<<'REGEXP' +{ + ^ + (?P<_scheme> + (?P[\w\\\\]+):// + ) + (?P<_username> + (?P.*?) + (?P<_password> + :(?P.*?) + )? + @ + )? + (?P<_host> + (?P[^?#/:@]+) + (?P<_port> + :(?P\d+) + )? + )? + (?P<_path> + (?P/[^?#]*) + )? + (?P<_query> + \?(?P[^#]*) + )? + (?P<_fragment> + \#(?P.*) + )? + $ +}x +REGEXP; + + preg_match($pattern, $dsn, $parsed); + + if (!$parsed) { + throw new InvalidArgumentException("The DSN string '{$dsn}' could not be parsed."); + } + + $exists = []; + foreach ($parsed as $k => $v) { + if (is_int($k)) { + unset($parsed[$k]); + } elseif (strpos($k, '_') === 0) { + $exists[substr($k, 1)] = ($v !== ''); + unset($parsed[$k]); + } elseif ($v === '' && !$exists[$k]) { + unset($parsed[$k]); + } + } + + $query = ''; + + if (isset($parsed['query'])) { + $query = $parsed['query']; + unset($parsed['query']); + } + + parse_str($query, $queryArgs); + + foreach ($queryArgs as $key => $value) { + if ($value === 'true') { + $queryArgs[$key] = true; + } elseif ($value === 'false') { + $queryArgs[$key] = false; + } elseif ($value === 'null') { + $queryArgs[$key] = null; + } + } + + $parsed = $queryArgs + $parsed; + + if (empty($parsed['className'])) { + $classMap = static::getDsnClassMap(); + + $parsed['className'] = $parsed['scheme']; + if (isset($classMap[$parsed['scheme']])) { + /** @psalm-suppress PossiblyNullArrayOffset */ + $parsed['className'] = $classMap[$parsed['scheme']]; + } + } + + return $parsed; + } + + /** + * Updates the DSN class map for this class. + * + * @param array $map Additions/edits to the class map to apply. + * @return void + * @psalm-param array $map + */ + public static function setDsnClassMap(array $map): void + { + static::$_dsnClassMap = $map + static::$_dsnClassMap; + } + + /** + * Returns the DSN class map for this class. + * + * @return array + * @psalm-return array + */ + public static function getDsnClassMap(): array + { + return static::$_dsnClassMap; + } +} diff --git a/vendor/cakephp/core/TestSuite/ContainerStubTrait.php b/vendor/cakephp/core/TestSuite/ContainerStubTrait.php new file mode 100755 index 0000000..9c6ae1e --- /dev/null +++ b/vendor/cakephp/core/TestSuite/ContainerStubTrait.php @@ -0,0 +1,181 @@ +|class-string<\Cake\Core\ConsoleApplicationInterface>|null + * @var string|null + */ + protected $_appClass; + + /** + * The customized application constructor arguments. + * + * @var array|null + */ + protected $_appArgs; + + /** + * The collection of container services. + * + * @var array + */ + private $containerServices = []; + + /** + * Configure the application class to use in integration tests. + * + * @param string $class The application class name. + * @param array|null $constructorArgs The constructor arguments for your application class. + * @return void + * @psalm-param class-string<\Cake\Core\HttpApplicationInterface>|class-string<\Cake\Core\ConsoleApplicationInterface> $class + */ + public function configApplication(string $class, ?array $constructorArgs): void + { + $this->_appClass = $class; + $this->_appArgs = $constructorArgs; + } + + /** + * Create an application instance. + * + * Uses the configuration set in `configApplication()`. + * + * @return \Cake\Core\HttpApplicationInterface|\Cake\Core\ConsoleApplicationInterface + */ + protected function createApp() + { + if ($this->_appClass) { + $appClass = $this->_appClass; + } else { + /** @psalm-var class-string<\Cake\Http\BaseApplication> */ + $appClass = Configure::read('App.namespace') . '\Application'; + } + if (!class_exists($appClass)) { + throw new LogicException("Cannot load `{$appClass}` for use in integration testing."); + } + $appArgs = $this->_appArgs ?: [CONFIG]; + + $app = new $appClass(...$appArgs); + if (!empty($this->containerServices) && method_exists($app, 'getEventManager')) { + $app->getEventManager()->on('Application.buildContainer', [$this, 'modifyContainer']); + } + + return $app; + } + + /** + * Add a mocked service to the container. + * + * When the container is created the provided classname + * will be mapped to the factory function. The factory + * function will be used to create mocked services. + * + * @param string $class The class or interface you want to define. + * @param \Closure $factory The factory function for mocked services. + * @return $this + */ + public function mockService(string $class, Closure $factory) + { + $this->containerServices[$class] = $factory; + + return $this; + } + + /** + * Remove a mocked service to the container. + * + * @param string $class The class or interface you want to remove. + * @return $this + */ + public function removeMockService(string $class) + { + unset($this->containerServices[$class]); + + return $this; + } + + /** + * Wrap the application's container with one containing mocks. + * + * If any mocked services are defined, the application's container + * will be replaced with one containing mocks. The original + * container will be set as a delegate to the mock container. + * + * @param \Cake\Event\EventInterface $event The event + * @param \Cake\Core\ContainerInterface $container The container to wrap. + * @return \Cake\Core\ContainerInterface|null + */ + public function modifyContainer(EventInterface $event, ContainerInterface $container): ?ContainerInterface + { + if (empty($this->containerServices)) { + return null; + } + foreach ($this->containerServices as $key => $factory) { + if ($container->has($key)) { + try { + $container->extend($key)->setConcrete($factory); + } catch (NotFoundException $e) { + $container->add($key, $factory); + } + } else { + $container->add($key, $factory); + } + } + + return $container; + } + + /** + * Clears any mocks that were defined and cleans + * up application class configuration. + * + * @after + * @return void + */ + public function cleanupContainer(): void + { + $this->_appArgs = null; + $this->_appClass = null; + $this->containerServices = []; + } +} + +// phpcs:disable +class_alias( + 'Cake\Core\TestSuite\ContainerStubTrait', + 'Cake\TestSuite\ContainerStubTrait' +); +// phpcs:enable diff --git a/vendor/cakephp/core/composer.json b/vendor/cakephp/core/composer.json new file mode 100755 index 0000000..d5d4cf7 --- /dev/null +++ b/vendor/cakephp/core/composer.json @@ -0,0 +1,44 @@ +{ + "name": "cakephp/core", + "description": "CakePHP Framework Core classes", + "type": "library", + "keywords": [ + "cakephp", + "framework", + "core" + ], + "homepage": "https://cakephp.org", + "license": "MIT", + "authors": [ + { + "name": "CakePHP Community", + "homepage": "https://github.com/cakephp/core/graphs/contributors" + } + ], + "support": { + "issues": "https://github.com/cakephp/cakephp/issues", + "forum": "https://stackoverflow.com/tags/cakephp", + "irc": "irc://irc.freenode.org/cakephp", + "source": "https://github.com/cakephp/core" + }, + "require": { + "php": ">=7.4.0", + "cakephp/utility": "^4.0" + }, + "provide": { + "psr/container-implementation": "^1.0 || ^2.0" + }, + "suggest": { + "cakephp/event": "To use PluginApplicationInterface or plugin applications.", + "cakephp/cache": "To use Configure::store() and restore().", + "league/container": "To use Container and ServiceProvider classes" + }, + "autoload": { + "psr-4": { + "Cake\\Core\\": "." + }, + "files": [ + "functions.php" + ] + } +} diff --git a/vendor/cakephp/core/functions.php b/vendor/cakephp/core/functions.php new file mode 100755 index 0000000..af2d2b6 --- /dev/null +++ b/vendor/cakephp/core/functions.php @@ -0,0 +1,340 @@ + $t) { + $texts[$k] = h($t, $double, $charset); + } + + return $texts; + } elseif (is_object($text)) { + if (method_exists($text, '__toString')) { + $text = $text->__toString(); + } else { + $text = '(object)' . get_class($text); + } + } elseif ($text === null || is_scalar($text)) { + return $text; + } + + static $defaultCharset = false; + if ($defaultCharset === false) { + $defaultCharset = mb_internal_encoding() ?: 'UTF-8'; + } + + return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, $charset ?: $defaultCharset, $double); + } +} + +if (!function_exists('Cake\Core\pluginSplit')) { + /** + * Splits a dot syntax plugin name into its plugin and class name. + * If $name does not have a dot, then index 0 will be null. + * + * Commonly used like + * ``` + * list($plugin, $name) = pluginSplit($name); + * ``` + * + * @param string $name The name you want to plugin split. + * @param bool $dotAppend Set to true if you want the plugin to have a '.' appended to it. + * @param string|null $plugin Optional default plugin to use if no plugin is found. Defaults to null. + * @return array Array with 2 indexes. 0 => plugin name, 1 => class name. + * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pluginSplit + * @psalm-return array{string|null, string} + */ + function pluginSplit(string $name, bool $dotAppend = false, ?string $plugin = null): array + { + if (strpos($name, '.') !== false) { + $parts = explode('.', $name, 2); + if ($dotAppend) { + $parts[0] .= '.'; + } + + /** @psalm-var array{string, string} */ + return $parts; + } + + return [$plugin, $name]; + } +} + +if (!function_exists('Cake\Core\namespaceSplit')) { + /** + * Split the namespace from the classname. + * + * Commonly used like `list($namespace, $className) = namespaceSplit($class);`. + * + * @param string $class The full class name, ie `Cake\Core\App`. + * @return array Array with 2 indexes. 0 => namespace, 1 => classname. + */ + function namespaceSplit(string $class): array + { + $pos = strrpos($class, '\\'); + if ($pos === false) { + return ['', $class]; + } + + return [substr($class, 0, $pos), substr($class, $pos + 1)]; + } +} + +if (!function_exists('Cake\Core\pr')) { + /** + * print_r() convenience function. + * + * In terminals this will act similar to using print_r() directly, when not run on CLI + * print_r() will also wrap `
` tags around the output of given variable. Similar to debug().
+     *
+     * This function returns the same variable that was passed.
+     *
+     * @param mixed $var Variable to print out.
+     * @return mixed the same $var that was passed to this function
+     * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pr
+     * @see debug()
+     */
+    function pr($var)
+    {
+        if (!Configure::read('debug')) {
+            return $var;
+        }
+
+        $template = PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg' ? '
%s
' : "\n%s\n\n"; + printf($template, trim(print_r($var, true))); + + return $var; + } +} + +if (!function_exists('Cake\Core\pj')) { + /** + * JSON pretty print convenience function. + * + * In terminals this will act similar to using json_encode() with JSON_PRETTY_PRINT directly, when not run on CLI + * will also wrap `
` tags around the output of given variable. Similar to pr().
+     *
+     * This function returns the same variable that was passed.
+     *
+     * @param mixed $var Variable to print out.
+     * @return mixed the same $var that was passed to this function
+     * @see pr()
+     * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pj
+     */
+    function pj($var)
+    {
+        if (!Configure::read('debug')) {
+            return $var;
+        }
+
+        $template = PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg' ? '
%s
' : "\n%s\n\n"; + printf($template, trim(json_encode($var, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES))); + + return $var; + } +} + +if (!function_exists('Cake\Core\env')) { + /** + * Gets an environment variable from available sources, and provides emulation + * for unsupported or inconsistent environment variables (i.e. DOCUMENT_ROOT on + * IIS, or SCRIPT_NAME in CGI mode). Also exposes some additional custom + * environment information. + * + * @param string $key Environment variable name. + * @param string|bool|null $default Specify a default value in case the environment variable is not defined. + * @return string|bool|null Environment variable setting. + * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#env + */ + function env(string $key, $default = null) + { + if ($key === 'HTTPS') { + if (isset($_SERVER['HTTPS'])) { + return !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'; + } + + return strpos((string)env('SCRIPT_URI'), 'https://') === 0; + } + + if ($key === 'SCRIPT_NAME' && env('CGI_MODE') && isset($_ENV['SCRIPT_URL'])) { + $key = 'SCRIPT_URL'; + } + + /** @var string|null $val */ + $val = $_SERVER[$key] ?? $_ENV[$key] ?? null; + if ($val == null && getenv($key) !== false) { + /** @var string|false $val */ + $val = getenv($key); + } + + if ($key === 'REMOTE_ADDR' && $val === env('SERVER_ADDR')) { + $addr = env('HTTP_PC_REMOTE_ADDR'); + if ($addr !== null) { + $val = $addr; + } + } + + if ($val !== null) { + return $val; + } + + switch ($key) { + case 'DOCUMENT_ROOT': + $name = (string)env('SCRIPT_NAME'); + $filename = (string)env('SCRIPT_FILENAME'); + $offset = 0; + if (!strpos($name, '.php')) { + $offset = 4; + } + + return substr($filename, 0, -(strlen($name) + $offset)); + case 'PHP_SELF': + return str_replace((string)env('DOCUMENT_ROOT'), '', (string)env('SCRIPT_FILENAME')); + case 'CGI_MODE': + return PHP_SAPI === 'cgi'; + } + + return $default; + } +} + +if (!function_exists('Cake\Core\triggerWarning')) { + /** + * Triggers an E_USER_WARNING. + * + * @param string $message The warning message. + * @return void + */ + function triggerWarning(string $message): void + { + $trace = debug_backtrace(); + if (isset($trace[1])) { + $frame = $trace[1]; + $frame += ['file' => '[internal]', 'line' => '??']; + $message = sprintf( + '%s - %s, line: %s', + $message, + $frame['file'], + $frame['line'] + ); + } + trigger_error($message, E_USER_WARNING); + } +} + +if (!function_exists('Cake\Core\deprecationWarning')) { + /** + * Helper method for outputting deprecation warnings + * + * @param string $message The message to output as a deprecation warning. + * @param int $stackFrame The stack frame to include in the error. Defaults to 1 + * as that should point to application/plugin code. + * @return void + */ + function deprecationWarning(string $message, int $stackFrame = 1): void + { + if (!(error_reporting() & E_USER_DEPRECATED)) { + return; + } + + $trace = debug_backtrace(); + if (isset($trace[$stackFrame])) { + $frame = $trace[$stackFrame]; + $frame += ['file' => '[internal]', 'line' => '??']; + + // Assuming we're installed in vendor/cakephp/cakephp/src/Core/functions.php + $root = dirname(__DIR__, 5); + if (defined('ROOT')) { + $root = ROOT; + } + $relative = str_replace( + DIRECTORY_SEPARATOR, + '/', + substr($frame['file'], strlen($root) + 1) + ); + $patterns = (array)Configure::read('Error.ignoredDeprecationPaths'); + foreach ($patterns as $pattern) { + $pattern = str_replace(DIRECTORY_SEPARATOR, '/', $pattern); + if (fnmatch($pattern, $relative)) { + return; + } + } + + $message = sprintf( + "%s\n%s, line: %s\n" . 'You can disable all deprecation warnings by setting `Error.errorLevel` to ' . + '`E_ALL & ~E_USER_DEPRECATED`. Adding `%s` to `Error.ignoredDeprecationPaths` ' . + 'in your `config/app.php` config will mute deprecations from that file only.', + $message, + $frame['file'], + $frame['line'], + $relative + ); + } + + static $errors = []; + $checksum = md5($message); + $duplicate = (bool)Configure::read('Error.allowDuplicateDeprecations', false); + if (isset($errors[$checksum]) && !$duplicate) { + return; + } + if (!$duplicate) { + $errors[$checksum] = true; + } + + trigger_error($message, E_USER_DEPRECATED); + } +} + +if (!function_exists('Cake\Core\getTypeName')) { + /** + * Returns the objects class or var type of it's not an object + * + * @param mixed $var Variable to check + * @return string Returns the class name or variable type + */ + function getTypeName($var): string + { + return is_object($var) ? get_class($var) : gettype($var); + } +} + +/** + * Include global functions. + */ +if (!getenv('CAKE_DISABLE_GLOBAL_FUNCS')) { + include 'functions_global.php'; +} diff --git a/vendor/cakephp/core/functions_global.php b/vendor/cakephp/core/functions_global.php new file mode 100755 index 0000000..bb2a714 --- /dev/null +++ b/vendor/cakephp/core/functions_global.php @@ -0,0 +1,190 @@ + plugin name, 1 => class name. + * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pluginSplit + * @psalm-return array{string|null, string} + */ + function pluginSplit(string $name, bool $dotAppend = false, ?string $plugin = null): array + { + return cakePluginSplit($name, $dotAppend, $plugin); + } +} + +if (!function_exists('namespaceSplit')) { + /** + * Split the namespace from the classname. + * + * Commonly used like `list($namespace, $className) = namespaceSplit($class);`. + * + * @param string $class The full class name, ie `Cake\Core\App`. + * @return array Array with 2 indexes. 0 => namespace, 1 => classname. + */ + function namespaceSplit(string $class): array + { + return cakeNamespaceSplit($class); + } +} + +if (!function_exists('pr')) { + /** + * print_r() convenience function. + * + * In terminals this will act similar to using print_r() directly, when not run on CLI + * print_r() will also wrap `
` tags around the output of given variable. Similar to debug().
+     *
+     * This function returns the same variable that was passed.
+     *
+     * @param mixed $var Variable to print out.
+     * @return mixed the same $var that was passed to this function
+     * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pr
+     * @see debug()
+     */
+    function pr($var)
+    {
+        return cakePr($var);
+    }
+}
+
+if (!function_exists('pj')) {
+    /**
+     * JSON pretty print convenience function.
+     *
+     * In terminals this will act similar to using json_encode() with JSON_PRETTY_PRINT directly, when not run on CLI
+     * will also wrap `
` tags around the output of given variable. Similar to pr().
+     *
+     * This function returns the same variable that was passed.
+     *
+     * @param mixed $var Variable to print out.
+     * @return mixed the same $var that was passed to this function
+     * @see pr()
+     * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#pj
+     */
+    function pj($var)
+    {
+        return cakePj($var);
+    }
+}
+
+if (!function_exists('env')) {
+    /**
+     * Gets an environment variable from available sources, and provides emulation
+     * for unsupported or inconsistent environment variables (i.e. DOCUMENT_ROOT on
+     * IIS, or SCRIPT_NAME in CGI mode). Also exposes some additional custom
+     * environment information.
+     *
+     * @param string $key Environment variable name.
+     * @param string|bool|null $default Specify a default value in case the environment variable is not defined.
+     * @return string|bool|null Environment variable setting.
+     * @link https://book.cakephp.org/4/en/core-libraries/global-constants-and-functions.html#env
+     */
+    function env(string $key, $default = null)
+    {
+        return cakeEnv($key, $default);
+    }
+}
+
+if (!function_exists('triggerWarning')) {
+    /**
+     * Triggers an E_USER_WARNING.
+     *
+     * @param string $message The warning message.
+     * @return void
+     */
+    function triggerWarning(string $message): void
+    {
+        cakeTriggerWarning($message);
+    }
+}
+
+if (!function_exists('deprecationWarning')) {
+    /**
+     * Helper method for outputting deprecation warnings
+     *
+     * @param string $message The message to output as a deprecation warning.
+     * @param int $stackFrame The stack frame to include in the error. Defaults to 1
+     *   as that should point to application/plugin code.
+     * @return void
+     */
+    function deprecationWarning(string $message, int $stackFrame = 1): void
+    {
+        cakeDeprecationWarning($message, $stackFrame + 1);
+    }
+}
+
+if (!function_exists('getTypeName')) {
+    /**
+     * Returns the objects class or var type of it's not an object
+     *
+     * @param mixed $var Variable to check
+     * @return string Returns the class name or variable type
+     */
+    function getTypeName($var): string
+    {
+        return cakeGetTypeName($var);
+    }
+}
diff --git a/vendor/cakephp/database/Connection.php b/vendor/cakephp/database/Connection.php
new file mode 100755
index 0000000..83777d7
--- /dev/null
+++ b/vendor/cakephp/database/Connection.php
@@ -0,0 +1,1197 @@
+
+     */
+    protected $_config;
+
+    /**
+     * @var \Cake\Database\DriverInterface
+     */
+    protected DriverInterface $readDriver;
+
+    /**
+     * @var \Cake\Database\DriverInterface
+     */
+    protected DriverInterface $writeDriver;
+
+    /**
+     * Contains how many nested transactions have been started.
+     *
+     * @var int
+     */
+    protected $_transactionLevel = 0;
+
+    /**
+     * Whether a transaction is active in this connection.
+     *
+     * @var bool
+     */
+    protected $_transactionStarted = false;
+
+    /**
+     * Whether this connection can and should use savepoints for nested
+     * transactions.
+     *
+     * @var bool
+     */
+    protected $_useSavePoints = false;
+
+    /**
+     * Whether to log queries generated during this connection.
+     *
+     * @var bool
+     */
+    protected $_logQueries = false;
+
+    /**
+     * Logger object instance.
+     *
+     * @var \Psr\Log\LoggerInterface|null
+     */
+    protected $_logger;
+
+    /**
+     * Cacher object instance.
+     *
+     * @var \Psr\SimpleCache\CacheInterface|null
+     */
+    protected $cacher;
+
+    /**
+     * The schema collection object
+     *
+     * @var \Cake\Database\Schema\CollectionInterface|null
+     */
+    protected $_schemaCollection;
+
+    /**
+     * NestedTransactionRollbackException object instance, will be stored if
+     * the rollback method is called in some nested transaction.
+     *
+     * @var \Cake\Database\Exception\NestedTransactionRollbackException|null
+     */
+    protected $nestedTransactionRollbackException;
+
+    /**
+     * Constructor.
+     *
+     * ### Available options:
+     *
+     * - `driver` Sort name or FCQN for driver.
+     * - `log` Boolean indicating whether to use query logging.
+     * - `name` Connection name.
+     * - `cacheMetaData` Boolean indicating whether metadata (datasource schemas) should be cached.
+     *    If set to a string it will be used as the name of cache config to use.
+     * - `cacheKeyPrefix` Custom prefix to use when generation cache keys. Defaults to connection name.
+     *
+     * @param array $config Configuration array.
+     */
+    public function __construct(array $config)
+    {
+        $this->_config = $config;
+        [self::ROLE_READ => $this->readDriver, self::ROLE_WRITE => $this->writeDriver] = $this->createDrivers($config);
+
+        if (!empty($config['log'])) {
+            $this->enableQueryLogging((bool)$config['log']);
+        }
+    }
+
+    /**
+     * Creates read and write drivers.
+     *
+     * @param array $config Connection config
+     * @return array
+     * @psalm-return array{read: \Cake\Database\DriverInterface, write: \Cake\Database\DriverInterface}
+     */
+    protected function createDrivers(array $config): array
+    {
+        $driver = $config['driver'] ?? '';
+        if (!is_string($driver)) {
+            /** @var \Cake\Database\DriverInterface $driver */
+            if (!$driver->enabled()) {
+                throw new MissingExtensionException(['driver' => get_class($driver), 'name' => $this->configName()]);
+            }
+
+            // Legacy support for setting instance instead of driver class
+            return [self::ROLE_READ => $driver, self::ROLE_WRITE => $driver];
+        }
+
+        /** @var class-string<\Cake\Database\DriverInterface>|null $driverClass */
+        $driverClass = App::className($driver, 'Database/Driver');
+        if ($driverClass === null) {
+            throw new MissingDriverException(['driver' => $driver, 'connection' => $this->configName()]);
+        }
+
+        $sharedConfig = array_diff_key($config, array_flip([
+            'name',
+            'driver',
+            'log',
+            'cacheMetaData',
+            'cacheKeyPrefix',
+        ]));
+
+        $writeConfig = $config['write'] ?? [] + $sharedConfig;
+        $readConfig = $config['read'] ?? [] + $sharedConfig;
+        if ($readConfig == $writeConfig) {
+            $readDriver = $writeDriver = new $driverClass(['_role' => self::ROLE_WRITE] + $writeConfig);
+        } else {
+            $readDriver = new $driverClass(['_role' => self::ROLE_READ] + $readConfig);
+            $writeDriver = new $driverClass(['_role' => self::ROLE_WRITE] + $writeConfig);
+        }
+
+        if (!$writeDriver->enabled()) {
+            throw new MissingExtensionException(['driver' => get_class($writeDriver), 'name' => $this->configName()]);
+        }
+
+        return [self::ROLE_READ => $readDriver, self::ROLE_WRITE => $writeDriver];
+    }
+
+    /**
+     * Destructor
+     *
+     * Disconnects the driver to release the connection.
+     */
+    public function __destruct()
+    {
+        if ($this->_transactionStarted && class_exists(Log::class)) {
+            Log::warning('The connection is going to be closed but there is an active transaction.');
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function config(): array
+    {
+        return $this->_config;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function configName(): string
+    {
+        return $this->_config['name'] ?? '';
+    }
+
+    /**
+     * Returns the connection role: read or write.
+     *
+     * @return string
+     */
+    public function role(): string
+    {
+        return preg_match('/:read$/', $this->configName()) === 1 ? static::ROLE_READ : static::ROLE_WRITE;
+    }
+
+    /**
+     * Sets the driver instance. If a string is passed it will be treated
+     * as a class name and will be instantiated.
+     *
+     * @param \Cake\Database\DriverInterface|string $driver The driver instance to use.
+     * @param array $config Config for a new driver.
+     * @throws \Cake\Database\Exception\MissingDriverException When a driver class is missing.
+     * @throws \Cake\Database\Exception\MissingExtensionException When a driver's PHP extension is missing.
+     * @return $this
+     * @deprecated 4.4.0 Setting the driver is deprecated. Use the connection config instead.
+     */
+    public function setDriver($driver, $config = [])
+    {
+        deprecationWarning('Setting the driver is deprecated. Use the connection config instead.');
+
+        $driver = $this->createDriver($driver, $config);
+        $this->readDriver = $this->writeDriver = $driver;
+
+        return $this;
+    }
+
+    /**
+     * Creates driver from name, class name or instance.
+     *
+     * @param \Cake\Database\DriverInterface|string $name Driver name, class name or instance.
+     * @param array $config Driver config if $name is not an instance.
+     * @return \Cake\Database\DriverInterface
+     * @throws \Cake\Database\Exception\MissingDriverException When a driver class is missing.
+     * @throws \Cake\Database\Exception\MissingExtensionException When a driver's PHP extension is missing.
+     */
+    protected function createDriver($name, array $config): DriverInterface
+    {
+        $driver = $name;
+        if (is_string($driver)) {
+            /** @psalm-var class-string<\Cake\Database\DriverInterface>|null $className */
+            $className = App::className($driver, 'Database/Driver');
+            if ($className === null) {
+                throw new MissingDriverException(['driver' => $driver, 'connection' => $this->configName()]);
+            }
+            $driver = new $className(['_role' => self::ROLE_WRITE] + $config);
+        }
+
+        if (!$driver->enabled()) {
+            throw new MissingExtensionException(['driver' => get_class($driver), 'name' => $this->configName()]);
+        }
+
+        return $driver;
+    }
+
+    /**
+     * Get the retry wrapper object that is allows recovery from server disconnects
+     * while performing certain database actions, such as executing a query.
+     *
+     * @return \Cake\Core\Retry\CommandRetry The retry wrapper
+     */
+    public function getDisconnectRetry(): CommandRetry
+    {
+        return new CommandRetry(new ReconnectStrategy($this));
+    }
+
+    /**
+     * Gets the driver instance.
+     *
+     * @param string $role Connection role ('read' or 'write')
+     * @return \Cake\Database\DriverInterface
+     */
+    public function getDriver(string $role = self::ROLE_WRITE): DriverInterface
+    {
+        assert($role === self::ROLE_READ || $role === self::ROLE_WRITE);
+
+        return $role === self::ROLE_READ ? $this->readDriver : $this->writeDriver;
+    }
+
+    /**
+     * Connects to the configured database.
+     *
+     * @throws \Cake\Database\Exception\MissingConnectionException If database connection could not be established.
+     * @return bool true, if the connection was already established or the attempt was successful.
+     * @deprecated 4.5.0 Use getDriver()->connect() instead.
+     */
+    public function connect(): bool
+    {
+        deprecationWarning(
+            'If you cannot use automatic connection management, use $connection->getDriver()->connect() instead.'
+        );
+
+        $connected = true;
+        foreach ([self::ROLE_READ, self::ROLE_WRITE] as $role) {
+            try {
+                $connected = $connected && $this->getDriver($role)->connect();
+            } catch (MissingConnectionException $e) {
+                throw $e;
+            } catch (Throwable $e) {
+                throw new MissingConnectionException(
+                    [
+                        'driver' => App::shortName(get_class($this->getDriver($role)), 'Database/Driver'),
+                        'reason' => $e->getMessage(),
+                    ],
+                    null,
+                    $e
+                );
+            }
+        }
+
+        return $connected;
+    }
+
+    /**
+     * Disconnects from database server.
+     *
+     * @return void
+     * @deprecated 4.5.0 Use getDriver()->disconnect() instead.
+     */
+    public function disconnect(): void
+    {
+        deprecationWarning(
+            'If you cannot use automatic connection management, use $connection->getDriver()->disconnect() instead.'
+        );
+
+        $this->getDriver(self::ROLE_READ)->disconnect();
+        $this->getDriver(self::ROLE_WRITE)->disconnect();
+    }
+
+    /**
+     * Returns whether connection to database server was already established.
+     *
+     * @return bool
+     * @deprecated 4.5.0 Use getDriver()->isConnected() instead.
+     */
+    public function isConnected(): bool
+    {
+        deprecationWarning('Use $connection->getDriver()->isConnected() instead.');
+
+        return $this->getDriver(self::ROLE_READ)->isConnected() && $this->getDriver(self::ROLE_WRITE)->isConnected();
+    }
+
+    /**
+     * Prepares a SQL statement to be executed.
+     *
+     * @param \Cake\Database\Query|string $query The SQL to convert into a prepared statement.
+     * @return \Cake\Database\StatementInterface
+     * @deprecated 4.5.0 Use getDriver()->prepare() instead.
+     */
+    public function prepare($query): StatementInterface
+    {
+        $role = $query instanceof Query ? $query->getConnectionRole() : self::ROLE_WRITE;
+
+        return $this->getDisconnectRetry()->run(function () use ($query, $role) {
+            $statement = $this->getDriver($role)->prepare($query);
+
+            if ($this->_logQueries) {
+                $statement = $this->_newLogger($statement);
+            }
+
+            return $statement;
+        });
+    }
+
+    /**
+     * Executes a query using $params for interpolating values and $types as a hint for each
+     * those params.
+     *
+     * @param string $sql SQL to be executed and interpolated with $params
+     * @param array $params list or associative array of params to be interpolated in $sql as values
+     * @param array $types list or associative array of types to be used for casting values in query
+     * @return \Cake\Database\StatementInterface executed statement
+     */
+    public function execute(string $sql, array $params = [], array $types = []): StatementInterface
+    {
+        return $this->getDisconnectRetry()->run(function () use ($sql, $params, $types) {
+            $statement = $this->prepare($sql);
+            if (!empty($params)) {
+                $statement->bind($params, $types);
+            }
+            $statement->execute();
+
+            return $statement;
+        });
+    }
+
+    /**
+     * Compiles a Query object into a SQL string according to the dialect for this
+     * connection's driver
+     *
+     * @param \Cake\Database\Query $query The query to be compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder
+     * @return string
+     * @deprecated 4.5.0 Use getDriver()->compileQuery() instead.
+     */
+    public function compileQuery(Query $query, ValueBinder $binder): string
+    {
+        deprecationWarning('Use getDriver()->compileQuery() instead.');
+
+        return $this->getDriver($query->getConnectionRole())->compileQuery($query, $binder)[1];
+    }
+
+    /**
+     * Executes the provided query after compiling it for the specific driver
+     * dialect and returns the executed Statement object.
+     *
+     * @param \Cake\Database\Query $query The query to be executed
+     * @return \Cake\Database\StatementInterface executed statement
+     */
+    public function run(Query $query): StatementInterface
+    {
+        return $this->getDisconnectRetry()->run(function () use ($query) {
+            $statement = $this->prepare($query);
+            $query->getValueBinder()->attachTo($statement);
+            $statement->execute();
+
+            return $statement;
+        });
+    }
+
+    /**
+     * Create a new SelectQuery instance for this connection.
+     *
+     * @param \Cake\Database\ExpressionInterface|callable|array|string $fields fields to be added to the list.
+     * @param array|string $table The table or list of tables to query.
+     * @param array $types Associative array containing the types to be used for casting.
+     * @return \Cake\Database\Query\SelectQuery
+     */
+    public function selectQuery(
+        $fields = [],
+        $table = [],
+        array $types = []
+    ): SelectQuery {
+        $query = new SelectQuery($this);
+        if ($table) {
+            $query->from($table);
+        }
+        if ($fields) {
+            $query->select($fields, false);
+        }
+        $query->setDefaultTypes($types);
+
+        return $query;
+    }
+
+    /**
+     * Executes a SQL statement and returns the Statement object as result.
+     *
+     * @param string $sql The SQL query to execute.
+     * @return \Cake\Database\StatementInterface
+     * @deprecated 4.5.0 Use either `selectQuery`, `insertQuery`, `deleteQuery`, `updateQuery` instead.
+     */
+    public function query(string $sql): StatementInterface
+    {
+        deprecationWarning('Use either `selectQuery`, `insertQuery`, `deleteQuery`, `updateQuery` instead.');
+
+        return $this->getDisconnectRetry()->run(function () use ($sql) {
+            $statement = $this->prepare($sql);
+            $statement->execute();
+
+            return $statement;
+        });
+    }
+
+    /**
+     * Create a new Query instance for this connection.
+     *
+     * @return \Cake\Database\Query
+     * @deprecated 4.5.0 Use `insertQuery()`, `deleteQuery()`, `selectQuery()` or `updateQuery()` instead.
+     */
+    public function newQuery(): Query
+    {
+        deprecationWarning(
+            'As of 4.5.0, using newQuery() is deprecated. Instead, use `insertQuery()`, ' .
+            '`deleteQuery()`, `selectQuery()` or `updateQuery()`. The query objects ' .
+            'returned by these methods will emit deprecations that will become fatal errors in 5.0.' .
+            'See https://book.cakephp.org/4/en/appendices/4-5-migration-guide.html for more information.'
+        );
+
+        return new Query($this);
+    }
+
+    /**
+     * Sets a Schema\Collection object for this connection.
+     *
+     * @param \Cake\Database\Schema\CollectionInterface $collection The schema collection object
+     * @return $this
+     */
+    public function setSchemaCollection(SchemaCollectionInterface $collection)
+    {
+        $this->_schemaCollection = $collection;
+
+        return $this;
+    }
+
+    /**
+     * Gets a Schema\Collection object for this connection.
+     *
+     * @return \Cake\Database\Schema\CollectionInterface
+     */
+    public function getSchemaCollection(): SchemaCollectionInterface
+    {
+        if ($this->_schemaCollection !== null) {
+            return $this->_schemaCollection;
+        }
+
+        if (!empty($this->_config['cacheMetadata'])) {
+            return $this->_schemaCollection = new CachedCollection(
+                new SchemaCollection($this),
+                empty($this->_config['cacheKeyPrefix']) ? $this->configName() : $this->_config['cacheKeyPrefix'],
+                $this->getCacher()
+            );
+        }
+
+        return $this->_schemaCollection = new SchemaCollection($this);
+    }
+
+    /**
+     * Executes an INSERT query on the specified table.
+     *
+     * @param string $table the table to insert values in
+     * @param array $values values to be inserted
+     * @param array $types Array containing the types to be used for casting
+     * @return \Cake\Database\StatementInterface
+     */
+    public function insert(string $table, array $values, array $types = []): StatementInterface
+    {
+        return $this->getDisconnectRetry()->run(function () use ($table, $values, $types) {
+            return $this->insertQuery($table, $values, $types)->execute();
+        });
+    }
+
+    /**
+     * Create a new InsertQuery instance for this connection.
+     *
+     * @param string|null $table The table to insert rows into.
+     * @param array $values Associative array of column => value to be inserted.
+     * @param array $types Associative array containing the types to be used for casting.
+     * @return \Cake\Database\Query\InsertQuery
+     */
+    public function insertQuery(?string $table = null, array $values = [], array $types = []): InsertQuery
+    {
+        $query = new InsertQuery($this);
+        if ($table) {
+            $query->into($table);
+        }
+        if ($values) {
+            $columns = array_keys($values);
+            $query->insert($columns, $types)
+                ->values($values);
+        }
+
+        return $query;
+    }
+
+    /**
+     * Executes an UPDATE statement on the specified table.
+     *
+     * @param string $table the table to update rows from
+     * @param array $values values to be updated
+     * @param array $conditions conditions to be set for update statement
+     * @param array $types list of associative array containing the types to be used for casting
+     * @return \Cake\Database\StatementInterface
+     */
+    public function update(string $table, array $values, array $conditions = [], array $types = []): StatementInterface
+    {
+        return $this->getDisconnectRetry()->run(function () use ($table, $values, $conditions, $types) {
+            return $this->updateQuery($table, $values, $conditions, $types)->execute();
+        });
+    }
+
+    /**
+     * Create a new UpdateQuery instance for this connection.
+     *
+     * @param \Cake\Database\ExpressionInterface|string|null $table The table to update rows of.
+     * @param array $values Values to be updated.
+     * @param array $conditions Conditions to be set for the update statement.
+     * @param array $types Associative array containing the types to be used for casting.
+     * @return \Cake\Database\Query\UpdateQuery
+     */
+    public function updateQuery(
+        $table = null,
+        array $values = [],
+        array $conditions = [],
+        array $types = []
+    ): UpdateQuery {
+        $query = new UpdateQuery($this);
+        if ($table) {
+            $query->update($table);
+        }
+        if ($values) {
+            $query->set($values, $types);
+        }
+        if ($conditions) {
+            $query->where($conditions, $types);
+        }
+
+        return $query;
+    }
+
+    /**
+     * Executes a DELETE statement on the specified table.
+     *
+     * @param string $table the table to delete rows from
+     * @param array $conditions conditions to be set for delete statement
+     * @param array $types list of associative array containing the types to be used for casting
+     * @return \Cake\Database\StatementInterface
+     */
+    public function delete(string $table, array $conditions = [], array $types = []): StatementInterface
+    {
+        return $this->getDisconnectRetry()->run(function () use ($table, $conditions, $types) {
+            return $this->deleteQuery($table, $conditions, $types)->execute();
+        });
+    }
+
+    /**
+     * Create a new DeleteQuery instance for this connection.
+     *
+     * @param string|null $table The table to delete rows from.
+     * @param array $conditions Conditions to be set for the delete statement.
+     * @param array $types Associative array containing the types to be used for casting.
+     * @return \Cake\Database\Query\DeleteQuery
+     */
+    public function deleteQuery(?string $table = null, array $conditions = [], array $types = []): DeleteQuery
+    {
+        $query = new DeleteQuery($this);
+        if ($table) {
+            $query->from($table);
+        }
+        if ($conditions) {
+            $query->where($conditions, $types);
+        }
+
+        return $query;
+    }
+
+    /**
+     * Starts a new transaction.
+     *
+     * @return void
+     */
+    public function begin(): void
+    {
+        if (!$this->_transactionStarted) {
+            if ($this->_logQueries) {
+                $this->log('BEGIN');
+            }
+
+            $this->getDisconnectRetry()->run(function (): void {
+                $this->getDriver()->beginTransaction();
+            });
+
+            $this->_transactionLevel = 0;
+            $this->_transactionStarted = true;
+            $this->nestedTransactionRollbackException = null;
+
+            return;
+        }
+
+        $this->_transactionLevel++;
+        if ($this->isSavePointsEnabled()) {
+            $this->createSavePoint((string)$this->_transactionLevel);
+        }
+    }
+
+    /**
+     * Commits current transaction.
+     *
+     * @return bool true on success, false otherwise
+     */
+    public function commit(): bool
+    {
+        if (!$this->_transactionStarted) {
+            return false;
+        }
+
+        if ($this->_transactionLevel === 0) {
+            if ($this->wasNestedTransactionRolledback()) {
+                /** @var \Cake\Database\Exception\NestedTransactionRollbackException $e */
+                $e = $this->nestedTransactionRollbackException;
+                $this->nestedTransactionRollbackException = null;
+                throw $e;
+            }
+
+            $this->_transactionStarted = false;
+            $this->nestedTransactionRollbackException = null;
+            if ($this->_logQueries) {
+                $this->log('COMMIT');
+            }
+
+            return $this->getDriver()->commitTransaction();
+        }
+        if ($this->isSavePointsEnabled()) {
+            $this->releaseSavePoint((string)$this->_transactionLevel);
+        }
+
+        $this->_transactionLevel--;
+
+        return true;
+    }
+
+    /**
+     * Rollback current transaction.
+     *
+     * @param bool|null $toBeginning Whether the transaction should be rolled back to the
+     * beginning of it. Defaults to false if using savepoints, or true if not.
+     * @return bool
+     */
+    public function rollback(?bool $toBeginning = null): bool
+    {
+        if (!$this->_transactionStarted) {
+            return false;
+        }
+
+        $useSavePoint = $this->isSavePointsEnabled();
+        if ($toBeginning === null) {
+            $toBeginning = !$useSavePoint;
+        }
+        if ($this->_transactionLevel === 0 || $toBeginning) {
+            $this->_transactionLevel = 0;
+            $this->_transactionStarted = false;
+            $this->nestedTransactionRollbackException = null;
+            if ($this->_logQueries) {
+                $this->log('ROLLBACK');
+            }
+            $this->getDriver()->rollbackTransaction();
+
+            return true;
+        }
+
+        $savePoint = $this->_transactionLevel--;
+        if ($useSavePoint) {
+            $this->rollbackSavepoint($savePoint);
+        } elseif ($this->nestedTransactionRollbackException === null) {
+            $this->nestedTransactionRollbackException = new NestedTransactionRollbackException();
+        }
+
+        return true;
+    }
+
+    /**
+     * Enables/disables the usage of savepoints, enables only if driver the allows it.
+     *
+     * If you are trying to enable this feature, make sure you check
+     * `isSavePointsEnabled()` to verify that savepoints were enabled successfully.
+     *
+     * @param bool $enable Whether save points should be used.
+     * @return $this
+     */
+    public function enableSavePoints(bool $enable = true)
+    {
+        if ($enable === false) {
+            $this->_useSavePoints = false;
+        } else {
+            $this->_useSavePoints = $this->getDriver()->supports(DriverInterface::FEATURE_SAVEPOINT);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Disables the usage of savepoints.
+     *
+     * @return $this
+     */
+    public function disableSavePoints()
+    {
+        $this->_useSavePoints = false;
+
+        return $this;
+    }
+
+    /**
+     * Returns whether this connection is using savepoints for nested transactions
+     *
+     * @return bool true if enabled, false otherwise
+     */
+    public function isSavePointsEnabled(): bool
+    {
+        return $this->_useSavePoints;
+    }
+
+    /**
+     * Creates a new save point for nested transactions.
+     *
+     * @param string|int $name Save point name or id
+     * @return void
+     */
+    public function createSavePoint($name): void
+    {
+        $this->execute($this->getDriver()->savePointSQL($name))->closeCursor();
+    }
+
+    /**
+     * Releases a save point by its name.
+     *
+     * @param string|int $name Save point name or id
+     * @return void
+     */
+    public function releaseSavePoint($name): void
+    {
+        $sql = $this->getDriver()->releaseSavePointSQL($name);
+        if ($sql) {
+            $this->execute($sql)->closeCursor();
+        }
+    }
+
+    /**
+     * Rollback a save point by its name.
+     *
+     * @param string|int $name Save point name or id
+     * @return void
+     */
+    public function rollbackSavepoint($name): void
+    {
+        $this->execute($this->getDriver()->rollbackSavePointSQL($name))->closeCursor();
+    }
+
+    /**
+     * Run driver specific SQL to disable foreign key checks.
+     *
+     * @return void
+     */
+    public function disableForeignKeys(): void
+    {
+        $this->getDisconnectRetry()->run(function (): void {
+            $this->execute($this->getDriver()->disableForeignKeySQL())->closeCursor();
+        });
+    }
+
+    /**
+     * Run driver specific SQL to enable foreign key checks.
+     *
+     * @return void
+     */
+    public function enableForeignKeys(): void
+    {
+        $this->getDisconnectRetry()->run(function (): void {
+            $this->execute($this->getDriver()->enableForeignKeySQL())->closeCursor();
+        });
+    }
+
+    /**
+     * Returns whether the driver supports adding or dropping constraints
+     * to already created tables.
+     *
+     * @return bool true if driver supports dynamic constraints
+     * @deprecated 4.3.0 Fixtures no longer dynamically drop and create constraints.
+     */
+    public function supportsDynamicConstraints(): bool
+    {
+        return $this->getDriver()->supportsDynamicConstraints();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function transactional(callable $callback)
+    {
+        $this->begin();
+
+        try {
+            $result = $callback($this);
+        } catch (Throwable $e) {
+            $this->rollback(false);
+            throw $e;
+        }
+
+        if ($result === false) {
+            $this->rollback(false);
+
+            return false;
+        }
+
+        try {
+            $this->commit();
+        } catch (NestedTransactionRollbackException $e) {
+            $this->rollback(false);
+            throw $e;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns whether some nested transaction has been already rolled back.
+     *
+     * @return bool
+     */
+    protected function wasNestedTransactionRolledback(): bool
+    {
+        return $this->nestedTransactionRollbackException instanceof NestedTransactionRollbackException;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableConstraints(callable $callback)
+    {
+        return $this->getDisconnectRetry()->run(function () use ($callback) {
+            $this->disableForeignKeys();
+
+            try {
+                $result = $callback($this);
+            } finally {
+                $this->enableForeignKeys();
+            }
+
+            return $result;
+        });
+    }
+
+    /**
+     * Checks if a transaction is running.
+     *
+     * @return bool True if a transaction is running else false.
+     */
+    public function inTransaction(): bool
+    {
+        return $this->_transactionStarted;
+    }
+
+    /**
+     * Quotes value to be used safely in database query.
+     *
+     * This uses `PDO::quote()` and requires `supportsQuoting()` to work.
+     *
+     * @param mixed $value The value to quote.
+     * @param \Cake\Database\TypeInterface|string|int $type Type to be used for determining kind of quoting to perform
+     * @return string Quoted value
+     * @deprecated 4.5.0 Use getDriver()->quote() instead.
+     */
+    public function quote($value, $type = 'string'): string
+    {
+        deprecationWarning('Use getDriver()->quote() instead.');
+        [$value, $type] = $this->cast($value, $type);
+
+        return $this->getDriver()->quote($value, $type);
+    }
+
+    /**
+     * Checks if using `quote()` is supported.
+     *
+     * This is not required to use `quoteIdentifier()`.
+     *
+     * @return bool
+     * @deprecated 4.5.0 Use getDriver()->supportsQuoting() instead.
+     */
+    public function supportsQuoting(): bool
+    {
+        deprecationWarning('Use getDriver()->supportsQuoting() instead.');
+
+        return $this->getDriver()->supports(DriverInterface::FEATURE_QUOTE);
+    }
+
+    /**
+     * Quotes a database identifier (a column name, table name, etc..) to
+     * be used safely in queries without the risk of using reserved words.
+     *
+     * This does not require `supportsQuoting()` to work.
+     *
+     * @param string $identifier The identifier to quote.
+     * @return string
+     * @deprecated 4.5.0 Use getDriver()->quoteIdentifier() instead.
+     */
+    public function quoteIdentifier(string $identifier): string
+    {
+        deprecationWarning('Use getDriver()->quoteIdentifier() instead.');
+
+        return $this->getDriver()->quoteIdentifier($identifier);
+    }
+
+    /**
+     * Enables or disables metadata caching for this connection
+     *
+     * Changing this setting will not modify existing schema collections objects.
+     *
+     * @param string|bool $cache Either boolean false to disable metadata caching, or
+     *   true to use `_cake_model_` or the name of the cache config to use.
+     * @return void
+     */
+    public function cacheMetadata($cache): void
+    {
+        $this->_schemaCollection = null;
+        $this->_config['cacheMetadata'] = $cache;
+        if (is_string($cache)) {
+            $this->cacher = null;
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function setCacher(CacheInterface $cacher)
+    {
+        $this->cacher = $cacher;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getCacher(): CacheInterface
+    {
+        if ($this->cacher !== null) {
+            return $this->cacher;
+        }
+
+        $configName = $this->_config['cacheMetadata'] ?? '_cake_model_';
+        if (!is_string($configName)) {
+            $configName = '_cake_model_';
+        }
+
+        if (!class_exists(Cache::class)) {
+            throw new RuntimeException(
+                'To use caching you must either set a cacher using Connection::setCacher()' .
+                ' or require the cakephp/cache package in your composer config.'
+            );
+        }
+
+        return $this->cacher = Cache::pool($configName);
+    }
+
+    /**
+     * Enable/disable query logging
+     *
+     * @param bool $enable Enable/disable query logging
+     * @return $this
+     * @deprecated 4.5.0 Connection logging is moving to the driver in 5.x
+     */
+    public function enableQueryLogging(bool $enable = true)
+    {
+        $this->_logQueries = $enable;
+
+        return $this;
+    }
+
+    /**
+     * Disable query logging
+     *
+     * @return $this
+     * @deprecated 4.5.0 Connection logging is moving to the driver in 5.x
+     */
+    public function disableQueryLogging()
+    {
+        $this->_logQueries = false;
+
+        return $this;
+    }
+
+    /**
+     * Check if query logging is enabled.
+     *
+     * @return bool
+     * @deprecated 4.5.0 Connection logging is moving to the driver in 5.x
+     */
+    public function isQueryLoggingEnabled(): bool
+    {
+        return $this->_logQueries;
+    }
+
+    /**
+     * Sets a logger
+     *
+     * @param \Psr\Log\LoggerInterface $logger Logger object
+     * @return $this
+     * @psalm-suppress ImplementedReturnTypeMismatch
+     */
+    public function setLogger(LoggerInterface $logger)
+    {
+        $this->_logger = $logger;
+
+        return $this;
+    }
+
+    /**
+     * Gets the logger object
+     *
+     * @return \Psr\Log\LoggerInterface logger instance
+     */
+    public function getLogger(): LoggerInterface
+    {
+        if ($this->_logger !== null) {
+            return $this->_logger;
+        }
+
+        if (!class_exists(BaseLog::class)) {
+            throw new RuntimeException(
+                'For logging you must either set a logger using Connection::setLogger()' .
+                ' or require the cakephp/log package in your composer config.'
+            );
+        }
+
+        return $this->_logger = new QueryLogger(['connection' => $this->configName()]);
+    }
+
+    /**
+     * Logs a Query string using the configured logger object.
+     *
+     * @param string $sql string to be logged
+     * @return void
+     */
+    public function log(string $sql): void
+    {
+        $query = new LoggedQuery();
+        $query->query = $sql;
+        $this->getLogger()->debug((string)$query, ['query' => $query]);
+    }
+
+    /**
+     * Returns a new statement object that will log the activity
+     * for the passed original statement instance.
+     *
+     * @param \Cake\Database\StatementInterface $statement the instance to be decorated
+     * @return \Cake\Database\Log\LoggingStatement
+     */
+    protected function _newLogger(StatementInterface $statement): LoggingStatement
+    {
+        $log = new LoggingStatement($statement, $this->getDriver());
+        $log->setLogger($this->getLogger());
+
+        return $log;
+    }
+
+    /**
+     * Returns an array that can be used to describe the internal state of this
+     * object.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        $secrets = [
+            'password' => '*****',
+            'username' => '*****',
+            'host' => '*****',
+            'database' => '*****',
+            'port' => '*****',
+        ];
+        $replace = array_intersect_key($secrets, $this->_config);
+        $config = $replace + $this->_config;
+
+        if (isset($config['read'])) {
+            /** @psalm-suppress PossiblyInvalidArgument */
+            $config['read'] = array_intersect_key($secrets, $config['read']) + $config['read'];
+        }
+        if (isset($config['write'])) {
+            /** @psalm-suppress PossiblyInvalidArgument */
+            $config['write'] = array_intersect_key($secrets, $config['write']) + $config['write'];
+        }
+
+        return [
+            'config' => $config,
+            'readDriver' => $this->readDriver,
+            'writeDriver' => $this->writeDriver,
+            'transactionLevel' => $this->_transactionLevel,
+            'transactionStarted' => $this->_transactionStarted,
+            'useSavePoints' => $this->_useSavePoints,
+            'logQueries' => $this->_logQueries,
+            'logger' => $this->_logger,
+        ];
+    }
+}
diff --git a/vendor/cakephp/database/ConstraintsInterface.php b/vendor/cakephp/database/ConstraintsInterface.php
new file mode 100755
index 0000000..f1fe3c1
--- /dev/null
+++ b/vendor/cakephp/database/ConstraintsInterface.php
@@ -0,0 +1,49 @@
+  DB-specific error codes that allow connect retry
+     */
+    protected const RETRY_ERROR_CODES = [];
+
+    /**
+     * Instance of PDO.
+     *
+     * @var \PDO
+     */
+    protected $_connection;
+
+    /**
+     * Configuration data.
+     *
+     * @var array
+     */
+    protected $_config;
+
+    /**
+     * Base configuration that is merged into the user
+     * supplied configuration data.
+     *
+     * @var array
+     */
+    protected $_baseConfig = [];
+
+    /**
+     * Indicates whether the driver is doing automatic identifier quoting
+     * for all queries
+     *
+     * @var bool
+     */
+    protected $_autoQuoting = false;
+
+    /**
+     * The server version
+     *
+     * @var string|null
+     */
+    protected $_version;
+
+    /**
+     * The last number of connection retry attempts.
+     *
+     * @var int
+     */
+    protected $connectRetries = 0;
+
+    /**
+     * Constructor
+     *
+     * @param array $config The configuration for the driver.
+     * @throws \InvalidArgumentException
+     */
+    public function __construct(array $config = [])
+    {
+        if (empty($config['username']) && !empty($config['login'])) {
+            throw new InvalidArgumentException(
+                'Please pass "username" instead of "login" for connecting to the database'
+            );
+        }
+        $config += $this->_baseConfig;
+        $this->_config = $config;
+        if (!empty($config['quoteIdentifiers'])) {
+            $this->enableAutoQuoting();
+        }
+    }
+
+    /**
+     * Get the configuration data used to create the driver.
+     *
+     * @return array
+     */
+    public function config(): array
+    {
+        return $this->_config;
+    }
+
+    /**
+     * Establishes a connection to the database server
+     *
+     * @param string $dsn A Driver-specific PDO-DSN
+     * @param array $config configuration to be used for creating connection
+     * @return bool true on success
+     */
+    protected function _connect(string $dsn, array $config): bool
+    {
+        $action = function () use ($dsn, $config) {
+            $this->setConnection(new PDO(
+                $dsn,
+                $config['username'] ?: null,
+                $config['password'] ?: null,
+                $config['flags']
+            ));
+        };
+
+        $retry = new CommandRetry(new ErrorCodeWaitStrategy(static::RETRY_ERROR_CODES, 5), 4);
+        try {
+            $retry->run($action);
+        } catch (PDOException $e) {
+            throw new MissingConnectionException(
+                [
+                    'driver' => App::shortName(static::class, 'Database/Driver'),
+                    'reason' => $e->getMessage(),
+                ],
+                null,
+                $e
+            );
+        } finally {
+            $this->connectRetries = $retry->getRetries();
+        }
+
+        return true;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    abstract public function connect(): bool;
+
+    /**
+     * @inheritDoc
+     */
+    public function disconnect(): void
+    {
+        /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
+        $this->_connection = null;
+        $this->_version = null;
+    }
+
+    /**
+     * Returns connected server version.
+     *
+     * @return string
+     */
+    public function version(): string
+    {
+        if ($this->_version === null) {
+            $this->connect();
+            $this->_version = (string)$this->_connection->getAttribute(PDO::ATTR_SERVER_VERSION);
+        }
+
+        return $this->_version;
+    }
+
+    /**
+     * Get the internal PDO connection instance.
+     *
+     * @return \PDO
+     */
+    public function getConnection()
+    {
+        if ($this->_connection === null) {
+            throw new MissingConnectionException([
+                'driver' => App::shortName(static::class, 'Database/Driver'),
+                'reason' => 'Unknown',
+            ]);
+        }
+
+        return $this->_connection;
+    }
+
+    /**
+     * Set the internal PDO connection instance.
+     *
+     * @param \PDO $connection PDO instance.
+     * @return $this
+     * @psalm-suppress MoreSpecificImplementedParamType
+     */
+    public function setConnection($connection)
+    {
+        $this->_connection = $connection;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    abstract public function enabled(): bool;
+
+    /**
+     * @inheritDoc
+     */
+    public function prepare($query): StatementInterface
+    {
+        $this->connect();
+        $statement = $this->_connection->prepare($query instanceof Query ? $query->sql() : $query);
+
+        return new PDOStatement($statement, $this);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function beginTransaction(): bool
+    {
+        $this->connect();
+        if ($this->_connection->inTransaction()) {
+            return true;
+        }
+
+        return $this->_connection->beginTransaction();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function commitTransaction(): bool
+    {
+        $this->connect();
+        if (!$this->_connection->inTransaction()) {
+            return false;
+        }
+
+        return $this->_connection->commit();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rollbackTransaction(): bool
+    {
+        $this->connect();
+        if (!$this->_connection->inTransaction()) {
+            return false;
+        }
+
+        return $this->_connection->rollBack();
+    }
+
+    /**
+     * Returns whether a transaction is active for connection.
+     *
+     * @return bool
+     */
+    public function inTransaction(): bool
+    {
+        $this->connect();
+
+        return $this->_connection->inTransaction();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsSavePoints(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_SAVEPOINT);
+    }
+
+    /**
+     * Returns true if the server supports common table expressions.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_QUOTE)` instead
+     */
+    public function supportsCTEs(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_CTE);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function quote($value, $type = PDO::PARAM_STR): string
+    {
+        $this->connect();
+
+        return $this->_connection->quote((string)$value, $type);
+    }
+
+    /**
+     * Checks if the driver supports quoting, as PDO_ODBC does not support it.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_QUOTE)` instead
+     */
+    public function supportsQuoting(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_QUOTE);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    abstract public function queryTranslator(string $type): Closure;
+
+    /**
+     * @inheritDoc
+     */
+    abstract public function schemaDialect(): SchemaDialect;
+
+    /**
+     * @inheritDoc
+     */
+    abstract public function quoteIdentifier(string $identifier): string;
+
+    /**
+     * @inheritDoc
+     */
+    public function schemaValue($value): string
+    {
+        if ($value === null) {
+            return 'NULL';
+        }
+        if ($value === false) {
+            return 'FALSE';
+        }
+        if ($value === true) {
+            return 'TRUE';
+        }
+        if (is_float($value)) {
+            return str_replace(',', '.', (string)$value);
+        }
+        /** @psalm-suppress InvalidArgument */
+        if (
+            (
+                is_int($value) ||
+                $value === '0'
+            ) ||
+            (
+                is_numeric($value) &&
+                strpos($value, ',') === false &&
+                substr($value, 0, 1) !== '0' &&
+                strpos($value, 'e') === false
+            )
+        ) {
+            return (string)$value;
+        }
+
+        return $this->_connection->quote((string)$value, PDO::PARAM_STR);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schema(): string
+    {
+        return $this->_config['schema'];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function lastInsertId(?string $table = null, ?string $column = null)
+    {
+        $this->connect();
+
+        if ($this->_connection instanceof PDO) {
+            return $this->_connection->lastInsertId($table);
+        }
+
+        return $this->_connection->lastInsertId($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function isConnected(): bool
+    {
+        if ($this->_connection === null) {
+            $connected = false;
+        } else {
+            try {
+                $connected = (bool)$this->_connection->query('SELECT 1');
+            } catch (PDOException $e) {
+                $connected = false;
+            }
+        }
+
+        return $connected;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function enableAutoQuoting(bool $enable = true)
+    {
+        $this->_autoQuoting = $enable;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableAutoQuoting()
+    {
+        $this->_autoQuoting = false;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function isAutoQuotingEnabled(): bool
+    {
+        return $this->_autoQuoting;
+    }
+
+    /**
+     * Returns whether the driver supports the feature.
+     *
+     * Defaults to true for FEATURE_QUOTE and FEATURE_SAVEPOINT.
+     *
+     * @param string $feature Driver feature name
+     * @return bool
+     */
+    public function supports(string $feature): bool
+    {
+        switch ($feature) {
+            case static::FEATURE_DISABLE_CONSTRAINT_WITHOUT_TRANSACTION:
+            case static::FEATURE_QUOTE:
+            case static::FEATURE_SAVEPOINT:
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function compileQuery(Query $query, ValueBinder $binder): array
+    {
+        $processor = $this->newCompiler();
+        $translator = $this->queryTranslator($query->type());
+        $query = $translator($query);
+
+        return [$query, $processor->compile($query, $binder)];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function newCompiler(): QueryCompiler
+    {
+        return new QueryCompiler();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function newTableSchema(string $table, array $columns = []): TableSchema
+    {
+        $className = TableSchema::class;
+        if (isset($this->_config['tableSchema'])) {
+            /** @var class-string<\Cake\Database\Schema\TableSchema> $className */
+            $className = $this->_config['tableSchema'];
+        }
+
+        return new $className($table, $columns);
+    }
+
+    /**
+     * Returns the maximum alias length allowed.
+     * This can be different from the maximum identifier length for columns.
+     *
+     * @return int|null Maximum alias length or null if no limit
+     */
+    public function getMaxAliasLength(): ?int
+    {
+        return static::MAX_ALIAS_LENGTH;
+    }
+
+    /**
+     * Returns the number of connection retry attempts made.
+     *
+     * @return int
+     */
+    public function getConnectRetries(): int
+    {
+        return $this->connectRetries;
+    }
+
+    /**
+     * Returns the connection role this driver performs.
+     *
+     * @return string
+     */
+    public function getRole(): string
+    {
+        return $this->_config['_role'] ?? Connection::ROLE_WRITE;
+    }
+
+    /**
+     * Destructor
+     */
+    public function __destruct()
+    {
+        /** @psalm-suppress PossiblyNullPropertyAssignmentValue */
+        $this->_connection = null;
+    }
+
+    /**
+     * Returns an array that can be used to describe the internal state of this
+     * object.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        return [
+            'connected' => $this->_connection !== null,
+            'role' => $this->getRole(),
+        ];
+    }
+}
diff --git a/vendor/cakephp/database/Driver/Mysql.php b/vendor/cakephp/database/Driver/Mysql.php
new file mode 100755
index 0000000..b7d30b6
--- /dev/null
+++ b/vendor/cakephp/database/Driver/Mysql.php
@@ -0,0 +1,345 @@
+
+     */
+    protected $_baseConfig = [
+        'persistent' => true,
+        'host' => 'localhost',
+        'username' => 'root',
+        'password' => '',
+        'database' => 'cake',
+        'port' => '3306',
+        'flags' => [],
+        'encoding' => 'utf8mb4',
+        'timezone' => null,
+        'init' => [],
+    ];
+
+    /**
+     * The schema dialect for this driver
+     *
+     * @var \Cake\Database\Schema\MysqlSchemaDialect|null
+     */
+    protected $_schemaDialect;
+
+    /**
+     * String used to start a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_startQuote = '`';
+
+    /**
+     * String used to end a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_endQuote = '`';
+
+    /**
+     * Server type.
+     *
+     * If the underlying server is MariaDB, its value will get set to `'mariadb'`
+     * after `version()` method is called.
+     *
+     * @var string
+     */
+    protected $serverType = self::SERVER_TYPE_MYSQL;
+
+    /**
+     * Mapping of feature to db server version for feature availability checks.
+     *
+     * @var array>
+     */
+    protected $featureVersions = [
+        'mysql' => [
+            'json' => '5.7.0',
+            'cte' => '8.0.0',
+            'window' => '8.0.0',
+        ],
+        'mariadb' => [
+            'json' => '10.2.7',
+            'cte' => '10.2.1',
+            'window' => '10.2.0',
+        ],
+    ];
+
+    /**
+     * Establishes a connection to the database server
+     *
+     * @return bool true on success
+     */
+    public function connect(): bool
+    {
+        if ($this->_connection) {
+            return true;
+        }
+        $config = $this->_config;
+
+        if ($config['timezone'] === 'UTC') {
+            $config['timezone'] = '+0:00';
+        }
+
+        if (!empty($config['timezone'])) {
+            $config['init'][] = sprintf("SET time_zone = '%s'", $config['timezone']);
+        }
+
+        $config['flags'] += [
+            PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
+            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+        ];
+
+        if (!empty($config['ssl_key']) && !empty($config['ssl_cert'])) {
+            $config['flags'][PDO::MYSQL_ATTR_SSL_KEY] = $config['ssl_key'];
+            $config['flags'][PDO::MYSQL_ATTR_SSL_CERT] = $config['ssl_cert'];
+        }
+        if (!empty($config['ssl_ca'])) {
+            $config['flags'][PDO::MYSQL_ATTR_SSL_CA] = $config['ssl_ca'];
+        }
+
+        if (empty($config['unix_socket'])) {
+            $dsn = "mysql:host={$config['host']};port={$config['port']};dbname={$config['database']}";
+        } else {
+            $dsn = "mysql:unix_socket={$config['unix_socket']};dbname={$config['database']}";
+        }
+
+        if (!empty($config['encoding'])) {
+            $dsn .= ";charset={$config['encoding']}";
+        }
+
+        $this->_connect($dsn, $config);
+
+        if (!empty($config['init'])) {
+            $connection = $this->getConnection();
+            foreach ((array)$config['init'] as $command) {
+                $connection->exec($command);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns whether php is able to use this driver for connecting to database
+     *
+     * @return bool true if it is valid to use this driver
+     */
+    public function enabled(): bool
+    {
+        return in_array('mysql', PDO::getAvailableDrivers(), true);
+    }
+
+    /**
+     * Prepares a sql statement to be executed
+     *
+     * @param \Cake\Database\Query|string $query The query to prepare.
+     * @return \Cake\Database\StatementInterface
+     */
+    public function prepare($query): StatementInterface
+    {
+        $this->connect();
+        $isObject = $query instanceof Query;
+        /**
+         * @psalm-suppress PossiblyInvalidMethodCall
+         * @psalm-suppress PossiblyInvalidArgument
+         */
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
+        $result = new MysqlStatement($statement, $this);
+        /** @psalm-suppress PossiblyInvalidMethodCall */
+        if ($isObject && $query->isBufferedResultsEnabled() === false) {
+            $result->bufferResults(false);
+        }
+
+        return $result;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schemaDialect(): SchemaDialect
+    {
+        if ($this->_schemaDialect === null) {
+            $this->_schemaDialect = new MysqlSchemaDialect($this);
+        }
+
+        return $this->_schemaDialect;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schema(): string
+    {
+        return $this->_config['database'];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableForeignKeySQL(): string
+    {
+        return 'SET foreign_key_checks = 0';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function enableForeignKeySQL(): string
+    {
+        return 'SET foreign_key_checks = 1';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supports(string $feature): bool
+    {
+        switch ($feature) {
+            case static::FEATURE_CTE:
+            case static::FEATURE_JSON:
+            case static::FEATURE_WINDOW:
+                return version_compare(
+                    $this->version(),
+                    $this->featureVersions[$this->serverType][$feature],
+                    '>='
+                );
+        }
+
+        return parent::supports($feature);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsDynamicConstraints(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Returns true if the connected server is MariaDB.
+     *
+     * @return bool
+     */
+    public function isMariadb(): bool
+    {
+        $this->version();
+
+        return $this->serverType === static::SERVER_TYPE_MARIADB;
+    }
+
+    /**
+     * Returns connected server version.
+     *
+     * @return string
+     */
+    public function version(): string
+    {
+        if ($this->_version === null) {
+            $this->connect();
+            $this->_version = (string)$this->_connection->getAttribute(PDO::ATTR_SERVER_VERSION);
+
+            if (strpos($this->_version, 'MariaDB') !== false) {
+                $this->serverType = static::SERVER_TYPE_MARIADB;
+                preg_match('/^(?:5\.5\.5-)?(\d+\.\d+\.\d+.*-MariaDB[^:]*)/', $this->_version, $matches);
+                $this->_version = $matches[1];
+            }
+        }
+
+        return $this->_version;
+    }
+
+    /**
+     * Returns true if the server supports common table expressions.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_CTE)` instead
+     */
+    public function supportsCTEs(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_CTE);
+    }
+
+    /**
+     * Returns true if the server supports native JSON columns
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_JSON)` instead
+     */
+    public function supportsNativeJson(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_JSON);
+    }
+
+    /**
+     * Returns true if the connected server supports window functions.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_WINDOW)` instead
+     */
+    public function supportsWindowFunctions(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_WINDOW);
+    }
+}
diff --git a/vendor/cakephp/database/Driver/Postgres.php b/vendor/cakephp/database/Driver/Postgres.php
new file mode 100755
index 0000000..2a32264
--- /dev/null
+++ b/vendor/cakephp/database/Driver/Postgres.php
@@ -0,0 +1,348 @@
+
+     */
+    protected $_baseConfig = [
+        'persistent' => true,
+        'host' => 'localhost',
+        'username' => 'root',
+        'password' => '',
+        'database' => 'cake',
+        'schema' => 'public',
+        'port' => 5432,
+        'encoding' => 'utf8',
+        'timezone' => null,
+        'flags' => [],
+        'init' => [],
+    ];
+
+    /**
+     * The schema dialect class for this driver
+     *
+     * @var \Cake\Database\Schema\PostgresSchemaDialect|null
+     */
+    protected $_schemaDialect;
+
+    /**
+     * String used to start a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_startQuote = '"';
+
+    /**
+     * String used to end a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_endQuote = '"';
+
+    /**
+     * Establishes a connection to the database server
+     *
+     * @return bool true on success
+     */
+    public function connect(): bool
+    {
+        if ($this->_connection) {
+            return true;
+        }
+        $config = $this->_config;
+        $config['flags'] += [
+            PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::ATTR_EMULATE_PREPARES => false,
+            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+        ];
+        if (empty($config['unix_socket'])) {
+            $dsn = "pgsql:host={$config['host']};port={$config['port']};dbname={$config['database']}";
+        } else {
+            $dsn = "pgsql:dbname={$config['database']}";
+        }
+
+        $this->_connect($dsn, $config);
+        $this->_connection = $connection = $this->getConnection();
+        if (!empty($config['encoding'])) {
+            $this->setEncoding($config['encoding']);
+        }
+
+        if (!empty($config['schema'])) {
+            $this->setSchema($config['schema']);
+        }
+
+        if (!empty($config['timezone'])) {
+            $config['init'][] = sprintf('SET timezone = %s', $connection->quote($config['timezone']));
+        }
+
+        foreach ($config['init'] as $command) {
+            $connection->exec($command);
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns whether php is able to use this driver for connecting to database
+     *
+     * @return bool true if it is valid to use this driver
+     */
+    public function enabled(): bool
+    {
+        return in_array('pgsql', PDO::getAvailableDrivers(), true);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schemaDialect(): SchemaDialect
+    {
+        if ($this->_schemaDialect === null) {
+            $this->_schemaDialect = new PostgresSchemaDialect($this);
+        }
+
+        return $this->_schemaDialect;
+    }
+
+    /**
+     * Sets connection encoding
+     *
+     * @param string $encoding The encoding to use.
+     * @return void
+     */
+    public function setEncoding(string $encoding): void
+    {
+        $this->connect();
+        $this->_connection->exec('SET NAMES ' . $this->_connection->quote($encoding));
+    }
+
+    /**
+     * Sets connection default schema, if any relation defined in a query is not fully qualified
+     * postgres will fallback to looking the relation into defined default schema
+     *
+     * @param string $schema The schema names to set `search_path` to.
+     * @return void
+     */
+    public function setSchema(string $schema): void
+    {
+        $this->connect();
+        $this->_connection->exec('SET search_path TO ' . $this->_connection->quote($schema));
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableForeignKeySQL(): string
+    {
+        return 'SET CONSTRAINTS ALL DEFERRED';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function enableForeignKeySQL(): string
+    {
+        return 'SET CONSTRAINTS ALL IMMEDIATE';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supports(string $feature): bool
+    {
+        switch ($feature) {
+            case static::FEATURE_CTE:
+            case static::FEATURE_JSON:
+            case static::FEATURE_TRUNCATE_WITH_CONSTRAINTS:
+            case static::FEATURE_WINDOW:
+                return true;
+
+            case static::FEATURE_DISABLE_CONSTRAINT_WITHOUT_TRANSACTION:
+                return false;
+        }
+
+        return parent::supports($feature);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsDynamicConstraints(): bool
+    {
+        return true;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _transformDistinct(Query $query): Query
+    {
+        return $query;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _insertQueryTranslator(Query $query): Query
+    {
+        if (!$query->clause('epilog')) {
+            $query->epilog('RETURNING *');
+        }
+
+        return $query;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _expressionTranslators(): array
+    {
+        return [
+            IdentifierExpression::class => '_transformIdentifierExpression',
+            FunctionExpression::class => '_transformFunctionExpression',
+            StringExpression::class => '_transformStringExpression',
+        ];
+    }
+
+    /**
+     * Changes identifer expression into postgresql format.
+     *
+     * @param \Cake\Database\Expression\IdentifierExpression $expression The expression to tranform.
+     * @return void
+     */
+    protected function _transformIdentifierExpression(IdentifierExpression $expression): void
+    {
+        $collation = $expression->getCollation();
+        if ($collation) {
+            // use trim() to work around expression being transformed multiple times
+            $expression->setCollation('"' . trim($collation, '"') . '"');
+        }
+    }
+
+    /**
+     * Receives a FunctionExpression and changes it so that it conforms to this
+     * SQL dialect.
+     *
+     * @param \Cake\Database\Expression\FunctionExpression $expression The function expression to convert
+     *   to postgres SQL.
+     * @return void
+     */
+    protected function _transformFunctionExpression(FunctionExpression $expression): void
+    {
+        switch ($expression->getName()) {
+            case 'CONCAT':
+                // CONCAT function is expressed as exp1 || exp2
+                $expression->setName('')->setConjunction(' ||');
+                break;
+            case 'DATEDIFF':
+                $expression
+                    ->setName('')
+                    ->setConjunction('-')
+                    ->iterateParts(function ($p) {
+                        if (is_string($p)) {
+                            $p = ['value' => [$p => 'literal'], 'type' => null];
+                        } else {
+                            $p['value'] = [$p['value']];
+                        }
+
+                        return new FunctionExpression('DATE', $p['value'], [$p['type']]);
+                    });
+                break;
+            case 'CURRENT_DATE':
+                $time = new FunctionExpression('LOCALTIMESTAMP', [' 0 ' => 'literal']);
+                $expression->setName('CAST')->setConjunction(' AS ')->add([$time, 'date' => 'literal']);
+                break;
+            case 'CURRENT_TIME':
+                $time = new FunctionExpression('LOCALTIMESTAMP', [' 0 ' => 'literal']);
+                $expression->setName('CAST')->setConjunction(' AS ')->add([$time, 'time' => 'literal']);
+                break;
+            case 'NOW':
+                $expression->setName('LOCALTIMESTAMP')->add([' 0 ' => 'literal']);
+                break;
+            case 'RAND':
+                $expression->setName('RANDOM');
+                break;
+            case 'DATE_ADD':
+                $expression
+                    ->setName('')
+                    ->setConjunction(' + INTERVAL')
+                    ->iterateParts(function ($p, $key) {
+                        if ($key === 1) {
+                            $p = sprintf("'%s'", $p);
+                        }
+
+                        return $p;
+                    });
+                break;
+            case 'DAYOFWEEK':
+                $expression
+                    ->setName('EXTRACT')
+                    ->setConjunction(' ')
+                    ->add(['DOW FROM' => 'literal'], [], true)
+                    ->add([') + (1' => 'literal']); // Postgres starts on index 0 but Sunday should be 1
+                break;
+        }
+    }
+
+    /**
+     * Changes string expression into postgresql format.
+     *
+     * @param \Cake\Database\Expression\StringExpression $expression The string expression to tranform.
+     * @return void
+     */
+    protected function _transformStringExpression(StringExpression $expression): void
+    {
+        // use trim() to work around expression being transformed multiple times
+        $expression->setCollation('"' . trim($expression->getCollation(), '"') . '"');
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return \Cake\Database\PostgresCompiler
+     */
+    public function newCompiler(): QueryCompiler
+    {
+        return new PostgresCompiler();
+    }
+}
diff --git a/vendor/cakephp/database/Driver/SqlDialectTrait.php b/vendor/cakephp/database/Driver/SqlDialectTrait.php
new file mode 100755
index 0000000..94a5e88
--- /dev/null
+++ b/vendor/cakephp/database/Driver/SqlDialectTrait.php
@@ -0,0 +1,315 @@
+_startQuote . $identifier . $this->_endQuote;
+        }
+
+        // string.string
+        if (preg_match('/^[\w-]+\.[^ \*]*$/u', $identifier)) {
+            $items = explode('.', $identifier);
+
+            return $this->_startQuote . implode($this->_endQuote . '.' . $this->_startQuote, $items) . $this->_endQuote;
+        }
+
+        // string.*
+        if (preg_match('/^[\w-]+\.\*$/u', $identifier)) {
+            return $this->_startQuote . str_replace('.*', $this->_endQuote . '.*', $identifier);
+        }
+
+        // Functions
+        if (preg_match('/^([\w-]+)\((.*)\)$/', $identifier, $matches)) {
+            return $matches[1] . '(' . $this->quoteIdentifier($matches[2]) . ')';
+        }
+
+        // Alias.field AS thing
+        if (preg_match('/^([\w-]+(\.[\w\s-]+|\(.*\))*)\s+AS\s*([\w-]+)$/ui', $identifier, $matches)) {
+            return $this->quoteIdentifier($matches[1]) . ' AS ' . $this->quoteIdentifier($matches[3]);
+        }
+
+        // string.string with spaces
+        if (preg_match('/^([\w-]+\.[\w][\w\s-]*[\w])(.*)/u', $identifier, $matches)) {
+            $items = explode('.', $matches[1]);
+            $field = implode($this->_endQuote . '.' . $this->_startQuote, $items);
+
+            return $this->_startQuote . $field . $this->_endQuote . $matches[2];
+        }
+
+        if (preg_match('/^[\w\s-]*[\w-]+/u', $identifier)) {
+            return $this->_startQuote . $identifier . $this->_endQuote;
+        }
+
+        return $identifier;
+    }
+
+    /**
+     * Returns a callable function that will be used to transform a passed Query object.
+     * This function, in turn, will return an instance of a Query object that has been
+     * transformed to accommodate any specificities of the SQL dialect in use.
+     *
+     * @param string $type the type of query to be transformed
+     * (select, insert, update, delete)
+     * @return \Closure
+     */
+    public function queryTranslator(string $type): Closure
+    {
+        return function ($query) use ($type) {
+            if ($this->isAutoQuotingEnabled()) {
+                $query = (new IdentifierQuoter($this))->quote($query);
+            }
+
+            /** @var \Cake\ORM\Query $query */
+            $query = $this->{'_' . $type . 'QueryTranslator'}($query);
+            $translators = $this->_expressionTranslators();
+            if (!$translators) {
+                return $query;
+            }
+
+            $query->traverseExpressions(function ($expression) use ($translators, $query): void {
+                foreach ($translators as $class => $method) {
+                    if ($expression instanceof $class) {
+                        $this->{$method}($expression, $query);
+                    }
+                }
+            });
+
+            return $query;
+        };
+    }
+
+    /**
+     * Returns an associative array of methods that will transform Expression
+     * objects to conform with the specific SQL dialect. Keys are class names
+     * and values a method in this class.
+     *
+     * @psalm-return array
+     * @return array
+     */
+    protected function _expressionTranslators(): array
+    {
+        return [];
+    }
+
+    /**
+     * Apply translation steps to select queries.
+     *
+     * @param \Cake\Database\Query $query The query to translate
+     * @return \Cake\Database\Query The modified query
+     */
+    protected function _selectQueryTranslator(Query $query): Query
+    {
+        return $this->_transformDistinct($query);
+    }
+
+    /**
+     * Returns the passed query after rewriting the DISTINCT clause, so that drivers
+     * that do not support the "ON" part can provide the actual way it should be done
+     *
+     * @param \Cake\Database\Query $query The query to be transformed
+     * @return \Cake\Database\Query
+     */
+    protected function _transformDistinct(Query $query): Query
+    {
+        if (is_array($query->clause('distinct'))) {
+            $query->group($query->clause('distinct'), true);
+            $query->distinct(false);
+        }
+
+        return $query;
+    }
+
+    /**
+     * Apply translation steps to delete queries.
+     *
+     * Chops out aliases on delete query conditions as most database dialects do not
+     * support aliases in delete queries. This also removes aliases
+     * in table names as they frequently don't work either.
+     *
+     * We are intentionally not supporting deletes with joins as they have even poorer support.
+     *
+     * @param \Cake\Database\Query $query The query to translate
+     * @return \Cake\Database\Query The modified query
+     */
+    protected function _deleteQueryTranslator(Query $query): Query
+    {
+        $hadAlias = false;
+        $tables = [];
+        foreach ($query->clause('from') as $alias => $table) {
+            if (is_string($alias)) {
+                $hadAlias = true;
+            }
+            $tables[] = $table;
+        }
+        if ($hadAlias) {
+            $query->from($tables, true);
+        }
+
+        if (!$hadAlias) {
+            return $query;
+        }
+
+        return $this->_removeAliasesFromConditions($query);
+    }
+
+    /**
+     * Apply translation steps to update queries.
+     *
+     * Chops out aliases on update query conditions as not all database dialects do support
+     * aliases in update queries.
+     *
+     * Just like for delete queries, joins are currently not supported for update queries.
+     *
+     * @param \Cake\Database\Query $query The query to translate
+     * @return \Cake\Database\Query The modified query
+     */
+    protected function _updateQueryTranslator(Query $query): Query
+    {
+        return $this->_removeAliasesFromConditions($query);
+    }
+
+    /**
+     * Removes aliases from the `WHERE` clause of a query.
+     *
+     * @param \Cake\Database\Query $query The query to process.
+     * @return \Cake\Database\Query The modified query.
+     * @throws \RuntimeException In case the processed query contains any joins, as removing
+     *  aliases from the conditions can break references to the joined tables.
+     */
+    protected function _removeAliasesFromConditions(Query $query): Query
+    {
+        if ($query->clause('join')) {
+            throw new RuntimeException(
+                'Aliases are being removed from conditions for UPDATE/DELETE queries, ' .
+                'this can break references to joined tables.'
+            );
+        }
+
+        $conditions = $query->clause('where');
+        if ($conditions) {
+            $conditions->traverse(function ($expression) {
+                if ($expression instanceof ComparisonExpression) {
+                    $field = $expression->getField();
+                    if (
+                        is_string($field) &&
+                        strpos($field, '.') !== false
+                    ) {
+                        [, $unaliasedField] = explode('.', $field, 2);
+                        $expression->setField($unaliasedField);
+                    }
+
+                    return $expression;
+                }
+
+                if ($expression instanceof IdentifierExpression) {
+                    $identifier = $expression->getIdentifier();
+                    if (strpos($identifier, '.') !== false) {
+                        [, $unaliasedIdentifier] = explode('.', $identifier, 2);
+                        $expression->setIdentifier($unaliasedIdentifier);
+                    }
+
+                    return $expression;
+                }
+
+                return $expression;
+            });
+        }
+
+        return $query;
+    }
+
+    /**
+     * Apply translation steps to insert queries.
+     *
+     * @param \Cake\Database\Query $query The query to translate
+     * @return \Cake\Database\Query The modified query
+     */
+    protected function _insertQueryTranslator(Query $query): Query
+    {
+        return $query;
+    }
+
+    /**
+     * Returns a SQL snippet for creating a new transaction savepoint
+     *
+     * @param string|int $name save point name
+     * @return string
+     */
+    public function savePointSQL($name): string
+    {
+        return 'SAVEPOINT LEVEL' . $name;
+    }
+
+    /**
+     * Returns a SQL snippet for releasing a previously created save point
+     *
+     * @param string|int $name save point name
+     * @return string
+     */
+    public function releaseSavePointSQL($name): string
+    {
+        return 'RELEASE SAVEPOINT LEVEL' . $name;
+    }
+
+    /**
+     * Returns a SQL snippet for rollbacking a previously created save point
+     *
+     * @param string|int $name save point name
+     * @return string
+     */
+    public function rollbackSavePointSQL($name): string
+    {
+        return 'ROLLBACK TO SAVEPOINT LEVEL' . $name;
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Driver\SqlDialectTrait',
+    'Cake\Database\SqlDialectTrait'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Driver/Sqlite.php b/vendor/cakephp/database/Driver/Sqlite.php
new file mode 100755
index 0000000..65c3e7a
--- /dev/null
+++ b/vendor/cakephp/database/Driver/Sqlite.php
@@ -0,0 +1,385 @@
+
+     */
+    protected $_baseConfig = [
+        'persistent' => false,
+        'username' => null,
+        'password' => null,
+        'database' => ':memory:',
+        'encoding' => 'utf8',
+        'mask' => 0644,
+        'cache' => null,
+        'mode' => null,
+        'flags' => [],
+        'init' => [],
+    ];
+
+    /**
+     * The schema dialect class for this driver
+     *
+     * @var \Cake\Database\Schema\SqliteSchemaDialect|null
+     */
+    protected $_schemaDialect;
+
+    /**
+     * Whether the connected server supports window functions.
+     *
+     * @var bool|null
+     */
+    protected $_supportsWindowFunctions;
+
+    /**
+     * String used to start a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_startQuote = '"';
+
+    /**
+     * String used to end a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_endQuote = '"';
+
+    /**
+     * Mapping of date parts.
+     *
+     * @var array
+     */
+    protected $_dateParts = [
+        'day' => 'd',
+        'hour' => 'H',
+        'month' => 'm',
+        'minute' => 'M',
+        'second' => 'S',
+        'week' => 'W',
+        'year' => 'Y',
+    ];
+
+    /**
+     * Mapping of feature to db server version for feature availability checks.
+     *
+     * @var array
+     */
+    protected $featureVersions = [
+        'cte' => '3.8.3',
+        'window' => '3.28.0',
+    ];
+
+    /**
+     * Establishes a connection to the database server
+     *
+     * @return bool true on success
+     */
+    public function connect(): bool
+    {
+        if ($this->_connection) {
+            return true;
+        }
+        $config = $this->_config;
+        $config['flags'] += [
+            PDO::ATTR_PERSISTENT => $config['persistent'],
+            PDO::ATTR_EMULATE_PREPARES => false,
+            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+        ];
+        if (!is_string($config['database']) || $config['database'] === '') {
+            $name = $config['name'] ?? 'unknown';
+            throw new InvalidArgumentException(
+                "The `database` key for the `{$name}` SQLite connection needs to be a non-empty string."
+            );
+        }
+
+        $chmodFile = false;
+        if ($config['database'] !== ':memory:' && $config['mode'] !== 'memory') {
+            $chmodFile = !file_exists($config['database']);
+        }
+
+        $params = [];
+        if ($config['cache']) {
+            $params[] = 'cache=' . $config['cache'];
+        }
+        if ($config['mode']) {
+            $params[] = 'mode=' . $config['mode'];
+        }
+
+        if ($params) {
+            if (PHP_VERSION_ID < 80100) {
+                throw new RuntimeException('SQLite URI support requires PHP 8.1.');
+            }
+            $dsn = 'sqlite:file:' . $config['database'] . '?' . implode('&', $params);
+        } else {
+            $dsn = 'sqlite:' . $config['database'];
+        }
+
+        $this->_connect($dsn, $config);
+        if ($chmodFile) {
+            // phpcs:disable
+            @chmod($config['database'], $config['mask']);
+            // phpcs:enable
+        }
+
+        if (!empty($config['init'])) {
+            foreach ((array)$config['init'] as $command) {
+                $this->getConnection()->exec($command);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns whether php is able to use this driver for connecting to database
+     *
+     * @return bool true if it is valid to use this driver
+     */
+    public function enabled(): bool
+    {
+        return in_array('sqlite', PDO::getAvailableDrivers(), true);
+    }
+
+    /**
+     * Prepares a sql statement to be executed
+     *
+     * @param \Cake\Database\Query|string $query The query to prepare.
+     * @return \Cake\Database\StatementInterface
+     */
+    public function prepare($query): StatementInterface
+    {
+        $this->connect();
+        $isObject = $query instanceof Query;
+        /**
+         * @psalm-suppress PossiblyInvalidMethodCall
+         * @psalm-suppress PossiblyInvalidArgument
+         */
+        $statement = $this->_connection->prepare($isObject ? $query->sql() : $query);
+        $result = new SqliteStatement(new PDOStatement($statement, $this), $this);
+        /** @psalm-suppress PossiblyInvalidMethodCall */
+        if ($isObject && $query->isBufferedResultsEnabled() === false) {
+            $result->bufferResults(false);
+        }
+
+        return $result;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableForeignKeySQL(): string
+    {
+        return 'PRAGMA foreign_keys = OFF';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function enableForeignKeySQL(): string
+    {
+        return 'PRAGMA foreign_keys = ON';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supports(string $feature): bool
+    {
+        switch ($feature) {
+            case static::FEATURE_CTE:
+            case static::FEATURE_WINDOW:
+                return version_compare(
+                    $this->version(),
+                    $this->featureVersions[$feature],
+                    '>='
+                );
+
+            case static::FEATURE_TRUNCATE_WITH_CONSTRAINTS:
+                return true;
+        }
+
+        return parent::supports($feature);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsDynamicConstraints(): bool
+    {
+        return false;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schemaDialect(): SchemaDialect
+    {
+        if ($this->_schemaDialect === null) {
+            $this->_schemaDialect = new SqliteSchemaDialect($this);
+        }
+
+        return $this->_schemaDialect;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function newCompiler(): QueryCompiler
+    {
+        return new SqliteCompiler();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _expressionTranslators(): array
+    {
+        return [
+            FunctionExpression::class => '_transformFunctionExpression',
+            TupleComparison::class => '_transformTupleComparison',
+        ];
+    }
+
+    /**
+     * Receives a FunctionExpression and changes it so that it conforms to this
+     * SQL dialect.
+     *
+     * @param \Cake\Database\Expression\FunctionExpression $expression The function expression to convert to TSQL.
+     * @return void
+     */
+    protected function _transformFunctionExpression(FunctionExpression $expression): void
+    {
+        switch ($expression->getName()) {
+            case 'CONCAT':
+                // CONCAT function is expressed as exp1 || exp2
+                $expression->setName('')->setConjunction(' ||');
+                break;
+            case 'DATEDIFF':
+                $expression
+                    ->setName('ROUND')
+                    ->setConjunction('-')
+                    ->iterateParts(function ($p) {
+                        return new FunctionExpression('JULIANDAY', [$p['value']], [$p['type']]);
+                    });
+                break;
+            case 'NOW':
+                $expression->setName('DATETIME')->add(["'now'" => 'literal']);
+                break;
+            case 'RAND':
+                $expression
+                    ->setName('ABS')
+                    ->add(['RANDOM() % 1' => 'literal'], [], true);
+                break;
+            case 'CURRENT_DATE':
+                $expression->setName('DATE')->add(["'now'" => 'literal']);
+                break;
+            case 'CURRENT_TIME':
+                $expression->setName('TIME')->add(["'now'" => 'literal']);
+                break;
+            case 'EXTRACT':
+                $expression
+                    ->setName('STRFTIME')
+                    ->setConjunction(' ,')
+                    ->iterateParts(function ($p, $key) {
+                        if ($key === 0) {
+                            $value = rtrim(strtolower($p), 's');
+                            if (isset($this->_dateParts[$value])) {
+                                $p = ['value' => '%' . $this->_dateParts[$value], 'type' => null];
+                            }
+                        }
+
+                        return $p;
+                    });
+                break;
+            case 'DATE_ADD':
+                $expression
+                    ->setName('DATE')
+                    ->setConjunction(',')
+                    ->iterateParts(function ($p, $key) {
+                        if ($key === 1) {
+                            $p = ['value' => $p, 'type' => null];
+                        }
+
+                        return $p;
+                    });
+                break;
+            case 'DAYOFWEEK':
+                $expression
+                    ->setName('STRFTIME')
+                    ->setConjunction(' ')
+                    ->add(["'%w', " => 'literal'], [], true)
+                    ->add([') + (1' => 'literal']); // Sqlite starts on index 0 but Sunday should be 1
+                break;
+        }
+    }
+
+    /**
+     * Returns true if the server supports common table expressions.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_CTE)` instead
+     */
+    public function supportsCTEs(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_CTE);
+    }
+
+    /**
+     * Returns true if the connected server supports window functions.
+     *
+     * @return bool
+     * @deprecated 4.3.0 Use `supports(DriverInterface::FEATURE_WINDOW)` instead
+     */
+    public function supportsWindowFunctions(): bool
+    {
+        deprecationWarning('Feature support checks are now implemented by `supports()` with FEATURE_* constants.');
+
+        return $this->supports(static::FEATURE_WINDOW);
+    }
+}
diff --git a/vendor/cakephp/database/Driver/Sqlserver.php b/vendor/cakephp/database/Driver/Sqlserver.php
new file mode 100755
index 0000000..a0dc2ec
--- /dev/null
+++ b/vendor/cakephp/database/Driver/Sqlserver.php
@@ -0,0 +1,569 @@
+
+     */
+    protected $_baseConfig = [
+        'host' => 'localhost\SQLEXPRESS',
+        'username' => '',
+        'password' => '',
+        'database' => 'cake',
+        'port' => '',
+        // PDO::SQLSRV_ENCODING_UTF8
+        'encoding' => 65001,
+        'flags' => [],
+        'init' => [],
+        'settings' => [],
+        'attributes' => [],
+        'app' => null,
+        'connectionPooling' => null,
+        'failoverPartner' => null,
+        'loginTimeout' => null,
+        'multiSubnetFailover' => null,
+        'encrypt' => null,
+        'trustServerCertificate' => null,
+    ];
+
+    /**
+     * The schema dialect class for this driver
+     *
+     * @var \Cake\Database\Schema\SqlserverSchemaDialect|null
+     */
+    protected $_schemaDialect;
+
+    /**
+     * String used to start a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_startQuote = '[';
+
+    /**
+     * String used to end a database identifier quoting to make it safe
+     *
+     * @var string
+     */
+    protected $_endQuote = ']';
+
+    /**
+     * Establishes a connection to the database server.
+     *
+     * Please note that the PDO::ATTR_PERSISTENT attribute is not supported by
+     * the SQL Server PHP PDO drivers.  As a result you cannot use the
+     * persistent config option when connecting to a SQL Server  (for more
+     * information see: https://github.com/Microsoft/msphpsql/issues/65).
+     *
+     * @throws \InvalidArgumentException if an unsupported setting is in the driver config
+     * @return bool true on success
+     */
+    public function connect(): bool
+    {
+        if ($this->_connection) {
+            return true;
+        }
+        $config = $this->_config;
+
+        if (isset($config['persistent']) && $config['persistent']) {
+            throw new InvalidArgumentException(
+                'Config setting "persistent" cannot be set to true, '
+                . 'as the Sqlserver PDO driver does not support PDO::ATTR_PERSISTENT'
+            );
+        }
+
+        $config['flags'] += [
+            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+        ];
+
+        if (!empty($config['encoding'])) {
+            $config['flags'][PDO::SQLSRV_ATTR_ENCODING] = $config['encoding'];
+        }
+        $port = '';
+        if ($config['port']) {
+            $port = ',' . $config['port'];
+        }
+
+        $dsn = "sqlsrv:Server={$config['host']}{$port};Database={$config['database']};MultipleActiveResultSets=false";
+        if ($config['app'] !== null) {
+            $dsn .= ";APP={$config['app']}";
+        }
+        if ($config['connectionPooling'] !== null) {
+            $dsn .= ";ConnectionPooling={$config['connectionPooling']}";
+        }
+        if ($config['failoverPartner'] !== null) {
+            $dsn .= ";Failover_Partner={$config['failoverPartner']}";
+        }
+        if ($config['loginTimeout'] !== null) {
+            $dsn .= ";LoginTimeout={$config['loginTimeout']}";
+        }
+        if ($config['multiSubnetFailover'] !== null) {
+            $dsn .= ";MultiSubnetFailover={$config['multiSubnetFailover']}";
+        }
+        if ($config['encrypt'] !== null) {
+            $dsn .= ";Encrypt={$config['encrypt']}";
+        }
+        if ($config['trustServerCertificate'] !== null) {
+            $dsn .= ";TrustServerCertificate={$config['trustServerCertificate']}";
+        }
+        $this->_connect($dsn, $config);
+
+        $connection = $this->getConnection();
+        if (!empty($config['init'])) {
+            foreach ((array)$config['init'] as $command) {
+                $connection->exec($command);
+            }
+        }
+        if (!empty($config['settings']) && is_array($config['settings'])) {
+            foreach ($config['settings'] as $key => $value) {
+                $connection->exec("SET {$key} {$value}");
+            }
+        }
+        if (!empty($config['attributes']) && is_array($config['attributes'])) {
+            foreach ($config['attributes'] as $key => $value) {
+                $connection->setAttribute($key, $value);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns whether PHP is able to use this driver for connecting to database
+     *
+     * @return bool true if it is valid to use this driver
+     */
+    public function enabled(): bool
+    {
+        return in_array('sqlsrv', PDO::getAvailableDrivers(), true);
+    }
+
+    /**
+     * Prepares a sql statement to be executed
+     *
+     * @param \Cake\Database\Query|string $query The query to prepare.
+     * @return \Cake\Database\StatementInterface
+     */
+    public function prepare($query): StatementInterface
+    {
+        $this->connect();
+
+        $sql = $query;
+        $options = [
+            PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL,
+            PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED,
+        ];
+        if ($query instanceof Query) {
+            $sql = $query->sql();
+            if (count($query->getValueBinder()->bindings()) > 2100) {
+                throw new InvalidArgumentException(
+                    'Exceeded maximum number of parameters (2100) for prepared statements in Sql Server. ' .
+                    'This is probably due to a very large WHERE IN () clause which generates a parameter ' .
+                    'for each value in the array. ' .
+                    'If using an Association, try changing the `strategy` from select to subquery.'
+                );
+            }
+
+            if (!$query->isBufferedResultsEnabled()) {
+                $options = [];
+            }
+        }
+
+        /** @psalm-suppress PossiblyInvalidArgument */
+        $statement = $this->_connection->prepare($sql, $options);
+
+        return new SqlserverStatement($statement, $this);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function savePointSQL($name): string
+    {
+        return 'SAVE TRANSACTION t' . $name;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function releaseSavePointSQL($name): string
+    {
+        // SQLServer has no release save point operation.
+        return '';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rollbackSavePointSQL($name): string
+    {
+        return 'ROLLBACK TRANSACTION t' . $name;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function disableForeignKeySQL(): string
+    {
+        return 'EXEC sp_MSforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function enableForeignKeySQL(): string
+    {
+        return 'EXEC sp_MSforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supports(string $feature): bool
+    {
+        switch ($feature) {
+            case static::FEATURE_CTE:
+            case static::FEATURE_TRUNCATE_WITH_CONSTRAINTS:
+            case static::FEATURE_WINDOW:
+                return true;
+
+            case static::FEATURE_QUOTE:
+                $this->connect();
+
+                return $this->_connection->getAttribute(PDO::ATTR_DRIVER_NAME) !== 'odbc';
+        }
+
+        return parent::supports($feature);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsDynamicConstraints(): bool
+    {
+        return true;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function schemaDialect(): SchemaDialect
+    {
+        if ($this->_schemaDialect === null) {
+            $this->_schemaDialect = new SqlserverSchemaDialect($this);
+        }
+
+        return $this->_schemaDialect;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return \Cake\Database\SqlserverCompiler
+     */
+    public function newCompiler(): QueryCompiler
+    {
+        return new SqlserverCompiler();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _selectQueryTranslator(Query $query): Query
+    {
+        $limit = $query->clause('limit');
+        $offset = $query->clause('offset');
+
+        if ($limit && $offset === null) {
+            $query->modifier(['_auto_top_' => sprintf('TOP %d', $limit)]);
+        }
+
+        if ($offset !== null && !$query->clause('order')) {
+            $query->order($query->newExpr()->add('(SELECT NULL)'));
+        }
+
+        if ($this->version() < 11 && $offset !== null) {
+            return $this->_pagingSubquery($query, $limit, $offset);
+        }
+
+        return $this->_transformDistinct($query);
+    }
+
+    /**
+     * Generate a paging subquery for older versions of SQLserver.
+     *
+     * Prior to SQLServer 2012 there was no equivalent to LIMIT OFFSET, so a subquery must
+     * be used.
+     *
+     * @param \Cake\Database\Query $original The query to wrap in a subquery.
+     * @param int|null $limit The number of rows to fetch.
+     * @param int|null $offset The number of rows to offset.
+     * @return \Cake\Database\Query Modified query object.
+     */
+    protected function _pagingSubquery(Query $original, ?int $limit, ?int $offset): Query
+    {
+        $field = '_cake_paging_._cake_page_rownum_';
+
+        if ($original->clause('order')) {
+            // SQL server does not support column aliases in OVER clauses.  But
+            // the only practical way to specify the use of calculated columns
+            // is with their alias.  So substitute the select SQL in place of
+            // any column aliases for those entries in the order clause.
+            $select = $original->clause('select');
+            $order = new OrderByExpression();
+            $original
+                ->clause('order')
+                ->iterateParts(function ($direction, $orderBy) use ($select, $order) {
+                    $key = $orderBy;
+                    if (
+                        isset($select[$orderBy]) &&
+                        $select[$orderBy] instanceof ExpressionInterface
+                    ) {
+                        $order->add(new OrderClauseExpression($select[$orderBy], $direction));
+                    } else {
+                        $order->add([$key => $direction]);
+                    }
+
+                    // Leave original order clause unchanged.
+                    return $orderBy;
+                });
+        } else {
+            $order = new OrderByExpression('(SELECT NULL)');
+        }
+
+        $query = clone $original;
+        $query->select([
+                '_cake_page_rownum_' => new UnaryExpression('ROW_NUMBER() OVER', $order),
+            ])->limit(null)
+            ->offset(null)
+            ->order([], true);
+
+        $outer = new Query($query->getConnection());
+        $outer->select('*')
+            ->from(['_cake_paging_' => $query]);
+
+        if ($offset) {
+            $outer->where(["$field > " . $offset]);
+        }
+        if ($limit) {
+            $value = (int)$offset + $limit;
+            $outer->where(["$field <= $value"]);
+        }
+
+        // Decorate the original query as that is what the
+        // end developer will be calling execute() on originally.
+        $original->decorateResults(function ($row) {
+            if (isset($row['_cake_page_rownum_'])) {
+                unset($row['_cake_page_rownum_']);
+            }
+
+            return $row;
+        });
+
+        return $outer;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _transformDistinct(Query $query): Query
+    {
+        if (!is_array($query->clause('distinct'))) {
+            return $query;
+        }
+
+        $original = $query;
+        $query = clone $original;
+
+        $distinct = $query->clause('distinct');
+        $query->distinct(false);
+
+        $order = new OrderByExpression($distinct);
+        $query
+            ->select(function ($q) use ($distinct, $order) {
+                $over = $q->newExpr('ROW_NUMBER() OVER')
+                    ->add('(PARTITION BY')
+                    ->add($q->newExpr()->add($distinct)->setConjunction(','))
+                    ->add($order)
+                    ->add(')')
+                    ->setConjunction(' ');
+
+                return [
+                    '_cake_distinct_pivot_' => $over,
+                ];
+            })
+            ->limit(null)
+            ->offset(null)
+            ->order([], true);
+
+        $outer = new Query($query->getConnection());
+        $outer->select('*')
+            ->from(['_cake_distinct_' => $query])
+            ->where(['_cake_distinct_pivot_' => 1]);
+
+        // Decorate the original query as that is what the
+        // end developer will be calling execute() on originally.
+        $original->decorateResults(function ($row) {
+            if (isset($row['_cake_distinct_pivot_'])) {
+                unset($row['_cake_distinct_pivot_']);
+            }
+
+            return $row;
+        });
+
+        return $outer;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _expressionTranslators(): array
+    {
+        return [
+            FunctionExpression::class => '_transformFunctionExpression',
+            TupleComparison::class => '_transformTupleComparison',
+        ];
+    }
+
+    /**
+     * Receives a FunctionExpression and changes it so that it conforms to this
+     * SQL dialect.
+     *
+     * @param \Cake\Database\Expression\FunctionExpression $expression The function expression to convert to TSQL.
+     * @return void
+     */
+    protected function _transformFunctionExpression(FunctionExpression $expression): void
+    {
+        switch ($expression->getName()) {
+            case 'CONCAT':
+                // CONCAT function is expressed as exp1 + exp2
+                $expression->setName('')->setConjunction(' +');
+                break;
+            case 'DATEDIFF':
+                /** @var bool $hasDay */
+                $hasDay = false;
+                $visitor = function ($value) use (&$hasDay) {
+                    if ($value === 'day') {
+                        $hasDay = true;
+                    }
+
+                    return $value;
+                };
+                $expression->iterateParts($visitor);
+
+                if (!$hasDay) {
+                    $expression->add(['day' => 'literal'], [], true);
+                }
+                break;
+            case 'CURRENT_DATE':
+                $time = new FunctionExpression('GETUTCDATE');
+                $expression->setName('CONVERT')->add(['date' => 'literal', $time]);
+                break;
+            case 'CURRENT_TIME':
+                $time = new FunctionExpression('GETUTCDATE');
+                $expression->setName('CONVERT')->add(['time' => 'literal', $time]);
+                break;
+            case 'NOW':
+                $expression->setName('GETUTCDATE');
+                break;
+            case 'EXTRACT':
+                $expression->setName('DATEPART')->setConjunction(' ,');
+                break;
+            case 'DATE_ADD':
+                $params = [];
+                $visitor = function ($p, $key) use (&$params) {
+                    if ($key === 0) {
+                        $params[2] = $p;
+                    } else {
+                        $valueUnit = explode(' ', $p);
+                        $params[0] = rtrim($valueUnit[1], 's');
+                        $params[1] = $valueUnit[0];
+                    }
+
+                    return $p;
+                };
+                $manipulator = function ($p, $key) use (&$params) {
+                    return $params[$key];
+                };
+
+                $expression
+                    ->setName('DATEADD')
+                    ->setConjunction(',')
+                    ->iterateParts($visitor)
+                    ->iterateParts($manipulator)
+                    ->add([$params[2] => 'literal']);
+                break;
+            case 'DAYOFWEEK':
+                $expression
+                    ->setName('DATEPART')
+                    ->setConjunction(' ')
+                    ->add(['weekday, ' => 'literal'], [], true);
+                break;
+            case 'SUBSTR':
+                $expression->setName('SUBSTRING');
+                if (count($expression) < 4) {
+                    $params = [];
+                    $expression
+                        ->iterateParts(function ($p) use (&$params) {
+                            return $params[] = $p;
+                        })
+                        ->add([new FunctionExpression('LEN', [$params[0]]), ['string']]);
+                }
+
+                break;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Driver/TupleComparisonTranslatorTrait.php b/vendor/cakephp/database/Driver/TupleComparisonTranslatorTrait.php
new file mode 100755
index 0000000..e21a79d
--- /dev/null
+++ b/vendor/cakephp/database/Driver/TupleComparisonTranslatorTrait.php
@@ -0,0 +1,113 @@
+getField();
+
+        if (!is_array($fields)) {
+            return;
+        }
+
+        $operator = strtoupper($expression->getOperator());
+        if (!in_array($operator, ['IN', '='])) {
+            throw new RuntimeException(
+                sprintf(
+                    'Tuple comparison transform only supports the `IN` and `=` operators, `%s` given.',
+                    $operator
+                )
+            );
+        }
+
+        $value = $expression->getValue();
+        $true = new QueryExpression('1');
+
+        if ($value instanceof Query) {
+            $selected = array_values($value->clause('select'));
+            foreach ($fields as $i => $field) {
+                $value->andWhere([$field => new IdentifierExpression($selected[$i])]);
+            }
+            $value->select($true, true);
+            $expression->setField($true);
+            $expression->setOperator('=');
+
+            return;
+        }
+
+        $type = $expression->getType();
+        if ($type) {
+            /** @var array $typeMap */
+            $typeMap = array_combine($fields, $type) ?: [];
+        } else {
+            $typeMap = [];
+        }
+
+        $surrogate = $query->getConnection()
+            ->selectQuery($true);
+
+        if (!is_array(current($value))) {
+            $value = [$value];
+        }
+
+        $conditions = ['OR' => []];
+        foreach ($value as $tuple) {
+            $item = [];
+            foreach (array_values($tuple) as $i => $value2) {
+                $item[] = [$fields[$i] => $value2];
+            }
+            $conditions['OR'][] = $item;
+        }
+        $surrogate->where($conditions, $typeMap);
+
+        $expression->setField($true);
+        $expression->setValue($surrogate);
+        $expression->setOperator('=');
+    }
+}
diff --git a/vendor/cakephp/database/DriverInterface.php b/vendor/cakephp/database/DriverInterface.php
new file mode 100755
index 0000000..914d6b7
--- /dev/null
+++ b/vendor/cakephp/database/DriverInterface.php
@@ -0,0 +1,336 @@
+ $types Associative array of type names used to bind values to query
+     * @return $this
+     * @see \Cake\Database\Query::where()
+     */
+    public function filter($conditions, array $types = [])
+    {
+        if ($this->filter === null) {
+            $this->filter = new QueryExpression();
+        }
+
+        if ($conditions instanceof Closure) {
+            $conditions = $conditions(new QueryExpression());
+        }
+
+        $this->filter->add($conditions, $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds an empty `OVER()` window expression or a named window epression.
+     *
+     * @param string|null $name Window name
+     * @return $this
+     */
+    public function over(?string $name = null)
+    {
+        if ($this->window === null) {
+            $this->window = new WindowExpression();
+        }
+        if ($name) {
+            // Set name manually in case this was chained from FunctionsBuilder wrapper
+            $this->window->name($name);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function partition($partitions)
+    {
+        $this->over();
+        $this->window->partition($partitions);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function order($fields)
+    {
+        $this->over();
+        $this->window->order($fields);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function range($start, $end = 0)
+    {
+        $this->over();
+        $this->window->range($start, $end);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rows(?int $start, ?int $end = 0)
+    {
+        $this->over();
+        $this->window->rows($start, $end);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function groups(?int $start, ?int $end = 0)
+    {
+        $this->over();
+        $this->window->groups($start, $end);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function frame(
+        string $type,
+        $startOffset,
+        string $startDirection,
+        $endOffset,
+        string $endDirection
+    ) {
+        $this->over();
+        $this->window->frame($type, $startOffset, $startDirection, $endOffset, $endDirection);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeCurrent()
+    {
+        $this->over();
+        $this->window->excludeCurrent();
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeGroup()
+    {
+        $this->over();
+        $this->window->excludeGroup();
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeTies()
+    {
+        $this->over();
+        $this->window->excludeTies();
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $sql = parent::sql($binder);
+        if ($this->filter !== null) {
+            $sql .= ' FILTER (WHERE ' . $this->filter->sql($binder) . ')';
+        }
+        if ($this->window !== null) {
+            if ($this->window->isNamedOnly()) {
+                $sql .= ' OVER ' . $this->window->sql($binder);
+            } else {
+                $sql .= ' OVER (' . $this->window->sql($binder) . ')';
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        parent::traverse($callback);
+        if ($this->filter !== null) {
+            $callback($this->filter);
+            $this->filter->traverse($callback);
+        }
+        if ($this->window !== null) {
+            $callback($this->window);
+            $this->window->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function count(): int
+    {
+        $count = parent::count();
+        if ($this->window !== null) {
+            $count = $count + 1;
+        }
+
+        return $count;
+    }
+
+    /**
+     * Clone this object and its subtree of expressions.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        parent::__clone();
+        if ($this->filter !== null) {
+            $this->filter = clone $this->filter;
+        }
+        if ($this->window !== null) {
+            $this->window = clone $this->window;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/BetweenExpression.php b/vendor/cakephp/database/Expression/BetweenExpression.php
new file mode 100755
index 0000000..3466147
--- /dev/null
+++ b/vendor/cakephp/database/Expression/BetweenExpression.php
@@ -0,0 +1,144 @@
+_castToExpression($from, $type);
+            $to = $this->_castToExpression($to, $type);
+        }
+
+        $this->_field = $field;
+        $this->_from = $from;
+        $this->_to = $to;
+        $this->_type = $type;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $parts = [
+            'from' => $this->_from,
+            'to' => $this->_to,
+        ];
+
+        /** @var \Cake\Database\ExpressionInterface|string $field */
+        $field = $this->_field;
+        if ($field instanceof ExpressionInterface) {
+            $field = $field->sql($binder);
+        }
+
+        foreach ($parts as $name => $part) {
+            if ($part instanceof ExpressionInterface) {
+                $parts[$name] = $part->sql($binder);
+                continue;
+            }
+            $parts[$name] = $this->_bindValue($part, $binder, $this->_type);
+        }
+
+        return sprintf('%s BETWEEN %s AND %s', $field, $parts['from'], $parts['to']);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        foreach ([$this->_field, $this->_from, $this->_to] as $part) {
+            if ($part instanceof ExpressionInterface) {
+                $callback($part);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Registers a value in the placeholder generator and returns the generated placeholder
+     *
+     * @param mixed $value The value to bind
+     * @param \Cake\Database\ValueBinder $binder The value binder to use
+     * @param string $type The type of $value
+     * @return string generated placeholder
+     */
+    protected function _bindValue($value, $binder, $type): string
+    {
+        $placeholder = $binder->placeholder('c');
+        $binder->bind($placeholder, $value, $type);
+
+        return $placeholder;
+    }
+
+    /**
+     * Do a deep clone of this expression.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        foreach (['_field', '_from', '_to'] as $part) {
+            if ($this->{$part} instanceof ExpressionInterface) {
+                $this->{$part} = clone $this->{$part};
+            }
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/CaseExpression.php b/vendor/cakephp/database/Expression/CaseExpression.php
new file mode 100755
index 0000000..864a3bc
--- /dev/null
+++ b/vendor/cakephp/database/Expression/CaseExpression.php
@@ -0,0 +1,251 @@
+ :value"
+     *
+     * @var array
+     */
+    protected $_conditions = [];
+
+    /**
+     * Values that are associated with the conditions in the $_conditions array.
+     * Each value represents the 'true' value for the condition with the corresponding key.
+     *
+     * @var array
+     */
+    protected $_values = [];
+
+    /**
+     * The `ELSE` value for the case statement. If null then no `ELSE` will be included.
+     *
+     * @var \Cake\Database\ExpressionInterface|array|string|null
+     */
+    protected $_elseValue;
+
+    /**
+     * Constructs the case expression
+     *
+     * @param \Cake\Database\ExpressionInterface|array $conditions The conditions to test. Must be a ExpressionInterface
+     * instance, or an array of ExpressionInterface instances.
+     * @param \Cake\Database\ExpressionInterface|array $values Associative array of values to be associated with the
+     * conditions passed in $conditions. If there are more $values than $conditions,
+     * the last $value is used as the `ELSE` value.
+     * @param array $types Associative array of types to be associated with the values
+     * passed in $values
+     */
+    public function __construct($conditions = [], $values = [], $types = [])
+    {
+        $conditions = is_array($conditions) ? $conditions : [$conditions];
+        $values = is_array($values) ? $values : [$values];
+        $types = is_array($types) ? $types : [$types];
+
+        if (!empty($conditions)) {
+            $this->add($conditions, $values, $types);
+        }
+
+        if (count($values) > count($conditions)) {
+            end($values);
+            $key = key($values);
+            $this->elseValue($values[$key], $types[$key] ?? null);
+        }
+    }
+
+    /**
+     * Adds one or more conditions and their respective true values to the case object.
+     * Conditions must be a one dimensional array or a QueryExpression.
+     * The trueValues must be a similar structure, but may contain a string value.
+     *
+     * @param \Cake\Database\ExpressionInterface|array $conditions Must be a ExpressionInterface instance,
+     *   or an array of ExpressionInterface instances.
+     * @param \Cake\Database\ExpressionInterface|array $values Associative array of values of each condition
+     * @param array $types Associative array of types to be associated with the values
+     * @return $this
+     */
+    public function add($conditions = [], $values = [], $types = [])
+    {
+        $conditions = is_array($conditions) ? $conditions : [$conditions];
+        $values = is_array($values) ? $values : [$values];
+        $types = is_array($types) ? $types : [$types];
+
+        $this->_addExpressions($conditions, $values, $types);
+
+        return $this;
+    }
+
+    /**
+     * Iterates over the passed in conditions and ensures that there is a matching true value for each.
+     * If no matching true value, then it is defaulted to '1'.
+     *
+     * @param array $conditions Array of ExpressionInterface instances.
+     * @param array $values Associative array of values of each condition
+     * @param array $types Associative array of types to be associated with the values
+     * @return void
+     */
+    protected function _addExpressions(array $conditions, array $values, array $types): void
+    {
+        $rawValues = array_values($values);
+        $keyValues = array_keys($values);
+
+        foreach ($conditions as $k => $c) {
+            $numericKey = is_numeric($k);
+
+            if ($numericKey && empty($c)) {
+                continue;
+            }
+
+            if (!$c instanceof ExpressionInterface) {
+                continue;
+            }
+
+            $this->_conditions[] = $c;
+            $value = $rawValues[$k] ?? 1;
+
+            if ($value === 'literal') {
+                $value = $keyValues[$k];
+                $this->_values[] = $value;
+                continue;
+            }
+
+            if ($value === 'identifier') {
+                /** @var string $identifier */
+                $identifier = $keyValues[$k];
+                $value = new IdentifierExpression($identifier);
+                $this->_values[] = $value;
+                continue;
+            }
+
+            $type = $types[$k] ?? null;
+
+            if ($type !== null && !$value instanceof ExpressionInterface) {
+                $value = $this->_castToExpression($value, $type);
+            }
+
+            if ($value instanceof ExpressionInterface) {
+                $this->_values[] = $value;
+                continue;
+            }
+
+            $this->_values[] = ['value' => $value, 'type' => $type];
+        }
+    }
+
+    /**
+     * Sets the default value
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string|null $value Value to set
+     * @param string|null $type Type of value
+     * @return void
+     */
+    public function elseValue($value = null, ?string $type = null): void
+    {
+        if (is_array($value)) {
+            end($value);
+            $value = key($value);
+        }
+
+        if ($value !== null && !$value instanceof ExpressionInterface) {
+            $value = $this->_castToExpression($value, $type);
+        }
+
+        if (!$value instanceof ExpressionInterface) {
+            $value = ['value' => $value, 'type' => $type];
+        }
+
+        $this->_elseValue = $value;
+    }
+
+    /**
+     * Compiles the relevant parts into sql
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $part The part to compile
+     * @param \Cake\Database\ValueBinder $binder Sql generator
+     * @return string
+     */
+    protected function _compile($part, ValueBinder $binder): string
+    {
+        if ($part instanceof ExpressionInterface) {
+            $part = $part->sql($binder);
+        } elseif (is_array($part)) {
+            $placeholder = $binder->placeholder('param');
+            $binder->bind($placeholder, $part['value'], $part['type']);
+            $part = $placeholder;
+        }
+
+        return $part;
+    }
+
+    /**
+     * Converts the Node into a SQL string fragment.
+     *
+     * @param \Cake\Database\ValueBinder $binder Placeholder generator object
+     * @return string
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $parts = [];
+        $parts[] = 'CASE';
+        foreach ($this->_conditions as $k => $part) {
+            $value = $this->_values[$k];
+            $parts[] = 'WHEN ' . $this->_compile($part, $binder) . ' THEN ' . $this->_compile($value, $binder);
+        }
+        if ($this->_elseValue !== null) {
+            $parts[] = 'ELSE';
+            $parts[] = $this->_compile($this->_elseValue, $binder);
+        }
+        $parts[] = 'END';
+
+        return implode(' ', $parts);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        foreach (['_conditions', '_values'] as $part) {
+            foreach ($this->{$part} as $c) {
+                if ($c instanceof ExpressionInterface) {
+                    $callback($c);
+                    $c->traverse($callback);
+                }
+            }
+        }
+        if ($this->_elseValue instanceof ExpressionInterface) {
+            $callback($this->_elseValue);
+            $this->_elseValue->traverse($callback);
+        }
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/CaseExpressionTrait.php b/vendor/cakephp/database/Expression/CaseExpressionTrait.php
new file mode 100755
index 0000000..1994ec9
--- /dev/null
+++ b/vendor/cakephp/database/Expression/CaseExpressionTrait.php
@@ -0,0 +1,109 @@
+_typeMap !== null &&
+            $value instanceof IdentifierExpression
+        ) {
+            $type = $this->_typeMap->type($value->getIdentifier());
+        } elseif ($value instanceof TypedResultInterface) {
+            $type = $value->getReturnType();
+        }
+
+        return $type;
+    }
+
+    /**
+     * Compiles a nullable value to SQL.
+     *
+     * @param \Cake\Database\ValueBinder $binder The value binder to use.
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $value The value to compile.
+     * @param string|null $type The value type.
+     * @return string
+     */
+    protected function compileNullableValue(ValueBinder $binder, $value, ?string $type = null): string
+    {
+        if (
+            $type !== null &&
+            !($value instanceof ExpressionInterface)
+        ) {
+            $value = $this->_castToExpression($value, $type);
+        }
+
+        if ($value === null) {
+            $value = 'NULL';
+        } elseif ($value instanceof Query) {
+            $value = sprintf('(%s)', $value->sql($binder));
+        } elseif ($value instanceof ExpressionInterface) {
+            $value = $value->sql($binder);
+        } else {
+            $placeholder = $binder->placeholder('c');
+            $binder->bind($placeholder, $value, $type);
+            $value = $placeholder;
+        }
+
+        return $value;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/CaseStatementExpression.php b/vendor/cakephp/database/Expression/CaseStatementExpression.php
new file mode 100755
index 0000000..8e6ebd1
--- /dev/null
+++ b/vendor/cakephp/database/Expression/CaseStatementExpression.php
@@ -0,0 +1,597 @@
+
+     */
+    protected $validClauseNames = [
+        'value',
+        'when',
+        'else',
+    ];
+
+    /**
+     * Whether this is a simple case expression.
+     *
+     * @var bool
+     */
+    protected $isSimpleVariant = false;
+
+    /**
+     * The case value.
+     *
+     * @var \Cake\Database\ExpressionInterface|object|scalar|null
+     */
+    protected $value = null;
+
+    /**
+     * The case value type.
+     *
+     * @var string|null
+     */
+    protected $valueType = null;
+
+    /**
+     * The `WHEN ... THEN ...` expressions.
+     *
+     * @var array<\Cake\Database\Expression\WhenThenExpression>
+     */
+    protected $when = [];
+
+    /**
+     * Buffer that holds values and types for use with `then()`.
+     *
+     * @var array|null
+     */
+    protected $whenBuffer = null;
+
+    /**
+     * The else part result value.
+     *
+     * @var \Cake\Database\ExpressionInterface|object|scalar|null
+     */
+    protected $else = null;
+
+    /**
+     * The else part result type.
+     *
+     * @var string|null
+     */
+    protected $elseType = null;
+
+    /**
+     * The return type.
+     *
+     * @var string|null
+     */
+    protected $returnType = null;
+
+    /**
+     * Constructor.
+     *
+     * When a value is set, the syntax generated is
+     * `CASE case_value WHEN when_value ... END` (simple case),
+     * where the `when_value`'s are compared against the
+     * `case_value`.
+     *
+     * When no value is set, the syntax generated is
+     * `CASE WHEN when_conditions ... END` (searched case),
+     * where the conditions hold the comparisons.
+     *
+     * Note that `null` is a valid case value, and thus should
+     * only be passed if you actually want to create the simple
+     * case expression variant!
+     *
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $value The case value.
+     * @param string|null $type The case value type. If no type is provided, the type will be tried to be inferred
+     *  from the value.
+     */
+    public function __construct($value = null, ?string $type = null)
+    {
+        if (func_num_args() > 0) {
+            if (
+                $value !== null &&
+                !is_scalar($value) &&
+                !(is_object($value) && !($value instanceof Closure))
+            ) {
+                throw new InvalidArgumentException(sprintf(
+                    'The `$value` argument must be either `null`, a scalar value, an object, ' .
+                    'or an instance of `\%s`, `%s` given.',
+                    ExpressionInterface::class,
+                    getTypeName($value)
+                ));
+            }
+
+            $this->value = $value;
+
+            if (
+                $value !== null &&
+                $type === null &&
+                !($value instanceof ExpressionInterface)
+            ) {
+                $type = $this->inferType($value);
+            }
+            $this->valueType = $type;
+
+            $this->isSimpleVariant = true;
+        }
+    }
+
+    /**
+     * Sets the `WHEN` value for a `WHEN ... THEN ...` expression, or a
+     * self-contained expression that holds both the value for `WHEN`
+     * and the value for `THEN`.
+     *
+     * ### Order based syntax
+     *
+     * When passing a value other than a self-contained
+     * `\Cake\Database\Expression\WhenThenExpression`,
+     * instance, the `WHEN ... THEN ...` statement must be closed off with
+     * a call to `then()` before invoking `when()` again or `else()`:
+     *
+     * ```
+     * $queryExpression
+     *     ->case($query->identifier('Table.column'))
+     *     ->when(true)
+     *     ->then('Yes')
+     *     ->when(false)
+     *     ->then('No')
+     *     ->else('Maybe');
+     * ```
+     *
+     * ### Self-contained expressions
+     *
+     * When passing an instance of `\Cake\Database\Expression\WhenThenExpression`,
+     * being it directly, or via a callable, then there is no need to close
+     * using `then()` on this object, instead the statement will be closed
+     * on the `\Cake\Database\Expression\WhenThenExpression`
+     * object using
+     * `\Cake\Database\Expression\WhenThenExpression::then()`.
+     *
+     * Callables will receive an instance of `\Cake\Database\Expression\WhenThenExpression`,
+     * and must return one, being it the same object, or a custom one:
+     *
+     * ```
+     * $queryExpression
+     *     ->case()
+     *     ->when(function (\Cake\Database\Expression\WhenThenExpression $whenThen) {
+     *         return $whenThen
+     *             ->when(['Table.column' => true])
+     *             ->then('Yes');
+     *     })
+     *     ->when(function (\Cake\Database\Expression\WhenThenExpression $whenThen) {
+     *         return $whenThen
+     *             ->when(['Table.column' => false])
+     *             ->then('No');
+     *     })
+     *     ->else('Maybe');
+     * ```
+     *
+     * ### Type handling
+     *
+     * The types provided via the `$type` argument will be merged with the
+     * type map set for this expression. When using callables for `$when`,
+     * the `\Cake\Database\Expression\WhenThenExpression`
+     * instance received by the callables will inherit that type map, however
+     * the types passed here will _not_ be merged in case of using callables,
+     * instead the types must be passed in
+     * `\Cake\Database\Expression\WhenThenExpression::when()`:
+     *
+     * ```
+     * $queryExpression
+     *     ->case()
+     *     ->when(function (\Cake\Database\Expression\WhenThenExpression $whenThen) {
+     *         return $whenThen
+     *             ->when(['unmapped_column' => true], ['unmapped_column' => 'bool'])
+     *             ->then('Yes');
+     *     })
+     *     ->when(function (\Cake\Database\Expression\WhenThenExpression $whenThen) {
+     *         return $whenThen
+     *             ->when(['unmapped_column' => false], ['unmapped_column' => 'bool'])
+     *             ->then('No');
+     *     })
+     *     ->else('Maybe');
+     * ```
+     *
+     * ### User data safety
+     *
+     * When passing user data, be aware that allowing a user defined array
+     * to be passed, is a potential SQL injection vulnerability, as it
+     * allows for raw SQL to slip in!
+     *
+     * The following is _unsafe_ usage that must be avoided:
+     *
+     * ```
+     * $case
+     *      ->when($userData)
+     * ```
+     *
+     * A safe variant for the above would be to define a single type for
+     * the value:
+     *
+     * ```
+     * $case
+     *      ->when($userData, 'integer')
+     * ```
+     *
+     * This way an exception would be triggered when an array is passed for
+     * the value, thus preventing raw SQL from slipping in, and all other
+     * types of values would be forced to be bound as an integer.
+     *
+     * Another way to safely pass user data is when using a conditions
+     * array, and passing user data only on the value side of the array
+     * entries, which will cause them to be bound:
+     *
+     * ```
+     * $case
+     *      ->when([
+     *          'Table.column' => $userData,
+     *      ])
+     * ```
+     *
+     * Lastly, data can also be bound manually:
+     *
+     * ```
+     * $query
+     *      ->select([
+     *          'val' => $query->newExpr()
+     *              ->case()
+     *              ->when($query->newExpr(':userData'))
+     *              ->then(123)
+     *      ])
+     *      ->bind(':userData', $userData, 'integer')
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|object|array|scalar $when The `WHEN` value. When using an
+     *  array of conditions, it must be compatible with `\Cake\Database\Query::where()`. Note that this argument is
+     *  _not_ completely safe for use with user data, as a user supplied array would allow for raw SQL to slip in! If
+     *  you plan to use user data, either pass a single type for the `$type` argument (which forces the `$when` value to
+     *  be a non-array, and then always binds the data), use a conditions array where the user data is only passed on
+     *  the value side of the array entries, or custom bindings!
+     * @param array|string|null $type The when value type. Either an associative array when using array style
+     *  conditions, or else a string. If no type is provided, the type will be tried to be inferred from the value.
+     * @return $this
+     * @throws \LogicException In case this a closing `then()` call is required before calling this method.
+     * @throws \LogicException In case the callable doesn't return an instance of
+     *  `\Cake\Database\Expression\WhenThenExpression`.
+     */
+    public function when($when, $type = null)
+    {
+        if ($this->whenBuffer !== null) {
+            throw new LogicException('Cannot call `when()` between `when()` and `then()`.');
+        }
+
+        if ($when instanceof Closure) {
+            $when = $when(new WhenThenExpression($this->getTypeMap()));
+            if (!($when instanceof WhenThenExpression)) {
+                throw new LogicException(sprintf(
+                    '`when()` callables must return an instance of `\%s`, `%s` given.',
+                    WhenThenExpression::class,
+                    getTypeName($when)
+                ));
+            }
+        }
+
+        if ($when instanceof WhenThenExpression) {
+            $this->when[] = $when;
+        } else {
+            $this->whenBuffer = ['when' => $when, 'type' => $type];
+        }
+
+        return $this;
+    }
+
+    /**
+     * Sets the `THEN` result value for the last `WHEN ... THEN ...`
+     * statement that was opened using `when()`.
+     *
+     * ### Order based syntax
+     *
+     * This method can only be invoked in case `when()` was previously
+     * used with a value other than a closure or an instance of
+     * `\Cake\Database\Expression\WhenThenExpression`:
+     *
+     * ```
+     * $case
+     *     ->when(['Table.column' => true])
+     *     ->then('Yes')
+     *     ->when(['Table.column' => false])
+     *     ->then('No')
+     *     ->else('Maybe');
+     * ```
+     *
+     * The following would all fail with an exception:
+     *
+     * ```
+     * $case
+     *     ->when(['Table.column' => true])
+     *     ->when(['Table.column' => false])
+     *     // ...
+     * ```
+     *
+     * ```
+     * $case
+     *     ->when(['Table.column' => true])
+     *     ->else('Maybe')
+     *     // ...
+     * ```
+     *
+     * ```
+     * $case
+     *     ->then('Yes')
+     *     // ...
+     * ```
+     *
+     * ```
+     * $case
+     *     ->when(['Table.column' => true])
+     *     ->then('Yes')
+     *     ->then('No')
+     *     // ...
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $result The result value.
+     * @param string|null $type The result type. If no type is provided, the type will be tried to be inferred from the
+     *  value.
+     * @return $this
+     * @throws \LogicException In case `when()` wasn't previously called with a value other than a closure or an
+     *  instance of `\Cake\Database\Expression\WhenThenExpression`.
+     */
+    public function then($result, ?string $type = null)
+    {
+        if ($this->whenBuffer === null) {
+            throw new LogicException('Cannot call `then()` before `when()`.');
+        }
+
+        $whenThen = (new WhenThenExpression($this->getTypeMap()))
+            ->when($this->whenBuffer['when'], $this->whenBuffer['type'])
+            ->then($result, $type);
+
+        $this->whenBuffer = null;
+
+        $this->when[] = $whenThen;
+
+        return $this;
+    }
+
+    /**
+     * Sets the `ELSE` result value.
+     *
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $result The result value.
+     * @param string|null $type The result type. If no type is provided, the type will be tried to be inferred from the
+     *  value.
+     * @return $this
+     * @throws \LogicException In case a closing `then()` call is required before calling this method.
+     * @throws \InvalidArgumentException In case the `$result` argument is neither a scalar value, nor an object, an
+     *  instance of `\Cake\Database\ExpressionInterface`, or `null`.
+     */
+    public function else($result, ?string $type = null)
+    {
+        if ($this->whenBuffer !== null) {
+            throw new LogicException('Cannot call `else()` between `when()` and `then()`.');
+        }
+
+        if (
+            $result !== null &&
+            !is_scalar($result) &&
+            !(is_object($result) && !($result instanceof Closure))
+        ) {
+            throw new InvalidArgumentException(sprintf(
+                'The `$result` argument must be either `null`, a scalar value, an object, ' .
+                'or an instance of `\%s`, `%s` given.',
+                ExpressionInterface::class,
+                getTypeName($result)
+            ));
+        }
+
+        if ($type === null) {
+            $type = $this->inferType($result);
+        }
+
+        $this->else = $result;
+        $this->elseType = $type;
+
+        return $this;
+    }
+
+    /**
+     * Returns the abstract type that this expression will return.
+     *
+     * If no type has been explicitly set via `setReturnType()`, this
+     * method will try to obtain the type from the result types of the
+     * `then()` and `else() `calls. All types must be identical in order
+     * for this to work, otherwise the type will default to `string`.
+     *
+     * @return string
+     * @see CaseStatementExpression::then()
+     */
+    public function getReturnType(): string
+    {
+        if ($this->returnType !== null) {
+            return $this->returnType;
+        }
+
+        $types = [];
+        foreach ($this->when as $when) {
+            $type = $when->getResultType();
+            if ($type !== null) {
+                $types[] = $type;
+            }
+        }
+
+        if ($this->elseType !== null) {
+            $types[] = $this->elseType;
+        }
+
+        $types = array_unique($types);
+        if (count($types) === 1) {
+            return $types[0];
+        }
+
+        return 'string';
+    }
+
+    /**
+     * Sets the abstract type that this expression will return.
+     *
+     * If no type is being explicitly set via this method, then the
+     * `getReturnType()` method will try to infer the type from the
+     * result types of the `then()` and `else() `calls.
+     *
+     * @param string $type The type name to use.
+     * @return $this
+     */
+    public function setReturnType(string $type)
+    {
+        $this->returnType = $type;
+
+        return $this;
+    }
+
+    /**
+     * Returns the available data for the given clause.
+     *
+     * ### Available clauses
+     *
+     * The following clause names are available:
+     *
+     * * `value`: The case value for a `CASE case_value WHEN ...` expression.
+     * * `when`: An array of `WHEN ... THEN ...` expressions.
+     * * `else`: The `ELSE` result value.
+     *
+     * @param string $clause The name of the clause to obtain.
+     * @return \Cake\Database\ExpressionInterface|object|array<\Cake\Database\Expression\WhenThenExpression>|scalar|null
+     * @throws \InvalidArgumentException In case the given clause name is invalid.
+     */
+    public function clause(string $clause)
+    {
+        if (!in_array($clause, $this->validClauseNames, true)) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The `$clause` argument must be one of `%s`, the given value `%s` is invalid.',
+                    implode('`, `', $this->validClauseNames),
+                    $clause
+                )
+            );
+        }
+
+        return $this->{$clause};
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        if ($this->whenBuffer !== null) {
+            throw new LogicException('Case expression has incomplete when clause. Missing `then()` after `when()`.');
+        }
+
+        if (empty($this->when)) {
+            throw new LogicException('Case expression must have at least one when statement.');
+        }
+
+        $value = '';
+        if ($this->isSimpleVariant) {
+            $value = $this->compileNullableValue($binder, $this->value, $this->valueType) . ' ';
+        }
+
+        $whenThenExpressions = [];
+        foreach ($this->when as $whenThen) {
+            $whenThenExpressions[] = $whenThen->sql($binder);
+        }
+        $whenThen = implode(' ', $whenThenExpressions);
+
+        $else = $this->compileNullableValue($binder, $this->else, $this->elseType);
+
+        return "CASE {$value}{$whenThen} ELSE $else END";
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->whenBuffer !== null) {
+            throw new LogicException('Case expression has incomplete when clause. Missing `then()` after `when()`.');
+        }
+
+        if ($this->value instanceof ExpressionInterface) {
+            $callback($this->value);
+            $this->value->traverse($callback);
+        }
+
+        foreach ($this->when as $when) {
+            $callback($when);
+            $when->traverse($callback);
+        }
+
+        if ($this->else instanceof ExpressionInterface) {
+            $callback($this->else);
+            $this->else->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Clones the inner expression objects.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        if ($this->whenBuffer !== null) {
+            throw new LogicException('Case expression has incomplete when clause. Missing `then()` after `when()`.');
+        }
+
+        if ($this->value instanceof ExpressionInterface) {
+            $this->value = clone $this->value;
+        }
+
+        foreach ($this->when as $key => $when) {
+            $this->when[$key] = clone $this->when[$key];
+        }
+
+        if ($this->else instanceof ExpressionInterface) {
+            $this->else = clone $this->else;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/CommonTableExpression.php b/vendor/cakephp/database/Expression/CommonTableExpression.php
new file mode 100755
index 0000000..f3d359e
--- /dev/null
+++ b/vendor/cakephp/database/Expression/CommonTableExpression.php
@@ -0,0 +1,239 @@
+
+     */
+    protected $fields = [];
+
+    /**
+     * The CTE query definition.
+     *
+     * @var \Cake\Database\ExpressionInterface|null
+     */
+    protected $query;
+
+    /**
+     * Whether the CTE is materialized or not materialized.
+     *
+     * @var string|null
+     */
+    protected $materialized = null;
+
+    /**
+     * Whether the CTE is recursive.
+     *
+     * @var bool
+     */
+    protected $recursive = false;
+
+    /**
+     * Constructor.
+     *
+     * @param string $name The CTE name.
+     * @param \Cake\Database\ExpressionInterface|\Closure $query CTE query
+     */
+    public function __construct(string $name = '', $query = null)
+    {
+        $this->name = new IdentifierExpression($name);
+        if ($query) {
+            $this->query($query);
+        }
+    }
+
+    /**
+     * Sets the name of this CTE.
+     *
+     * This is the named you used to reference the expression
+     * in select, insert, etc queries.
+     *
+     * @param string $name The CTE name.
+     * @return $this
+     */
+    public function name(string $name)
+    {
+        $this->name = new IdentifierExpression($name);
+
+        return $this;
+    }
+
+    /**
+     * Sets the query for this CTE.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure $query CTE query
+     * @return $this
+     */
+    public function query($query)
+    {
+        if ($query instanceof Closure) {
+            $query = $query();
+            if (!($query instanceof ExpressionInterface)) {
+                throw new RuntimeException(
+                    'You must return an `ExpressionInterface` from a Closure passed to `query()`.'
+                );
+            }
+        }
+        $this->query = $query;
+
+        return $this;
+    }
+
+    /**
+     * Adds one or more fields (arguments) to the CTE.
+     *
+     * @param \Cake\Database\Expression\IdentifierExpression|array<\Cake\Database\Expression\IdentifierExpression>|array|string $fields Field names
+     * @return $this
+     */
+    public function field($fields)
+    {
+        $fields = (array)$fields;
+        foreach ($fields as &$field) {
+            if (!($field instanceof IdentifierExpression)) {
+                $field = new IdentifierExpression($field);
+            }
+        }
+        $this->fields = array_merge($this->fields, $fields);
+
+        return $this;
+    }
+
+    /**
+     * Sets this CTE as materialized.
+     *
+     * @return $this
+     */
+    public function materialized()
+    {
+        $this->materialized = 'MATERIALIZED';
+
+        return $this;
+    }
+
+    /**
+     * Sets this CTE as not materialized.
+     *
+     * @return $this
+     */
+    public function notMaterialized()
+    {
+        $this->materialized = 'NOT MATERIALIZED';
+
+        return $this;
+    }
+
+    /**
+     * Gets whether this CTE is recursive.
+     *
+     * @return bool
+     */
+    public function isRecursive(): bool
+    {
+        return $this->recursive;
+    }
+
+    /**
+     * Sets this CTE as recursive.
+     *
+     * @return $this
+     */
+    public function recursive()
+    {
+        $this->recursive = true;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $fields = '';
+        if ($this->fields) {
+            $expressions = array_map(function (IdentifierExpression $e) use ($binder) {
+                return $e->sql($binder);
+            }, $this->fields);
+            $fields = sprintf('(%s)', implode(', ', $expressions));
+        }
+
+        $suffix = $this->materialized ? $this->materialized . ' ' : '';
+
+        return sprintf(
+            '%s%s AS %s(%s)',
+            $this->name->sql($binder),
+            $fields,
+            $suffix,
+            $this->query ? $this->query->sql($binder) : ''
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        $callback($this->name);
+        foreach ($this->fields as $field) {
+            $callback($field);
+            $field->traverse($callback);
+        }
+
+        if ($this->query) {
+            $callback($this->query);
+            $this->query->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Clones the inner expression objects.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        $this->name = clone $this->name;
+        if ($this->query) {
+            $this->query = clone $this->query;
+        }
+
+        foreach ($this->fields as $key => $field) {
+            $this->fields[$key] = clone $field;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/Comparison.php b/vendor/cakephp/database/Expression/Comparison.php
new file mode 100755
index 0000000..01bdbd5
--- /dev/null
+++ b/vendor/cakephp/database/Expression/Comparison.php
@@ -0,0 +1,7 @@
+
+     */
+    protected $_valueExpressions = [];
+
+    /**
+     * Constructor
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field the field name to compare to a value
+     * @param mixed $value The value to be used in comparison
+     * @param string|null $type the type name used to cast the value
+     * @param string $operator the operator used for comparing field and value
+     */
+    public function __construct($field, $value, ?string $type = null, string $operator = '=')
+    {
+        $this->_type = $type;
+        $this->setField($field);
+        $this->setValue($value);
+        $this->_operator = $operator;
+    }
+
+    /**
+     * Sets the value
+     *
+     * @param mixed $value The value to compare
+     * @return void
+     */
+    public function setValue($value): void
+    {
+        $value = $this->_castToExpression($value, $this->_type);
+
+        $isMultiple = $this->_type && strpos($this->_type, '[]') !== false;
+        if ($isMultiple) {
+            [$value, $this->_valueExpressions] = $this->_collectExpressions($value);
+        }
+
+        $this->_isMultiple = $isMultiple;
+        $this->_value = $value;
+    }
+
+    /**
+     * Returns the value used for comparison
+     *
+     * @return mixed
+     */
+    public function getValue()
+    {
+        return $this->_value;
+    }
+
+    /**
+     * Sets the operator to use for the comparison
+     *
+     * @param string $operator The operator to be used for the comparison.
+     * @return void
+     */
+    public function setOperator(string $operator): void
+    {
+        $this->_operator = $operator;
+    }
+
+    /**
+     * Returns the operator used for comparison
+     *
+     * @return string
+     */
+    public function getOperator(): string
+    {
+        return $this->_operator;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        /** @var \Cake\Database\ExpressionInterface|string $field */
+        $field = $this->_field;
+
+        if ($field instanceof ExpressionInterface) {
+            $field = $field->sql($binder);
+        }
+
+        if ($this->_value instanceof IdentifierExpression) {
+            $template = '%s %s %s';
+            $value = $this->_value->sql($binder);
+        } elseif ($this->_value instanceof ExpressionInterface) {
+            $template = '%s %s (%s)';
+            $value = $this->_value->sql($binder);
+        } else {
+            [$template, $value] = $this->_stringExpression($binder);
+        }
+
+        return sprintf($template, $field, $this->_operator, $value);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->_field instanceof ExpressionInterface) {
+            $callback($this->_field);
+            $this->_field->traverse($callback);
+        }
+
+        if ($this->_value instanceof ExpressionInterface) {
+            $callback($this->_value);
+            $this->_value->traverse($callback);
+        }
+
+        foreach ($this->_valueExpressions as $v) {
+            $callback($v);
+            $v->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Create a deep clone.
+     *
+     * Clones the field and value if they are expression objects.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        foreach (['_value', '_field'] as $prop) {
+            if ($this->{$prop} instanceof ExpressionInterface) {
+                $this->{$prop} = clone $this->{$prop};
+            }
+        }
+    }
+
+    /**
+     * Returns a template and a placeholder for the value after registering it
+     * with the placeholder $binder
+     *
+     * @param \Cake\Database\ValueBinder $binder The value binder to use.
+     * @return array First position containing the template and the second a placeholder
+     */
+    protected function _stringExpression(ValueBinder $binder): array
+    {
+        $template = '%s ';
+
+        if ($this->_field instanceof ExpressionInterface && !$this->_field instanceof IdentifierExpression) {
+            $template = '(%s) ';
+        }
+
+        if ($this->_isMultiple) {
+            $template .= '%s (%s)';
+            $type = $this->_type;
+            if ($type !== null) {
+                $type = str_replace('[]', '', $type);
+            }
+            $value = $this->_flattenValue($this->_value, $binder, $type);
+
+            // To avoid SQL errors when comparing a field to a list of empty values,
+            // better just throw an exception here
+            if ($value === '') {
+                $field = $this->_field instanceof ExpressionInterface ? $this->_field->sql($binder) : $this->_field;
+                /** @psalm-suppress PossiblyInvalidCast */
+                throw new DatabaseException(
+                    "Impossible to generate condition with empty list of values for field ($field)"
+                );
+            }
+        } else {
+            $template .= '%s %s';
+            $value = $this->_bindValue($this->_value, $binder, $this->_type);
+        }
+
+        return [$template, $value];
+    }
+
+    /**
+     * Registers a value in the placeholder generator and returns the generated placeholder
+     *
+     * @param mixed $value The value to bind
+     * @param \Cake\Database\ValueBinder $binder The value binder to use
+     * @param string|null $type The type of $value
+     * @return string generated placeholder
+     */
+    protected function _bindValue($value, ValueBinder $binder, ?string $type = null): string
+    {
+        $placeholder = $binder->placeholder('c');
+        $binder->bind($placeholder, $value, $type);
+
+        return $placeholder;
+    }
+
+    /**
+     * Converts a traversable value into a set of placeholders generated by
+     * $binder and separated by `,`
+     *
+     * @param iterable $value the value to flatten
+     * @param \Cake\Database\ValueBinder $binder The value binder to use
+     * @param string|null $type the type to cast values to
+     * @return string
+     */
+    protected function _flattenValue(iterable $value, ValueBinder $binder, ?string $type = null): string
+    {
+        $parts = [];
+        if (is_array($value)) {
+            foreach ($this->_valueExpressions as $k => $v) {
+                $parts[$k] = $v->sql($binder);
+                unset($value[$k]);
+            }
+        }
+
+        if (!empty($value)) {
+            $parts += $binder->generateManyNamed($value, $type);
+        }
+
+        return implode(',', $parts);
+    }
+
+    /**
+     * Returns an array with the original $values in the first position
+     * and all ExpressionInterface objects that could be found in the second
+     * position.
+     *
+     * @param \Cake\Database\ExpressionInterface|iterable $values The rows to insert
+     * @return array
+     */
+    protected function _collectExpressions($values): array
+    {
+        if ($values instanceof ExpressionInterface) {
+            return [$values, []];
+        }
+
+        $expressions = $result = [];
+        $isArray = is_array($values);
+
+        if ($isArray) {
+            /** @var array $result */
+            $result = $values;
+        }
+
+        foreach ($values as $k => $v) {
+            if ($v instanceof ExpressionInterface) {
+                $expressions[$k] = $v;
+            }
+
+            if ($isArray) {
+                $result[$k] = $v;
+            }
+        }
+
+        return [$result, $expressions];
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Expression\ComparisonExpression',
+    'Cake\Database\Expression\Comparison'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Expression/FieldInterface.php b/vendor/cakephp/database/Expression/FieldInterface.php
new file mode 100755
index 0000000..f0554d9
--- /dev/null
+++ b/vendor/cakephp/database/Expression/FieldInterface.php
@@ -0,0 +1,39 @@
+_field = $field;
+    }
+
+    /**
+     * Returns the field name
+     *
+     * @return \Cake\Database\ExpressionInterface|array|string
+     */
+    public function getField()
+    {
+        return $this->_field;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/FunctionExpression.php b/vendor/cakephp/database/Expression/FunctionExpression.php
new file mode 100755
index 0000000..105655b
--- /dev/null
+++ b/vendor/cakephp/database/Expression/FunctionExpression.php
@@ -0,0 +1,178 @@
+ 'literal', ' rules']);`
+     *
+     * Will produce `CONCAT(name, ' rules')`
+     *
+     * @param string $name the name of the function to be constructed
+     * @param array $params list of arguments to be passed to the function
+     * If associative the key would be used as argument when value is 'literal'
+     * @param array|array $types Associative array of types to be associated with the
+     * passed arguments
+     * @param string $returnType The return type of this expression
+     */
+    public function __construct(string $name, array $params = [], array $types = [], string $returnType = 'string')
+    {
+        $this->_name = $name;
+        $this->_returnType = $returnType;
+        parent::__construct($params, $types, ',');
+    }
+
+    /**
+     * Sets the name of the SQL function to be invoke in this expression.
+     *
+     * @param string $name The name of the function
+     * @return $this
+     */
+    public function setName(string $name)
+    {
+        $this->_name = $name;
+
+        return $this;
+    }
+
+    /**
+     * Gets the name of the SQL function to be invoke in this expression.
+     *
+     * @return string
+     */
+    public function getName(): string
+    {
+        return $this->_name;
+    }
+
+    /**
+     * Adds one or more arguments for the function call.
+     *
+     * @param array $conditions list of arguments to be passed to the function
+     * If associative the key would be used as argument when value is 'literal'
+     * @param array $types Associative array of types to be associated with the
+     * passed arguments
+     * @param bool $prepend Whether to prepend or append to the list of arguments
+     * @see \Cake\Database\Expression\FunctionExpression::__construct() for more details.
+     * @return $this
+     * @psalm-suppress MoreSpecificImplementedParamType
+     */
+    public function add($conditions, array $types = [], bool $prepend = false)
+    {
+        $put = $prepend ? 'array_unshift' : 'array_push';
+        $typeMap = $this->getTypeMap()->setTypes($types);
+        foreach ($conditions as $k => $p) {
+            if ($p === 'literal') {
+                $put($this->_conditions, $k);
+                continue;
+            }
+
+            if ($p === 'identifier') {
+                $put($this->_conditions, new IdentifierExpression($k));
+                continue;
+            }
+
+            $type = $typeMap->type($k);
+
+            if ($type !== null && !$p instanceof ExpressionInterface) {
+                $p = $this->_castToExpression($p, $type);
+            }
+
+            if ($p instanceof ExpressionInterface) {
+                $put($this->_conditions, $p);
+                continue;
+            }
+
+            $put($this->_conditions, ['value' => $p, 'type' => $type]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $parts = [];
+        foreach ($this->_conditions as $condition) {
+            if ($condition instanceof Query) {
+                $condition = sprintf('(%s)', $condition->sql($binder));
+            } elseif ($condition instanceof ExpressionInterface) {
+                $condition = $condition->sql($binder);
+            } elseif (is_array($condition)) {
+                $p = $binder->placeholder('param');
+                $binder->bind($p, $condition['value'], $condition['type']);
+                $condition = $p;
+            }
+            $parts[] = $condition;
+        }
+
+        return $this->_name . sprintf('(%s)', implode(
+            $this->_conjunction . ' ',
+            $parts
+        ));
+    }
+
+    /**
+     * The name of the function is in itself an expression to generate, thus
+     * always adding 1 to the amount of expressions stored in this object.
+     *
+     * @return int
+     */
+    public function count(): int
+    {
+        return 1 + count($this->_conditions);
+    }
+}
diff --git a/vendor/cakephp/database/Expression/IdentifierExpression.php b/vendor/cakephp/database/Expression/IdentifierExpression.php
new file mode 100755
index 0000000..69486a4
--- /dev/null
+++ b/vendor/cakephp/database/Expression/IdentifierExpression.php
@@ -0,0 +1,119 @@
+_identifier = $identifier;
+        $this->collation = $collation;
+    }
+
+    /**
+     * Sets the identifier this expression represents
+     *
+     * @param string $identifier The identifier
+     * @return void
+     */
+    public function setIdentifier(string $identifier): void
+    {
+        $this->_identifier = $identifier;
+    }
+
+    /**
+     * Returns the identifier this expression represents
+     *
+     * @return string
+     */
+    public function getIdentifier(): string
+    {
+        return $this->_identifier;
+    }
+
+    /**
+     * Sets the collation.
+     *
+     * @param string $collation Identifier collation
+     * @return void
+     */
+    public function setCollation(string $collation): void
+    {
+        $this->collation = $collation;
+    }
+
+    /**
+     * Returns the collation.
+     *
+     * @return string|null
+     */
+    public function getCollation(): ?string
+    {
+        return $this->collation;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $sql = $this->_identifier;
+        if ($this->collation) {
+            $sql .= ' COLLATE ' . $this->collation;
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/OrderByExpression.php b/vendor/cakephp/database/Expression/OrderByExpression.php
new file mode 100755
index 0000000..74fbf21
--- /dev/null
+++ b/vendor/cakephp/database/Expression/OrderByExpression.php
@@ -0,0 +1,88 @@
+ $types The types for each column.
+     * @param string $conjunction The glue used to join conditions together.
+     */
+    public function __construct($conditions = [], $types = [], $conjunction = '')
+    {
+        parent::__construct($conditions, $types, $conjunction);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $order = [];
+        foreach ($this->_conditions as $k => $direction) {
+            if ($direction instanceof ExpressionInterface) {
+                $direction = $direction->sql($binder);
+            }
+            $order[] = is_numeric($k) ? $direction : sprintf('%s %s', $k, $direction);
+        }
+
+        return sprintf('ORDER BY %s', implode(', ', $order));
+    }
+
+    /**
+     * Auxiliary function used for decomposing a nested array of conditions and
+     * building a tree structure inside this object to represent the full SQL expression.
+     *
+     * New order by expressions are merged to existing ones
+     *
+     * @param array $conditions list of order by expressions
+     * @param array $types list of types associated on fields referenced in $conditions
+     * @return void
+     */
+    protected function _addConditions(array $conditions, array $types): void
+    {
+        foreach ($conditions as $key => $val) {
+            if (
+                is_string($key) &&
+                is_string($val) &&
+                !in_array(strtoupper($val), ['ASC', 'DESC'], true)
+            ) {
+                throw new RuntimeException(
+                    sprintf(
+                        'Passing extra expressions by associative array (`\'%s\' => \'%s\'`) ' .
+                        'is not allowed to avoid potential SQL injection. ' .
+                        'Use QueryExpression or numeric array instead.',
+                        $key,
+                        $val
+                    )
+                );
+            }
+        }
+
+        $this->_conditions = array_merge($this->_conditions, $conditions);
+    }
+}
diff --git a/vendor/cakephp/database/Expression/OrderClauseExpression.php b/vendor/cakephp/database/Expression/OrderClauseExpression.php
new file mode 100755
index 0000000..dfab8b9
--- /dev/null
+++ b/vendor/cakephp/database/Expression/OrderClauseExpression.php
@@ -0,0 +1,90 @@
+_field = $field;
+        $this->_direction = strtolower($direction) === 'asc' ? 'ASC' : 'DESC';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        /** @var \Cake\Database\ExpressionInterface|string $field */
+        $field = $this->_field;
+        if ($field instanceof Query) {
+            $field = sprintf('(%s)', $field->sql($binder));
+        } elseif ($field instanceof ExpressionInterface) {
+            $field = $field->sql($binder);
+        }
+
+        return sprintf('%s %s', $field, $this->_direction);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->_field instanceof ExpressionInterface) {
+            $callback($this->_field);
+            $this->_field->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Create a deep clone of the order clause.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        if ($this->_field instanceof ExpressionInterface) {
+            $this->_field = clone $this->_field;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/QueryExpression.php b/vendor/cakephp/database/Expression/QueryExpression.php
new file mode 100755
index 0000000..0578c00
--- /dev/null
+++ b/vendor/cakephp/database/Expression/QueryExpression.php
@@ -0,0 +1,876 @@
+ :value"
+     *
+     * @var array
+     */
+    protected $_conditions = [];
+
+    /**
+     * Constructor. A new expression object can be created without any params and
+     * be built dynamically. Otherwise, it is possible to pass an array of conditions
+     * containing either a tree-like array structure to be parsed and/or other
+     * expression objects. Optionally, you can set the conjunction keyword to be used
+     * for joining each part of this level of the expression tree.
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions Tree like array structure
+     * containing all the conditions to be added or nested inside this expression object.
+     * @param \Cake\Database\TypeMap|array $types Associative array of types to be associated with the values
+     * passed in $conditions.
+     * @param string $conjunction the glue that will join all the string conditions at this
+     * level of the expression tree. For example "AND", "OR", "XOR"...
+     * @see \Cake\Database\Expression\QueryExpression::add() for more details on $conditions and $types
+     */
+    public function __construct($conditions = [], $types = [], $conjunction = 'AND')
+    {
+        $this->setTypeMap($types);
+        $this->setConjunction(strtoupper($conjunction));
+        if (!empty($conditions)) {
+            $this->add($conditions, $this->getTypeMap()->getTypes());
+        }
+    }
+
+    /**
+     * Changes the conjunction for the conditions at this level of the expression tree.
+     *
+     * @param string $conjunction Value to be used for joining conditions
+     * @return $this
+     */
+    public function setConjunction(string $conjunction)
+    {
+        $this->_conjunction = strtoupper($conjunction);
+
+        return $this;
+    }
+
+    /**
+     * Gets the currently configured conjunction for the conditions at this level of the expression tree.
+     *
+     * @return string
+     */
+    public function getConjunction(): string
+    {
+        return $this->_conjunction;
+    }
+
+    /**
+     * Adds one or more conditions to this expression object. Conditions can be
+     * expressed in a one dimensional array, that will cause all conditions to
+     * be added directly at this level of the tree or they can be nested arbitrarily
+     * making it create more expression objects that will be nested inside and
+     * configured to use the specified conjunction.
+     *
+     * If the type passed for any of the fields is expressed "type[]" (note braces)
+     * then it will cause the placeholder to be re-written dynamically so if the
+     * value is an array, it will create as many placeholders as values are in it.
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions single or multiple conditions to
+     * be added. When using an array and the key is 'OR' or 'AND' a new expression
+     * object will be created with that conjunction and internal array value passed
+     * as conditions.
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @see \Cake\Database\Query::where() for examples on conditions
+     * @return $this
+     */
+    public function add($conditions, array $types = [])
+    {
+        if (is_string($conditions) || $conditions instanceof ExpressionInterface) {
+            $this->_conditions[] = $conditions;
+
+            return $this;
+        }
+
+        $this->_addConditions($conditions, $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field = value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * If it is suffixed with "[]" and the value is an array then multiple placeholders
+     * will be created, one per each value in the array.
+     * @return $this
+     */
+    public function eq($field, $value, ?string $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '='));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field != value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * If it is suffixed with "[]" and the value is an array then multiple placeholders
+     * will be created, one per each value in the array.
+     * @return $this
+     */
+    public function notEq($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '!='));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field > value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function gt($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '>'));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field < value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function lt($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '<'));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field >= value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function gte($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '>='));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field <= value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function lte($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, '<='));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field IS NULL".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field database field to be
+     * tested for null
+     * @return $this
+     */
+    public function isNull($field)
+    {
+        if (!($field instanceof ExpressionInterface)) {
+            $field = new IdentifierExpression($field);
+        }
+
+        return $this->add(new UnaryExpression('IS NULL', $field, UnaryExpression::POSTFIX));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field IS NOT NULL".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field database field to be
+     * tested for not null
+     * @return $this
+     */
+    public function isNotNull($field)
+    {
+        if (!($field instanceof ExpressionInterface)) {
+            $field = new IdentifierExpression($field);
+        }
+
+        return $this->add(new UnaryExpression('IS NOT NULL', $field, UnaryExpression::POSTFIX));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field LIKE value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function like($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, 'LIKE'));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "field NOT LIKE value".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param mixed $value The value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function notLike($field, $value, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new ComparisonExpression($field, $value, $type, 'NOT LIKE'));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form
+     * "field IN (value1, value2)".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param \Cake\Database\ExpressionInterface|array|string $values the value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function in($field, $values, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+        $type = $type ?: 'string';
+        $type .= '[]';
+        $values = $values instanceof ExpressionInterface ? $values : (array)$values;
+
+        return $this->add(new ComparisonExpression($field, $values, $type, 'IN'));
+    }
+
+    /**
+     * Adds a new case expression to the expression object
+     *
+     * @param \Cake\Database\ExpressionInterface|array $conditions The conditions to test. Must be a ExpressionInterface
+     * instance, or an array of ExpressionInterface instances.
+     * @param \Cake\Database\ExpressionInterface|array $values Associative array of values to be associated with the
+     * conditions passed in $conditions. If there are more $values than $conditions,
+     * the last $value is used as the `ELSE` value.
+     * @param array $types Associative array of types to be associated with the values
+     * passed in $values
+     * @return $this
+     * @deprecated 4.3.0 Use QueryExpression::case() or CaseStatementExpression instead
+     */
+    public function addCase($conditions, $values = [], $types = [])
+    {
+        deprecationWarning('QueryExpression::addCase() is deprecated, use case() instead.');
+
+        return $this->add(new CaseExpression($conditions, $values, $types));
+    }
+
+    /**
+     * Returns a new case expression object.
+     *
+     * When a value is set, the syntax generated is
+     * `CASE case_value WHEN when_value ... END` (simple case),
+     * where the `when_value`'s are compared against the
+     * `case_value`.
+     *
+     * When no value is set, the syntax generated is
+     * `CASE WHEN when_conditions ... END` (searched case),
+     * where the conditions hold the comparisons.
+     *
+     * Note that `null` is a valid case value, and thus should
+     * only be passed if you actually want to create the simple
+     * case expression variant!
+     *
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $value The case value.
+     * @param string|null $type The case value type. If no type is provided, the type will be tried to be inferred
+     *  from the value.
+     * @return \Cake\Database\Expression\CaseStatementExpression
+     */
+    public function case($value = null, ?string $type = null): CaseStatementExpression
+    {
+        if (func_num_args() > 0) {
+            $expression = new CaseStatementExpression($value, $type);
+        } else {
+            $expression = new CaseStatementExpression();
+        }
+
+        return $expression->setTypeMap($this->getTypeMap());
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form
+     * "field NOT IN (value1, value2)".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param \Cake\Database\ExpressionInterface|array|string $values the value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function notIn($field, $values, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+        $type = $type ?: 'string';
+        $type .= '[]';
+        $values = $values instanceof ExpressionInterface ? $values : (array)$values;
+
+        return $this->add(new ComparisonExpression($field, $values, $type, 'NOT IN'));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form
+     * "(field NOT IN (value1, value2) OR field IS NULL".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Database field to be compared against value
+     * @param \Cake\Database\ExpressionInterface|array|string $values the value to be bound to $field for comparison
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function notInOrNull($field, $values, ?string $type = null)
+    {
+        $or = new static([], [], 'OR');
+        $or
+            ->notIn($field, $values, $type)
+            ->isNull($field);
+
+        return $this->add($or);
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "EXISTS (...)".
+     *
+     * @param \Cake\Database\ExpressionInterface $expression the inner query
+     * @return $this
+     */
+    public function exists(ExpressionInterface $expression)
+    {
+        return $this->add(new UnaryExpression('EXISTS', $expression, UnaryExpression::PREFIX));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form "NOT EXISTS (...)".
+     *
+     * @param \Cake\Database\ExpressionInterface $expression the inner query
+     * @return $this
+     */
+    public function notExists(ExpressionInterface $expression)
+    {
+        return $this->add(new UnaryExpression('NOT EXISTS', $expression, UnaryExpression::PREFIX));
+    }
+
+    /**
+     * Adds a new condition to the expression object in the form
+     * "field BETWEEN from AND to".
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field The field name to compare for values inbetween the range.
+     * @param mixed $from The initial value of the range.
+     * @param mixed $to The ending value in the comparison range.
+     * @param string|null $type the type name for $value as configured using the Type map.
+     * @return $this
+     */
+    public function between($field, $from, $to, $type = null)
+    {
+        if ($type === null) {
+            $type = $this->_calculateType($field);
+        }
+
+        return $this->add(new BetweenExpression($field, $from, $to, $type));
+    }
+
+    /**
+     * Returns a new QueryExpression object containing all the conditions passed
+     * and set up the conjunction to be "AND"
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions to be joined with AND
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @return \Cake\Database\Expression\QueryExpression
+     */
+    public function and($conditions, $types = [])
+    {
+        if ($conditions instanceof Closure) {
+            return $conditions(new static([], $this->getTypeMap()->setTypes($types)));
+        }
+
+        return new static($conditions, $this->getTypeMap()->setTypes($types));
+    }
+
+    /**
+     * Returns a new QueryExpression object containing all the conditions passed
+     * and set up the conjunction to be "OR"
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions to be joined with OR
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @return \Cake\Database\Expression\QueryExpression
+     */
+    public function or($conditions, $types = [])
+    {
+        if ($conditions instanceof Closure) {
+            return $conditions(new static([], $this->getTypeMap()->setTypes($types), 'OR'));
+        }
+
+        return new static($conditions, $this->getTypeMap()->setTypes($types), 'OR');
+    }
+
+    // phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
+
+    /**
+     * Returns a new QueryExpression object containing all the conditions passed
+     * and set up the conjunction to be "AND"
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions to be joined with AND
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @return \Cake\Database\Expression\QueryExpression
+     * @deprecated 4.0.0 Use {@link and()} instead.
+     */
+    public function and_($conditions, $types = [])
+    {
+        deprecationWarning('QueryExpression::and_() is deprecated use and() instead.');
+
+        return $this->and($conditions, $types);
+    }
+
+    /**
+     * Returns a new QueryExpression object containing all the conditions passed
+     * and set up the conjunction to be "OR"
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions to be joined with OR
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @return \Cake\Database\Expression\QueryExpression
+     * @deprecated 4.0.0 Use {@link or()} instead.
+     */
+    public function or_($conditions, $types = [])
+    {
+        deprecationWarning('QueryExpression::or_() is deprecated use or() instead.');
+
+        return $this->or($conditions, $types);
+    }
+
+    // phpcs:enable
+
+    /**
+     * Adds a new set of conditions to this level of the tree and negates
+     * the final result by prepending a NOT, it will look like
+     * "NOT ( (condition1) AND (conditions2) )" conjunction depends on the one
+     * currently configured for this object.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions to be added and negated
+     * @param array $types Associative array of fields pointing to the type of the
+     * values that are being passed. Used for correctly binding values to statements.
+     * @return $this
+     */
+    public function not($conditions, $types = [])
+    {
+        return $this->add(['NOT' => $conditions], $types);
+    }
+
+    /**
+     * Returns the number of internal conditions that are stored in this expression.
+     * Useful to determine if this expression object is void or it will generate
+     * a non-empty string when compiled
+     *
+     * @return int
+     */
+    public function count(): int
+    {
+        return count($this->_conditions);
+    }
+
+    /**
+     * Builds equal condition or assignment with identifier wrapping.
+     *
+     * @param string $leftField Left join condition field name.
+     * @param string $rightField Right join condition field name.
+     * @return $this
+     */
+    public function equalFields(string $leftField, string $rightField)
+    {
+        $wrapIdentifier = function ($field) {
+            if ($field instanceof ExpressionInterface) {
+                return $field;
+            }
+
+            return new IdentifierExpression($field);
+        };
+
+        return $this->eq($wrapIdentifier($leftField), $wrapIdentifier($rightField));
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $len = $this->count();
+        if ($len === 0) {
+            return '';
+        }
+        $conjunction = $this->_conjunction;
+        $template = $len === 1 ? '%s' : '(%s)';
+        $parts = [];
+        foreach ($this->_conditions as $part) {
+            if ($part instanceof Query) {
+                $part = '(' . $part->sql($binder) . ')';
+            } elseif ($part instanceof ExpressionInterface) {
+                $part = $part->sql($binder);
+            }
+            if ($part !== '') {
+                $parts[] = $part;
+            }
+        }
+
+        return sprintf($template, implode(" $conjunction ", $parts));
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        foreach ($this->_conditions as $c) {
+            if ($c instanceof ExpressionInterface) {
+                $callback($c);
+                $c->traverse($callback);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Executes a callable function for each of the parts that form this expression.
+     *
+     * The callable function is required to return a value with which the currently
+     * visited part will be replaced. If the callable function returns null then
+     * the part will be discarded completely from this expression.
+     *
+     * The callback function will receive each of the conditions as first param and
+     * the key as second param. It is possible to declare the second parameter as
+     * passed by reference, this will enable you to change the key under which the
+     * modified part is stored.
+     *
+     * @param callable $callback The callable to apply to each part.
+     * @return $this
+     */
+    public function iterateParts(callable $callback)
+    {
+        $parts = [];
+        foreach ($this->_conditions as $k => $c) {
+            $key = &$k;
+            $part = $callback($c, $key);
+            if ($part !== null) {
+                $parts[$key] = $part;
+            }
+        }
+        $this->_conditions = $parts;
+
+        return $this;
+    }
+
+    /**
+     * Check whether a callable is acceptable.
+     *
+     * We don't accept ['class', 'method'] style callbacks,
+     * as they often contain user input and arrays of strings
+     * are easy to sneak in.
+     *
+     * @param \Cake\Database\ExpressionInterface|callable|array|string $callable The callable to check.
+     * @return bool Valid callable.
+     * @deprecated 4.2.0 This method is unused.
+     * @codeCoverageIgnore
+     */
+    public function isCallable($callable): bool
+    {
+        if (is_string($callable)) {
+            return false;
+        }
+        if (is_object($callable) && is_callable($callable)) {
+            return true;
+        }
+
+        return is_array($callable) && isset($callable[0]) && is_object($callable[0]) && is_callable($callable);
+    }
+
+    /**
+     * Returns true if this expression contains any other nested
+     * ExpressionInterface objects
+     *
+     * @return bool
+     */
+    public function hasNestedExpression(): bool
+    {
+        foreach ($this->_conditions as $c) {
+            if ($c instanceof ExpressionInterface) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Auxiliary function used for decomposing a nested array of conditions and build
+     * a tree structure inside this object to represent the full SQL expression.
+     * String conditions are stored directly in the conditions, while any other
+     * representation is wrapped around an adequate instance or of this class.
+     *
+     * @param array $conditions list of conditions to be stored in this object
+     * @param array $types list of types associated on fields referenced in $conditions
+     * @return void
+     */
+    protected function _addConditions(array $conditions, array $types): void
+    {
+        $operators = ['and', 'or', 'xor'];
+
+        $typeMap = $this->getTypeMap()->setTypes($types);
+
+        foreach ($conditions as $k => $c) {
+            $numericKey = is_numeric($k);
+
+            if ($c instanceof Closure) {
+                $expr = new static([], $typeMap);
+                $c = $c($expr, $this);
+            }
+
+            if ($numericKey && empty($c)) {
+                continue;
+            }
+
+            $isArray = is_array($c);
+            $isOperator = $isNot = false;
+            if (!$numericKey) {
+                $normalizedKey = strtolower($k);
+                $isOperator = in_array($normalizedKey, $operators);
+                $isNot = $normalizedKey === 'not';
+            }
+
+            if (($isOperator || $isNot) && ($isArray || $c instanceof Countable) && count($c) === 0) {
+                continue;
+            }
+
+            if ($numericKey && $c instanceof ExpressionInterface) {
+                $this->_conditions[] = $c;
+                continue;
+            }
+
+            if ($numericKey && is_string($c)) {
+                $this->_conditions[] = $c;
+                continue;
+            }
+
+            if ($numericKey && $isArray || $isOperator) {
+                $this->_conditions[] = new static($c, $typeMap, $numericKey ? 'AND' : $k);
+                continue;
+            }
+
+            if ($isNot) {
+                $this->_conditions[] = new UnaryExpression('NOT', new static($c, $typeMap));
+                continue;
+            }
+
+            if (!$numericKey) {
+                $this->_conditions[] = $this->_parseCondition($k, $c);
+            }
+        }
+    }
+
+    /**
+     * Parses a string conditions by trying to extract the operator inside it if any
+     * and finally returning either an adequate QueryExpression object or a plain
+     * string representation of the condition. This function is responsible for
+     * generating the placeholders and replacing the values by them, while storing
+     * the value elsewhere for future binding.
+     *
+     * @param string $field The value from which the actual field and operator will
+     * be extracted.
+     * @param mixed $value The value to be bound to a placeholder for the field
+     * @return \Cake\Database\ExpressionInterface
+     * @throws \InvalidArgumentException If operator is invalid or missing on NULL usage.
+     */
+    protected function _parseCondition(string $field, $value)
+    {
+        $field = trim($field);
+        $operator = '=';
+        $expression = $field;
+
+        $spaces = substr_count($field, ' ');
+        // Handle field values that contain multiple spaces, such as
+        // operators with a space in them like `field IS NOT` and
+        // `field NOT LIKE`, or combinations with function expressions
+        // like `CONCAT(first_name, ' ', last_name) IN`.
+        if ($spaces > 1) {
+            $parts = explode(' ', $field);
+            if (preg_match('/(is not|not \w+)$/i', $field)) {
+                $last = array_pop($parts);
+                $second = array_pop($parts);
+                $parts[] = "{$second} {$last}";
+            }
+            $operator = array_pop($parts);
+            $expression = implode(' ', $parts);
+        } elseif ($spaces == 1) {
+            $parts = explode(' ', $field, 2);
+            [$expression, $operator] = $parts;
+        }
+        $operator = strtolower(trim($operator));
+        $type = $this->getTypeMap()->type($expression);
+
+        $typeMultiple = (is_string($type) && strpos($type, '[]') !== false);
+        if (in_array($operator, ['in', 'not in']) || $typeMultiple) {
+            $type = $type ?: 'string';
+            if (!$typeMultiple) {
+                $type .= '[]';
+            }
+            $operator = $operator === '=' ? 'IN' : $operator;
+            $operator = $operator === '!=' ? 'NOT IN' : $operator;
+            $typeMultiple = true;
+        }
+
+        if ($typeMultiple) {
+            $value = $value instanceof ExpressionInterface ? $value : (array)$value;
+        }
+
+        if ($operator === 'is' && $value === null) {
+            return new UnaryExpression(
+                'IS NULL',
+                new IdentifierExpression($expression),
+                UnaryExpression::POSTFIX
+            );
+        }
+
+        if ($operator === 'is not' && $value === null) {
+            return new UnaryExpression(
+                'IS NOT NULL',
+                new IdentifierExpression($expression),
+                UnaryExpression::POSTFIX
+            );
+        }
+
+        if ($operator === 'is' && $value !== null) {
+            $operator = '=';
+        }
+
+        if ($operator === 'is not' && $value !== null) {
+            $operator = '!=';
+        }
+
+        if ($value === null && $this->_conjunction !== ',') {
+            throw new InvalidArgumentException(
+                sprintf('Expression `%s` is missing operator (IS, IS NOT) with `null` value.', $expression)
+            );
+        }
+
+        return new ComparisonExpression($expression, $value, $type, $operator);
+    }
+
+    /**
+     * Returns the type name for the passed field if it was stored in the typeMap
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field The field name to get a type for.
+     * @return string|null The computed type or null, if the type is unknown.
+     */
+    protected function _calculateType($field): ?string
+    {
+        $field = $field instanceof IdentifierExpression ? $field->getIdentifier() : $field;
+        if (is_string($field)) {
+            return $this->getTypeMap()->type($field);
+        }
+
+        return null;
+    }
+
+    /**
+     * Clone this object and its subtree of expressions.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        foreach ($this->_conditions as $i => $condition) {
+            if ($condition instanceof ExpressionInterface) {
+                $this->_conditions[$i] = clone $condition;
+            }
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/StringExpression.php b/vendor/cakephp/database/Expression/StringExpression.php
new file mode 100755
index 0000000..e438074
--- /dev/null
+++ b/vendor/cakephp/database/Expression/StringExpression.php
@@ -0,0 +1,87 @@
+string = $string;
+        $this->collation = $collation;
+    }
+
+    /**
+     * Sets the string collation.
+     *
+     * @param string $collation String collation
+     * @return void
+     */
+    public function setCollation(string $collation): void
+    {
+        $this->collation = $collation;
+    }
+
+    /**
+     * Returns the string collation.
+     *
+     * @return string
+     */
+    public function getCollation(): string
+    {
+        return $this->collation;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $placeholder = $binder->placeholder('c');
+        $binder->bind($placeholder, $this->string, 'string');
+
+        return $placeholder . ' COLLATE ' . $this->collation;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/TupleComparison.php b/vendor/cakephp/database/Expression/TupleComparison.php
new file mode 100755
index 0000000..b5c36f0
--- /dev/null
+++ b/vendor/cakephp/database/Expression/TupleComparison.php
@@ -0,0 +1,231 @@
+
+     * @psalm-suppress NonInvariantDocblockPropertyType
+     */
+    protected $_type;
+
+    /**
+     * Constructor
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $fields the fields to use to form a tuple
+     * @param \Cake\Database\ExpressionInterface|array $values the values to use to form a tuple
+     * @param array $types the types names to use for casting each of the values, only
+     * one type per position in the value array in needed
+     * @param string $conjunction the operator used for comparing field and value
+     */
+    public function __construct($fields, $values, array $types = [], string $conjunction = '=')
+    {
+        $this->_type = $types;
+        $this->setField($fields);
+        $this->_operator = $conjunction;
+        $this->setValue($values);
+    }
+
+    /**
+     * Returns the type to be used for casting the value to a database representation
+     *
+     * @return array
+     */
+    public function getType(): array
+    {
+        return $this->_type;
+    }
+
+    /**
+     * Sets the value
+     *
+     * @param mixed $value The value to compare
+     * @return void
+     */
+    public function setValue($value): void
+    {
+        if ($this->isMulti()) {
+            if (is_array($value) && !is_array(current($value))) {
+                throw new InvalidArgumentException(
+                    'Multi-tuple comparisons require a multi-tuple value, single-tuple given.'
+                );
+            }
+        } else {
+            if (is_array($value) && is_array(current($value))) {
+                throw new InvalidArgumentException(
+                    'Single-tuple comparisons require a single-tuple value, multi-tuple given.'
+                );
+            }
+        }
+
+        $this->_value = $value;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $template = '(%s) %s (%s)';
+        $fields = [];
+        $originalFields = $this->getField();
+
+        if (!is_array($originalFields)) {
+            $originalFields = [$originalFields];
+        }
+
+        foreach ($originalFields as $field) {
+            $fields[] = $field instanceof ExpressionInterface ? $field->sql($binder) : $field;
+        }
+
+        $values = $this->_stringifyValues($binder);
+
+        $field = implode(', ', $fields);
+
+        return sprintf($template, $field, $this->_operator, $values);
+    }
+
+    /**
+     * Returns a string with the values as placeholders in a string to be used
+     * for the SQL version of this expression
+     *
+     * @param \Cake\Database\ValueBinder $binder The value binder to convert expressions with.
+     * @return string
+     */
+    protected function _stringifyValues(ValueBinder $binder): string
+    {
+        $values = [];
+        $parts = $this->getValue();
+
+        if ($parts instanceof ExpressionInterface) {
+            return $parts->sql($binder);
+        }
+
+        foreach ($parts as $i => $value) {
+            if ($value instanceof ExpressionInterface) {
+                $values[] = $value->sql($binder);
+                continue;
+            }
+
+            $type = $this->_type;
+            $isMultiOperation = $this->isMulti();
+            if (empty($type)) {
+                $type = null;
+            }
+
+            if ($isMultiOperation) {
+                $bound = [];
+                foreach ($value as $k => $val) {
+                    /** @var string $valType */
+                    $valType = $type && isset($type[$k]) ? $type[$k] : $type;
+                    $bound[] = $this->_bindValue($val, $binder, $valType);
+                }
+
+                $values[] = sprintf('(%s)', implode(',', $bound));
+                continue;
+            }
+
+            /** @var string $valType */
+            $valType = $type && isset($type[$i]) ? $type[$i] : $type;
+            $values[] = $this->_bindValue($value, $binder, $valType);
+        }
+
+        return implode(', ', $values);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _bindValue($value, ValueBinder $binder, ?string $type = null): string
+    {
+        $placeholder = $binder->placeholder('tuple');
+        $binder->bind($placeholder, $value, $type);
+
+        return $placeholder;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        /** @var array $fields */
+        $fields = $this->getField();
+        foreach ($fields as $field) {
+            $this->_traverseValue($field, $callback);
+        }
+
+        $value = $this->getValue();
+        if ($value instanceof ExpressionInterface) {
+            $callback($value);
+            $value->traverse($callback);
+
+            return $this;
+        }
+
+        foreach ($value as $val) {
+            if ($this->isMulti()) {
+                foreach ($val as $v) {
+                    $this->_traverseValue($v, $callback);
+                }
+            } else {
+                $this->_traverseValue($val, $callback);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Conditionally executes the callback for the passed value if
+     * it is an ExpressionInterface
+     *
+     * @param mixed $value The value to traverse
+     * @param \Closure $callback The callable to use when traversing
+     * @return void
+     */
+    protected function _traverseValue($value, Closure $callback): void
+    {
+        if ($value instanceof ExpressionInterface) {
+            $callback($value);
+            $value->traverse($callback);
+        }
+    }
+
+    /**
+     * Determines if each of the values in this expressions is a tuple in
+     * itself
+     *
+     * @return bool
+     */
+    public function isMulti(): bool
+    {
+        return in_array(strtolower($this->_operator), ['in', 'not in']);
+    }
+}
diff --git a/vendor/cakephp/database/Expression/UnaryExpression.php b/vendor/cakephp/database/Expression/UnaryExpression.php
new file mode 100755
index 0000000..1c40f91
--- /dev/null
+++ b/vendor/cakephp/database/Expression/UnaryExpression.php
@@ -0,0 +1,118 @@
+_operator = $operator;
+        $this->_value = $value;
+        $this->position = $position;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $operand = $this->_value;
+        if ($operand instanceof ExpressionInterface) {
+            $operand = $operand->sql($binder);
+        }
+
+        if ($this->position === self::POSTFIX) {
+            return '(' . $operand . ') ' . $this->_operator;
+        }
+
+        return $this->_operator . ' (' . $operand . ')';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->_value instanceof ExpressionInterface) {
+            $callback($this->_value);
+            $this->_value->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Perform a deep clone of the inner expression.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        if ($this->_value instanceof ExpressionInterface) {
+            $this->_value = clone $this->_value;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/ValuesExpression.php b/vendor/cakephp/database/Expression/ValuesExpression.php
new file mode 100755
index 0000000..68dbf25
--- /dev/null
+++ b/vendor/cakephp/database/Expression/ValuesExpression.php
@@ -0,0 +1,325 @@
+ type names
+     */
+    public function __construct(array $columns, TypeMap $typeMap)
+    {
+        $this->_columns = $columns;
+        $this->setTypeMap($typeMap);
+    }
+
+    /**
+     * Add a row of data to be inserted.
+     *
+     * @param \Cake\Database\Query|array $values Array of data to append into the insert, or
+     *   a query for doing INSERT INTO .. SELECT style commands
+     * @return void
+     * @throws \Cake\Database\Exception\DatabaseException When mixing array + Query data types.
+     */
+    public function add($values): void
+    {
+        if (
+            (
+                count($this->_values) &&
+                $values instanceof Query
+            ) ||
+            (
+                $this->_query &&
+                is_array($values)
+            )
+        ) {
+            throw new DatabaseException(
+                'You cannot mix subqueries and array values in inserts.'
+            );
+        }
+        if ($values instanceof Query) {
+            $this->setQuery($values);
+
+            return;
+        }
+        $this->_values[] = $values;
+        $this->_castedExpressions = false;
+    }
+
+    /**
+     * Sets the columns to be inserted.
+     *
+     * @param array $columns Array with columns to be inserted.
+     * @return $this
+     */
+    public function setColumns(array $columns)
+    {
+        $this->_columns = $columns;
+        $this->_castedExpressions = false;
+
+        return $this;
+    }
+
+    /**
+     * Gets the columns to be inserted.
+     *
+     * @return array
+     */
+    public function getColumns(): array
+    {
+        return $this->_columns;
+    }
+
+    /**
+     * Get the bare column names.
+     *
+     * Because column names could be identifier quoted, we
+     * need to strip the identifiers off of the columns.
+     *
+     * @return array
+     */
+    protected function _columnNames(): array
+    {
+        $columns = [];
+        foreach ($this->_columns as $col) {
+            if (is_string($col)) {
+                $col = trim($col, '`[]"');
+            }
+            $columns[] = $col;
+        }
+
+        return $columns;
+    }
+
+    /**
+     * Sets the values to be inserted.
+     *
+     * @param array $values Array with values to be inserted.
+     * @return $this
+     */
+    public function setValues(array $values)
+    {
+        $this->_values = $values;
+        $this->_castedExpressions = false;
+
+        return $this;
+    }
+
+    /**
+     * Gets the values to be inserted.
+     *
+     * @return array
+     */
+    public function getValues(): array
+    {
+        if (!$this->_castedExpressions) {
+            $this->_processExpressions();
+        }
+
+        return $this->_values;
+    }
+
+    /**
+     * Sets the query object to be used as the values expression to be evaluated
+     * to insert records in the table.
+     *
+     * @param \Cake\Database\Query $query The query to set
+     * @return $this
+     */
+    public function setQuery(Query $query)
+    {
+        $this->_query = $query;
+
+        return $this;
+    }
+
+    /**
+     * Gets the query object to be used as the values expression to be evaluated
+     * to insert records in the table.
+     *
+     * @return \Cake\Database\Query|null
+     */
+    public function getQuery(): ?Query
+    {
+        return $this->_query;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        if (empty($this->_values) && empty($this->_query)) {
+            return '';
+        }
+
+        if (!$this->_castedExpressions) {
+            $this->_processExpressions();
+        }
+
+        $columns = $this->_columnNames();
+        $defaults = array_fill_keys($columns, null);
+        $placeholders = [];
+
+        $types = [];
+        $typeMap = $this->getTypeMap();
+        foreach ($defaults as $col => $v) {
+            $types[$col] = $typeMap->type($col);
+        }
+
+        foreach ($this->_values as $row) {
+            $row += $defaults;
+            $rowPlaceholders = [];
+
+            foreach ($columns as $column) {
+                $value = $row[$column];
+
+                if ($value instanceof ExpressionInterface) {
+                    $rowPlaceholders[] = '(' . $value->sql($binder) . ')';
+                    continue;
+                }
+
+                $placeholder = $binder->placeholder('c');
+                $rowPlaceholders[] = $placeholder;
+                $binder->bind($placeholder, $value, $types[$column]);
+            }
+
+            $placeholders[] = implode(', ', $rowPlaceholders);
+        }
+
+        $query = $this->getQuery();
+        if ($query) {
+            return ' ' . $query->sql($binder);
+        }
+
+        return sprintf(' VALUES (%s)', implode('), (', $placeholders));
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->_query) {
+            return $this;
+        }
+
+        if (!$this->_castedExpressions) {
+            $this->_processExpressions();
+        }
+
+        foreach ($this->_values as $v) {
+            if ($v instanceof ExpressionInterface) {
+                $v->traverse($callback);
+            }
+            if (!is_array($v)) {
+                continue;
+            }
+            foreach ($v as $field) {
+                if ($field instanceof ExpressionInterface) {
+                    $callback($field);
+                    $field->traverse($callback);
+                }
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Converts values that need to be casted to expressions
+     *
+     * @return void
+     */
+    protected function _processExpressions(): void
+    {
+        $types = [];
+        $typeMap = $this->getTypeMap();
+
+        $columns = $this->_columnNames();
+        foreach ($columns as $c) {
+            if (!is_string($c) && !is_int($c)) {
+                continue;
+            }
+            $types[$c] = $typeMap->type($c);
+        }
+
+        $types = $this->_requiresToExpressionCasting($types);
+
+        if (empty($types)) {
+            return;
+        }
+
+        foreach ($this->_values as $row => $values) {
+            foreach ($types as $col => $type) {
+                /** @var \Cake\Database\Type\ExpressionTypeInterface $type */
+                $this->_values[$row][$col] = $type->toExpression($values[$col]);
+            }
+        }
+        $this->_castedExpressions = true;
+    }
+}
diff --git a/vendor/cakephp/database/Expression/WhenThenExpression.php b/vendor/cakephp/database/Expression/WhenThenExpression.php
new file mode 100755
index 0000000..bbc4154
--- /dev/null
+++ b/vendor/cakephp/database/Expression/WhenThenExpression.php
@@ -0,0 +1,350 @@
+
+     */
+    protected $validClauseNames = [
+        'when',
+        'then',
+    ];
+
+    /**
+     * The type map to use when using an array of conditions for the
+     * `WHEN` value.
+     *
+     * @var \Cake\Database\TypeMap
+     */
+    protected $_typeMap;
+
+    /**
+     * Then `WHEN` value.
+     *
+     * @var \Cake\Database\ExpressionInterface|object|scalar|null
+     */
+    protected $when = null;
+
+    /**
+     * The `WHEN` value type.
+     *
+     * @var array|string|null
+     */
+    protected $whenType = null;
+
+    /**
+     * The `THEN` value.
+     *
+     * @var \Cake\Database\ExpressionInterface|object|scalar|null
+     */
+    protected $then = null;
+
+    /**
+     * Whether the `THEN` value has been defined, eg whether `then()`
+     * has been invoked.
+     *
+     * @var bool
+     */
+    protected $hasThenBeenDefined = false;
+
+    /**
+     * The `THEN` result type.
+     *
+     * @var string|null
+     */
+    protected $thenType = null;
+
+    /**
+     * Constructor.
+     *
+     * @param \Cake\Database\TypeMap|null $typeMap The type map to use when using an array of conditions for the `WHEN`
+     *  value.
+     */
+    public function __construct(?TypeMap $typeMap = null)
+    {
+        if ($typeMap === null) {
+            $typeMap = new TypeMap();
+        }
+        $this->_typeMap = $typeMap;
+    }
+
+    /**
+     * Sets the `WHEN` value.
+     *
+     * @param \Cake\Database\ExpressionInterface|object|array|scalar $when The `WHEN` value. When using an array of
+     *  conditions, it must be compatible with `\Cake\Database\Query::where()`. Note that this argument is _not_
+     *  completely safe for use with user data, as a user supplied array would allow for raw SQL to slip in! If you
+     *  plan to use user data, either pass a single type for the `$type` argument (which forces the `$when` value to be
+     *  a non-array, and then always binds the data), use a conditions array where the user data is only passed on the
+     *  value side of the array entries, or custom bindings!
+     * @param array|string|null $type The when value type. Either an associative array when using array style
+     *  conditions, or else a string. If no type is provided, the type will be tried to be inferred from the value.
+     * @return $this
+     * @throws \InvalidArgumentException In case the `$when` argument is neither a non-empty array, nor a scalar value,
+     *  an object, or an instance of `\Cake\Database\ExpressionInterface`.
+     * @throws \InvalidArgumentException In case the `$type` argument is neither an array, a string, nor null.
+     * @throws \InvalidArgumentException In case the `$when` argument is an array, and the `$type` argument is neither
+     * an array, nor null.
+     * @throws \InvalidArgumentException In case the `$when` argument is a non-array value, and the `$type` argument is
+     * neither a string, nor null.
+     * @see CaseStatementExpression::when() for a more detailed usage explanation.
+     */
+    public function when($when, $type = null)
+    {
+        if (
+            !(is_array($when) && !empty($when)) &&
+            !is_scalar($when) &&
+            !is_object($when)
+        ) {
+            throw new InvalidArgumentException(sprintf(
+                'The `$when` argument must be either a non-empty array, a scalar value, an object, ' .
+                'or an instance of `\%s`, `%s` given.',
+                ExpressionInterface::class,
+                is_array($when) ? '[]' : getTypeName($when)
+            ));
+        }
+
+        if (
+            $type !== null &&
+            !is_array($type) &&
+            !is_string($type)
+        ) {
+            throw new InvalidArgumentException(sprintf(
+                'The `$type` argument must be either an array, a string, or `null`, `%s` given.',
+                getTypeName($type)
+            ));
+        }
+
+        if (is_array($when)) {
+            if (
+                $type !== null &&
+                !is_array($type)
+            ) {
+                throw new InvalidArgumentException(sprintf(
+                    'When using an array for the `$when` argument, the `$type` argument must be an ' .
+                    'array too, `%s` given.',
+                    getTypeName($type)
+                ));
+            }
+
+            // avoid dirtying the type map for possible consecutive `when()` calls
+            $typeMap = clone $this->_typeMap;
+            if (
+                is_array($type) &&
+                count($type) > 0
+            ) {
+                $typeMap = $typeMap->setTypes($type);
+            }
+
+            $when = new QueryExpression($when, $typeMap);
+        } else {
+            if (
+                $type !== null &&
+                !is_string($type)
+            ) {
+                throw new InvalidArgumentException(sprintf(
+                    'When using a non-array value for the `$when` argument, the `$type` argument must ' .
+                    'be a string, `%s` given.',
+                    getTypeName($type)
+                ));
+            }
+
+            if (
+                $type === null &&
+                !($when instanceof ExpressionInterface)
+            ) {
+                $type = $this->inferType($when);
+            }
+        }
+
+        $this->when = $when;
+        $this->whenType = $type;
+
+        return $this;
+    }
+
+    /**
+     * Sets the `THEN` result value.
+     *
+     * @param \Cake\Database\ExpressionInterface|object|scalar|null $result The result value.
+     * @param string|null $type The result type. If no type is provided, the type will be inferred from the given
+     *  result value.
+     * @return $this
+     */
+    public function then($result, ?string $type = null)
+    {
+        if (
+            $result !== null &&
+            !is_scalar($result) &&
+            !(is_object($result) && !($result instanceof Closure))
+        ) {
+            throw new InvalidArgumentException(sprintf(
+                'The `$result` argument must be either `null`, a scalar value, an object, ' .
+                'or an instance of `\%s`, `%s` given.',
+                ExpressionInterface::class,
+                getTypeName($result)
+            ));
+        }
+
+        $this->then = $result;
+
+        if ($type === null) {
+            $type = $this->inferType($result);
+        }
+
+        $this->thenType = $type;
+
+        $this->hasThenBeenDefined = true;
+
+        return $this;
+    }
+
+    /**
+     * Returns the expression's result value type.
+     *
+     * @return string|null
+     * @see WhenThenExpression::then()
+     */
+    public function getResultType(): ?string
+    {
+        return $this->thenType;
+    }
+
+    /**
+     * Returns the available data for the given clause.
+     *
+     * ### Available clauses
+     *
+     * The following clause names are available:
+     *
+     * * `when`: The `WHEN` value.
+     * * `then`: The `THEN` result value.
+     *
+     * @param string $clause The name of the clause to obtain.
+     * @return \Cake\Database\ExpressionInterface|object|scalar|null
+     * @throws \InvalidArgumentException In case the given clause name is invalid.
+     */
+    public function clause(string $clause)
+    {
+        if (!in_array($clause, $this->validClauseNames, true)) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The `$clause` argument must be one of `%s`, the given value `%s` is invalid.',
+                    implode('`, `', $this->validClauseNames),
+                    $clause
+                )
+            );
+        }
+
+        return $this->{$clause};
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        if ($this->when === null) {
+            throw new LogicException('Case expression has incomplete when clause. Missing `when()`.');
+        }
+
+        if (!$this->hasThenBeenDefined) {
+            throw new LogicException('Case expression has incomplete when clause. Missing `then()` after `when()`.');
+        }
+
+        $when = $this->when;
+        if (
+            is_string($this->whenType) &&
+            !($when instanceof ExpressionInterface)
+        ) {
+            $when = $this->_castToExpression($when, $this->whenType);
+        }
+        if ($when instanceof Query) {
+            $when = sprintf('(%s)', $when->sql($binder));
+        } elseif ($when instanceof ExpressionInterface) {
+            $when = $when->sql($binder);
+        } else {
+            $placeholder = $binder->placeholder('c');
+            if (is_string($this->whenType)) {
+                $whenType = $this->whenType;
+            } else {
+                $whenType = null;
+            }
+            $binder->bind($placeholder, $when, $whenType);
+            $when = $placeholder;
+        }
+
+        $then = $this->compileNullableValue($binder, $this->then, $this->thenType);
+
+        return "WHEN $when THEN $then";
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        if ($this->when instanceof ExpressionInterface) {
+            $callback($this->when);
+            $this->when->traverse($callback);
+        }
+
+        if ($this->then instanceof ExpressionInterface) {
+            $callback($this->then);
+            $this->then->traverse($callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Clones the inner expression objects.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        if ($this->when instanceof ExpressionInterface) {
+            $this->when = clone $this->when;
+        }
+
+        if ($this->then instanceof ExpressionInterface) {
+            $this->then = clone $this->then;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/WindowExpression.php b/vendor/cakephp/database/Expression/WindowExpression.php
new file mode 100755
index 0000000..383e652
--- /dev/null
+++ b/vendor/cakephp/database/Expression/WindowExpression.php
@@ -0,0 +1,335 @@
+
+     */
+    protected $partitions = [];
+
+    /**
+     * @var \Cake\Database\Expression\OrderByExpression|null
+     */
+    protected $order;
+
+    /**
+     * @var array|null
+     */
+    protected $frame;
+
+    /**
+     * @var string|null
+     */
+    protected $exclusion;
+
+    /**
+     * @param string $name Window name
+     */
+    public function __construct(string $name = '')
+    {
+        $this->name = new IdentifierExpression($name);
+    }
+
+    /**
+     * Return whether is only a named window expression.
+     *
+     * These window expressions only specify a named window and do not
+     * specify their own partitions, frame or order.
+     *
+     * @return bool
+     */
+    public function isNamedOnly(): bool
+    {
+        return $this->name->getIdentifier() && (!$this->partitions && !$this->frame && !$this->order);
+    }
+
+    /**
+     * Sets the window name.
+     *
+     * @param string $name Window name
+     * @return $this
+     */
+    public function name(string $name)
+    {
+        $this->name = new IdentifierExpression($name);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function partition($partitions)
+    {
+        if (!$partitions) {
+            return $this;
+        }
+
+        if ($partitions instanceof Closure) {
+            $partitions = $partitions(new QueryExpression([], [], ''));
+        }
+
+        if (!is_array($partitions)) {
+            $partitions = [$partitions];
+        }
+
+        foreach ($partitions as &$partition) {
+            if (is_string($partition)) {
+                $partition = new IdentifierExpression($partition);
+            }
+        }
+
+        $this->partitions = array_merge($this->partitions, $partitions);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function order($fields)
+    {
+        if (!$fields) {
+            return $this;
+        }
+
+        if ($this->order === null) {
+            $this->order = new OrderByExpression();
+        }
+
+        if ($fields instanceof Closure) {
+            $fields = $fields(new QueryExpression([], [], ''));
+        }
+
+        $this->order->add($fields);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function range($start, $end = 0)
+    {
+        return $this->frame(self::RANGE, $start, self::PRECEDING, $end, self::FOLLOWING);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rows(?int $start, ?int $end = 0)
+    {
+        return $this->frame(self::ROWS, $start, self::PRECEDING, $end, self::FOLLOWING);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function groups(?int $start, ?int $end = 0)
+    {
+        return $this->frame(self::GROUPS, $start, self::PRECEDING, $end, self::FOLLOWING);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function frame(
+        string $type,
+        $startOffset,
+        string $startDirection,
+        $endOffset,
+        string $endDirection
+    ) {
+        $this->frame = [
+            'type' => $type,
+            'start' => [
+                'offset' => $startOffset,
+                'direction' => $startDirection,
+            ],
+            'end' => [
+                'offset' => $endOffset,
+                'direction' => $endDirection,
+            ],
+        ];
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeCurrent()
+    {
+        $this->exclusion = 'CURRENT ROW';
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeGroup()
+    {
+        $this->exclusion = 'GROUP';
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function excludeTies()
+    {
+        $this->exclusion = 'TIES';
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function sql(ValueBinder $binder): string
+    {
+        $clauses = [];
+        if ($this->name->getIdentifier()) {
+            $clauses[] = $this->name->sql($binder);
+        }
+
+        if ($this->partitions) {
+            $expressions = [];
+            foreach ($this->partitions as $partition) {
+                $expressions[] = $partition->sql($binder);
+            }
+
+            $clauses[] = 'PARTITION BY ' . implode(', ', $expressions);
+        }
+
+        if ($this->order) {
+            $clauses[] = $this->order->sql($binder);
+        }
+
+        if ($this->frame) {
+            $start = $this->buildOffsetSql(
+                $binder,
+                $this->frame['start']['offset'],
+                $this->frame['start']['direction']
+            );
+            $end = $this->buildOffsetSql(
+                $binder,
+                $this->frame['end']['offset'],
+                $this->frame['end']['direction']
+            );
+
+            $frameSql = sprintf('%s BETWEEN %s AND %s', $this->frame['type'], $start, $end);
+
+            if ($this->exclusion !== null) {
+                $frameSql .= ' EXCLUDE ' . $this->exclusion;
+            }
+
+            $clauses[] = $frameSql;
+        }
+
+        return implode(' ', $clauses);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function traverse(Closure $callback)
+    {
+        $callback($this->name);
+        foreach ($this->partitions as $partition) {
+            $callback($partition);
+            $partition->traverse($callback);
+        }
+
+        if ($this->order) {
+            $callback($this->order);
+            $this->order->traverse($callback);
+        }
+
+        if ($this->frame !== null) {
+            $offset = $this->frame['start']['offset'];
+            if ($offset instanceof ExpressionInterface) {
+                $callback($offset);
+                $offset->traverse($callback);
+            }
+            $offset = $this->frame['end']['offset'] ?? null;
+            if ($offset instanceof ExpressionInterface) {
+                $callback($offset);
+                $offset->traverse($callback);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Builds frame offset sql.
+     *
+     * @param \Cake\Database\ValueBinder $binder Value binder
+     * @param \Cake\Database\ExpressionInterface|string|int|null $offset Frame offset
+     * @param string $direction Frame offset direction
+     * @return string
+     */
+    protected function buildOffsetSql(ValueBinder $binder, $offset, string $direction): string
+    {
+        if ($offset === 0) {
+            return 'CURRENT ROW';
+        }
+
+        if ($offset instanceof ExpressionInterface) {
+            $offset = $offset->sql($binder);
+        }
+
+        return sprintf(
+            '%s %s',
+            $offset ?? 'UNBOUNDED',
+            $direction
+        );
+    }
+
+    /**
+     * Clone this object and its subtree of expressions.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        $this->name = clone $this->name;
+        foreach ($this->partitions as $i => $partition) {
+            $this->partitions[$i] = clone $partition;
+        }
+        if ($this->order !== null) {
+            $this->order = clone $this->order;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Expression/WindowInterface.php b/vendor/cakephp/database/Expression/WindowInterface.php
new file mode 100755
index 0000000..7a7bac5
--- /dev/null
+++ b/vendor/cakephp/database/Expression/WindowInterface.php
@@ -0,0 +1,163 @@
+|string $partitions Partition expressions
+     * @return $this
+     */
+    public function partition($partitions);
+
+    /**
+     * Adds one or more order clauses to the window.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array<\Cake\Database\ExpressionInterface|string>|string $fields Order expressions
+     * @return $this
+     */
+    public function order($fields);
+
+    /**
+     * Adds a simple range frame to the window.
+     *
+     * `$start`:
+     *  - `0` - 'CURRENT ROW'
+     *  - `null` - 'UNBOUNDED PRECEDING'
+     *  - offset - 'offset PRECEDING'
+     *
+     * `$end`:
+     *  - `0` - 'CURRENT ROW'
+     *  - `null` - 'UNBOUNDED FOLLOWING'
+     *  - offset - 'offset FOLLOWING'
+     *
+     * If you need to use 'FOLLOWING' with frame start or
+     * 'PRECEDING' with frame end, use `frame()` instead.
+     *
+     * @param \Cake\Database\ExpressionInterface|string|int|null $start Frame start
+     * @param \Cake\Database\ExpressionInterface|string|int|null $end Frame end
+     *  If not passed in, only frame start SQL will be generated.
+     * @return $this
+     */
+    public function range($start, $end = 0);
+
+    /**
+     * Adds a simple rows frame to the window.
+     *
+     * See `range()` for details.
+     *
+     * @param int|null $start Frame start
+     * @param int|null $end Frame end
+     *  If not passed in, only frame start SQL will be generated.
+     * @return $this
+     */
+    public function rows(?int $start, ?int $end = 0);
+
+    /**
+     * Adds a simple groups frame to the window.
+     *
+     * See `range()` for details.
+     *
+     * @param int|null $start Frame start
+     * @param int|null $end Frame end
+     *  If not passed in, only frame start SQL will be generated.
+     * @return $this
+     */
+    public function groups(?int $start, ?int $end = 0);
+
+    /**
+     * Adds a frame to the window.
+     *
+     * Use the `range()`, `rows()` or `groups()` helpers if you need simple
+     * 'BETWEEN offset PRECEDING and offset FOLLOWING' frames.
+     *
+     * You can specify any direction for both frame start and frame end.
+     *
+     * With both `$startOffset` and `$endOffset`:
+     *  - `0` - 'CURRENT ROW'
+     *  - `null` - 'UNBOUNDED'
+     *
+     * @param string $type Frame type
+     * @param \Cake\Database\ExpressionInterface|string|int|null $startOffset Frame start offset
+     * @param string $startDirection Frame start direction
+     * @param \Cake\Database\ExpressionInterface|string|int|null $endOffset Frame end offset
+     * @param string $endDirection Frame end direction
+     * @return $this
+     * @throws \InvalidArgumentException WHen offsets are negative.
+     * @psalm-param self::RANGE|self::ROWS|self::GROUPS $type
+     * @psalm-param self::PRECEDING|self::FOLLOWING $startDirection
+     * @psalm-param self::PRECEDING|self::FOLLOWING $endDirection
+     */
+    public function frame(
+        string $type,
+        $startOffset,
+        string $startDirection,
+        $endOffset,
+        string $endDirection
+    );
+
+    /**
+     * Adds current row frame exclusion.
+     *
+     * @return $this
+     */
+    public function excludeCurrent();
+
+    /**
+     * Adds group frame exclusion.
+     *
+     * @return $this
+     */
+    public function excludeGroup();
+
+    /**
+     * Adds ties frame exclusion.
+     *
+     * @return $this
+     */
+    public function excludeTies();
+}
diff --git a/vendor/cakephp/database/ExpressionInterface.php b/vendor/cakephp/database/ExpressionInterface.php
new file mode 100755
index 0000000..3e3588c
--- /dev/null
+++ b/vendor/cakephp/database/ExpressionInterface.php
@@ -0,0 +1,44 @@
+
+     */
+    protected $_typeMap;
+
+    /**
+     * An array containing the name of the fields and the Type objects
+     * each should use when converting them using batching.
+     *
+     * @var array
+     */
+    protected $batchingTypeMap;
+
+    /**
+     * An array containing all the types registered in the Type system
+     * at the moment this object is created. Used so that the types list
+     * is not fetched on each single row of the results.
+     *
+     * @var array<\Cake\Database\TypeInterface|\Cake\Database\Type\BatchCastingInterface>
+     */
+    protected $types;
+
+    /**
+     * The driver object to be used in the type conversion
+     *
+     * @var \Cake\Database\DriverInterface
+     */
+    protected $_driver;
+
+    /**
+     * Builds the type map
+     *
+     * @param \Cake\Database\TypeMap $typeMap Contains the types to use for converting results
+     * @param \Cake\Database\DriverInterface $driver The driver to use for the type conversion
+     */
+    public function __construct(TypeMap $typeMap, DriverInterface $driver)
+    {
+        $this->_driver = $driver;
+        $map = $typeMap->toArray();
+        $types = TypeFactory::buildAll();
+
+        $simpleMap = $batchingMap = [];
+        $simpleResult = $batchingResult = [];
+
+        foreach ($types as $k => $type) {
+            if ($type instanceof OptionalConvertInterface && !$type->requiresToPhpCast()) {
+                continue;
+            }
+
+            if ($type instanceof BatchCastingInterface) {
+                $batchingMap[$k] = $type;
+                continue;
+            }
+
+            $simpleMap[$k] = $type;
+        }
+
+        foreach ($map as $field => $type) {
+            if (isset($simpleMap[$type])) {
+                $simpleResult[$field] = $simpleMap[$type];
+                continue;
+            }
+            if (isset($batchingMap[$type])) {
+                $batchingResult[$type][] = $field;
+            }
+        }
+
+        // Using batching when there is only a couple for the type is actually slower,
+        // so, let's check for that case here.
+        foreach ($batchingResult as $type => $fields) {
+            if (count($fields) > 2) {
+                continue;
+            }
+
+            foreach ($fields as $f) {
+                $simpleResult[$f] = $batchingMap[$type];
+            }
+            unset($batchingResult[$type]);
+        }
+
+        $this->types = $types;
+        $this->_typeMap = $simpleResult;
+        $this->batchingTypeMap = $batchingResult;
+    }
+
+    /**
+     * Converts each of the fields in the array that are present in the type map
+     * using the corresponding Type class.
+     *
+     * @param array $row The array with the fields to be casted
+     * @return array
+     */
+    public function __invoke(array $row): array
+    {
+        if (!empty($this->_typeMap)) {
+            foreach ($this->_typeMap as $field => $type) {
+                $row[$field] = $type->toPHP($row[$field], $this->_driver);
+            }
+        }
+
+        if (!empty($this->batchingTypeMap)) {
+            foreach ($this->batchingTypeMap as $t => $fields) {
+                /** @psalm-suppress PossiblyUndefinedMethod */
+                $row = $this->types[$t]->manyToPHP($row, $fields, $this->_driver);
+            }
+        }
+
+        return $row;
+    }
+}
diff --git a/vendor/cakephp/database/FunctionsBuilder.php b/vendor/cakephp/database/FunctionsBuilder.php
new file mode 100755
index 0000000..9e50ad6
--- /dev/null
+++ b/vendor/cakephp/database/FunctionsBuilder.php
@@ -0,0 +1,376 @@
+aggregate('SUM', $this->toLiteralParam($expression), $types, $returnType);
+    }
+
+    /**
+     * Returns a AggregateExpression representing a call to SQL AVG function.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function avg($expression, $types = []): AggregateExpression
+    {
+        return $this->aggregate('AVG', $this->toLiteralParam($expression), $types, 'float');
+    }
+
+    /**
+     * Returns a AggregateExpression representing a call to SQL MAX function.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function max($expression, $types = []): AggregateExpression
+    {
+        return $this->aggregate('MAX', $this->toLiteralParam($expression), $types, current($types) ?: 'float');
+    }
+
+    /**
+     * Returns a AggregateExpression representing a call to SQL MIN function.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function min($expression, $types = []): AggregateExpression
+    {
+        return $this->aggregate('MIN', $this->toLiteralParam($expression), $types, current($types) ?: 'float');
+    }
+
+    /**
+     * Returns a AggregateExpression representing a call to SQL COUNT function.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function count($expression, $types = []): AggregateExpression
+    {
+        return $this->aggregate('COUNT', $this->toLiteralParam($expression), $types, 'integer');
+    }
+
+    /**
+     * Returns a FunctionExpression representing a string concatenation
+     *
+     * @param array $args List of strings or expressions to concatenate
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function concat(array $args, array $types = []): FunctionExpression
+    {
+        return new FunctionExpression('CONCAT', $args, $types, 'string');
+    }
+
+    /**
+     * Returns a FunctionExpression representing a call to SQL COALESCE function.
+     *
+     * @param array $args List of expressions to evaluate as function parameters
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function coalesce(array $args, array $types = []): FunctionExpression
+    {
+        return new FunctionExpression('COALESCE', $args, $types, current($types) ?: 'string');
+    }
+
+    /**
+     * Returns a FunctionExpression representing a SQL CAST.
+     *
+     * The `$type` parameter is a SQL type. The return type for the returned expression
+     * is the default type name. Use `setReturnType()` to update it.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $field Field or expression to cast.
+     * @param string $type The SQL data type
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function cast($field, string $type = ''): FunctionExpression
+    {
+        if (is_array($field)) {
+            deprecationWarning(
+                'Build cast function by FunctionsBuilder::cast(array $args) is deprecated. ' .
+                'Use FunctionsBuilder::cast($field, string $type) instead.'
+            );
+
+            return new FunctionExpression('CAST', $field);
+        }
+
+        if (empty($type)) {
+            throw new InvalidArgumentException('The `$type` in a cast cannot be empty.');
+        }
+
+        $expression = new FunctionExpression('CAST', $this->toLiteralParam($field));
+        $expression->setConjunction(' AS')->add([$type => 'literal']);
+
+        return $expression;
+    }
+
+    /**
+     * Returns a FunctionExpression representing the difference in days between
+     * two dates.
+     *
+     * @param array $args List of expressions to obtain the difference in days.
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function dateDiff(array $args, array $types = []): FunctionExpression
+    {
+        return new FunctionExpression('DATEDIFF', $args, $types, 'integer');
+    }
+
+    /**
+     * Returns the specified date part from the SQL expression.
+     *
+     * @param string $part Part of the date to return.
+     * @param \Cake\Database\ExpressionInterface|string $expression Expression to obtain the date part from.
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function datePart(string $part, $expression, array $types = []): FunctionExpression
+    {
+        return $this->extract($part, $expression, $types);
+    }
+
+    /**
+     * Returns the specified date part from the SQL expression.
+     *
+     * @param string $part Part of the date to return.
+     * @param \Cake\Database\ExpressionInterface|string $expression Expression to obtain the date part from.
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function extract(string $part, $expression, array $types = []): FunctionExpression
+    {
+        $expression = new FunctionExpression('EXTRACT', $this->toLiteralParam($expression), $types, 'integer');
+        $expression->setConjunction(' FROM')->add([$part => 'literal'], [], true);
+
+        return $expression;
+    }
+
+    /**
+     * Add the time unit to the date expression
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression Expression to obtain the date part from.
+     * @param string|int $value Value to be added. Use negative to subtract.
+     * @param string $unit Unit of the value e.g. hour or day.
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function dateAdd($expression, $value, string $unit, array $types = []): FunctionExpression
+    {
+        if (!is_numeric($value)) {
+            $value = 0;
+        }
+        $interval = $value . ' ' . $unit;
+        $expression = new FunctionExpression('DATE_ADD', $this->toLiteralParam($expression), $types, 'datetime');
+        $expression->setConjunction(', INTERVAL')->add([$interval => 'literal']);
+
+        return $expression;
+    }
+
+    /**
+     * Returns a FunctionExpression representing a call to SQL WEEKDAY function.
+     * 1 - Sunday, 2 - Monday, 3 - Tuesday...
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function dayOfWeek($expression, $types = []): FunctionExpression
+    {
+        return new FunctionExpression('DAYOFWEEK', $this->toLiteralParam($expression), $types, 'integer');
+    }
+
+    /**
+     * Returns a FunctionExpression representing a call to SQL WEEKDAY function.
+     * 1 - Sunday, 2 - Monday, 3 - Tuesday...
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression the function argument
+     * @param array $types list of types to bind to the arguments
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function weekday($expression, $types = []): FunctionExpression
+    {
+        return $this->dayOfWeek($expression, $types);
+    }
+
+    /**
+     * Returns a FunctionExpression representing a call that will return the current
+     * date and time. By default it returns both date and time, but you can also
+     * make it generate only the date or only the time.
+     *
+     * @param string $type (datetime|date|time)
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function now(string $type = 'datetime'): FunctionExpression
+    {
+        if ($type === 'datetime') {
+            return new FunctionExpression('NOW', [], [], 'datetime');
+        }
+        if ($type === 'date') {
+            return new FunctionExpression('CURRENT_DATE', [], [], 'date');
+        }
+        if ($type === 'time') {
+            return new FunctionExpression('CURRENT_TIME', [], [], 'time');
+        }
+
+        throw new InvalidArgumentException('Invalid argument for FunctionsBuilder::now(): ' . $type);
+    }
+
+    /**
+     * Returns an AggregateExpression representing call to SQL ROW_NUMBER().
+     *
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function rowNumber(): AggregateExpression
+    {
+        return (new AggregateExpression('ROW_NUMBER', [], [], 'integer'))->over();
+    }
+
+    /**
+     * Returns an AggregateExpression representing call to SQL LAG().
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression The value evaluated at offset
+     * @param int $offset The row offset
+     * @param mixed $default The default value if offset doesn't exist
+     * @param string $type The output type of the lag expression. Defaults to float.
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function lag($expression, int $offset, $default = null, $type = null): AggregateExpression
+    {
+        $params = $this->toLiteralParam($expression) + [$offset => 'literal'];
+        if ($default !== null) {
+            $params[] = $default;
+        }
+
+        $types = [];
+        if ($type !== null) {
+            $types = [$type, 'integer', $type];
+        }
+
+        return (new AggregateExpression('LAG', $params, $types, $type ?? 'float'))->over();
+    }
+
+    /**
+     * Returns an AggregateExpression representing call to SQL LEAD().
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression The value evaluated at offset
+     * @param int $offset The row offset
+     * @param mixed $default The default value if offset doesn't exist
+     * @param string $type The output type of the lead expression. Defaults to float.
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function lead($expression, int $offset, $default = null, $type = null): AggregateExpression
+    {
+        $params = $this->toLiteralParam($expression) + [$offset => 'literal'];
+        if ($default !== null) {
+            $params[] = $default;
+        }
+
+        $types = [];
+        if ($type !== null) {
+            $types = [$type, 'integer', $type];
+        }
+
+        return (new AggregateExpression('LEAD', $params, $types, $type ?? 'float'))->over();
+    }
+
+    /**
+     * Helper method to create arbitrary SQL aggregate function calls.
+     *
+     * @param string $name The SQL aggregate function name
+     * @param array $params Array of arguments to be passed to the function.
+     *     Can be an associative array with the literal value or identifier:
+     *     `['value' => 'literal']` or `['value' => 'identifier']
+     * @param array $types Array of types that match the names used in `$params`:
+     *     `['name' => 'type']`
+     * @param string $return Return type of the entire expression. Defaults to float.
+     * @return \Cake\Database\Expression\AggregateExpression
+     */
+    public function aggregate(string $name, array $params = [], array $types = [], string $return = 'float')
+    {
+        return new AggregateExpression($name, $params, $types, $return);
+    }
+
+    /**
+     * Magic method dispatcher to create custom SQL function calls
+     *
+     * @param string $name the SQL function name to construct
+     * @param array $args list with up to 3 arguments, first one being an array with
+     * parameters for the SQL function, the second one a list of types to bind to those
+     * params, and the third one the return type of the function
+     * @return \Cake\Database\Expression\FunctionExpression
+     */
+    public function __call(string $name, array $args): FunctionExpression
+    {
+        return new FunctionExpression($name, ...$args);
+    }
+
+    /**
+     * Creates function parameter array from expression or string literal.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $expression function argument
+     * @return array<\Cake\Database\ExpressionInterface|string>
+     */
+    protected function toLiteralParam($expression)
+    {
+        if (is_string($expression)) {
+            return [$expression => 'literal'];
+        }
+
+        return [$expression];
+    }
+}
diff --git a/vendor/cakephp/database/IdentifierQuoter.php b/vendor/cakephp/database/IdentifierQuoter.php
new file mode 100755
index 0000000..b3a93e2
--- /dev/null
+++ b/vendor/cakephp/database/IdentifierQuoter.php
@@ -0,0 +1,269 @@
+_driver = $driver;
+    }
+
+    /**
+     * Iterates over each of the clauses in a query looking for identifiers and
+     * quotes them
+     *
+     * @param \Cake\Database\Query $query The query to have its identifiers quoted
+     * @return \Cake\Database\Query
+     */
+    public function quote(Query $query): Query
+    {
+        $binder = $query->getValueBinder();
+        $query->setValueBinder(null);
+
+        if ($query->type() === 'insert') {
+            $this->_quoteInsert($query);
+        } elseif ($query->type() === 'update') {
+            $this->_quoteUpdate($query);
+        } else {
+            $this->_quoteParts($query);
+        }
+
+        $query->traverseExpressions([$this, 'quoteExpression']);
+        $query->setValueBinder($binder);
+
+        return $query;
+    }
+
+    /**
+     * Quotes identifiers inside expression objects
+     *
+     * @param \Cake\Database\ExpressionInterface $expression The expression object to walk and quote.
+     * @return void
+     */
+    public function quoteExpression(ExpressionInterface $expression): void
+    {
+        if ($expression instanceof FieldInterface) {
+            $this->_quoteComparison($expression);
+
+            return;
+        }
+
+        if ($expression instanceof OrderByExpression) {
+            $this->_quoteOrderBy($expression);
+
+            return;
+        }
+
+        if ($expression instanceof IdentifierExpression) {
+            $this->_quoteIdentifierExpression($expression);
+
+            return;
+        }
+    }
+
+    /**
+     * Quotes all identifiers in each of the clauses of a query
+     *
+     * @param \Cake\Database\Query $query The query to quote.
+     * @return void
+     */
+    protected function _quoteParts(Query $query): void
+    {
+        foreach (['distinct', 'select', 'from', 'group'] as $part) {
+            $contents = $query->clause($part);
+
+            if (!is_array($contents)) {
+                continue;
+            }
+
+            $result = $this->_basicQuoter($contents);
+            if (!empty($result)) {
+                $query->{$part}($result, true);
+            }
+        }
+
+        $joins = $query->clause('join');
+        if ($joins) {
+            $joins = $this->_quoteJoins($joins);
+            $query->join($joins, [], true);
+        }
+    }
+
+    /**
+     * A generic identifier quoting function used for various parts of the query
+     *
+     * @param array $part the part of the query to quote
+     * @return array
+     */
+    protected function _basicQuoter(array $part): array
+    {
+        $result = [];
+        foreach ($part as $alias => $value) {
+            $value = !is_string($value) ? $value : $this->_driver->quoteIdentifier($value);
+            $alias = is_numeric($alias) ? $alias : $this->_driver->quoteIdentifier($alias);
+            $result[$alias] = $value;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Quotes both the table and alias for an array of joins as stored in a Query
+     * object
+     *
+     * @param array $joins The joins to quote.
+     * @return array
+     */
+    protected function _quoteJoins(array $joins): array
+    {
+        $result = [];
+        foreach ($joins as $value) {
+            $alias = '';
+            if (!empty($value['alias'])) {
+                $alias = $this->_driver->quoteIdentifier($value['alias']);
+                $value['alias'] = $alias;
+            }
+
+            if (is_string($value['table'])) {
+                $value['table'] = $this->_driver->quoteIdentifier($value['table']);
+            }
+
+            $result[$alias] = $value;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Quotes the table name and columns for an insert query
+     *
+     * @param \Cake\Database\Query $query The insert query to quote.
+     * @return void
+     */
+    protected function _quoteInsert(Query $query): void
+    {
+        $insert = $query->clause('insert');
+        if (!isset($insert[0]) || !isset($insert[1])) {
+            return;
+        }
+        [$table, $columns] = $insert;
+        $table = $this->_driver->quoteIdentifier($table);
+        foreach ($columns as &$column) {
+            if (is_scalar($column)) {
+                $column = $this->_driver->quoteIdentifier((string)$column);
+            }
+        }
+        $query->insert($columns)->into($table);
+    }
+
+    /**
+     * Quotes the table name for an update query
+     *
+     * @param \Cake\Database\Query $query The update query to quote.
+     * @return void
+     */
+    protected function _quoteUpdate(Query $query): void
+    {
+        $table = $query->clause('update')[0];
+
+        if (is_string($table)) {
+            $query->update($this->_driver->quoteIdentifier($table));
+        }
+    }
+
+    /**
+     * Quotes identifiers in expression objects implementing the field interface
+     *
+     * @param \Cake\Database\Expression\FieldInterface $expression The expression to quote.
+     * @return void
+     */
+    protected function _quoteComparison(FieldInterface $expression): void
+    {
+        $field = $expression->getField();
+        if (is_string($field)) {
+            $expression->setField($this->_driver->quoteIdentifier($field));
+        } elseif (is_array($field)) {
+            $quoted = [];
+            foreach ($field as $f) {
+                $quoted[] = $this->_driver->quoteIdentifier($f);
+            }
+            $expression->setField($quoted);
+        } elseif ($field instanceof ExpressionInterface) {
+            $this->quoteExpression($field);
+        }
+    }
+
+    /**
+     * Quotes identifiers in "order by" expression objects
+     *
+     * Strings with spaces are treated as literal expressions
+     * and will not have identifiers quoted.
+     *
+     * @param \Cake\Database\Expression\OrderByExpression $expression The expression to quote.
+     * @return void
+     */
+    protected function _quoteOrderBy(OrderByExpression $expression): void
+    {
+        $expression->iterateParts(function ($part, &$field) {
+            if (is_string($field)) {
+                $field = $this->_driver->quoteIdentifier($field);
+
+                return $part;
+            }
+            if (is_string($part) && strpos($part, ' ') === false) {
+                return $this->_driver->quoteIdentifier($part);
+            }
+
+            return $part;
+        });
+    }
+
+    /**
+     * Quotes identifiers in "order by" expression objects
+     *
+     * @param \Cake\Database\Expression\IdentifierExpression $expression The identifiers to quote.
+     * @return void
+     */
+    protected function _quoteIdentifierExpression(IdentifierExpression $expression): void
+    {
+        $expression->setIdentifier(
+            $this->_driver->quoteIdentifier($expression->getIdentifier())
+        );
+    }
+}
diff --git a/vendor/cakephp/database/LICENSE.txt b/vendor/cakephp/database/LICENSE.txt
new file mode 100755
index 0000000..b938c9e
--- /dev/null
+++ b/vendor/cakephp/database/LICENSE.txt
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+CakePHP(tm) : The Rapid Development PHP Framework (https://cakephp.org)
+Copyright (c) 2005-2020, Cake Software Foundation, Inc. (https://cakefoundation.org)
+
+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.
diff --git a/vendor/cakephp/database/Log/LoggedQuery.php b/vendor/cakephp/database/Log/LoggedQuery.php
new file mode 100755
index 0000000..f029bc9
--- /dev/null
+++ b/vendor/cakephp/database/Log/LoggedQuery.php
@@ -0,0 +1,176 @@
+driver instanceof Sqlserver) {
+                    return $p ? '1' : '0';
+                }
+
+                return $p ? 'TRUE' : 'FALSE';
+            }
+
+            if (is_string($p)) {
+                // Likely binary data like a blob or binary uuid.
+                // pattern matches ascii control chars.
+                if (preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/u', '', $p) !== $p) {
+                    $p = bin2hex($p);
+                }
+
+                $replacements = [
+                    '$' => '\\$',
+                    '\\' => '\\\\\\\\',
+                    "'" => "''",
+                ];
+
+                $p = strtr($p, $replacements);
+
+                return "'$p'";
+            }
+
+            return $p;
+        }, $this->params);
+
+        $keys = [];
+        $limit = is_int(key($params)) ? 1 : -1;
+        foreach ($params as $key => $param) {
+            $keys[] = is_string($key) ? "/:$key\b/" : '/[?]/';
+        }
+
+        return preg_replace($keys, $params, $this->query, $limit);
+    }
+
+    /**
+     * Get the logging context data for a query.
+     *
+     * @return array
+     */
+    public function getContext(): array
+    {
+        return [
+            'numRows' => $this->numRows,
+            'took' => $this->took,
+            'role' => $this->driver ? $this->driver->getRole() : '',
+        ];
+    }
+
+    /**
+     * Returns data that will be serialized as JSON
+     *
+     * @return array
+     */
+    public function jsonSerialize(): array
+    {
+        $error = $this->error;
+        if ($error !== null) {
+            $error = [
+                'class' => get_class($error),
+                'message' => $error->getMessage(),
+                'code' => $error->getCode(),
+            ];
+        }
+
+        return [
+            'query' => $this->query,
+            'numRows' => $this->numRows,
+            'params' => $this->params,
+            'took' => $this->took,
+            'error' => $error,
+        ];
+    }
+
+    /**
+     * Returns the string representation of this logged query
+     *
+     * @return string
+     */
+    public function __toString(): string
+    {
+        $sql = $this->query;
+        if (!empty($this->params)) {
+            $sql = $this->interpolate();
+        }
+
+        return $sql;
+    }
+}
diff --git a/vendor/cakephp/database/Log/LoggingStatement.php b/vendor/cakephp/database/Log/LoggingStatement.php
new file mode 100755
index 0000000..e83f6f6
--- /dev/null
+++ b/vendor/cakephp/database/Log/LoggingStatement.php
@@ -0,0 +1,219 @@
+
+     */
+    protected $_compiledParams = [];
+
+    /**
+     * Query execution start time.
+     *
+     * @var float
+     */
+    protected $startTime = 0.0;
+
+    /**
+     * Logged query
+     *
+     * @var \Cake\Database\Log\LoggedQuery|null
+     */
+    protected $loggedQuery;
+
+    /**
+     * Wrapper for the execute function to calculate time spent
+     * and log the query afterwards.
+     *
+     * @param array|null $params List of values to be bound to query
+     * @return bool True on success, false otherwise
+     * @throws \Exception Re-throws any exception raised during query execution.
+     */
+    public function execute(?array $params = null): bool
+    {
+        $this->startTime = microtime(true);
+
+        $this->loggedQuery = new LoggedQuery();
+        $this->loggedQuery->driver = $this->_driver;
+        $this->loggedQuery->params = $params ?: $this->_compiledParams;
+
+        try {
+            $result = parent::execute($params);
+            $this->loggedQuery->took = (int)round((microtime(true) - $this->startTime) * 1000, 0);
+        } catch (Exception $e) {
+            $this->loggedQuery->error = $e;
+            $this->_log();
+
+            if (Configure::read('Error.convertStatementToDatabaseException', false) === true) {
+                $code = $e->getCode();
+                if (!is_int($code)) {
+                    $code = null;
+                }
+
+                throw new DatabaseException([
+                    'message' => $e->getMessage(),
+                    'queryString' => $this->queryString,
+                ], $code, $e);
+            }
+
+            if (version_compare(PHP_VERSION, '8.2.0', '<')) {
+                deprecationWarning(
+                    '4.4.12 - Having queryString set on exceptions is deprecated.' .
+                    'If you are not using this attribute there is no action to take.' .
+                    'Otherwise, enable Error.convertStatementToDatabaseException.'
+                );
+                /** @psalm-suppress UndefinedPropertyAssignment */
+                $e->queryString = $this->queryString;
+            }
+
+            throw $e;
+        }
+
+        if (preg_match('/^(?!SELECT)/i', $this->queryString)) {
+            $this->rowCount();
+        }
+
+        return $result;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function fetch($type = self::FETCH_TYPE_NUM)
+    {
+        $record = parent::fetch($type);
+
+        if ($this->loggedQuery) {
+            $this->rowCount();
+        }
+
+        return $record;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function fetchAll($type = self::FETCH_TYPE_NUM)
+    {
+        $results = parent::fetchAll($type);
+
+        if ($this->loggedQuery) {
+            $this->rowCount();
+        }
+
+        return $results;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rowCount(): int
+    {
+        $result = parent::rowCount();
+
+        if ($this->loggedQuery) {
+            $this->loggedQuery->numRows = $result;
+            $this->_log();
+        }
+
+        return $result;
+    }
+
+    /**
+     * Copies the logging data to the passed LoggedQuery and sends it
+     * to the logging system.
+     *
+     * @return void
+     */
+    protected function _log(): void
+    {
+        if ($this->loggedQuery === null) {
+            return;
+        }
+
+        $this->loggedQuery->query = $this->queryString;
+        $this->getLogger()->debug((string)$this->loggedQuery, ['query' => $this->loggedQuery]);
+
+        $this->loggedQuery = null;
+    }
+
+    /**
+     * Wrapper for bindValue function to gather each parameter to be later used
+     * in the logger function.
+     *
+     * @param string|int $column Name or param position to be bound
+     * @param mixed $value The value to bind to variable in query
+     * @param string|int|null $type PDO type or name of configured Type class
+     * @return void
+     */
+    public function bindValue($column, $value, $type = 'string'): void
+    {
+        parent::bindValue($column, $value, $type);
+
+        if ($type === null) {
+            $type = 'string';
+        }
+        if (!ctype_digit($type)) {
+            $value = $this->cast($value, $type)[0];
+        }
+        $this->_compiledParams[$column] = $value;
+    }
+
+    /**
+     * Sets a logger
+     *
+     * @param \Psr\Log\LoggerInterface $logger Logger object
+     * @return void
+     */
+    public function setLogger(LoggerInterface $logger): void
+    {
+        $this->_logger = $logger;
+    }
+
+    /**
+     * Gets the logger object
+     *
+     * @return \Psr\Log\LoggerInterface logger instance
+     */
+    public function getLogger(): LoggerInterface
+    {
+        return $this->_logger;
+    }
+}
diff --git a/vendor/cakephp/database/Log/QueryLogger.php b/vendor/cakephp/database/Log/QueryLogger.php
new file mode 100755
index 0000000..e2faadc
--- /dev/null
+++ b/vendor/cakephp/database/Log/QueryLogger.php
@@ -0,0 +1,57 @@
+ $config Configuration array
+     */
+    public function __construct(array $config = [])
+    {
+        $this->_defaultConfig['scopes'] = ['queriesLog'];
+        $this->_defaultConfig['connection'] = '';
+
+        parent::__construct($config);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function log($level, $message, array $context = [])
+    {
+        $context['scope'] = $this->scopes() ?: ['queriesLog'];
+        $context['connection'] = $this->getConfig('connection');
+
+        if ($context['query'] instanceof LoggedQuery) {
+            $context = $context['query']->getContext() + $context;
+            $message = 'connection={connection} role={role} duration={took} rows={numRows} ' . $message;
+        }
+        Log::write('debug', (string)$message, $context);
+    }
+}
diff --git a/vendor/cakephp/database/PostgresCompiler.php b/vendor/cakephp/database/PostgresCompiler.php
new file mode 100755
index 0000000..7beae8b
--- /dev/null
+++ b/vendor/cakephp/database/PostgresCompiler.php
@@ -0,0 +1,93 @@
+ 'DELETE',
+        'where' => ' WHERE %s',
+        'group' => ' GROUP BY %s',
+        'order' => ' %s',
+        'limit' => ' LIMIT %s',
+        'offset' => ' OFFSET %s',
+        'epilog' => ' %s',
+    ];
+
+    /**
+     * Helper function used to build the string representation of a HAVING clause,
+     * it constructs the field list taking care of aliasing and
+     * converting expression objects to string.
+     *
+     * @param array $parts list of fields to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildHavingPart($parts, $query, $binder)
+    {
+        $selectParts = $query->clause('select');
+
+        foreach ($selectParts as $selectKey => $selectPart) {
+            if (!$selectPart instanceof FunctionExpression) {
+                continue;
+            }
+            foreach ($parts as $k => $p) {
+                if (!is_string($p)) {
+                    continue;
+                }
+                preg_match_all(
+                    '/\b' . trim($selectKey, '"') . '\b/i',
+                    $p,
+                    $matches
+                );
+
+                if (empty($matches[0])) {
+                    continue;
+                }
+
+                $parts[$k] = preg_replace(
+                    ['/"/', '/\b' . trim($selectKey, '"') . '\b/i'],
+                    ['', $selectPart->sql($binder)],
+                    $p
+                );
+            }
+        }
+
+        return sprintf(' HAVING %s', implode(', ', $parts));
+    }
+}
diff --git a/vendor/cakephp/database/Query.php b/vendor/cakephp/database/Query.php
new file mode 100755
index 0000000..594b8a7
--- /dev/null
+++ b/vendor/cakephp/database/Query.php
@@ -0,0 +1,2516 @@
+
+     */
+    protected $_parts = [
+        'delete' => true,
+        'update' => [],
+        'set' => [],
+        'insert' => [],
+        'values' => [],
+        'with' => [],
+        'select' => [],
+        'distinct' => false,
+        'modifier' => [],
+        'from' => [],
+        'join' => [],
+        'where' => null,
+        'group' => [],
+        'having' => null,
+        'window' => [],
+        'order' => null,
+        'limit' => null,
+        'offset' => null,
+        'union' => [],
+        'epilog' => null,
+    ];
+
+    /**
+     * The list of query clauses to traverse for generating a SELECT statement
+     *
+     * @var array
+     * @deprecated 4.4.3 This property is unused.
+     */
+    protected $_selectParts = [
+        'with', 'select', 'from', 'join', 'where', 'group', 'having', 'order', 'limit',
+        'offset', 'union', 'epilog',
+    ];
+
+    /**
+     * The list of query clauses to traverse for generating an UPDATE statement
+     *
+     * @var array
+     * @deprecated 4.4.3 This property is unused.
+     */
+    protected $_updateParts = ['with', 'update', 'set', 'where', 'epilog'];
+
+    /**
+     * The list of query clauses to traverse for generating a DELETE statement
+     *
+     * @var array
+     * @deprecated 4.4.3 This property is unused.
+     */
+    protected $_deleteParts = ['with', 'delete', 'modifier', 'from', 'where', 'epilog'];
+
+    /**
+     * The list of query clauses to traverse for generating an INSERT statement
+     *
+     * @var array
+     * @deprecated 4.4.3 This property is unused.
+     */
+    protected $_insertParts = ['with', 'insert', 'values', 'epilog'];
+
+    /**
+     * Indicates whether internal state of this query was changed, this is used to
+     * discard internal cached objects such as the transformed query or the reference
+     * to the executed statement.
+     *
+     * @var bool
+     */
+    protected $_dirty = false;
+
+    /**
+     * A list of callback functions to be called to alter each row from resulting
+     * statement upon retrieval. Each one of the callback function will receive
+     * the row array as first argument.
+     *
+     * @var array
+     */
+    protected $_resultDecorators = [];
+
+    /**
+     * Statement object resulting from executing this query.
+     *
+     * @var \Cake\Database\StatementInterface|null
+     */
+    protected $_iterator;
+
+    /**
+     * The object responsible for generating query placeholders and temporarily store values
+     * associated to each of those.
+     *
+     * @var \Cake\Database\ValueBinder|null
+     */
+    protected $_valueBinder;
+
+    /**
+     * Instance of functions builder object used for generating arbitrary SQL functions.
+     *
+     * @var \Cake\Database\FunctionsBuilder|null
+     */
+    protected $_functionsBuilder;
+
+    /**
+     * Boolean for tracking whether buffered results
+     * are enabled.
+     *
+     * @var bool
+     * @deprecated 4.5.0 Results will always be buffered in 5.0.
+     */
+    protected $_useBufferedResults = true;
+
+    /**
+     * The Type map for fields in the select clause
+     *
+     * @var \Cake\Database\TypeMap|null
+     */
+    protected $_selectTypeMap;
+
+    /**
+     * Tracking flag to disable casting
+     *
+     * @var bool
+     */
+    protected $typeCastEnabled = true;
+
+    /**
+     * Constructor.
+     *
+     * @param \Cake\Database\Connection $connection The connection
+     * object to be used for transforming and executing this query
+     */
+    public function __construct(Connection $connection)
+    {
+        $this->setConnection($connection);
+    }
+
+    /**
+     * Sets the connection instance to be used for executing and transforming this query.
+     *
+     * @param \Cake\Database\Connection $connection Connection instance
+     * @return $this
+     */
+    public function setConnection(Connection $connection)
+    {
+        $this->_dirty();
+        $this->_connection = $connection;
+
+        return $this;
+    }
+
+    /**
+     * Gets the connection instance to be used for executing and transforming this query.
+     *
+     * @return \Cake\Database\Connection
+     */
+    public function getConnection(): Connection
+    {
+        return $this->_connection;
+    }
+
+    /**
+     * Returns the connection role ('read' or 'write')
+     *
+     * @return string
+     */
+    public function getConnectionRole(): string
+    {
+        return $this->connectionRole;
+    }
+
+    /**
+     * Compiles the SQL representation of this query and executes it using the
+     * configured connection object. Returns the resulting statement object.
+     *
+     * Executing a query internally executes several steps, the first one is
+     * letting the connection transform this object to fit its particular dialect,
+     * this might result in generating a different Query object that will be the one
+     * to actually be executed. Immediately after, literal values are passed to the
+     * connection so they are bound to the query in a safe way. Finally, the resulting
+     * statement is decorated with custom objects to execute callbacks for each row
+     * retrieved if necessary.
+     *
+     * Resulting statement is traversable, so it can be used in any loop as you would
+     * with an array.
+     *
+     * This method can be overridden in query subclasses to decorate behavior
+     * around query execution.
+     *
+     * @return \Cake\Database\StatementInterface
+     */
+    public function execute(): StatementInterface
+    {
+        $statement = $this->_connection->run($this);
+        $this->_iterator = $this->_decorateStatement($statement);
+        $this->_dirty = false;
+
+        return $this->_iterator;
+    }
+
+    /**
+     * Executes the SQL of this query and immediately closes the statement before returning the row count of records
+     * changed.
+     *
+     * This method can be used with UPDATE and DELETE queries, but is not recommended for SELECT queries and is not
+     * used to count records.
+     *
+     * ## Example
+     *
+     * ```
+     * $rowCount = $query->update('articles')
+     *                 ->set(['published'=>true])
+     *                 ->where(['published'=>false])
+     *                 ->rowCountAndClose();
+     * ```
+     *
+     * The above example will change the published column to true for all false records, and return the number of
+     * records that were updated.
+     *
+     * @return int
+     */
+    public function rowCountAndClose(): int
+    {
+        $statement = $this->execute();
+        try {
+            return $statement->rowCount();
+        } finally {
+            $statement->closeCursor();
+        }
+    }
+
+    /**
+     * Returns the SQL representation of this object.
+     *
+     * This function will compile this query to make it compatible
+     * with the SQL dialect that is used by the connection, This process might
+     * add, remove or alter any query part or internal expression to make it
+     * executable in the target platform.
+     *
+     * The resulting query may have placeholders that will be replaced with the actual
+     * values when the query is executed, hence it is most suitable to use with
+     * prepared statements.
+     *
+     * @param \Cake\Database\ValueBinder|null $binder Value binder that generates parameter placeholders
+     * @return string
+     */
+    public function sql(?ValueBinder $binder = null): string
+    {
+        if (!$binder) {
+            $binder = $this->getValueBinder();
+            $binder->resetCount();
+        }
+        $connection = $this->getConnection();
+
+        return $connection->getDriver($this->getConnectionRole())->compileQuery($this, $binder)[1];
+    }
+
+    /**
+     * Will iterate over every specified part. Traversing functions can aggregate
+     * results using variables in the closure or instance variables. This function
+     * is commonly used as a way for traversing all query parts that
+     * are going to be used for constructing a query.
+     *
+     * The callback will receive 2 parameters, the first one is the value of the query
+     * part that is being iterated and the second the name of such part.
+     *
+     * ### Example
+     * ```
+     * $query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
+     *     if ($clause === 'select') {
+     *         var_dump($value);
+     *     }
+     * });
+     * ```
+     *
+     * @param callable $callback A function or callable to be executed for each part
+     * @return $this
+     */
+    public function traverse($callback)
+    {
+        foreach ($this->_parts as $name => $part) {
+            $callback($part, $name);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Will iterate over the provided parts.
+     *
+     * Traversing functions can aggregate results using variables in the closure
+     * or instance variables. This method can be used to traverse a subset of
+     * query parts in order to render a SQL query.
+     *
+     * The callback will receive 2 parameters, the first one is the value of the query
+     * part that is being iterated and the second the name of such part.
+     *
+     * ### Example
+     *
+     * ```
+     * $query->select(['title'])->from('articles')->traverse(function ($value, $clause) {
+     *     if ($clause === 'select') {
+     *         var_dump($value);
+     *     }
+     * }, ['select', 'from']);
+     * ```
+     *
+     * @param callable $visitor A function or callable to be executed for each part
+     * @param array $parts The list of query parts to traverse
+     * @return $this
+     */
+    public function traverseParts(callable $visitor, array $parts)
+    {
+        foreach ($parts as $name) {
+            $visitor($this->_parts[$name], $name);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Adds a new common table expression (CTE) to the query.
+     *
+     * ### Examples:
+     *
+     * Common table expressions can either be passed as preconstructed expression
+     * objects:
+     *
+     * ```
+     * $cte = new \Cake\Database\Expression\CommonTableExpression(
+     *     'cte',
+     *     $connection
+     *         ->newQuery()
+     *         ->select('*')
+     *         ->from('articles')
+     * );
+     *
+     * $query->with($cte);
+     * ```
+     *
+     * or returned from a closure, which will receive a new common table expression
+     * object as the first argument, and a new blank query object as
+     * the second argument:
+     *
+     * ```
+     * $query->with(function (
+     *     \Cake\Database\Expression\CommonTableExpression $cte,
+     *     \Cake\Database\Query $query
+     *  ) {
+     *     $cteQuery = $query
+     *         ->select('*')
+     *         ->from('articles');
+     *
+     *     return $cte
+     *         ->name('cte')
+     *         ->query($cteQuery);
+     * });
+     * ```
+     *
+     * @param \Cake\Database\Expression\CommonTableExpression|\Closure $cte The CTE to add.
+     * @param bool $overwrite Whether to reset the list of CTEs.
+     * @return $this
+     */
+    public function with($cte, bool $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['with'] = [];
+        }
+
+        if ($cte instanceof Closure) {
+            $query = $this->getConnection()->selectQuery();
+            $cte = $cte(new CommonTableExpression(), $query);
+            if (!($cte instanceof CommonTableExpression)) {
+                throw new RuntimeException(
+                    'You must return a `CommonTableExpression` from a Closure passed to `with()`.'
+                );
+            }
+        }
+
+        $this->_parts['with'][] = $cte;
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds new fields to be returned by a `SELECT` statement when this query is
+     * executed. Fields can be passed as an array of strings, array of expression
+     * objects, a single expression or a single string.
+     *
+     * If an array is passed, keys will be used to alias fields using the value as the
+     * real field to be aliased. It is possible to alias strings, Expression objects or
+     * even other Query objects.
+     *
+     * If a callable function is passed, the returning array of the function will
+     * be used as the list of fields.
+     *
+     * By default this function will append any passed argument to the list of fields
+     * to be selected, unless the second argument is set to true.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $query->select(['id', 'title']); // Produces SELECT id, title
+     * $query->select(['author' => 'author_id']); // Appends author: SELECT id, title, author_id as author
+     * $query->select('id', true); // Resets the list: SELECT id
+     * $query->select(['total' => $countQuery]); // SELECT id, (SELECT ...) AS total
+     * $query->select(function ($query) {
+     *     return ['article_id', 'total' => $query->count('*')];
+     * })
+     * ```
+     *
+     * By default no fields are selected, if you have an instance of `Cake\ORM\Query` and try to append
+     * fields you should also call `Cake\ORM\Query::enableAutoFields()` to select the default fields
+     * from the table.
+     *
+     * @param \Cake\Database\ExpressionInterface|callable|array|string $fields fields to be added to the list.
+     * @param bool $overwrite whether to reset fields with passed list or not
+     * @return $this
+     */
+    public function select($fields = [], bool $overwrite = false)
+    {
+        if (!is_string($fields) && is_callable($fields)) {
+            $fields = $fields($this);
+        }
+
+        if (!is_array($fields)) {
+            $fields = [$fields];
+        }
+
+        if ($overwrite) {
+            $this->_parts['select'] = $fields;
+        } else {
+            $this->_parts['select'] = array_merge($this->_parts['select'], $fields);
+        }
+
+        $this->_dirty();
+        $this->_type = 'select';
+
+        return $this;
+    }
+
+    /**
+     * Adds a `DISTINCT` clause to the query to remove duplicates from the result set.
+     * This clause can only be used for select statements.
+     *
+     * If you wish to filter duplicates based of those rows sharing a particular field
+     * or set of fields, you may pass an array of fields to filter on. Beware that
+     * this option might not be fully supported in all database systems.
+     *
+     * ### Examples:
+     *
+     * ```
+     * // Filters products with the same name and city
+     * $query->select(['name', 'city'])->from('products')->distinct();
+     *
+     * // Filters products in the same city
+     * $query->distinct(['city']);
+     * $query->distinct('city');
+     *
+     * // Filter products with the same name
+     * $query->distinct(['name'], true);
+     * $query->distinct('name', true);
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string|bool $on Enable/disable distinct class
+     * or list of fields to be filtered on
+     * @param bool $overwrite whether to reset fields with passed list or not
+     * @return $this
+     */
+    public function distinct($on = [], $overwrite = false)
+    {
+        if ($on === []) {
+            $on = true;
+        } elseif (is_string($on)) {
+            $on = [$on];
+        }
+
+        if (is_array($on)) {
+            $merge = [];
+            if (is_array($this->_parts['distinct'])) {
+                $merge = $this->_parts['distinct'];
+            }
+            $on = $overwrite ? array_values($on) : array_merge($merge, array_values($on));
+        }
+
+        $this->_parts['distinct'] = $on;
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds a single or multiple `SELECT` modifiers to be used in the `SELECT`.
+     *
+     * By default this function will append any passed argument to the list of modifiers
+     * to be applied, unless the second argument is set to true.
+     *
+     * ### Example:
+     *
+     * ```
+     * // Ignore cache query in MySQL
+     * $query->select(['name', 'city'])->from('products')->modifier('SQL_NO_CACHE');
+     * // It will produce the SQL: SELECT SQL_NO_CACHE name, city FROM products
+     *
+     * // Or with multiple modifiers
+     * $query->select(['name', 'city'])->from('products')->modifier(['HIGH_PRIORITY', 'SQL_NO_CACHE']);
+     * // It will produce the SQL: SELECT HIGH_PRIORITY SQL_NO_CACHE name, city FROM products
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $modifiers modifiers to be applied to the query
+     * @param bool $overwrite whether to reset order with field list or not
+     * @return $this
+     */
+    public function modifier($modifiers, $overwrite = false)
+    {
+        $this->_dirty();
+        if ($overwrite) {
+            $this->_parts['modifier'] = [];
+        }
+        if (!is_array($modifiers)) {
+            $modifiers = [$modifiers];
+        }
+        $this->_parts['modifier'] = array_merge($this->_parts['modifier'], $modifiers);
+
+        return $this;
+    }
+
+    /**
+     * Adds a single or multiple tables to be used in the FROM clause for this query.
+     * Tables can be passed as an array of strings, array of expression
+     * objects, a single expression or a single string.
+     *
+     * If an array is passed, keys will be used to alias tables using the value as the
+     * real field to be aliased. It is possible to alias strings, ExpressionInterface objects or
+     * even other Query objects.
+     *
+     * By default this function will append any passed argument to the list of tables
+     * to be selected from, unless the second argument is set to true.
+     *
+     * This method can be used for select, update and delete statements.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $query->from(['p' => 'posts']); // Produces FROM posts p
+     * $query->from('authors'); // Appends authors: FROM posts p, authors
+     * $query->from(['products'], true); // Resets the list: FROM products
+     * $query->from(['sub' => $countQuery]); // FROM (SELECT ...) sub
+     * ```
+     *
+     * @param array|string $tables tables to be added to the list. This argument, can be
+     *  passed as an array of strings, array of expression objects, or a single string. See
+     *  the examples above for the valid call types.
+     * @param bool $overwrite whether to reset tables with passed list or not
+     * @return $this
+     */
+    public function from($tables = [], $overwrite = false)
+    {
+        $tables = (array)$tables;
+
+        if ($overwrite) {
+            $this->_parts['from'] = $tables;
+        } else {
+            $this->_parts['from'] = array_merge($this->_parts['from'], $tables);
+        }
+
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds a single or multiple tables to be used as JOIN clauses to this query.
+     * Tables can be passed as an array of strings, an array describing the
+     * join parts, an array with multiple join descriptions, or a single string.
+     *
+     * By default this function will append any passed argument to the list of tables
+     * to be joined, unless the third argument is set to true.
+     *
+     * When no join type is specified an `INNER JOIN` is used by default:
+     * `$query->join(['authors'])` will produce `INNER JOIN authors ON 1 = 1`
+     *
+     * It is also possible to alias joins using the array key:
+     * `$query->join(['a' => 'authors'])` will produce `INNER JOIN authors a ON 1 = 1`
+     *
+     * A join can be fully described and aliased using the array notation:
+     *
+     * ```
+     * $query->join([
+     *     'a' => [
+     *         'table' => 'authors',
+     *         'type' => 'LEFT',
+     *         'conditions' => 'a.id = b.author_id'
+     *     ]
+     * ]);
+     * // Produces LEFT JOIN authors a ON a.id = b.author_id
+     * ```
+     *
+     * You can even specify multiple joins in an array, including the full description:
+     *
+     * ```
+     * $query->join([
+     *     'a' => [
+     *         'table' => 'authors',
+     *         'type' => 'LEFT',
+     *         'conditions' => 'a.id = b.author_id'
+     *     ],
+     *     'p' => [
+     *         'table' => 'publishers',
+     *         'type' => 'INNER',
+     *         'conditions' => 'p.id = b.publisher_id AND p.name = "Cake Software Foundation"'
+     *     ]
+     * ]);
+     * // LEFT JOIN authors a ON a.id = b.author_id
+     * // INNER JOIN publishers p ON p.id = b.publisher_id AND p.name = "Cake Software Foundation"
+     * ```
+     *
+     * ### Using conditions and types
+     *
+     * Conditions can be expressed, as in the examples above, using a string for comparing
+     * columns, or string with already quoted literal values. Additionally it is
+     * possible to use conditions expressed in arrays or expression objects.
+     *
+     * When using arrays for expressing conditions, it is often desirable to convert
+     * the literal values to the correct database representation. This is achieved
+     * using the second parameter of this function.
+     *
+     * ```
+     * $query->join(['a' => [
+     *     'table' => 'articles',
+     *     'conditions' => [
+     *         'a.posted >=' => new DateTime('-3 days'),
+     *         'a.published' => true,
+     *         'a.author_id = authors.id'
+     *     ]
+     * ]], ['a.posted' => 'datetime', 'a.published' => 'boolean'])
+     * ```
+     *
+     * ### Overwriting joins
+     *
+     * When creating aliased joins using the array notation, you can override
+     * previous join definitions by using the same alias in consequent
+     * calls to this function or you can replace all previously defined joins
+     * with another list if the third parameter for this function is set to true.
+     *
+     * ```
+     * $query->join(['alias' => 'table']); // joins table with as alias
+     * $query->join(['alias' => 'another_table']); // joins another_table with as alias
+     * $query->join(['something' => 'different_table'], [], true); // resets joins list
+     * ```
+     *
+     * @param array|string $tables list of tables to be joined in the query
+     * @param array $types Associative array of type names used to bind values to query
+     * @param bool $overwrite whether to reset joins with passed list or not
+     * @see \Cake\Database\TypeFactory
+     * @return $this
+     */
+    public function join($tables, $types = [], $overwrite = false)
+    {
+        if (is_string($tables) || isset($tables['table'])) {
+            $tables = [$tables];
+        }
+
+        $joins = [];
+        $i = count($this->_parts['join']);
+        foreach ($tables as $alias => $t) {
+            if (!is_array($t)) {
+                $t = ['table' => $t, 'conditions' => $this->newExpr()];
+            }
+
+            if (!is_string($t['conditions']) && is_callable($t['conditions'])) {
+                $t['conditions'] = $t['conditions']($this->newExpr(), $this);
+            }
+
+            if (!($t['conditions'] instanceof ExpressionInterface)) {
+                $t['conditions'] = $this->newExpr()->add($t['conditions'], $types);
+            }
+            $alias = is_string($alias) ? $alias : null;
+            $joins[$alias ?: $i++] = $t + ['type' => static::JOIN_TYPE_INNER, 'alias' => $alias];
+        }
+
+        if ($overwrite) {
+            $this->_parts['join'] = $joins;
+        } else {
+            $this->_parts['join'] = array_merge($this->_parts['join'], $joins);
+        }
+
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Remove a join if it has been defined.
+     *
+     * Useful when you are redefining joins or want to re-order
+     * the join clauses.
+     *
+     * @param string $name The alias/name of the join to remove.
+     * @return $this
+     */
+    public function removeJoin(string $name)
+    {
+        unset($this->_parts['join'][$name]);
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds a single `LEFT JOIN` clause to the query.
+     *
+     * This is a shorthand method for building joins via `join()`.
+     *
+     * The table name can be passed as a string, or as an array in case it needs to
+     * be aliased:
+     *
+     * ```
+     * // LEFT JOIN authors ON authors.id = posts.author_id
+     * $query->leftJoin('authors', 'authors.id = posts.author_id');
+     *
+     * // LEFT JOIN authors a ON a.id = posts.author_id
+     * $query->leftJoin(['a' => 'authors'], 'a.id = posts.author_id');
+     * ```
+     *
+     * Conditions can be passed as strings, arrays, or expression objects. When
+     * using arrays it is possible to combine them with the `$types` parameter
+     * in order to define how to convert the values:
+     *
+     * ```
+     * $query->leftJoin(['a' => 'articles'], [
+     *      'a.posted >=' => new DateTime('-3 days'),
+     *      'a.published' => true,
+     *      'a.author_id = authors.id'
+     * ], ['a.posted' => 'datetime', 'a.published' => 'boolean']);
+     * ```
+     *
+     * See `join()` for further details on conditions and types.
+     *
+     * @param array|string $table The table to join with
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions The conditions
+     * to use for joining.
+     * @param array $types a list of types associated to the conditions used for converting
+     * values to the corresponding database representation.
+     * @return $this
+     */
+    public function leftJoin($table, $conditions = [], $types = [])
+    {
+        $this->join($this->_makeJoin($table, $conditions, static::JOIN_TYPE_LEFT), $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds a single `RIGHT JOIN` clause to the query.
+     *
+     * This is a shorthand method for building joins via `join()`.
+     *
+     * The arguments of this method are identical to the `leftJoin()` shorthand, please refer
+     * to that methods description for further details.
+     *
+     * @param array|string $table The table to join with
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions The conditions
+     * to use for joining.
+     * @param array $types a list of types associated to the conditions used for converting
+     * values to the corresponding database representation.
+     * @return $this
+     */
+    public function rightJoin($table, $conditions = [], $types = [])
+    {
+        $this->join($this->_makeJoin($table, $conditions, static::JOIN_TYPE_RIGHT), $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds a single `INNER JOIN` clause to the query.
+     *
+     * This is a shorthand method for building joins via `join()`.
+     *
+     * The arguments of this method are identical to the `leftJoin()` shorthand, please refer
+     * to that method's description for further details.
+     *
+     * @param array|string $table The table to join with
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions The conditions
+     * to use for joining.
+     * @param array $types a list of types associated to the conditions used for converting
+     * values to the corresponding database representation.
+     * @return $this
+     */
+    public function innerJoin($table, $conditions = [], $types = [])
+    {
+        $this->join($this->_makeJoin($table, $conditions, static::JOIN_TYPE_INNER), $types);
+
+        return $this;
+    }
+
+    /**
+     * Returns an array that can be passed to the join method describing a single join clause
+     *
+     * @param array|string $table The table to join with
+     * @param \Cake\Database\ExpressionInterface|array|string $conditions The conditions
+     * to use for joining.
+     * @param string $type the join type to use
+     * @return array
+     */
+    protected function _makeJoin($table, $conditions, $type): array
+    {
+        $alias = $table;
+
+        if (is_array($table)) {
+            $alias = key($table);
+            $table = current($table);
+        }
+
+        /**
+         * @psalm-suppress InvalidArrayOffset
+         */
+        return [
+            $alias => [
+                'table' => $table,
+                'conditions' => $conditions,
+                'type' => $type,
+            ],
+        ];
+    }
+
+    /**
+     * Adds a condition or set of conditions to be used in the WHERE clause for this
+     * query. Conditions can be expressed as an array of fields as keys with
+     * comparison operators in it, the values for the array will be used for comparing
+     * the field to such literal. Finally, conditions can be expressed as a single
+     * string or an array of strings.
+     *
+     * When using arrays, each entry will be joined to the rest of the conditions using
+     * an `AND` operator. Consecutive calls to this function will also join the new
+     * conditions specified using the AND operator. Additionally, values can be
+     * expressed using expression objects which can include other query objects.
+     *
+     * Any conditions created with this methods can be used with any `SELECT`, `UPDATE`
+     * and `DELETE` type of queries.
+     *
+     * ### Conditions using operators:
+     *
+     * ```
+     * $query->where([
+     *     'posted >=' => new DateTime('3 days ago'),
+     *     'title LIKE' => 'Hello W%',
+     *     'author_id' => 1,
+     * ], ['posted' => 'datetime']);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1`
+     *
+     * Second parameter is used to specify what type is expected for each passed
+     * key. Valid types can be used from the mapped with Database\Type class.
+     *
+     * ### Nesting conditions with conjunctions:
+     *
+     * ```
+     * $query->where([
+     *     'author_id !=' => 1,
+     *     'OR' => ['published' => true, 'posted <' => new DateTime('now')],
+     *     'NOT' => ['title' => 'Hello']
+     * ], ['published' => boolean, 'posted' => 'datetime']
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')`
+     *
+     * You can nest conditions using conjunctions as much as you like. Sometimes, you
+     * may want to define 2 different options for the same key, in that case, you can
+     * wrap each condition inside a new array:
+     *
+     * `$query->where(['OR' => [['published' => false], ['published' => true]])`
+     *
+     * Would result in:
+     *
+     * `WHERE (published = false) OR (published = true)`
+     *
+     * Keep in mind that every time you call where() with the third param set to false
+     * (default), it will join the passed conditions to the previous stored list using
+     * the `AND` operator. Also, using the same array key twice in consecutive calls to
+     * this method will not override the previous value.
+     *
+     * ### Using expressions objects:
+     *
+     * ```
+     * $exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
+     * $query->where(['published' => true], ['published' => 'boolean'])->where($exp);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE (id != 100 OR author_id != 1) AND published = 1`
+     *
+     * Other Query objects that be used as conditions for any field.
+     *
+     * ### Adding conditions in multiple steps:
+     *
+     * You can use callable functions to construct complex expressions, functions
+     * receive as first argument a new QueryExpression object and this query instance
+     * as second argument. Functions must return an expression object, that will be
+     * added the list of conditions for the query using the `AND` operator.
+     *
+     * ```
+     * $query
+     *   ->where(['title !=' => 'Hello World'])
+     *   ->where(function ($exp, $query) {
+     *     $or = $exp->or(['id' => 1]);
+     *     $and = $exp->and(['id >' => 2, 'id <' => 10]);
+     *    return $or->add($and);
+     *   });
+     * ```
+     *
+     * * The previous example produces:
+     *
+     * `WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))`
+     *
+     * ### Conditions as strings:
+     *
+     * ```
+     * $query->where(['articles.author_id = authors.id', 'modified IS NULL']);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE articles.author_id = authors.id AND modified IS NULL`
+     *
+     * Please note that when using the array notation or the expression objects, all
+     * *values* will be correctly quoted and transformed to the correspondent database
+     * data type automatically for you, thus securing your application from SQL injections.
+     * The keys however, are not treated as unsafe input, and should be validated/sanitized.
+     *
+     * If you use string conditions make sure that your values are correctly quoted.
+     * The safest thing you can do is to never use string conditions.
+     *
+     * ### Using null-able values
+     *
+     * When using values that can be null you can use the 'IS' keyword to let the ORM generate the correct SQL based on the value's type
+     *
+     * ```
+     * $query->where([
+     *     'posted >=' => new DateTime('3 days ago'),
+     *     'category_id IS' => $category,
+     * ]);
+     * ```
+     *
+     * If $category is `null` - it will actually convert that into `category_id IS NULL` - if it's `4` it will convert it into `category_id = 4`
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string|null $conditions The conditions to filter on.
+     * @param array $types Associative array of type names used to bind values to query
+     * @param bool $overwrite whether to reset conditions with passed list or not
+     * @see \Cake\Database\TypeFactory
+     * @see \Cake\Database\Expression\QueryExpression
+     * @return $this
+     */
+    public function where($conditions = null, array $types = [], bool $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['where'] = $this->newExpr();
+        }
+        $this->_conjugate('where', $conditions, 'AND', $types);
+
+        return $this;
+    }
+
+    /**
+     * Convenience method that adds a NOT NULL condition to the query
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $fields A single field or expressions or a list of them
+     *  that should be not null.
+     * @return $this
+     */
+    public function whereNotNull($fields)
+    {
+        if (!is_array($fields)) {
+            $fields = [$fields];
+        }
+
+        $exp = $this->newExpr();
+
+        foreach ($fields as $field) {
+            $exp->isNotNull($field);
+        }
+
+        return $this->where($exp);
+    }
+
+    /**
+     * Convenience method that adds a IS NULL condition to the query
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $fields A single field or expressions or a list of them
+     *   that should be null.
+     * @return $this
+     */
+    public function whereNull($fields)
+    {
+        if (!is_array($fields)) {
+            $fields = [$fields];
+        }
+
+        $exp = $this->newExpr();
+
+        foreach ($fields as $field) {
+            $exp->isNull($field);
+        }
+
+        return $this->where($exp);
+    }
+
+    /**
+     * Adds an IN condition or set of conditions to be used in the WHERE clause for this
+     * query.
+     *
+     * This method does allow empty inputs in contrast to where() if you set
+     * 'allowEmpty' to true.
+     * Be careful about using it without proper sanity checks.
+     *
+     * Options:
+     *
+     * - `types` - Associative array of type names used to bind values to query
+     * - `allowEmpty` - Allow empty array.
+     *
+     * @param string $field Field
+     * @param array $values Array of values
+     * @param array $options Options
+     * @return $this
+     */
+    public function whereInList(string $field, array $values, array $options = [])
+    {
+        $options += [
+            'types' => [],
+            'allowEmpty' => false,
+        ];
+
+        if ($options['allowEmpty'] && !$values) {
+            return $this->where('1=0');
+        }
+
+        return $this->where([$field . ' IN' => $values], $options['types']);
+    }
+
+    /**
+     * Adds a NOT IN condition or set of conditions to be used in the WHERE clause for this
+     * query.
+     *
+     * This method does allow empty inputs in contrast to where() if you set
+     * 'allowEmpty' to true.
+     * Be careful about using it without proper sanity checks.
+     *
+     * @param string $field Field
+     * @param array $values Array of values
+     * @param array $options Options
+     * @return $this
+     */
+    public function whereNotInList(string $field, array $values, array $options = [])
+    {
+        $options += [
+            'types' => [],
+            'allowEmpty' => false,
+        ];
+
+        if ($options['allowEmpty'] && !$values) {
+            return $this->where([$field . ' IS NOT' => null]);
+        }
+
+        return $this->where([$field . ' NOT IN' => $values], $options['types']);
+    }
+
+    /**
+     * Adds a NOT IN condition or set of conditions to be used in the WHERE clause for this
+     * query. This also allows the field to be null with a IS NULL condition since the null
+     * value would cause the NOT IN condition to always fail.
+     *
+     * This method does allow empty inputs in contrast to where() if you set
+     * 'allowEmpty' to true.
+     * Be careful about using it without proper sanity checks.
+     *
+     * @param string $field Field
+     * @param array $values Array of values
+     * @param array $options Options
+     * @return $this
+     */
+    public function whereNotInListOrNull(string $field, array $values, array $options = [])
+    {
+        $options += [
+            'types' => [],
+            'allowEmpty' => false,
+        ];
+
+        if ($options['allowEmpty'] && !$values) {
+            return $this->where([$field . ' IS NOT' => null]);
+        }
+
+        return $this->where(
+            [
+                'OR' => [$field . ' NOT IN' => $values, $field . ' IS' => null],
+            ],
+            $options['types']
+        );
+    }
+
+    /**
+     * Connects any previously defined set of conditions to the provided list
+     * using the AND operator. This function accepts the conditions list in the same
+     * format as the method `where` does, hence you can use arrays, expression objects
+     * callback functions or strings.
+     *
+     * It is important to notice that when calling this function, any previous set
+     * of conditions defined for this query will be treated as a single argument for
+     * the AND operator. This function will not only operate the most recently defined
+     * condition, but all the conditions as a whole.
+     *
+     * When using an array for defining conditions, creating constraints form each
+     * array entry will use the same logic as with the `where()` function. This means
+     * that each array entry will be joined to the other using the AND operator, unless
+     * you nest the conditions in the array using other operator.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $query->where(['title' => 'Hello World')->andWhere(['author_id' => 1]);
+     * ```
+     *
+     * Will produce:
+     *
+     * `WHERE title = 'Hello World' AND author_id = 1`
+     *
+     * ```
+     * $query
+     *   ->where(['OR' => ['published' => false, 'published is NULL']])
+     *   ->andWhere(['author_id' => 1, 'comments_count >' => 10])
+     * ```
+     *
+     * Produces:
+     *
+     * `WHERE (published = 0 OR published IS NULL) AND author_id = 1 AND comments_count > 10`
+     *
+     * ```
+     * $query
+     *   ->where(['title' => 'Foo'])
+     *   ->andWhere(function ($exp, $query) {
+     *     return $exp
+     *       ->or(['author_id' => 1])
+     *       ->add(['author_id' => 2]);
+     *   });
+     * ```
+     *
+     * Generates the following conditions:
+     *
+     * `WHERE (title = 'Foo') AND (author_id = 1 OR author_id = 2)`
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions The conditions to add with AND.
+     * @param array $types Associative array of type names used to bind values to query
+     * @see \Cake\Database\Query::where()
+     * @see \Cake\Database\TypeFactory
+     * @return $this
+     */
+    public function andWhere($conditions, array $types = [])
+    {
+        $this->_conjugate('where', $conditions, 'AND', $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds a single or multiple fields to be used in the ORDER clause for this query.
+     * Fields can be passed as an array of strings, array of expression
+     * objects, a single expression or a single string.
+     *
+     * If an array is passed, keys will be used as the field itself and the value will
+     * represent the order in which such field should be ordered. When called multiple
+     * times with the same fields as key, the last order definition will prevail over
+     * the others.
+     *
+     * By default this function will append any passed argument to the list of fields
+     * to be selected, unless the second argument is set to true.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $query->order(['title' => 'DESC', 'author_id' => 'ASC']);
+     * ```
+     *
+     * Produces:
+     *
+     * `ORDER BY title DESC, author_id ASC`
+     *
+     * ```
+     * $query
+     *     ->order(['title' => $query->newExpr('DESC NULLS FIRST')])
+     *     ->order('author_id');
+     * ```
+     *
+     * Will generate:
+     *
+     * `ORDER BY title DESC NULLS FIRST, author_id`
+     *
+     * ```
+     * $expression = $query->newExpr()->add(['id % 2 = 0']);
+     * $query->order($expression)->order(['title' => 'ASC']);
+     * ```
+     *
+     * and
+     *
+     * ```
+     * $query->order(function ($exp, $query) {
+     *     return [$exp->add(['id % 2 = 0']), 'title' => 'ASC'];
+     * });
+     * ```
+     *
+     * Will both become:
+     *
+     * `ORDER BY (id %2 = 0), title ASC`
+     *
+     * Order fields/directions are not sanitized by the query builder.
+     * You should use an allowed list of fields/directions when passing
+     * in user-supplied data to `order()`.
+     *
+     * If you need to set complex expressions as order conditions, you
+     * should use `orderAsc()` or `orderDesc()`.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $fields fields to be added to the list
+     * @param bool $overwrite whether to reset order with field list or not
+     * @return $this
+     */
+    public function order($fields, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['order'] = null;
+        }
+
+        if (!$fields) {
+            return $this;
+        }
+
+        if (!$this->_parts['order']) {
+            $this->_parts['order'] = new OrderByExpression();
+        }
+        $this->_conjugate('order', $fields, '', []);
+
+        return $this;
+    }
+
+    /**
+     * Add an ORDER BY clause with an ASC direction.
+     *
+     * This method allows you to set complex expressions
+     * as order conditions unlike order()
+     *
+     * Order fields are not suitable for use with user supplied data as they are
+     * not sanitized by the query builder.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|string $field The field to order on.
+     * @param bool $overwrite Whether to reset the order clauses.
+     * @return $this
+     */
+    public function orderAsc($field, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['order'] = null;
+        }
+        if (!$field) {
+            return $this;
+        }
+
+        if ($field instanceof Closure) {
+            $field = $field($this->newExpr(), $this);
+        }
+
+        if (!$this->_parts['order']) {
+            $this->_parts['order'] = new OrderByExpression();
+        }
+        $this->_parts['order']->add(new OrderClauseExpression($field, 'ASC'));
+
+        return $this;
+    }
+
+    /**
+     * Add an ORDER BY clause with a DESC direction.
+     *
+     * This method allows you to set complex expressions
+     * as order conditions unlike order()
+     *
+     * Order fields are not suitable for use with user supplied data as they are
+     * not sanitized by the query builder.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|string $field The field to order on.
+     * @param bool $overwrite Whether to reset the order clauses.
+     * @return $this
+     */
+    public function orderDesc($field, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['order'] = null;
+        }
+        if (!$field) {
+            return $this;
+        }
+
+        if ($field instanceof Closure) {
+            $field = $field($this->newExpr(), $this);
+        }
+
+        if (!$this->_parts['order']) {
+            $this->_parts['order'] = new OrderByExpression();
+        }
+        $this->_parts['order']->add(new OrderClauseExpression($field, 'DESC'));
+
+        return $this;
+    }
+
+    /**
+     * Adds a single or multiple fields to be used in the GROUP BY clause for this query.
+     * Fields can be passed as an array of strings, array of expression
+     * objects, a single expression or a single string.
+     *
+     * By default this function will append any passed argument to the list of fields
+     * to be grouped, unless the second argument is set to true.
+     *
+     * ### Examples:
+     *
+     * ```
+     * // Produces GROUP BY id, title
+     * $query->group(['id', 'title']);
+     *
+     * // Produces GROUP BY title
+     * $query->group('title');
+     * ```
+     *
+     * Group fields are not suitable for use with user supplied data as they are
+     * not sanitized by the query builder.
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string $fields fields to be added to the list
+     * @param bool $overwrite whether to reset fields with passed list or not
+     * @return $this
+     */
+    public function group($fields, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['group'] = [];
+        }
+
+        if (!is_array($fields)) {
+            $fields = [$fields];
+        }
+
+        $this->_parts['group'] = array_merge($this->_parts['group'], array_values($fields));
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds a condition or set of conditions to be used in the `HAVING` clause for this
+     * query. This method operates in exactly the same way as the method `where()`
+     * does. Please refer to its documentation for an insight on how to using each
+     * parameter.
+     *
+     * Having fields are not suitable for use with user supplied data as they are
+     * not sanitized by the query builder.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string|null $conditions The having conditions.
+     * @param array $types Associative array of type names used to bind values to query
+     * @param bool $overwrite whether to reset conditions with passed list or not
+     * @see \Cake\Database\Query::where()
+     * @return $this
+     */
+    public function having($conditions = null, $types = [], $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['having'] = $this->newExpr();
+        }
+        $this->_conjugate('having', $conditions, 'AND', $types);
+
+        return $this;
+    }
+
+    /**
+     * Connects any previously defined set of conditions to the provided list
+     * using the AND operator in the HAVING clause. This method operates in exactly
+     * the same way as the method `andWhere()` does. Please refer to its
+     * documentation for an insight on how to using each parameter.
+     *
+     * Having fields are not suitable for use with user supplied data as they are
+     * not sanitized by the query builder.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $conditions The AND conditions for HAVING.
+     * @param array $types Associative array of type names used to bind values to query
+     * @see \Cake\Database\Query::andWhere()
+     * @return $this
+     */
+    public function andHaving($conditions, $types = [])
+    {
+        $this->_conjugate('having', $conditions, 'AND', $types);
+
+        return $this;
+    }
+
+    /**
+     * Adds a named window expression.
+     *
+     * You are responsible for adding windows in the order your database requires.
+     *
+     * @param string $name Window name
+     * @param \Cake\Database\Expression\WindowExpression|\Closure $window Window expression
+     * @param bool $overwrite Clear all previous query window expressions
+     * @return $this
+     */
+    public function window(string $name, $window, bool $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['window'] = [];
+        }
+
+        if ($window instanceof Closure) {
+            $window = $window(new WindowExpression(), $this);
+            if (!($window instanceof WindowExpression)) {
+                throw new RuntimeException('You must return a `WindowExpression` from a Closure passed to `window()`.');
+            }
+        }
+
+        $this->_parts['window'][] = ['name' => new IdentifierExpression($name), 'window' => $window];
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Set the page of results you want.
+     *
+     * This method provides an easier to use interface to set the limit + offset
+     * in the record set you want as results. If empty the limit will default to
+     * the existing limit clause, and if that too is empty, then `25` will be used.
+     *
+     * Pages must start at 1.
+     *
+     * @param int $num The page number you want.
+     * @param int|null $limit The number of rows you want in the page. If null
+     *  the current limit clause will be used.
+     * @return $this
+     * @throws \InvalidArgumentException If page number < 1.
+     */
+    public function page(int $num, ?int $limit = null)
+    {
+        if ($num < 1) {
+            throw new InvalidArgumentException('Pages must start at 1.');
+        }
+        if ($limit !== null) {
+            $this->limit($limit);
+        }
+        $limit = $this->clause('limit');
+        if ($limit === null) {
+            $limit = 25;
+            $this->limit($limit);
+        }
+        $offset = ($num - 1) * $limit;
+        if (PHP_INT_MAX <= $offset) {
+            $offset = PHP_INT_MAX;
+        }
+        $this->offset((int)$offset);
+
+        return $this;
+    }
+
+    /**
+     * Sets the number of records that should be retrieved from database,
+     * accepts an integer or an expression object that evaluates to an integer.
+     * In some databases, this operation might not be supported or will require
+     * the query to be transformed in order to limit the result set size.
+     *
+     * ### Examples
+     *
+     * ```
+     * $query->limit(10) // generates LIMIT 10
+     * $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|int|null $limit number of records to be returned
+     * @return $this
+     */
+    public function limit($limit)
+    {
+        if (is_string($limit) && !is_numeric($limit)) {
+            throw new InvalidArgumentException('Invalid value for `limit()`');
+        }
+        $this->_dirty();
+        $this->_parts['limit'] = $limit;
+
+        return $this;
+    }
+
+    /**
+     * Sets the number of records that should be skipped from the original result set
+     * This is commonly used for paginating large results. Accepts an integer or an
+     * expression object that evaluates to an integer.
+     *
+     * In some databases, this operation might not be supported or will require
+     * the query to be transformed in order to limit the result set size.
+     *
+     * ### Examples
+     *
+     * ```
+     * $query->offset(10) // generates OFFSET 10
+     * $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|int|null $offset number of records to be skipped
+     * @return $this
+     */
+    public function offset($offset)
+    {
+        if (is_string($offset) && !is_numeric($offset)) {
+            throw new InvalidArgumentException('Invalid value for `offset()`');
+        }
+        $this->_dirty();
+        $this->_parts['offset'] = $offset;
+
+        return $this;
+    }
+
+    /**
+     * Adds a complete query to be used in conjunction with an UNION operator with
+     * this query. This is used to combine the result set of this query with the one
+     * that will be returned by the passed query. You can add as many queries as you
+     * required by calling multiple times this method with different queries.
+     *
+     * By default, the UNION operator will remove duplicate rows, if you wish to include
+     * every row for all queries, use unionAll().
+     *
+     * ### Examples
+     *
+     * ```
+     * $union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
+     * $query->select(['id', 'name'])->from(['d' => 'things'])->union($union);
+     * ```
+     *
+     * Will produce:
+     *
+     * `SELECT id, name FROM things d UNION SELECT id, title FROM articles a`
+     *
+     * @param \Cake\Database\Query|string $query full SQL query to be used in UNION operator
+     * @param bool $overwrite whether to reset the list of queries to be operated or not
+     * @return $this
+     */
+    public function union($query, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['union'] = [];
+        }
+        $this->_parts['union'][] = [
+            'all' => false,
+            'query' => $query,
+        ];
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Adds a complete query to be used in conjunction with the UNION ALL operator with
+     * this query. This is used to combine the result set of this query with the one
+     * that will be returned by the passed query. You can add as many queries as you
+     * required by calling multiple times this method with different queries.
+     *
+     * Unlike UNION, UNION ALL will not remove duplicate rows.
+     *
+     * ```
+     * $union = (new Query($conn))->select(['id', 'title'])->from(['a' => 'articles']);
+     * $query->select(['id', 'name'])->from(['d' => 'things'])->unionAll($union);
+     * ```
+     *
+     * Will produce:
+     *
+     * `SELECT id, name FROM things d UNION ALL SELECT id, title FROM articles a`
+     *
+     * @param \Cake\Database\Query|string $query full SQL query to be used in UNION operator
+     * @param bool $overwrite whether to reset the list of queries to be operated or not
+     * @return $this
+     */
+    public function unionAll($query, $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_parts['union'] = [];
+        }
+        $this->_parts['union'][] = [
+            'all' => true,
+            'query' => $query,
+        ];
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Create an insert query.
+     *
+     * Note calling this method will reset any data previously set
+     * with Query::values().
+     *
+     * @param array $columns The columns to insert into.
+     * @param array $types A map between columns & their datatypes.
+     * @return $this
+     * @throws \RuntimeException When there are 0 columns.
+     */
+    public function insert(array $columns, array $types = [])
+    {
+        if (empty($columns)) {
+            throw new RuntimeException('At least 1 column is required to perform an insert.');
+        }
+        $this->_dirty();
+        $this->_type = 'insert';
+        $this->_parts['insert'][1] = $columns;
+        if (!$this->_parts['values']) {
+            $this->_parts['values'] = new ValuesExpression($columns, $this->getTypeMap()->setTypes($types));
+        } else {
+            $this->_parts['values']->setColumns($columns);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Set the table name for insert queries.
+     *
+     * @param string $table The table name to insert into.
+     * @return $this
+     */
+    public function into(string $table)
+    {
+        $this->_dirty();
+        $this->_type = 'insert';
+        $this->_parts['insert'][0] = $table;
+
+        return $this;
+    }
+
+    /**
+     * Creates an expression that refers to an identifier. Identifiers are used to refer to field names and allow
+     * the SQL compiler to apply quotes or escape the identifier.
+     *
+     * The value is used as is, and you might be required to use aliases or include the table reference in
+     * the identifier. Do not use this method to inject SQL methods or logical statements.
+     *
+     * ### Example
+     *
+     * ```
+     * $query->newExpr()->lte('count', $query->identifier('total'));
+     * ```
+     *
+     * @param string $identifier The identifier for an expression
+     * @return \Cake\Database\ExpressionInterface
+     */
+    public function identifier(string $identifier): ExpressionInterface
+    {
+        return new IdentifierExpression($identifier);
+    }
+
+    /**
+     * Set the values for an insert query.
+     *
+     * Multi inserts can be performed by calling values() more than one time,
+     * or by providing an array of value sets. Additionally $data can be a Query
+     * instance to insert data from another SELECT statement.
+     *
+     * @param \Cake\Database\Expression\ValuesExpression|\Cake\Database\Query|array $data The data to insert.
+     * @return $this
+     * @throws \Cake\Database\Exception\DatabaseException if you try to set values before declaring columns.
+     *   Or if you try to set values on non-insert queries.
+     */
+    public function values($data)
+    {
+        if ($this->_type !== 'insert') {
+            throw new DatabaseException(
+                'You cannot add values before defining columns to use.'
+            );
+        }
+        if (empty($this->_parts['insert'])) {
+            throw new DatabaseException(
+                'You cannot add values before defining columns to use.'
+            );
+        }
+
+        $this->_dirty();
+        if ($data instanceof ValuesExpression) {
+            $this->_parts['values'] = $data;
+
+            return $this;
+        }
+
+        $this->_parts['values']->add($data);
+
+        return $this;
+    }
+
+    /**
+     * Create an update query.
+     *
+     * Can be combined with set() and where() methods to create update queries.
+     *
+     * @param \Cake\Database\ExpressionInterface|string $table The table you want to update.
+     * @return $this
+     */
+    public function update($table)
+    {
+        if (!is_string($table) && !($table instanceof ExpressionInterface)) {
+            $text = 'Table must be of type string or "%s", got "%s"';
+            $message = sprintf($text, ExpressionInterface::class, gettype($table));
+            throw new InvalidArgumentException($message);
+        }
+
+        $this->_dirty();
+        $this->_type = 'update';
+        $this->_parts['update'][0] = $table;
+
+        return $this;
+    }
+
+    /**
+     * Set one or many fields to update.
+     *
+     * ### Examples
+     *
+     * Passing a string:
+     *
+     * ```
+     * $query->update('articles')->set('title', 'The Title');
+     * ```
+     *
+     * Passing an array:
+     *
+     * ```
+     * $query->update('articles')->set(['title' => 'The Title'], ['title' => 'string']);
+     * ```
+     *
+     * Passing a callable:
+     *
+     * ```
+     * $query->update('articles')->set(function ($exp) {
+     *   return $exp->eq('title', 'The title', 'string');
+     * });
+     * ```
+     *
+     * @param \Cake\Database\Expression\QueryExpression|\Closure|array|string $key The column name or array of keys
+     *    + values to set. This can also be a QueryExpression containing a SQL fragment.
+     *    It can also be a Closure, that is required to return an expression object.
+     * @param mixed $value The value to update $key to. Can be null if $key is an
+     *    array or QueryExpression. When $key is an array, this parameter will be
+     *    used as $types instead.
+     * @param array|string $types The column types to treat data as.
+     * @return $this
+     */
+    public function set($key, $value = null, $types = [])
+    {
+        if (empty($this->_parts['set'])) {
+            $this->_parts['set'] = $this->newExpr()->setConjunction(',');
+        }
+
+        if ($key instanceof Closure) {
+            $exp = $this->newExpr()->setConjunction(',');
+            $this->_parts['set']->add($key($exp));
+
+            return $this;
+        }
+
+        if (is_array($key) || $key instanceof ExpressionInterface) {
+            $types = (array)$value;
+            $this->_parts['set']->add($key, $types);
+
+            return $this;
+        }
+
+        if (!is_string($types)) {
+            $types = null;
+        }
+        $this->_parts['set']->eq($key, $value, $types);
+
+        return $this;
+    }
+
+    /**
+     * Create a delete query.
+     *
+     * Can be combined with from(), where() and other methods to
+     * create delete queries with specific conditions.
+     *
+     * @param string|null $table The table to use when deleting.
+     * @return $this
+     */
+    public function delete(?string $table = null)
+    {
+        $this->_dirty();
+        $this->_type = 'delete';
+        if ($table !== null) {
+            $this->from($table);
+        }
+
+        return $this;
+    }
+
+    /**
+     * A string or expression that will be appended to the generated query
+     *
+     * ### Examples:
+     * ```
+     * $query->select('id')->where(['author_id' => 1])->epilog('FOR UPDATE');
+     * $query
+     *  ->insert('articles', ['title'])
+     *  ->values(['author_id' => 1])
+     *  ->epilog('RETURNING id');
+     * ```
+     *
+     * Epliog content is raw SQL and not suitable for use with user supplied data.
+     *
+     * @param \Cake\Database\ExpressionInterface|string|null $expression The expression to be appended
+     * @return $this
+     */
+    public function epilog($expression = null)
+    {
+        $this->_dirty();
+        $this->_parts['epilog'] = $expression;
+
+        return $this;
+    }
+
+    /**
+     * Returns the type of this query (select, insert, update, delete)
+     *
+     * @return string
+     */
+    public function type(): string
+    {
+        return $this->_type;
+    }
+
+    /**
+     * Returns a new QueryExpression object. This is a handy function when
+     * building complex queries using a fluent interface. You can also override
+     * this function in subclasses to use a more specialized QueryExpression class
+     * if required.
+     *
+     * You can optionally pass a single raw SQL string or an array or expressions in
+     * any format accepted by \Cake\Database\Expression\QueryExpression:
+     *
+     * ```
+     * $expression = $query->expr(); // Returns an empty expression object
+     * $expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string|null $rawExpression A string, array or anything you want wrapped in an expression object
+     * @return \Cake\Database\Expression\QueryExpression
+     */
+    public function newExpr($rawExpression = null): QueryExpression
+    {
+        return $this->expr($rawExpression);
+    }
+
+    /**
+     * Returns a new QueryExpression object. This is a handy function when
+     * building complex queries using a fluent interface. You can also override
+     * this function in subclasses to use a more specialized QueryExpression class
+     * if required.
+     *
+     * You can optionally pass a single raw SQL string or an array or expressions in
+     * any format accepted by \Cake\Database\Expression\QueryExpression:
+     *
+     * ```
+     * $expression = $query->expr(); // Returns an empty expression object
+     * $expression = $query->expr('Table.column = Table2.column'); // Return a raw SQL expression
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|array|string|null $rawExpression A string, array or anything you want wrapped in an expression object
+     * @return \Cake\Database\Expression\QueryExpression
+     */
+    public function expr($rawExpression = null): QueryExpression
+    {
+        $expression = new QueryExpression([], $this->getTypeMap());
+
+        if ($rawExpression !== null) {
+            $expression->add($rawExpression);
+        }
+
+        return $expression;
+    }
+
+    /**
+     * Returns an instance of a functions builder object that can be used for
+     * generating arbitrary SQL functions.
+     *
+     * ### Example:
+     *
+     * ```
+     * $query->func()->count('*');
+     * $query->func()->dateDiff(['2012-01-05', '2012-01-02'])
+     * ```
+     *
+     * @return \Cake\Database\FunctionsBuilder
+     */
+    public function func(): FunctionsBuilder
+    {
+        if ($this->_functionsBuilder === null) {
+            $this->_functionsBuilder = new FunctionsBuilder();
+        }
+
+        return $this->_functionsBuilder;
+    }
+
+    /**
+     * Executes this query and returns a results iterator. This function is required
+     * for implementing the IteratorAggregate interface and allows the query to be
+     * iterated without having to call execute() manually, thus making it look like
+     * a result set instead of the query itself.
+     *
+     * @return \Cake\Database\StatementInterface
+     * @psalm-suppress ImplementedReturnTypeMismatch
+     */
+    #[\ReturnTypeWillChange]
+    public function getIterator()
+    {
+        if ($this->_iterator === null || $this->_dirty) {
+            $this->_iterator = $this->execute();
+        }
+
+        return $this->_iterator;
+    }
+
+    /**
+     * Returns any data that was stored in the specified clause. This is useful for
+     * modifying any internal part of the query and it is used by the SQL dialects
+     * to transform the query accordingly before it is executed. The valid clauses that
+     * can be retrieved are: delete, update, set, insert, values, select, distinct,
+     * from, join, set, where, group, having, order, limit, offset and union.
+     *
+     * The return value for each of those parts may vary. Some clauses use QueryExpression
+     * to internally store their state, some use arrays and others may use booleans or
+     * integers. This is summary of the return types for each clause.
+     *
+     * - update: string The name of the table to update
+     * - set: QueryExpression
+     * - insert: array, will return an array containing the table + columns.
+     * - values: ValuesExpression
+     * - select: array, will return empty array when no fields are set
+     * - distinct: boolean
+     * - from: array of tables
+     * - join: array
+     * - set: array
+     * - where: QueryExpression, returns null when not set
+     * - group: array
+     * - having: QueryExpression, returns null when not set
+     * - order: OrderByExpression, returns null when not set
+     * - limit: integer or QueryExpression, null when not set
+     * - offset: integer or QueryExpression, null when not set
+     * - union: array
+     *
+     * @param string $name name of the clause to be returned
+     * @return mixed
+     * @throws \InvalidArgumentException When the named clause does not exist.
+     */
+    public function clause(string $name)
+    {
+        if (!array_key_exists($name, $this->_parts)) {
+            $clauses = implode(', ', array_keys($this->_parts));
+            throw new InvalidArgumentException("The '$name' clause is not defined. Valid clauses are: $clauses");
+        }
+
+        return $this->_parts[$name];
+    }
+
+    /**
+     * Registers a callback to be executed for each result that is fetched from the
+     * result set, the callback function will receive as first parameter an array with
+     * the raw data from the database for every row that is fetched and must return the
+     * row with any possible modifications.
+     *
+     * Callbacks will be executed lazily, if only 3 rows are fetched for database it will
+     * called 3 times, event though there might be more rows to be fetched in the cursor.
+     *
+     * Callbacks are stacked in the order they are registered, if you wish to reset the stack
+     * the call this function with the second parameter set to true.
+     *
+     * If you wish to remove all decorators from the stack, set the first parameter
+     * to null and the second to true.
+     *
+     * ### Example
+     *
+     * ```
+     * $query->decorateResults(function ($row) {
+     *   $row['order_total'] = $row['subtotal'] + ($row['subtotal'] * $row['tax']);
+     *    return $row;
+     * });
+     * ```
+     *
+     * @param callable|null $callback The callback to invoke when results are fetched.
+     * @param bool $overwrite Whether this should append or replace all existing decorators.
+     * @return $this
+     */
+    public function decorateResults(?callable $callback, bool $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_resultDecorators = [];
+        }
+
+        if ($callback !== null) {
+            $this->_resultDecorators[] = $callback;
+        }
+
+        return $this;
+    }
+
+    /**
+     * This function works similar to the traverse() function, with the difference
+     * that it does a full depth traversal of the entire expression tree. This will execute
+     * the provided callback function for each ExpressionInterface object that is
+     * stored inside this query at any nesting depth in any part of the query.
+     *
+     * Callback will receive as first parameter the currently visited expression.
+     *
+     * @param callable $callback the function to be executed for each ExpressionInterface
+     *   found inside this query.
+     * @return $this
+     */
+    public function traverseExpressions(callable $callback)
+    {
+        if (!$callback instanceof Closure) {
+            $callback = Closure::fromCallable($callback);
+        }
+
+        foreach ($this->_parts as $part) {
+            $this->_expressionsVisitor($part, $callback);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Query parts traversal method used by traverseExpressions()
+     *
+     * @param \Cake\Database\ExpressionInterface|array<\Cake\Database\ExpressionInterface> $expression Query expression or
+     *   array of expressions.
+     * @param \Closure $callback The callback to be executed for each ExpressionInterface
+     *   found inside this query.
+     * @return void
+     */
+    protected function _expressionsVisitor($expression, Closure $callback): void
+    {
+        if (is_array($expression)) {
+            foreach ($expression as $e) {
+                $this->_expressionsVisitor($e, $callback);
+            }
+
+            return;
+        }
+
+        if ($expression instanceof ExpressionInterface) {
+            $expression->traverse(function ($exp) use ($callback) {
+                $this->_expressionsVisitor($exp, $callback);
+            });
+
+            if (!$expression instanceof self) {
+                $callback($expression);
+            }
+        }
+    }
+
+    /**
+     * Associates a query placeholder to a value and a type.
+     *
+     * ```
+     * $query->bind(':id', 1, 'integer');
+     * ```
+     *
+     * @param string|int $param placeholder to be replaced with quoted version
+     *   of $value
+     * @param mixed $value The value to be bound
+     * @param string|int|null $type the mapped type name, used for casting when sending
+     *   to database
+     * @return $this
+     */
+    public function bind($param, $value, $type = null)
+    {
+        $this->getValueBinder()->bind($param, $value, $type);
+
+        return $this;
+    }
+
+    /**
+     * Returns the currently used ValueBinder instance.
+     *
+     * A ValueBinder is responsible for generating query placeholders and temporarily
+     * associate values to those placeholders so that they can be passed correctly
+     * to the statement object.
+     *
+     * @return \Cake\Database\ValueBinder
+     */
+    public function getValueBinder(): ValueBinder
+    {
+        if ($this->_valueBinder === null) {
+            $this->_valueBinder = new ValueBinder();
+        }
+
+        return $this->_valueBinder;
+    }
+
+    /**
+     * Overwrite the current value binder
+     *
+     * A ValueBinder is responsible for generating query placeholders and temporarily
+     * associate values to those placeholders so that they can be passed correctly
+     * to the statement object.
+     *
+     * @param \Cake\Database\ValueBinder|null $binder The binder or null to disable binding.
+     * @return $this
+     */
+    public function setValueBinder(?ValueBinder $binder)
+    {
+        $this->_valueBinder = $binder;
+
+        return $this;
+    }
+
+    /**
+     * Enables/Disables buffered results.
+     *
+     * When enabled the results returned by this Query will be
+     * buffered. This enables you to iterate a result set multiple times, or
+     * both cache and iterate it.
+     *
+     * When disabled it will consume less memory as fetched results are not
+     * remembered for future iterations.
+     *
+     * @param bool $enable Whether to enable buffering
+     * @return $this
+     * @deprecated 4.5.0 Results will always be buffered in 5.0.
+     */
+    public function enableBufferedResults(bool $enable = true)
+    {
+        if (!$enable) {
+            deprecationWarning(
+                '4.5.0 enableBufferedResults() is deprecated. Results will always be buffered in 5.0.'
+            );
+        }
+        $this->_dirty();
+        $this->_useBufferedResults = $enable;
+
+        return $this;
+    }
+
+    /**
+     * Disables buffered results.
+     *
+     * Disabling buffering will consume less memory as fetched results are not
+     * remembered for future iterations.
+     *
+     * @return $this
+     * @deprecated 4.5.0 Results will always be buffered in 5.0.
+     */
+    public function disableBufferedResults()
+    {
+        $this->_dirty();
+        $this->_useBufferedResults = false;
+
+        return $this;
+    }
+
+    /**
+     * Returns whether buffered results are enabled/disabled.
+     *
+     * When enabled the results returned by this Query will be
+     * buffered. This enables you to iterate a result set multiple times, or
+     * both cache and iterate it.
+     *
+     * When disabled it will consume less memory as fetched results are not
+     * remembered for future iterations.
+     *
+     * @return bool
+     * @deprecated 4.5.0 Results will always be buffered in 5.0.
+     */
+    public function isBufferedResultsEnabled(): bool
+    {
+        return $this->_useBufferedResults;
+    }
+
+    /**
+     * Sets the TypeMap class where the types for each of the fields in the
+     * select clause are stored.
+     *
+     * @param \Cake\Database\TypeMap $typeMap The map object to use
+     * @return $this
+     */
+    public function setSelectTypeMap(TypeMap $typeMap)
+    {
+        $this->_selectTypeMap = $typeMap;
+        $this->_dirty();
+
+        return $this;
+    }
+
+    /**
+     * Gets the TypeMap class where the types for each of the fields in the
+     * select clause are stored.
+     *
+     * @return \Cake\Database\TypeMap
+     */
+    public function getSelectTypeMap(): TypeMap
+    {
+        if ($this->_selectTypeMap === null) {
+            $this->_selectTypeMap = new TypeMap();
+        }
+
+        return $this->_selectTypeMap;
+    }
+
+    /**
+     * Disables result casting.
+     *
+     * When disabled, the fields will be returned as received from the database
+     * driver (which in most environments means they are being returned as
+     * strings), which can improve performance with larger datasets.
+     *
+     * @return $this
+     */
+    public function disableResultsCasting()
+    {
+        $this->typeCastEnabled = false;
+
+        return $this;
+    }
+
+    /**
+     * Enables result casting.
+     *
+     * When enabled, the fields in the results returned by this Query will be
+     * cast to their corresponding PHP data type.
+     *
+     * @return $this
+     */
+    public function enableResultsCasting()
+    {
+        $this->typeCastEnabled = true;
+
+        return $this;
+    }
+
+    /**
+     * Returns whether result casting is enabled/disabled.
+     *
+     * When enabled, the fields in the results returned by this Query will be
+     * casted to their corresponding PHP data type.
+     *
+     * When disabled, the fields will be returned as received from the database
+     * driver (which in most environments means they are being returned as
+     * strings), which can improve performance with larger datasets.
+     *
+     * @return bool
+     */
+    public function isResultsCastingEnabled(): bool
+    {
+        return $this->typeCastEnabled;
+    }
+
+    /**
+     * Auxiliary function used to wrap the original statement from the driver with
+     * any registered callbacks.
+     *
+     * @param \Cake\Database\StatementInterface $statement to be decorated
+     * @return \Cake\Database\Statement\CallbackStatement|\Cake\Database\StatementInterface
+     */
+    protected function _decorateStatement(StatementInterface $statement)
+    {
+        $typeMap = $this->getSelectTypeMap();
+        $driver = $this->getConnection()->getDriver($this->connectionRole);
+
+        if ($this->typeCastEnabled && $typeMap->toArray()) {
+            $statement = new CallbackStatement($statement, $driver, new FieldTypeConverter($typeMap, $driver));
+        }
+
+        foreach ($this->_resultDecorators as $f) {
+            $statement = new CallbackStatement($statement, $driver, $f);
+        }
+
+        return $statement;
+    }
+
+    /**
+     * Helper function used to build conditions by composing QueryExpression objects.
+     *
+     * @param string $part Name of the query part to append the new part to
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string|null $append Expression or builder function to append.
+     *   to append.
+     * @param string $conjunction type of conjunction to be used to operate part
+     * @param array $types Associative array of type names used to bind values to query
+     * @return void
+     */
+    protected function _conjugate(string $part, $append, $conjunction, array $types): void
+    {
+        $expression = $this->_parts[$part] ?: $this->newExpr();
+        if (empty($append)) {
+            $this->_parts[$part] = $expression;
+
+            return;
+        }
+
+        if ($append instanceof Closure) {
+            $append = $append($this->newExpr(), $this);
+        }
+
+        if ($expression->getConjunction() === $conjunction) {
+            $expression->add($append, $types);
+        } else {
+            $expression = $this->newExpr()
+                ->setConjunction($conjunction)
+                ->add([$expression, $append], $types);
+        }
+
+        $this->_parts[$part] = $expression;
+        $this->_dirty();
+    }
+
+    /**
+     * Marks a query as dirty, removing any preprocessed information
+     * from in memory caching.
+     *
+     * @return void
+     */
+    protected function _dirty(): void
+    {
+        $this->_dirty = true;
+
+        if ($this->_iterator && $this->_valueBinder) {
+            $this->getValueBinder()->reset();
+        }
+    }
+
+    /**
+     * Handles clearing iterator and cloning all expressions and value binders.
+     *
+     * @return void
+     */
+    public function __clone()
+    {
+        $this->_iterator = null;
+        if ($this->_valueBinder !== null) {
+            $this->_valueBinder = clone $this->_valueBinder;
+        }
+        if ($this->_selectTypeMap !== null) {
+            $this->_selectTypeMap = clone $this->_selectTypeMap;
+        }
+        foreach ($this->_parts as $name => $part) {
+            if (empty($part)) {
+                continue;
+            }
+            if (is_array($part)) {
+                foreach ($part as $i => $piece) {
+                    if (is_array($piece)) {
+                        foreach ($piece as $j => $value) {
+                            if ($value instanceof ExpressionInterface) {
+                                /** @psalm-suppress PossiblyUndefinedMethod */
+                                $this->_parts[$name][$i][$j] = clone $value;
+                            }
+                        }
+                    } elseif ($piece instanceof ExpressionInterface) {
+                        $this->_parts[$name][$i] = clone $piece;
+                    }
+                }
+            }
+            if ($part instanceof ExpressionInterface) {
+                $this->_parts[$name] = clone $part;
+            }
+        }
+    }
+
+    /**
+     * Returns string representation of this query (complete SQL statement).
+     *
+     * @return string
+     */
+    public function __toString(): string
+    {
+        return $this->sql();
+    }
+
+    /**
+     * Returns an array that can be used to describe the internal state of this
+     * object.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        try {
+            set_error_handler(
+                /** @return no-return */
+                function ($errno, $errstr) {
+                    throw new RuntimeException($errstr, $errno);
+                },
+                E_ALL
+            );
+            $sql = $this->sql();
+            $params = $this->getValueBinder()->bindings();
+        } catch (Throwable $e) {
+            $sql = 'SQL could not be generated for this query as it is incomplete.';
+            $params = [];
+        } finally {
+            restore_error_handler();
+        }
+
+        return [
+            '(help)' => 'This is a Query object, to get the results execute or iterate it.',
+            'sql' => $sql,
+            'params' => $params,
+            'defaultTypes' => $this->getDefaultTypes(),
+            'decorators' => count($this->_resultDecorators),
+            'executed' => $this->_iterator ? true : false,
+        ];
+    }
+
+    /**
+     * Helper for Query deprecation methods.
+     *
+     * @param string $method The method that is invalid.
+     * @param string $message An additional message.
+     * @return void
+     * @internal
+     */
+    protected function _deprecatedMethod($method, $message = '')
+    {
+        $class = static::class;
+        $text = "As of 4.5.0 calling {$method}() on {$class} is deprecated. " . $message;
+        deprecationWarning($text);
+    }
+}
diff --git a/vendor/cakephp/database/Query/DeleteQuery.php b/vendor/cakephp/database/Query/DeleteQuery.php
new file mode 100755
index 0000000..5c11ae9
--- /dev/null
+++ b/vendor/cakephp/database/Query/DeleteQuery.php
@@ -0,0 +1,222 @@
+_deprecatedMethod('select()', 'Create your query with selectQuery() instead.');
+
+        return parent::select($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function distinct($on = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('distint()');
+
+        return parent::distinct($on, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function modifier($modifiers, $overwrite = false)
+    {
+        $this->_deprecatedMethod('modifier()');
+
+        return parent::modifier($modifiers, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function order($fields, $overwrite = false)
+    {
+        $this->_deprecatedMethod('order()');
+
+        return parent::order($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function orderAsc($field, $overwrite = false)
+    {
+        $this->_deprecatedMethod('orderAsc()');
+
+        return parent::orderAsc($field, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function orderDesc($field, $overwrite = false)
+    {
+        $this->_deprecatedMethod('orderDesc()');
+
+        return parent::orderDesc($field, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function group($fields, $overwrite = false)
+    {
+        $this->_deprecatedMethod('group()');
+
+        return parent::group($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function having($conditions = null, $types = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('having()');
+
+        return parent::having($conditions, $types, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function andHaving($conditions, $types = [])
+    {
+        $this->_deprecatedMethod('andHaving()');
+
+        return parent::andHaving($conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function page(int $num, ?int $limit = null)
+    {
+        $this->_deprecatedMethod('page()');
+
+        return parent::page($num, $limit);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function limit($limit)
+    {
+        $this->_deprecatedMethod('limit()');
+
+        return parent::limit($limit);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function offset($offset)
+    {
+        $this->_deprecatedMethod('offset()');
+
+        return parent::offset($offset);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function union($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('union()');
+
+        return parent::union($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function unionAll($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('unionAll()');
+
+        return parent::unionAll($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function insert(array $columns, array $types = [])
+    {
+        $this->_deprecatedMethod('insert()', 'Create your query with insertQuery() instead.');
+
+        return parent::insert($columns, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function into(string $table)
+    {
+        $this->_deprecatedMethod('into()');
+
+        return parent::into($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function values($data)
+    {
+        $this->_deprecatedMethod('values()');
+
+        return parent::values($data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function update($table)
+    {
+        $this->_deprecatedMethod('update()', 'Create your query with updateQuery() instead.');
+
+        return parent::update($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function set($key, $value = null, $types = [])
+    {
+        $this->_deprecatedMethod('set()');
+
+        return parent::set($key, $value, $types);
+    }
+}
diff --git a/vendor/cakephp/database/Query/InsertQuery.php b/vendor/cakephp/database/Query/InsertQuery.php
new file mode 100755
index 0000000..7d32623
--- /dev/null
+++ b/vendor/cakephp/database/Query/InsertQuery.php
@@ -0,0 +1,322 @@
+_deprecatedMethod('delete()', 'Create your query with deleteQuery() instead.');
+
+        return parent::delete($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function select($fields = [], bool $overwrite = false)
+    {
+        $this->_deprecatedMethod('select()', 'Create your query with selectQuery() instead.');
+
+        return parent::select($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function distinct($on = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('distinct()');
+
+        return parent::distinct($on, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function modifier($modifiers, $overwrite = false)
+    {
+        $this->_deprecatedMethod('modifier()');
+
+        return parent::modifier($modifiers, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function join($tables, $types = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('join()');
+
+        return parent::join($tables, $types, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function removeJoin(string $name)
+    {
+        $this->_deprecatedMethod('removeJoin()');
+
+        return parent::removeJoin($name);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function leftJoin($table, $conditions = [], $types = [])
+    {
+        $this->_deprecatedMethod('leftJoin()');
+
+        return parent::leftJoin($table, $conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rightJoin($table, $conditions = [], $types = [])
+    {
+        $this->_deprecatedMethod('rightJoin()');
+
+        return parent::rightJoin($table, $conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function innerJoin($table, $conditions = [], $types = [])
+    {
+        $this->_deprecatedMethod('innerJoin()');
+
+        return parent::innerJoin($table, $conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function group($fields, $overwrite = false)
+    {
+        $this->_deprecatedMethod('group()');
+
+        return parent::group($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function having($conditions = null, $types = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('having()');
+
+        return parent::having($conditions, $types, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function andHaving($conditions, $types = [])
+    {
+        $this->_deprecatedMethod('andHaving()');
+
+        return parent::andHaving($conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function page(int $num, ?int $limit = null)
+    {
+        $this->_deprecatedMethod('page()');
+
+        return parent::page($num, $limit);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function offset($offset)
+    {
+        $this->_deprecatedMethod('offset()');
+
+        return parent::offset($offset);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function union($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('union()');
+
+        return parent::union($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function unionAll($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('union()');
+
+        return parent::unionAll($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function from($tables = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('from()', 'Use into() instead.');
+
+        return parent::from($tables, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function update($table)
+    {
+        $this->_deprecatedMethod('update()', 'Create your query with updateQuery() instead.');
+
+        return parent::update($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function set($key, $value = null, $types = [])
+    {
+        $this->_deprecatedMethod('set()');
+
+        return parent::set($key, $value, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function where($conditions = null, array $types = [], bool $overwrite = false)
+    {
+        $this->_deprecatedMethod('where()');
+
+        return parent::where($conditions, $types, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function whereNotNull($fields)
+    {
+        $this->_deprecatedMethod('whereNotNull()');
+
+        return parent::whereNotNull($fields);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function whereNull($fields)
+    {
+        $this->_deprecatedMethod('whereNull()');
+
+        return parent::whereNull($fields);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function whereInList(string $field, array $values, array $options = [])
+    {
+        $this->_deprecatedMethod('whereInList()');
+
+        return parent::whereInList($field, $values, $options);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function whereNotInList(string $field, array $values, array $options = [])
+    {
+        $this->_deprecatedMethod('whereNotInList()');
+
+        return parent::whereNotInList($field, $values, $options);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function whereNotInListOrNull(string $field, array $values, array $options = [])
+    {
+        $this->_deprecatedMethod('whereNotInListOrNull()');
+
+        return parent::whereNotInListOrNull($field, $values, $options);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function andWhere($conditions, array $types = [])
+    {
+        $this->_deprecatedMethod('andWhere()');
+
+        return parent::andWhere($conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function order($fields, $overwrite = false)
+    {
+        $this->_deprecatedMethod('order()');
+
+        return parent::order($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function orderAsc($field, $overwrite = false)
+    {
+        $this->_deprecatedMethod('orderAsc()');
+
+        return parent::orderAsc($field, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function orderDesc($field, $overwrite = false)
+    {
+        $this->_deprecatedMethod('orderDesc()');
+
+        return parent::orderDesc($field, $overwrite);
+    }
+}
diff --git a/vendor/cakephp/database/Query/SelectQuery.php b/vendor/cakephp/database/Query/SelectQuery.php
new file mode 100755
index 0000000..7d2986a
--- /dev/null
+++ b/vendor/cakephp/database/Query/SelectQuery.php
@@ -0,0 +1,127 @@
+_deprecatedMethod('delete()', 'Create your query with deleteQuery() instead.');
+
+        return parent::delete($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function insert(array $columns, array $types = [])
+    {
+        $this->_deprecatedMethod('insert()', 'Create your query with insertQuery() instead.');
+
+        return parent::insert($columns, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function into(string $table)
+    {
+        $this->_deprecatedMethod('into()', 'Use from() instead.');
+
+        return parent::into($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function values($data)
+    {
+        $this->_deprecatedMethod('values()');
+
+        return parent::values($data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function update($table)
+    {
+        $this->_deprecatedMethod('update()', 'Create your query with updateQuery() instead.');
+
+        return parent::update($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function set($key, $value = null, $types = [])
+    {
+        $this->_deprecatedMethod('set()');
+
+        return parent::set($key, $value, $types);
+    }
+
+    /**
+     * Sets the connection role.
+     *
+     * @param string $role Connection role ('read' or 'write')
+     * @return $this
+     */
+    public function setConnectionRole(string $role)
+    {
+        assert($role === Connection::ROLE_READ || $role === Connection::ROLE_WRITE);
+        $this->connectionRole = $role;
+
+        return $this;
+    }
+
+    /**
+     * Sets the connection role to read.
+     *
+     * @return $this
+     */
+    public function useReadRole()
+    {
+        return $this->setConnectionRole(Connection::ROLE_READ);
+    }
+
+    /**
+     * Sets the connection role to write.
+     *
+     * @return $this
+     */
+    public function useWriteRole()
+    {
+        return $this->setConnectionRole(Connection::ROLE_WRITE);
+    }
+}
diff --git a/vendor/cakephp/database/Query/UpdateQuery.php b/vendor/cakephp/database/Query/UpdateQuery.php
new file mode 100755
index 0000000..0f84cce
--- /dev/null
+++ b/vendor/cakephp/database/Query/UpdateQuery.php
@@ -0,0 +1,182 @@
+_deprecatedMethod('delete()', 'Create your query with deleteQuery() instead.');
+
+        return parent::delete($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function select($fields = [], bool $overwrite = false)
+    {
+        $this->_deprecatedMethod('select()', 'Create your query with selectQuery() instead.');
+
+        return parent::select($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function distinct($on = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('distinct()');
+
+        return parent::distinct($on, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function modifier($modifiers, $overwrite = false)
+    {
+        $this->_deprecatedMethod('modifier()');
+
+        return parent::modifier($modifiers, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function group($fields, $overwrite = false)
+    {
+        $this->_deprecatedMethod('group()');
+
+        return parent::group($fields, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function having($conditions = null, $types = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('having()');
+
+        return parent::having($conditions, $types, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function andHaving($conditions, $types = [])
+    {
+        $this->_deprecatedMethod('andHaving()');
+
+        return parent::andHaving($conditions, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function page(int $num, ?int $limit = null)
+    {
+        $this->_deprecatedMethod('page()');
+
+        return parent::page($num, $limit);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function offset($offset)
+    {
+        $this->_deprecatedMethod('offset()');
+
+        return parent::offset($offset);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function union($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('union()');
+
+        return parent::union($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function unionAll($query, $overwrite = false)
+    {
+        $this->_deprecatedMethod('union()');
+
+        return parent::unionAll($query, $overwrite);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function insert(array $columns, array $types = [])
+    {
+        $this->_deprecatedMethod('insert()', 'Create your query with insertQuery() instead.');
+
+        return parent::insert($columns, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function into(string $table)
+    {
+        $this->_deprecatedMethod('into()', 'Use update() instead.');
+
+        return parent::into($table);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function values($data)
+    {
+        $this->_deprecatedMethod('values()');
+
+        return parent::values($data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function from($tables = [], $overwrite = false)
+    {
+        $this->_deprecatedMethod('from()', 'Use update() instead.');
+
+        return parent::from($tables, $overwrite);
+    }
+}
diff --git a/vendor/cakephp/database/QueryCompiler.php b/vendor/cakephp/database/QueryCompiler.php
new file mode 100755
index 0000000..9ed4422
--- /dev/null
+++ b/vendor/cakephp/database/QueryCompiler.php
@@ -0,0 +1,462 @@
+
+     */
+    protected $_templates = [
+        'delete' => 'DELETE',
+        'where' => ' WHERE %s',
+        'group' => ' GROUP BY %s ',
+        'having' => ' HAVING %s ',
+        'order' => ' %s',
+        'limit' => ' LIMIT %s',
+        'offset' => ' OFFSET %s',
+        'epilog' => ' %s',
+    ];
+
+    /**
+     * The list of query clauses to traverse for generating a SELECT statement
+     *
+     * @var array
+     */
+    protected $_selectParts = [
+        'with', 'select', 'from', 'join', 'where', 'group', 'having', 'window', 'order',
+        'limit', 'offset', 'union', 'epilog',
+    ];
+
+    /**
+     * The list of query clauses to traverse for generating an UPDATE statement
+     *
+     * @var array
+     */
+    protected $_updateParts = ['with', 'update', 'set', 'where', 'epilog'];
+
+    /**
+     * The list of query clauses to traverse for generating a DELETE statement
+     *
+     * @var array
+     */
+    protected $_deleteParts = ['with', 'delete', 'modifier', 'from', 'where', 'epilog'];
+
+    /**
+     * The list of query clauses to traverse for generating an INSERT statement
+     *
+     * @var array
+     */
+    protected $_insertParts = ['with', 'insert', 'values', 'epilog'];
+
+    /**
+     * Indicate whether this query dialect supports ordered unions.
+     *
+     * Overridden in subclasses.
+     *
+     * @var bool
+     */
+    protected $_orderedUnion = true;
+
+    /**
+     * Indicate whether aliases in SELECT clause need to be always quoted.
+     *
+     * @var bool
+     */
+    protected $_quotedSelectAliases = false;
+
+    /**
+     * Returns the SQL representation of the provided query after generating
+     * the placeholders for the bound values using the provided generator
+     *
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholders
+     * @return string
+     */
+    public function compile(Query $query, ValueBinder $binder): string
+    {
+        $sql = '';
+        $type = $query->type();
+        $query->traverseParts(
+            $this->_sqlCompiler($sql, $query, $binder),
+            $this->{"_{$type}Parts"}
+        );
+
+        // Propagate bound parameters from sub-queries if the
+        // placeholders can be found in the SQL statement.
+        if ($query->getValueBinder() !== $binder) {
+            foreach ($query->getValueBinder()->bindings() as $binding) {
+                $placeholder = ':' . $binding['placeholder'];
+                if (preg_match('/' . $placeholder . '(?:\W|$)/', $sql) > 0) {
+                    $binder->bind($placeholder, $binding['value'], $binding['type']);
+                }
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * Returns a callable object that can be used to compile a SQL string representation
+     * of this query.
+     *
+     * @param string $sql initial sql string to append to
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return \Closure
+     */
+    protected function _sqlCompiler(string &$sql, Query $query, ValueBinder $binder): Closure
+    {
+        return function ($part, $partName) use (&$sql, $query, $binder) {
+            if (
+                $part === null ||
+                (is_array($part) && empty($part)) ||
+                ($part instanceof Countable && count($part) === 0)
+            ) {
+                return;
+            }
+
+            if ($part instanceof ExpressionInterface) {
+                $part = [$part->sql($binder)];
+            }
+            if (isset($this->_templates[$partName])) {
+                $part = $this->_stringifyExpressions((array)$part, $binder);
+                $sql .= sprintf($this->_templates[$partName], implode(', ', $part));
+
+                return;
+            }
+
+            $sql .= $this->{'_build' . $partName . 'Part'}($part, $query, $binder);
+        };
+    }
+
+    /**
+     * Helper function used to build the string representation of a `WITH` clause,
+     * it constructs the CTE definitions list and generates the `RECURSIVE`
+     * keyword when required.
+     *
+     * @param array $parts List of CTEs to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildWithPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $recursive = false;
+        $expressions = [];
+        foreach ($parts as $cte) {
+            $recursive = $recursive || $cte->isRecursive();
+            $expressions[] = $cte->sql($binder);
+        }
+
+        $recursive = $recursive ? 'RECURSIVE ' : '';
+
+        return sprintf('WITH %s%s ', $recursive, implode(', ', $expressions));
+    }
+
+    /**
+     * Helper function used to build the string representation of a SELECT clause,
+     * it constructs the field list taking care of aliasing and
+     * converting expression objects to string. This function also constructs the
+     * DISTINCT clause for the query.
+     *
+     * @param array $parts list of fields to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildSelectPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $select = 'SELECT%s %s%s';
+        if ($this->_orderedUnion && $query->clause('union')) {
+            $select = '(SELECT%s %s%s';
+        }
+        $distinct = $query->clause('distinct');
+        $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $binder);
+
+        $driver = $query->getConnection()->getDriver($query->getConnectionRole());
+        $quoteIdentifiers = $driver->isAutoQuotingEnabled() || $this->_quotedSelectAliases;
+        $normalized = [];
+        $parts = $this->_stringifyExpressions($parts, $binder);
+        foreach ($parts as $k => $p) {
+            if (!is_numeric($k)) {
+                $p = $p . ' AS ';
+                if ($quoteIdentifiers) {
+                    $p .= $driver->quoteIdentifier($k);
+                } else {
+                    $p .= $k;
+                }
+            }
+            $normalized[] = $p;
+        }
+
+        if ($distinct === true) {
+            $distinct = 'DISTINCT ';
+        }
+
+        if (is_array($distinct)) {
+            $distinct = $this->_stringifyExpressions($distinct, $binder);
+            $distinct = sprintf('DISTINCT ON (%s) ', implode(', ', $distinct));
+        }
+
+        return sprintf($select, $modifiers, $distinct, implode(', ', $normalized));
+    }
+
+    /**
+     * Helper function used to build the string representation of a FROM clause,
+     * it constructs the tables list taking care of aliasing and
+     * converting expression objects to string.
+     *
+     * @param array $parts list of tables to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildFromPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $select = ' FROM %s';
+        $normalized = [];
+        $parts = $this->_stringifyExpressions($parts, $binder);
+        foreach ($parts as $k => $p) {
+            if (!is_numeric($k)) {
+                $p = $p . ' ' . $k;
+            }
+            $normalized[] = $p;
+        }
+
+        return sprintf($select, implode(', ', $normalized));
+    }
+
+    /**
+     * Helper function used to build the string representation of multiple JOIN clauses,
+     * it constructs the joins list taking care of aliasing and converting
+     * expression objects to string in both the table to be joined and the conditions
+     * to be used.
+     *
+     * @param array $parts list of joins to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildJoinPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $joins = '';
+        foreach ($parts as $join) {
+            if (!isset($join['table'])) {
+                throw new DatabaseException(sprintf(
+                    'Could not compile join clause for alias `%s`. No table was specified. ' .
+                    'Use the `table` key to define a table.',
+                    $join['alias']
+                ));
+            }
+            if ($join['table'] instanceof ExpressionInterface) {
+                $join['table'] = '(' . $join['table']->sql($binder) . ')';
+            }
+
+            $joins .= sprintf(' %s JOIN %s %s', $join['type'], $join['table'], $join['alias']);
+
+            $condition = '';
+            if (isset($join['conditions']) && $join['conditions'] instanceof ExpressionInterface) {
+                $condition = $join['conditions']->sql($binder);
+            }
+            if ($condition === '') {
+                $joins .= ' ON 1 = 1';
+            } else {
+                $joins .= " ON {$condition}";
+            }
+        }
+
+        return $joins;
+    }
+
+    /**
+     * Helper function to build the string representation of a window clause.
+     *
+     * @param array $parts List of windows to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildWindowPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $windows = [];
+        foreach ($parts as $window) {
+            $windows[] = $window['name']->sql($binder) . ' AS (' . $window['window']->sql($binder) . ')';
+        }
+
+        return ' WINDOW ' . implode(', ', $windows);
+    }
+
+    /**
+     * Helper function to generate SQL for SET expressions.
+     *
+     * @param array $parts List of keys & values to set.
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildSetPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $set = [];
+        foreach ($parts as $part) {
+            if ($part instanceof ExpressionInterface) {
+                $part = $part->sql($binder);
+            }
+            if ($part[0] === '(') {
+                $part = substr($part, 1, -1);
+            }
+            $set[] = $part;
+        }
+
+        return ' SET ' . implode('', $set);
+    }
+
+    /**
+     * Builds the SQL string for all the UNION clauses in this query, when dealing
+     * with query objects it will also transform them using their configured SQL
+     * dialect.
+     *
+     * @param array $parts list of queries to be operated with UNION
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildUnionPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $parts = array_map(function ($p) use ($binder) {
+            $p['query'] = $p['query']->sql($binder);
+            $p['query'] = $p['query'][0] === '(' ? trim($p['query'], '()') : $p['query'];
+            $prefix = $p['all'] ? 'ALL ' : '';
+            if ($this->_orderedUnion) {
+                return "{$prefix}({$p['query']})";
+            }
+
+            return $prefix . $p['query'];
+        }, $parts);
+
+        if ($this->_orderedUnion) {
+            return sprintf(")\nUNION %s", implode("\nUNION ", $parts));
+        }
+
+        return sprintf("\nUNION %s", implode("\nUNION ", $parts));
+    }
+
+    /**
+     * Builds the SQL fragment for INSERT INTO.
+     *
+     * @param array $parts The insert parts.
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string SQL fragment.
+     */
+    protected function _buildInsertPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        if (!isset($parts[0])) {
+            throw new DatabaseException(
+                'Could not compile insert query. No table was specified. ' .
+                'Use `into()` to define a table.'
+            );
+        }
+        $table = $parts[0];
+        $columns = $this->_stringifyExpressions($parts[1], $binder);
+        $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $binder);
+
+        return sprintf('INSERT%s INTO %s (%s)', $modifiers, $table, implode(', ', $columns));
+    }
+
+    /**
+     * Builds the SQL fragment for INSERT INTO.
+     *
+     * @param array $parts The values parts.
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string SQL fragment.
+     */
+    protected function _buildValuesPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        return implode('', $this->_stringifyExpressions($parts, $binder));
+    }
+
+    /**
+     * Builds the SQL fragment for UPDATE.
+     *
+     * @param array $parts The update parts.
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string SQL fragment.
+     */
+    protected function _buildUpdatePart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $table = $this->_stringifyExpressions($parts, $binder);
+        $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $binder);
+
+        return sprintf('UPDATE%s %s', $modifiers, implode(',', $table));
+    }
+
+    /**
+     * Builds the SQL modifier fragment
+     *
+     * @param array $parts The query modifier parts
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string SQL fragment.
+     */
+    protected function _buildModifierPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        if ($parts === []) {
+            return '';
+        }
+
+        return ' ' . implode(' ', $this->_stringifyExpressions($parts, $binder, false));
+    }
+
+    /**
+     * Helper function used to covert ExpressionInterface objects inside an array
+     * into their string representation.
+     *
+     * @param array $expressions list of strings and ExpressionInterface objects
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @param bool $wrap Whether to wrap each expression object with parenthesis
+     * @return array
+     */
+    protected function _stringifyExpressions(array $expressions, ValueBinder $binder, bool $wrap = true): array
+    {
+        $result = [];
+        foreach ($expressions as $k => $expression) {
+            if ($expression instanceof ExpressionInterface) {
+                $value = $expression->sql($binder);
+                $expression = $wrap ? '(' . $value . ')' : $value;
+            }
+            $result[$k] = $expression;
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/cakephp/database/README.md b/vendor/cakephp/database/README.md
new file mode 100755
index 0000000..d7bbe8e
--- /dev/null
+++ b/vendor/cakephp/database/README.md
@@ -0,0 +1,358 @@
+[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/database.svg?style=flat-square)](https://packagist.org/packages/cakephp/database)
+[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE.txt)
+
+# A flexible and lightweight Database Library for PHP
+
+This library abstracts and provides help with most aspects of dealing with relational
+databases such as keeping connections to the server, building queries,
+preventing SQL injections, inspecting and altering schemas, and with debugging and
+profiling queries sent to the database.
+
+It adopts the API from the native PDO extension in PHP for familiarity, but solves many of the
+inconsistencies PDO has, while also providing several features that extend PDO's capabilities.
+
+A distinguishing factor of this library when compared to similar database connection packages,
+is that it takes the concept of "data types" to its core. It lets you work with complex PHP objects
+or structures that can be passed as query conditions or to be inserted in the database.
+
+The typing system will intelligently convert the PHP structures when passing them to the database, and
+convert them back when retrieving.
+
+
+## Connecting to the database
+
+This library is able to work with the following databases:
+
+* MySQL
+* Postgres
+* SQLite
+* Microsoft SQL Server (2008 and above)
+
+The first thing you need to do when using this library is create a connection object.
+Before performing any operations with the connection, you need to specify a driver
+to use:
+
+```php
+use Cake\Database\Connection;
+use Cake\Database\Driver\Mysql;
+use Cake\Database\Driver\Sqlite;
+
+$connection = new Connection([
+	'driver' => Mysql::class,
+	'database' => 'test',
+	'username' => 'root',
+	'password' => 'secret',
+]);
+
+$connection2 = new Connection([
+	'driver' => Sqlite::class,
+	'database' => '/path/to/file.db'
+]);
+```
+
+Drivers are classes responsible for actually executing the commands to the database and
+correctly building the SQL according to the database specific dialect.
+
+### Connection options
+
+This is a list of possible options that can be passed when creating a connection:
+
+* `driver`: Driver class name
+* `persistent`: Creates a persistent connection
+* `host`: The server host
+* `database`: The database name
+* `username`: Login credential
+* `password`: Connection secret
+* `encoding`: The connection encoding (or charset)
+* `timezone`: The connection timezone or time offset
+
+## Using connections
+
+After creating a connection, you can immediately interact with the database. You can choose
+either to use the shorthand methods `execute()`, `insert()`, `update()`, `delete()` or use the
+`newQuery()` for using a query builder.
+
+The easiest way of executing queries is by using the `execute()` method, it will return a
+`Cake\Database\StatementInterface` that you can use to get the data back:
+
+```php
+$statement = $connection->execute('SELECT * FROM articles');
+
+while($row = $statement->fetch('assoc')) {
+	echo $row['title'] . PHP_EOL;
+}
+```
+Binding values to parametrized arguments is also possible with the execute function:
+
+```php
+$statement = $connection->execute('SELECT * FROM articles WHERE id = :id', ['id' => 1], ['id' => 'integer']);
+$results = $statement->fetch('assoc');
+```
+
+The third parameter is the types the passed values should be converted to when passed to the database. If
+no types are passed, all arguments will be interpreted as a string.
+
+Alternatively you can construct a statement manually and then fetch rows from it:
+
+```php
+$statement = $connection->prepare('SELECT * from articles WHERE id != :id');
+$statement->bind(['id' => 1], ['id' => 'integer']);
+$results = $statement->fetchAll('assoc');
+```
+
+The default types that are understood by this library and can be passed to the `bind()` function or to `execute()`
+are:
+
+* biginteger
+* binary
+* date
+* float
+* decimal
+* integer
+* time
+* datetime
+* timestamp
+* uuid
+
+More types can be added dynamically in a bit.
+
+Statements can be reused by binding new values to the parameters in the query:
+
+```php
+$statement = $connection->prepare('SELECT * from articles WHERE id = :id');
+$statement->bind(['id' => 1], ['id' => 'integer']);
+$results = $statement->fetchAll('assoc');
+
+$statement->bind(['id' => 1], ['id' => 'integer']);
+$results = $statement->fetchAll('assoc');
+```
+
+### Updating Rows
+
+Updating can be done using the `update()` function in the connection object. In the following
+example we will update the title of the article with id = 1:
+
+```php
+$connection->update('articles', ['title' => 'New title'], ['id' => 1]);
+```
+
+The concept of data types is central to this library, so you can use the last parameter of the function
+to specify what types should be used:
+
+```php
+$connection->update(
+	'articles',
+	['title' => 'New title'],
+	['created >=' => new DateTime('-3 day'), 'created <' => new DateTime('now')],
+	['created' => 'datetime']
+);
+```
+
+The example above will execute the following SQL:
+
+```sql
+UPDATE articles SET title = 'New Title' WHERE created >= '2014-10-10 00:00:00' AND created < '2014-10-13 00:00:00';
+```
+
+More on creating complex where conditions or more complex update queries later.
+
+### Deleting Rows
+
+Similarly, the `delete()` method is used to delete rows from the database:
+
+```php
+$connection->delete('articles', ['created <' => DateTime('now')], ['created' => 'date']);
+```
+
+Will generate the following SQL
+
+```sql
+DELETE FROM articles where created < '2014-10-10'
+```
+
+### Inserting Rows
+
+Rows can be inserted using the `insert()` method:
+
+```php
+$connection->insert(
+	'articles',
+	['title' => 'My Title', 'body' => 'Some paragraph', 'created' => new DateTime()],
+	['created' => 'datetime']
+);
+```
+
+More complex updates, deletes and insert queries can be generated using the `Query` class.
+
+## Query Builder
+
+One of the goals of this library is to allow the generation of both simple and complex queries with
+ease. The query builder can be accessed by getting a new instance of a query:
+
+```php
+$query = $connection->newQuery();
+```
+
+### Selecting Fields
+
+Adding fields to the `SELECT` clause:
+
+```php
+$query->select(['id', 'title', 'body']);
+
+// Results in SELECT id AS pk, title AS aliased_title, body ...
+$query->select(['pk' => 'id', 'aliased_title' => 'title', 'body']);
+
+// Use a closure
+$query->select(function ($query) {
+	return ['id', 'title', 'body'];
+});
+```
+
+### Where Conditions
+
+Generating conditions:
+
+```php
+// WHERE id = 1
+$query->where(['id' => 1]);
+
+// WHERE id > 2
+$query->where(['id >' => 1]);
+```
+
+As you can see you can use any operator by placing it with a space after the field name.
+Adding multiple conditions is easy as well:
+
+```php
+$query->where(['id >' => 1])->andWhere(['title' => 'My Title']);
+
+// Equivalent to
+$query->where(['id >' => 1, 'title' => 'My title']);
+```
+
+It is possible to generate `OR` conditions as well
+
+```php
+$query->where(['OR' => ['id >' => 1, 'title' => 'My title']]);
+```
+
+For even more complex conditions you can use closures and expression objects:
+
+```php
+$query->where(function ($exp) {
+        return $exp
+            ->eq('author_id', 2)
+            ->eq('published', true)
+            ->notEq('spam', true)
+            ->gt('view_count', 10);
+    });
+```
+
+Which results in:
+
+```sql
+SELECT * FROM articles
+WHERE
+	author_id = 2
+	AND published = 1
+	AND spam != 1
+	AND view_count > 10
+```
+
+Combining expressions is also possible:
+
+```php
+$query->where(function ($exp) {
+        $orConditions = $exp->or(['author_id' => 2])
+            ->eq('author_id', 5);
+        return $exp
+            ->not($orConditions)
+            ->lte('view_count', 10);
+    });
+```
+
+That generates:
+
+```sql
+SELECT *
+FROM articles
+WHERE
+	NOT (author_id = 2 OR author_id = 5)
+	AND view_count <= 10
+```
+
+When using the expression objects you can use the following methods to create conditions:
+
+* `eq()` Creates an equality condition.
+* `notEq()` Create an inequality condition
+* `like()` Create a condition using the LIKE operator.
+* `notLike()` Create a negated LIKE condition.
+* `in()` Create a condition using IN.
+* `notIn()` Create a negated condition using IN.
+* `gt()` Create a > condition.
+* `gte()` Create a >= condition.
+* `lt()` Create a < condition.
+* `lte()` Create a <= condition.
+* `isNull()` Create an IS NULL condition.
+* `isNotNull()` Create a negated IS NULL condition.
+
+### Aggregates and SQL Functions
+
+```php
+// Results in SELECT COUNT(*) count FROM ...
+$query->select(['count' => $query->func()->count('*')]);
+```
+
+A number of commonly used functions can be created with the func() method:
+
+* `sum()` Calculate a sum. The arguments will be treated as literal values.
+* `avg()` Calculate an average. The arguments will be treated as literal values.
+* `min()` Calculate the min of a column. The arguments will be treated as literal values.
+* `max()` Calculate the max of a column. The arguments will be treated as literal values.
+* `count()` Calculate the count. The arguments will be treated as literal values.
+* `concat()` Concatenate two values together. The arguments are treated as bound parameters unless marked as literal.
+* `coalesce()` Coalesce values. The arguments are treated as bound parameters unless marked as literal.
+* `dateDiff()` Get the difference between two dates/times. The arguments are treated as bound parameters unless marked as literal.
+* `now()` Take either 'time' or 'date' as an argument allowing you to get either the current time, or current date.
+
+When providing arguments for SQL functions, there are two kinds of parameters you can use, literal arguments and bound parameters. Literal
+parameters allow you to reference columns or other SQL literals. Bound parameters can be used to safely add user data to SQL functions.
+For example:
+
+```php
+$concat = $query->func()->concat([
+    'title' => 'literal',
+    ' NEW'
+]);
+$query->select(['title' => $concat]);
+```
+
+The above generates:
+
+```sql
+SELECT CONCAT(title, :c0) ...;
+```
+
+### Other SQL Clauses
+
+Read of all other SQL clauses that the builder is capable of generating in the [official API docs](https://api.cakephp.org/4.x/class-Cake.Database.Query.html)
+
+### Getting Results out of a Query
+
+Once you’ve made your query, you’ll want to retrieve rows from it. There are a few ways of doing this:
+
+```php
+// Iterate the query
+foreach ($query as $row) {
+    // Do stuff.
+}
+
+// Get the statement and fetch all results
+$results = $query->execute()->fetchAll('assoc');
+```
+
+## Official API
+
+You can read the official [official API docs](https://api.cakephp.org/4.x/namespace-Cake.Database.html) to learn more of what this library
+has to offer.
diff --git a/vendor/cakephp/database/Retry/ErrorCodeWaitStrategy.php b/vendor/cakephp/database/Retry/ErrorCodeWaitStrategy.php
new file mode 100755
index 0000000..010a531
--- /dev/null
+++ b/vendor/cakephp/database/Retry/ErrorCodeWaitStrategy.php
@@ -0,0 +1,69 @@
+
+     */
+    protected $errorCodes;
+
+    /**
+     * @var int
+     */
+    protected $retryInterval;
+
+    /**
+     * @param array $errorCodes DB-specific error codes that allow retrying
+     * @param int $retryInterval Seconds to wait before allowing next retry, 0 for no wait.
+     */
+    public function __construct(array $errorCodes, int $retryInterval)
+    {
+        $this->errorCodes = $errorCodes;
+        $this->retryInterval = $retryInterval;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function shouldRetry(Exception $exception, int $retryCount): bool
+    {
+        if (
+            $exception instanceof PDOException &&
+            $exception->errorInfo &&
+            in_array($exception->errorInfo[1], $this->errorCodes)
+        ) {
+            if ($this->retryInterval > 0) {
+                sleep($this->retryInterval);
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/vendor/cakephp/database/Retry/ReconnectStrategy.php b/vendor/cakephp/database/Retry/ReconnectStrategy.php
new file mode 100755
index 0000000..ac84781
--- /dev/null
+++ b/vendor/cakephp/database/Retry/ReconnectStrategy.php
@@ -0,0 +1,124 @@
+
+     */
+    protected static $causes = [
+        'gone away',
+        'Lost connection',
+        'Transaction() on null',
+        'closed the connection unexpectedly',
+        'closed unexpectedly',
+        'deadlock avoided',
+        'decryption failed or bad record mac',
+        'is dead or not enabled',
+        'no connection to the server',
+        'query_wait_timeout',
+        'reset by peer',
+        'terminate due to client_idle_limit',
+        'while sending',
+        'writing data to the connection',
+    ];
+
+    /**
+     * The connection to check for validity
+     *
+     * @var \Cake\Database\Connection
+     */
+    protected $connection;
+
+    /**
+     * Creates the ReconnectStrategy object by storing a reference to the
+     * passed connection. This reference will be used to automatically
+     * reconnect to the server in case of failure.
+     *
+     * @param \Cake\Database\Connection $connection The connection to check
+     */
+    public function __construct(Connection $connection)
+    {
+        $this->connection = $connection;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Checks whether the exception was caused by a lost connection,
+     * and returns true if it was able to successfully reconnect.
+     */
+    public function shouldRetry(Exception $exception, int $retryCount): bool
+    {
+        $message = $exception->getMessage();
+
+        foreach (static::$causes as $cause) {
+            if (strstr($message, $cause) !== false) {
+                return $this->reconnect();
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Tries to re-establish the connection to the server, if it is safe to do so
+     *
+     * @return bool Whether the connection was re-established
+     */
+    protected function reconnect(): bool
+    {
+        if ($this->connection->inTransaction()) {
+            // It is not safe to blindly reconnect in the middle of a transaction
+            return false;
+        }
+
+        try {
+            // Make sure we free any resources associated with the old connection
+            $this->connection->getDriver()->disconnect();
+        } catch (Exception $e) {
+        }
+
+        try {
+            $this->connection->connect();
+            if ($this->connection->isQueryLoggingEnabled()) {
+                $this->connection->log('[RECONNECT]');
+            }
+
+            return true;
+        } catch (Exception $e) {
+            // If there was an error connecting again, don't report it back,
+            // let the retry handler do it.
+            return false;
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Schema/BaseSchema.php b/vendor/cakephp/database/Schema/BaseSchema.php
new file mode 100755
index 0000000..8d32d34
--- /dev/null
+++ b/vendor/cakephp/database/Schema/BaseSchema.php
@@ -0,0 +1,10 @@
+collection = $collection;
+        $this->prefix = $prefix;
+        $this->cacher = $cacher;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function listTablesWithoutViews(): array
+    {
+        return $this->collection->listTablesWithoutViews();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function listTables(): array
+    {
+        return $this->collection->listTables();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describe(string $name, array $options = []): TableSchemaInterface
+    {
+        $options += ['forceRefresh' => false];
+        $cacheKey = $this->cacheKey($name);
+
+        if (!$options['forceRefresh']) {
+            $cached = $this->cacher->get($cacheKey);
+            if ($cached !== null) {
+                return $cached;
+            }
+        }
+
+        $table = $this->collection->describe($name, $options);
+        $this->cacher->set($cacheKey, $table);
+
+        return $table;
+    }
+
+    /**
+     * Get the cache key for a given name.
+     *
+     * @param string $name The name to get a cache key for.
+     * @return string The cache key.
+     */
+    public function cacheKey(string $name): string
+    {
+        return $this->prefix . '_' . $name;
+    }
+
+    /**
+     * Set a cacher.
+     *
+     * @param \Psr\SimpleCache\CacheInterface $cacher Cacher object
+     * @return $this
+     */
+    public function setCacher(CacheInterface $cacher)
+    {
+        $this->cacher = $cacher;
+
+        return $this;
+    }
+
+    /**
+     * Get a cacher.
+     *
+     * @return \Psr\SimpleCache\CacheInterface $cacher Cacher object
+     */
+    public function getCacher(): CacheInterface
+    {
+        return $this->cacher;
+    }
+}
diff --git a/vendor/cakephp/database/Schema/Collection.php b/vendor/cakephp/database/Schema/Collection.php
new file mode 100755
index 0000000..181ef24
--- /dev/null
+++ b/vendor/cakephp/database/Schema/Collection.php
@@ -0,0 +1,168 @@
+_connection = $connection;
+        $this->_dialect = $connection->getDriver()->schemaDialect();
+    }
+
+    /**
+     * Get the list of tables, excluding any views, available in the current connection.
+     *
+     * @return array The list of tables in the connected database/schema.
+     */
+    public function listTablesWithoutViews(): array
+    {
+        [$sql, $params] = $this->_dialect->listTablesWithoutViewsSql($this->_connection->getDriver()->config());
+        $result = [];
+        $statement = $this->_connection->execute($sql, $params);
+        while ($row = $statement->fetch()) {
+            $result[] = $row[0];
+        }
+        $statement->closeCursor();
+
+        return $result;
+    }
+
+    /**
+     * Get the list of tables and views available in the current connection.
+     *
+     * @return array The list of tables and views in the connected database/schema.
+     */
+    public function listTables(): array
+    {
+        [$sql, $params] = $this->_dialect->listTablesSql($this->_connection->getDriver()->config());
+        $result = [];
+        $statement = $this->_connection->execute($sql, $params);
+        while ($row = $statement->fetch()) {
+            $result[] = $row[0];
+        }
+        $statement->closeCursor();
+
+        return $result;
+    }
+
+    /**
+     * Get the column metadata for a table.
+     *
+     * The name can include a database schema name in the form 'schema.table'.
+     *
+     * Caching will be applied if `cacheMetadata` key is present in the Connection
+     * configuration options. Defaults to _cake_model_ when true.
+     *
+     * ### Options
+     *
+     * - `forceRefresh` - Set to true to force rebuilding the cached metadata.
+     *   Defaults to false.
+     *
+     * @param string $name The name of the table to describe.
+     * @param array $options The options to use, see above.
+     * @return \Cake\Database\Schema\TableSchema Object with column metadata.
+     * @throws \Cake\Database\Exception\DatabaseException when table cannot be described.
+     */
+    public function describe(string $name, array $options = []): TableSchemaInterface
+    {
+        $config = $this->_connection->getDriver()->config();
+        if (strpos($name, '.')) {
+            [$config['schema'], $name] = explode('.', $name);
+        }
+        $table = $this->_connection->getDriver()->newTableSchema($name);
+
+        $this->_reflect('Column', $name, $config, $table);
+        if (count($table->columns()) === 0) {
+            throw new DatabaseException(sprintf('Cannot describe %s. It has 0 columns.', $name));
+        }
+
+        $this->_reflect('Index', $name, $config, $table);
+        $this->_reflect('ForeignKey', $name, $config, $table);
+        $this->_reflect('Options', $name, $config, $table);
+
+        return $table;
+    }
+
+    /**
+     * Helper method for running each step of the reflection process.
+     *
+     * @param string $stage The stage name.
+     * @param string $name The table name.
+     * @param array $config The config data.
+     * @param \Cake\Database\Schema\TableSchema $schema The table schema instance.
+     * @return void
+     * @throws \Cake\Database\Exception\DatabaseException on query failure.
+     * @uses \Cake\Database\Schema\SchemaDialect::describeColumnSql
+     * @uses \Cake\Database\Schema\SchemaDialect::describeIndexSql
+     * @uses \Cake\Database\Schema\SchemaDialect::describeForeignKeySql
+     * @uses \Cake\Database\Schema\SchemaDialect::describeOptionsSql
+     * @uses \Cake\Database\Schema\SchemaDialect::convertColumnDescription
+     * @uses \Cake\Database\Schema\SchemaDialect::convertIndexDescription
+     * @uses \Cake\Database\Schema\SchemaDialect::convertForeignKeyDescription
+     * @uses \Cake\Database\Schema\SchemaDialect::convertOptionsDescription
+     */
+    protected function _reflect(string $stage, string $name, array $config, TableSchema $schema): void
+    {
+        $describeMethod = "describe{$stage}Sql";
+        $convertMethod = "convert{$stage}Description";
+
+        [$sql, $params] = $this->_dialect->{$describeMethod}($name, $config);
+        if (empty($sql)) {
+            return;
+        }
+        try {
+            $statement = $this->_connection->execute($sql, $params);
+        } catch (PDOException $e) {
+            throw new DatabaseException($e->getMessage(), 500, $e);
+        }
+        /** @psalm-suppress PossiblyFalseIterator */
+        foreach ($statement->fetchAll('assoc') as $row) {
+            $this->_dialect->{$convertMethod}($schema, $row);
+        }
+        $statement->closeCursor();
+    }
+}
diff --git a/vendor/cakephp/database/Schema/CollectionInterface.php b/vendor/cakephp/database/Schema/CollectionInterface.php
new file mode 100755
index 0000000..1861e36
--- /dev/null
+++ b/vendor/cakephp/database/Schema/CollectionInterface.php
@@ -0,0 +1,54 @@
+ listTablesWithoutViews() Get the list of tables available in the current connection.
+ * This will exclude any views in the schema.
+ */
+interface CollectionInterface
+{
+    /**
+     * Get the list of tables available in the current connection.
+     *
+     * @return array The list of tables in the connected database/schema.
+     */
+    public function listTables(): array;
+
+    /**
+     * Get the column metadata for a table.
+     *
+     * Caching will be applied if `cacheMetadata` key is present in the Connection
+     * configuration options. Defaults to _cake_model_ when true.
+     *
+     * ### Options
+     *
+     * - `forceRefresh` - Set to true to force rebuilding the cached metadata.
+     *   Defaults to false.
+     *
+     * @param string $name The name of the table to describe.
+     * @param array $options The options to use, see above.
+     * @return \Cake\Database\Schema\TableSchemaInterface Object with column metadata.
+     * @throws \Cake\Database\Exception\DatabaseException when table cannot be described.
+     */
+    public function describe(string $name, array $options = []): TableSchemaInterface;
+}
diff --git a/vendor/cakephp/database/Schema/MysqlSchema.php b/vendor/cakephp/database/Schema/MysqlSchema.php
new file mode 100755
index 0000000..30b20db
--- /dev/null
+++ b/vendor/cakephp/database/Schema/MysqlSchema.php
@@ -0,0 +1,10 @@
+ $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesSql(array $config): array
+    {
+        return ['SHOW FULL TABLES FROM ' . $this->_driver->quoteIdentifier($config['database']), []];
+    }
+
+    /**
+     * Generate the SQL to list the tables, excluding all views.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesWithoutViewsSql(array $config): array
+    {
+        return [
+            'SHOW FULL TABLES FROM ' . $this->_driver->quoteIdentifier($config['database'])
+            . ' WHERE TABLE_TYPE = "BASE TABLE"'
+        , []];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeColumnSql(string $tableName, array $config): array
+    {
+        return ['SHOW FULL COLUMNS FROM ' . $this->_driver->quoteIdentifier($tableName), []];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeIndexSql(string $tableName, array $config): array
+    {
+        return ['SHOW INDEXES FROM ' . $this->_driver->quoteIdentifier($tableName), []];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeOptionsSql(string $tableName, array $config): array
+    {
+        return ['SHOW TABLE STATUS WHERE Name = ?', [$tableName]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertOptionsDescription(TableSchema $schema, array $row): void
+    {
+        $schema->setOptions([
+            'engine' => $row['Engine'],
+            'collation' => $row['Collation'],
+        ]);
+    }
+
+    /**
+     * Convert a MySQL column type into an abstract type.
+     *
+     * The returned type will be a type that Cake\Database\TypeFactory can handle.
+     *
+     * @param string $column The column type + length
+     * @return array Array of column information.
+     * @throws \Cake\Database\Exception\DatabaseException When column type cannot be parsed.
+     */
+    protected function _convertColumn(string $column): array
+    {
+        preg_match('/([a-z]+)(?:\(([0-9,]+)\))?\s*([a-z]+)?/i', $column, $matches);
+        if (empty($matches)) {
+            throw new DatabaseException(sprintf('Unable to parse column type from "%s"', $column));
+        }
+
+        $col = strtolower($matches[1]);
+        $length = $precision = $scale = null;
+        if (isset($matches[2]) && strlen($matches[2])) {
+            $length = $matches[2];
+            if (strpos($matches[2], ',') !== false) {
+                [$length, $precision] = explode(',', $length);
+            }
+            $length = (int)$length;
+            $precision = (int)$precision;
+        }
+
+        $type = $this->_applyTypeSpecificColumnConversion(
+            $col,
+            compact('length', 'precision', 'scale')
+        );
+        if ($type !== null) {
+            return $type;
+        }
+
+        if (in_array($col, ['date', 'time'])) {
+            return ['type' => $col, 'length' => null];
+        }
+        if (in_array($col, ['datetime', 'timestamp'])) {
+            $typeName = $col;
+            if ($length > 0) {
+                $typeName = $col . 'fractional';
+            }
+
+            return ['type' => $typeName, 'length' => null, 'precision' => $length];
+        }
+
+        if (($col === 'tinyint' && $length === 1) || $col === 'boolean') {
+            return ['type' => TableSchema::TYPE_BOOLEAN, 'length' => null];
+        }
+
+        $unsigned = (isset($matches[3]) && strtolower($matches[3]) === 'unsigned');
+        if (strpos($col, 'bigint') !== false || $col === 'bigint') {
+            return ['type' => TableSchema::TYPE_BIGINTEGER, 'length' => null, 'unsigned' => $unsigned];
+        }
+        if ($col === 'tinyint') {
+            return ['type' => TableSchema::TYPE_TINYINTEGER, 'length' => null, 'unsigned' => $unsigned];
+        }
+        if ($col === 'smallint') {
+            return ['type' => TableSchema::TYPE_SMALLINTEGER, 'length' => null, 'unsigned' => $unsigned];
+        }
+        if (in_array($col, ['int', 'integer', 'mediumint'])) {
+            return ['type' => TableSchema::TYPE_INTEGER, 'length' => null, 'unsigned' => $unsigned];
+        }
+        if ($col === 'char' && $length === 36) {
+            return ['type' => TableSchema::TYPE_UUID, 'length' => null];
+        }
+        if ($col === 'char') {
+            return ['type' => TableSchema::TYPE_CHAR, 'length' => $length];
+        }
+        if (strpos($col, 'char') !== false) {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => $length];
+        }
+        if (strpos($col, 'text') !== false) {
+            $lengthName = substr($col, 0, -4);
+            $length = TableSchema::$columnLengths[$lengthName] ?? null;
+
+            return ['type' => TableSchema::TYPE_TEXT, 'length' => $length];
+        }
+        if ($col === 'binary' && $length === 16) {
+            return ['type' => TableSchema::TYPE_BINARY_UUID, 'length' => null];
+        }
+        if (strpos($col, 'blob') !== false || in_array($col, ['binary', 'varbinary'])) {
+            $lengthName = substr($col, 0, -4);
+            $length = TableSchema::$columnLengths[$lengthName] ?? $length;
+
+            return ['type' => TableSchema::TYPE_BINARY, 'length' => $length];
+        }
+        if (strpos($col, 'float') !== false || strpos($col, 'double') !== false) {
+            return [
+                'type' => TableSchema::TYPE_FLOAT,
+                'length' => $length,
+                'precision' => $precision,
+                'unsigned' => $unsigned,
+            ];
+        }
+        if (strpos($col, 'decimal') !== false) {
+            return [
+                'type' => TableSchema::TYPE_DECIMAL,
+                'length' => $length,
+                'precision' => $precision,
+                'unsigned' => $unsigned,
+            ];
+        }
+
+        if (strpos($col, 'json') !== false) {
+            return ['type' => TableSchema::TYPE_JSON, 'length' => null];
+        }
+
+        return ['type' => TableSchema::TYPE_STRING, 'length' => null];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertColumnDescription(TableSchema $schema, array $row): void
+    {
+        $field = $this->_convertColumn($row['Type']);
+        $field += [
+            'null' => $row['Null'] === 'YES',
+            'default' => $row['Default'],
+            'collate' => $row['Collation'],
+            'comment' => $row['Comment'],
+        ];
+        if (isset($row['Extra']) && $row['Extra'] === 'auto_increment') {
+            $field['autoIncrement'] = true;
+        }
+        $schema->addColumn($row['Field'], $field);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertIndexDescription(TableSchema $schema, array $row): void
+    {
+        $type = null;
+        $columns = $length = [];
+
+        $name = $row['Key_name'];
+        if ($name === 'PRIMARY') {
+            $name = $type = TableSchema::CONSTRAINT_PRIMARY;
+        }
+
+        if (!empty($row['Column_name'])) {
+            $columns[] = $row['Column_name'];
+        }
+
+        if ($row['Index_type'] === 'FULLTEXT') {
+            $type = TableSchema::INDEX_FULLTEXT;
+        } elseif ((int)$row['Non_unique'] === 0 && $type !== 'primary') {
+            $type = TableSchema::CONSTRAINT_UNIQUE;
+        } elseif ($type !== 'primary') {
+            $type = TableSchema::INDEX_INDEX;
+        }
+
+        if (!empty($row['Sub_part'])) {
+            $length[$row['Column_name']] = $row['Sub_part'];
+        }
+        $isIndex = (
+            $type === TableSchema::INDEX_INDEX ||
+            $type === TableSchema::INDEX_FULLTEXT
+        );
+        if ($isIndex) {
+            $existing = $schema->getIndex($name);
+        } else {
+            $existing = $schema->getConstraint($name);
+        }
+
+        // MySQL multi column indexes come back as multiple rows.
+        if (!empty($existing)) {
+            $columns = array_merge($existing['columns'], $columns);
+            $length = array_merge($existing['length'], $length);
+        }
+        if ($isIndex) {
+            $schema->addIndex($name, [
+                'type' => $type,
+                'columns' => $columns,
+                'length' => $length,
+            ]);
+        } else {
+            $schema->addConstraint($name, [
+                'type' => $type,
+                'columns' => $columns,
+                'length' => $length,
+            ]);
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeForeignKeySql(string $tableName, array $config): array
+    {
+        $sql = 'SELECT * FROM information_schema.key_column_usage AS kcu
+            INNER JOIN information_schema.referential_constraints AS rc
+            ON (
+                kcu.CONSTRAINT_NAME = rc.CONSTRAINT_NAME
+                AND kcu.CONSTRAINT_SCHEMA = rc.CONSTRAINT_SCHEMA
+            )
+            WHERE kcu.TABLE_SCHEMA = ? AND kcu.TABLE_NAME = ? AND rc.TABLE_NAME = ?
+            ORDER BY kcu.ORDINAL_POSITION ASC';
+
+        return [$sql, [$config['database'], $tableName, $tableName]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertForeignKeyDescription(TableSchema $schema, array $row): void
+    {
+        $data = [
+            'type' => TableSchema::CONSTRAINT_FOREIGN,
+            'columns' => [$row['COLUMN_NAME']],
+            'references' => [$row['REFERENCED_TABLE_NAME'], $row['REFERENCED_COLUMN_NAME']],
+            'update' => $this->_convertOnClause($row['UPDATE_RULE']),
+            'delete' => $this->_convertOnClause($row['DELETE_RULE']),
+        ];
+        $name = $row['CONSTRAINT_NAME'];
+        $schema->addConstraint($name, $data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function truncateTableSql(TableSchema $schema): array
+    {
+        return [sprintf('TRUNCATE TABLE `%s`', $schema->name())];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function createTableSql(TableSchema $schema, array $columns, array $constraints, array $indexes): array
+    {
+        $content = implode(",\n", array_merge($columns, $constraints, $indexes));
+        $temporary = $schema->isTemporary() ? ' TEMPORARY ' : ' ';
+        $content = sprintf("CREATE%sTABLE `%s` (\n%s\n)", $temporary, $schema->name(), $content);
+        $options = $schema->getOptions();
+        if (isset($options['engine'])) {
+            $content .= sprintf(' ENGINE=%s', $options['engine']);
+        }
+        if (isset($options['charset'])) {
+            $content .= sprintf(' DEFAULT CHARSET=%s', $options['charset']);
+        }
+        if (isset($options['collate'])) {
+            $content .= sprintf(' COLLATE=%s', $options['collate']);
+        }
+
+        return [$content];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function columnSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getColumn($name);
+
+        $sql = $this->_getTypeSpecificColumnSql($data['type'], $schema, $name);
+        if ($sql !== null) {
+            return $sql;
+        }
+
+        $out = $this->_driver->quoteIdentifier($name);
+        $nativeJson = $this->_driver->supports(DriverInterface::FEATURE_JSON);
+
+        $typeMap = [
+            TableSchema::TYPE_TINYINTEGER => ' TINYINT',
+            TableSchema::TYPE_SMALLINTEGER => ' SMALLINT',
+            TableSchema::TYPE_INTEGER => ' INTEGER',
+            TableSchema::TYPE_BIGINTEGER => ' BIGINT',
+            TableSchema::TYPE_BINARY_UUID => ' BINARY(16)',
+            TableSchema::TYPE_BOOLEAN => ' BOOLEAN',
+            TableSchema::TYPE_FLOAT => ' FLOAT',
+            TableSchema::TYPE_DECIMAL => ' DECIMAL',
+            TableSchema::TYPE_DATE => ' DATE',
+            TableSchema::TYPE_TIME => ' TIME',
+            TableSchema::TYPE_DATETIME => ' DATETIME',
+            TableSchema::TYPE_DATETIME_FRACTIONAL => ' DATETIME',
+            TableSchema::TYPE_TIMESTAMP => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE => ' TIMESTAMP',
+            TableSchema::TYPE_CHAR => ' CHAR',
+            TableSchema::TYPE_UUID => ' CHAR(36)',
+            TableSchema::TYPE_JSON => $nativeJson ? ' JSON' : ' LONGTEXT',
+        ];
+        $specialMap = [
+            'string' => true,
+            'text' => true,
+            'char' => true,
+            'binary' => true,
+        ];
+        if (isset($typeMap[$data['type']])) {
+            $out .= $typeMap[$data['type']];
+        }
+        if (isset($specialMap[$data['type']])) {
+            switch ($data['type']) {
+                case TableSchema::TYPE_STRING:
+                    $out .= ' VARCHAR';
+                    if (!isset($data['length'])) {
+                        $data['length'] = 255;
+                    }
+                    break;
+                case TableSchema::TYPE_TEXT:
+                    $isKnownLength = in_array($data['length'], TableSchema::$columnLengths);
+                    if (empty($data['length']) || !$isKnownLength) {
+                        $out .= ' TEXT';
+                        break;
+                    }
+
+                    /** @var string $length */
+                    $length = array_search($data['length'], TableSchema::$columnLengths);
+                    $out .= ' ' . strtoupper($length) . 'TEXT';
+
+                    break;
+                case TableSchema::TYPE_BINARY:
+                    $isKnownLength = in_array($data['length'], TableSchema::$columnLengths);
+                    if ($isKnownLength) {
+                        /** @var string $length */
+                        $length = array_search($data['length'], TableSchema::$columnLengths);
+                        $out .= ' ' . strtoupper($length) . 'BLOB';
+                        break;
+                    }
+
+                    if (empty($data['length'])) {
+                        $out .= ' BLOB';
+                        break;
+                    }
+
+                    if ($data['length'] > 2) {
+                        $out .= ' VARBINARY(' . $data['length'] . ')';
+                    } else {
+                        $out .= ' BINARY(' . $data['length'] . ')';
+                    }
+                    break;
+            }
+        }
+        $hasLength = [
+            TableSchema::TYPE_INTEGER,
+            TableSchema::TYPE_CHAR,
+            TableSchema::TYPE_SMALLINTEGER,
+            TableSchema::TYPE_TINYINTEGER,
+            TableSchema::TYPE_STRING,
+        ];
+        if (in_array($data['type'], $hasLength, true) && isset($data['length'])) {
+            $out .= '(' . $data['length'] . ')';
+        }
+
+        $lengthAndPrecisionTypes = [TableSchema::TYPE_FLOAT, TableSchema::TYPE_DECIMAL];
+        if (in_array($data['type'], $lengthAndPrecisionTypes, true) && isset($data['length'])) {
+            if (isset($data['precision'])) {
+                $out .= '(' . (int)$data['length'] . ',' . (int)$data['precision'] . ')';
+            } else {
+                $out .= '(' . (int)$data['length'] . ')';
+            }
+        }
+
+        $precisionTypes = [TableSchema::TYPE_DATETIME_FRACTIONAL, TableSchema::TYPE_TIMESTAMP_FRACTIONAL];
+        if (in_array($data['type'], $precisionTypes, true) && isset($data['precision'])) {
+            $out .= '(' . (int)$data['precision'] . ')';
+        }
+
+        $hasUnsigned = [
+            TableSchema::TYPE_TINYINTEGER,
+            TableSchema::TYPE_SMALLINTEGER,
+            TableSchema::TYPE_INTEGER,
+            TableSchema::TYPE_BIGINTEGER,
+            TableSchema::TYPE_FLOAT,
+            TableSchema::TYPE_DECIMAL,
+        ];
+        if (
+            in_array($data['type'], $hasUnsigned, true) &&
+            isset($data['unsigned']) &&
+            $data['unsigned'] === true
+        ) {
+            $out .= ' UNSIGNED';
+        }
+
+        $hasCollate = [
+            TableSchema::TYPE_TEXT,
+            TableSchema::TYPE_CHAR,
+            TableSchema::TYPE_STRING,
+        ];
+        if (in_array($data['type'], $hasCollate, true) && isset($data['collate']) && $data['collate'] !== '') {
+            $out .= ' COLLATE ' . $data['collate'];
+        }
+
+        if (isset($data['null']) && $data['null'] === false) {
+            $out .= ' NOT NULL';
+        }
+        $addAutoIncrement = (
+            $schema->getPrimaryKey() === [$name] &&
+            !$schema->hasAutoincrement() &&
+            !isset($data['autoIncrement'])
+        );
+        if (
+            in_array($data['type'], [TableSchema::TYPE_INTEGER, TableSchema::TYPE_BIGINTEGER]) &&
+            (
+                $data['autoIncrement'] === true ||
+                $addAutoIncrement
+            )
+        ) {
+            $out .= ' AUTO_INCREMENT';
+        }
+
+        $timestampTypes = [
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE,
+        ];
+        if (isset($data['null']) && $data['null'] === true && in_array($data['type'], $timestampTypes, true)) {
+            $out .= ' NULL';
+            unset($data['default']);
+        }
+
+        $dateTimeTypes = [
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE,
+        ];
+        if (
+            isset($data['default']) &&
+            in_array($data['type'], $dateTimeTypes) &&
+            strpos(strtolower($data['default']), 'current_timestamp') !== false
+        ) {
+            $out .= ' DEFAULT CURRENT_TIMESTAMP';
+            if (isset($data['precision'])) {
+                $out .= '(' . $data['precision'] . ')';
+            }
+            unset($data['default']);
+        }
+        if (isset($data['default'])) {
+            $out .= ' DEFAULT ' . $this->_driver->schemaValue($data['default']);
+            unset($data['default']);
+        }
+        if (isset($data['comment']) && $data['comment'] !== '') {
+            $out .= ' COMMENT ' . $this->_driver->schemaValue($data['comment']);
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function constraintSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getConstraint($name);
+        if ($data['type'] === TableSchema::CONSTRAINT_PRIMARY) {
+            $columns = array_map(
+                [$this->_driver, 'quoteIdentifier'],
+                $data['columns']
+            );
+
+            return sprintf('PRIMARY KEY (%s)', implode(', ', $columns));
+        }
+
+        $out = '';
+        if ($data['type'] === TableSchema::CONSTRAINT_UNIQUE) {
+            $out = 'UNIQUE KEY ';
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+            $out = 'CONSTRAINT ';
+        }
+        $out .= $this->_driver->quoteIdentifier($name);
+
+        return $this->_keySql($out, $data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s ADD %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $sql[] = sprintf($sqlPattern, $tableName, $this->constraintSql($schema, $name));
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s DROP FOREIGN KEY %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $constraintName = $this->_driver->quoteIdentifier($name);
+                $sql[] = sprintf($sqlPattern, $tableName, $constraintName);
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function indexSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getIndex($name);
+        $out = '';
+        if ($data['type'] === TableSchema::INDEX_INDEX) {
+            $out = 'KEY ';
+        }
+        if ($data['type'] === TableSchema::INDEX_FULLTEXT) {
+            $out = 'FULLTEXT KEY ';
+        }
+        $out .= $this->_driver->quoteIdentifier($name);
+
+        return $this->_keySql($out, $data);
+    }
+
+    /**
+     * Helper method for generating key SQL snippets.
+     *
+     * @param string $prefix The key prefix
+     * @param array $data Key data.
+     * @return string
+     */
+    protected function _keySql(string $prefix, array $data): string
+    {
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+        foreach ($data['columns'] as $i => $column) {
+            if (isset($data['length'][$column])) {
+                $columns[$i] .= sprintf('(%d)', $data['length'][$column]);
+            }
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+            return $prefix . sprintf(
+                ' FOREIGN KEY (%s) REFERENCES %s (%s) ON UPDATE %s ON DELETE %s',
+                implode(', ', $columns),
+                $this->_driver->quoteIdentifier($data['references'][0]),
+                $this->_convertConstraintColumns($data['references'][1]),
+                $this->_foreignOnClause($data['update']),
+                $this->_foreignOnClause($data['delete'])
+            );
+        }
+
+        return $prefix . ' (' . implode(', ', $columns) . ')';
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Schema\MysqlSchemaDialect',
+    'Cake\Database\Schema\MysqlSchema'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Schema/PostgresSchema.php b/vendor/cakephp/database/Schema/PostgresSchema.php
new file mode 100755
index 0000000..bd45991
--- /dev/null
+++ b/vendor/cakephp/database/Schema/PostgresSchema.php
@@ -0,0 +1,10 @@
+ $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesSql(array $config): array
+    {
+        $sql = 'SELECT table_name as name FROM information_schema.tables
+                WHERE table_schema = ? ORDER BY name';
+        $schema = empty($config['schema']) ? 'public' : $config['schema'];
+
+        return [$sql, [$schema]];
+    }
+
+    /**
+     * Generate the SQL to list the tables, excluding all views.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesWithoutViewsSql(array $config): array
+    {
+        $sql = 'SELECT table_name as name FROM information_schema.tables
+                WHERE table_schema = ? AND table_type = \'BASE TABLE\' ORDER BY name';
+        $schema = empty($config['schema']) ? 'public' : $config['schema'];
+
+        return [$sql, [$schema]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeColumnSql(string $tableName, array $config): array
+    {
+        $sql = 'SELECT DISTINCT table_schema AS schema,
+            column_name AS name,
+            data_type AS type,
+            is_nullable AS null, column_default AS default,
+            character_maximum_length AS char_length,
+            c.collation_name,
+            d.description as comment,
+            ordinal_position,
+            c.datetime_precision,
+            c.numeric_precision as column_precision,
+            c.numeric_scale as column_scale,
+            pg_get_serial_sequence(attr.attrelid::regclass::text, attr.attname) IS NOT NULL AS has_serial
+        FROM information_schema.columns c
+        INNER JOIN pg_catalog.pg_namespace ns ON (ns.nspname = table_schema)
+        INNER JOIN pg_catalog.pg_class cl ON (cl.relnamespace = ns.oid AND cl.relname = table_name)
+        LEFT JOIN pg_catalog.pg_index i ON (i.indrelid = cl.oid AND i.indkey[0] = c.ordinal_position)
+        LEFT JOIN pg_catalog.pg_description d on (cl.oid = d.objoid AND d.objsubid = c.ordinal_position)
+        LEFT JOIN pg_catalog.pg_attribute attr ON (cl.oid = attr.attrelid AND column_name = attr.attname)
+        WHERE table_name = ? AND table_schema = ? AND table_catalog = ?
+        ORDER BY ordinal_position';
+
+        $schema = empty($config['schema']) ? 'public' : $config['schema'];
+
+        return [$sql, [$tableName, $schema, $config['database']]];
+    }
+
+    /**
+     * Convert a column definition to the abstract types.
+     *
+     * The returned type will be a type that
+     * Cake\Database\TypeFactory can handle.
+     *
+     * @param string $column The column type + length
+     * @throws \Cake\Database\Exception\DatabaseException when column cannot be parsed.
+     * @return array Array of column information.
+     */
+    protected function _convertColumn(string $column): array
+    {
+        preg_match('/([a-z\s]+)(?:\(([0-9,]+)\))?/i', $column, $matches);
+        if (empty($matches)) {
+            throw new DatabaseException(sprintf('Unable to parse column type from "%s"', $column));
+        }
+
+        $col = strtolower($matches[1]);
+        $length = $precision = $scale = null;
+        if (isset($matches[2])) {
+            $length = (int)$matches[2];
+        }
+
+        $type = $this->_applyTypeSpecificColumnConversion(
+            $col,
+            compact('length', 'precision', 'scale')
+        );
+        if ($type !== null) {
+            return $type;
+        }
+
+        if (in_array($col, ['date', 'time', 'boolean'], true)) {
+            return ['type' => $col, 'length' => null];
+        }
+        if (in_array($col, ['timestamptz', 'timestamp with time zone'], true)) {
+            return ['type' => TableSchema::TYPE_TIMESTAMP_TIMEZONE, 'length' => null];
+        }
+        if (strpos($col, 'timestamp') !== false) {
+            return ['type' => TableSchema::TYPE_TIMESTAMP_FRACTIONAL, 'length' => null];
+        }
+        if (strpos($col, 'time') !== false) {
+            return ['type' => TableSchema::TYPE_TIME, 'length' => null];
+        }
+        if ($col === 'serial' || $col === 'integer') {
+            return ['type' => TableSchema::TYPE_INTEGER, 'length' => 10];
+        }
+        if ($col === 'bigserial' || $col === 'bigint') {
+            return ['type' => TableSchema::TYPE_BIGINTEGER, 'length' => 20];
+        }
+        if ($col === 'smallint') {
+            return ['type' => TableSchema::TYPE_SMALLINTEGER, 'length' => 5];
+        }
+        if ($col === 'inet') {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => 39];
+        }
+        if ($col === 'uuid') {
+            return ['type' => TableSchema::TYPE_UUID, 'length' => null];
+        }
+        if ($col === 'char') {
+            return ['type' => TableSchema::TYPE_CHAR, 'length' => $length];
+        }
+        if (strpos($col, 'character') !== false) {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => $length];
+        }
+        // money is 'string' as it includes arbitrary text content
+        // before the number value.
+        if (strpos($col, 'money') !== false || $col === 'string') {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => $length];
+        }
+        if (strpos($col, 'text') !== false) {
+            return ['type' => TableSchema::TYPE_TEXT, 'length' => null];
+        }
+        if ($col === 'bytea') {
+            return ['type' => TableSchema::TYPE_BINARY, 'length' => null];
+        }
+        if ($col === 'real' || strpos($col, 'double') !== false) {
+            return ['type' => TableSchema::TYPE_FLOAT, 'length' => null];
+        }
+        if (
+            strpos($col, 'numeric') !== false ||
+            strpos($col, 'decimal') !== false
+        ) {
+            return ['type' => TableSchema::TYPE_DECIMAL, 'length' => null];
+        }
+
+        if (strpos($col, 'json') !== false) {
+            return ['type' => TableSchema::TYPE_JSON, 'length' => null];
+        }
+
+        $length = is_numeric($length) ? $length : null;
+
+        return ['type' => TableSchema::TYPE_STRING, 'length' => $length];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertColumnDescription(TableSchema $schema, array $row): void
+    {
+        $field = $this->_convertColumn($row['type']);
+
+        if ($field['type'] === TableSchema::TYPE_BOOLEAN) {
+            if ($row['default'] === 'true') {
+                $row['default'] = 1;
+            }
+            if ($row['default'] === 'false') {
+                $row['default'] = 0;
+            }
+        }
+        if (!empty($row['has_serial'])) {
+            $field['autoIncrement'] = true;
+        }
+
+        $field += [
+            'default' => $this->_defaultValue($row['default']),
+            'null' => $row['null'] === 'YES',
+            'collate' => $row['collation_name'],
+            'comment' => $row['comment'],
+        ];
+        $field['length'] = $row['char_length'] ?: $field['length'];
+
+        if ($field['type'] === 'numeric' || $field['type'] === 'decimal') {
+            $field['length'] = $row['column_precision'];
+            $field['precision'] = $row['column_scale'] ?: null;
+        }
+
+        if ($field['type'] === TableSchema::TYPE_TIMESTAMP_FRACTIONAL) {
+            $field['precision'] = $row['datetime_precision'];
+            if ($field['precision'] === 0) {
+                $field['type'] = TableSchema::TYPE_TIMESTAMP;
+            }
+        }
+
+        if ($field['type'] === TableSchema::TYPE_TIMESTAMP_TIMEZONE) {
+            $field['precision'] = $row['datetime_precision'];
+        }
+
+        $schema->addColumn($row['name'], $field);
+    }
+
+    /**
+     * Manipulate the default value.
+     *
+     * Postgres includes sequence data and casting information in default values.
+     * We need to remove those.
+     *
+     * @param string|int|null $default The default value.
+     * @return string|int|null
+     */
+    protected function _defaultValue($default)
+    {
+        if (is_numeric($default) || $default === null) {
+            return $default;
+        }
+        // Sequences
+        if (strpos($default, 'nextval') === 0) {
+            return null;
+        }
+
+        if (strpos($default, 'NULL::') === 0) {
+            return null;
+        }
+
+        // Remove quotes and postgres casts
+        return preg_replace(
+            "/^'(.*)'(?:::.*)$/",
+            '$1',
+            $default
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeIndexSql(string $tableName, array $config): array
+    {
+        $sql = 'SELECT
+        c2.relname,
+        a.attname,
+        i.indisprimary,
+        i.indisunique
+        FROM pg_catalog.pg_namespace n
+        INNER JOIN pg_catalog.pg_class c ON (n.oid = c.relnamespace)
+        INNER JOIN pg_catalog.pg_index i ON (c.oid = i.indrelid)
+        INNER JOIN pg_catalog.pg_class c2 ON (c2.oid = i.indexrelid)
+        INNER JOIN pg_catalog.pg_attribute a ON (a.attrelid = c.oid AND i.indrelid::regclass = a.attrelid::regclass)
+        WHERE n.nspname = ?
+        AND a.attnum = ANY(i.indkey)
+        AND c.relname = ?
+        ORDER BY i.indisprimary DESC, i.indisunique DESC, c.relname, a.attnum';
+
+        $schema = 'public';
+        if (!empty($config['schema'])) {
+            $schema = $config['schema'];
+        }
+
+        return [$sql, [$schema, $tableName]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertIndexDescription(TableSchema $schema, array $row): void
+    {
+        $type = TableSchema::INDEX_INDEX;
+        $name = $row['relname'];
+        if ($row['indisprimary']) {
+            $name = $type = TableSchema::CONSTRAINT_PRIMARY;
+        }
+        if ($row['indisunique'] && $type === TableSchema::INDEX_INDEX) {
+            $type = TableSchema::CONSTRAINT_UNIQUE;
+        }
+        if ($type === TableSchema::CONSTRAINT_PRIMARY || $type === TableSchema::CONSTRAINT_UNIQUE) {
+            $this->_convertConstraint($schema, $name, $type, $row);
+
+            return;
+        }
+        $index = $schema->getIndex($name);
+        if (!$index) {
+            $index = [
+                'type' => $type,
+                'columns' => [],
+            ];
+        }
+        $index['columns'][] = $row['attname'];
+        $schema->addIndex($name, $index);
+    }
+
+    /**
+     * Add/update a constraint into the schema object.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table to update.
+     * @param string $name The index name.
+     * @param string $type The index type.
+     * @param array $row The metadata record to update with.
+     * @return void
+     */
+    protected function _convertConstraint(TableSchema $schema, string $name, string $type, array $row): void
+    {
+        $constraint = $schema->getConstraint($name);
+        if (!$constraint) {
+            $constraint = [
+                'type' => $type,
+                'columns' => [],
+            ];
+        }
+        $constraint['columns'][] = $row['attname'];
+        $schema->addConstraint($name, $constraint);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeForeignKeySql(string $tableName, array $config): array
+    {
+        // phpcs:disable Generic.Files.LineLength
+        $sql = 'SELECT
+        c.conname AS name,
+        c.contype AS type,
+        a.attname AS column_name,
+        c.confmatchtype AS match_type,
+        c.confupdtype AS on_update,
+        c.confdeltype AS on_delete,
+        c.confrelid::regclass AS references_table,
+        ab.attname AS references_field
+        FROM pg_catalog.pg_namespace n
+        INNER JOIN pg_catalog.pg_class cl ON (n.oid = cl.relnamespace)
+        INNER JOIN pg_catalog.pg_constraint c ON (n.oid = c.connamespace)
+        INNER JOIN pg_catalog.pg_attribute a ON (a.attrelid = cl.oid AND c.conrelid = a.attrelid AND a.attnum = ANY(c.conkey))
+        INNER JOIN pg_catalog.pg_attribute ab ON (a.attrelid = cl.oid AND c.confrelid = ab.attrelid AND ab.attnum = ANY(c.confkey))
+        WHERE n.nspname = ?
+        AND cl.relname = ?
+        ORDER BY name, a.attnum, ab.attnum DESC';
+        // phpcs:enable Generic.Files.LineLength
+
+        $schema = empty($config['schema']) ? 'public' : $config['schema'];
+
+        return [$sql, [$schema, $tableName]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertForeignKeyDescription(TableSchema $schema, array $row): void
+    {
+        $data = [
+            'type' => TableSchema::CONSTRAINT_FOREIGN,
+            'columns' => $row['column_name'],
+            'references' => [$row['references_table'], $row['references_field']],
+            'update' => $this->_convertOnClause($row['on_update']),
+            'delete' => $this->_convertOnClause($row['on_delete']),
+        ];
+        $schema->addConstraint($row['name'], $data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _convertOnClause(string $clause): string
+    {
+        if ($clause === 'r') {
+            return TableSchema::ACTION_RESTRICT;
+        }
+        if ($clause === 'a') {
+            return TableSchema::ACTION_NO_ACTION;
+        }
+        if ($clause === 'c') {
+            return TableSchema::ACTION_CASCADE;
+        }
+
+        return TableSchema::ACTION_SET_NULL;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function columnSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getColumn($name);
+
+        $sql = $this->_getTypeSpecificColumnSql($data['type'], $schema, $name);
+        if ($sql !== null) {
+            return $sql;
+        }
+
+        $out = $this->_driver->quoteIdentifier($name);
+        $typeMap = [
+            TableSchema::TYPE_TINYINTEGER => ' SMALLINT',
+            TableSchema::TYPE_SMALLINTEGER => ' SMALLINT',
+            TableSchema::TYPE_BINARY_UUID => ' UUID',
+            TableSchema::TYPE_BOOLEAN => ' BOOLEAN',
+            TableSchema::TYPE_FLOAT => ' FLOAT',
+            TableSchema::TYPE_DECIMAL => ' DECIMAL',
+            TableSchema::TYPE_DATE => ' DATE',
+            TableSchema::TYPE_TIME => ' TIME',
+            TableSchema::TYPE_DATETIME => ' TIMESTAMP',
+            TableSchema::TYPE_DATETIME_FRACTIONAL => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE => ' TIMESTAMPTZ',
+            TableSchema::TYPE_UUID => ' UUID',
+            TableSchema::TYPE_CHAR => ' CHAR',
+            TableSchema::TYPE_JSON => ' JSONB',
+        ];
+
+        if (isset($typeMap[$data['type']])) {
+            $out .= $typeMap[$data['type']];
+        }
+
+        if ($data['type'] === TableSchema::TYPE_INTEGER || $data['type'] === TableSchema::TYPE_BIGINTEGER) {
+            $type = $data['type'] === TableSchema::TYPE_INTEGER ? ' INTEGER' : ' BIGINT';
+            if ($schema->getPrimaryKey() === [$name] || $data['autoIncrement'] === true) {
+                $type = $data['type'] === TableSchema::TYPE_INTEGER ? ' SERIAL' : ' BIGSERIAL';
+                unset($data['null'], $data['default']);
+            }
+            $out .= $type;
+        }
+
+        if ($data['type'] === TableSchema::TYPE_TEXT && $data['length'] !== TableSchema::LENGTH_TINY) {
+            $out .= ' TEXT';
+        }
+        if ($data['type'] === TableSchema::TYPE_BINARY) {
+            $out .= ' BYTEA';
+        }
+
+        if ($data['type'] === TableSchema::TYPE_CHAR) {
+            $out .= '(' . $data['length'] . ')';
+        }
+
+        if (
+            $data['type'] === TableSchema::TYPE_STRING ||
+            (
+                $data['type'] === TableSchema::TYPE_TEXT &&
+                $data['length'] === TableSchema::LENGTH_TINY
+            )
+        ) {
+            $out .= ' VARCHAR';
+            if (isset($data['length']) && $data['length'] !== '') {
+                $out .= '(' . $data['length'] . ')';
+            }
+        }
+
+        $hasCollate = [TableSchema::TYPE_TEXT, TableSchema::TYPE_STRING, TableSchema::TYPE_CHAR];
+        if (in_array($data['type'], $hasCollate, true) && isset($data['collate']) && $data['collate'] !== '') {
+            $out .= ' COLLATE "' . $data['collate'] . '"';
+        }
+
+        $hasPrecision = [
+            TableSchema::TYPE_FLOAT,
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE,
+        ];
+        if (in_array($data['type'], $hasPrecision) && isset($data['precision'])) {
+            $out .= '(' . $data['precision'] . ')';
+        }
+
+        if (
+            $data['type'] === TableSchema::TYPE_DECIMAL &&
+            (
+                isset($data['length']) ||
+                isset($data['precision'])
+            )
+        ) {
+            $out .= '(' . $data['length'] . ',' . (int)$data['precision'] . ')';
+        }
+
+        if (isset($data['null']) && $data['null'] === false) {
+            $out .= ' NOT NULL';
+        }
+
+        $datetimeTypes = [
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE,
+        ];
+        if (
+            isset($data['default']) &&
+            in_array($data['type'], $datetimeTypes) &&
+            strtolower($data['default']) === 'current_timestamp'
+        ) {
+            $out .= ' DEFAULT CURRENT_TIMESTAMP';
+        } elseif (isset($data['default'])) {
+            $defaultValue = $data['default'];
+            if ($data['type'] === 'boolean') {
+                $defaultValue = (bool)$defaultValue;
+            }
+            $out .= ' DEFAULT ' . $this->_driver->schemaValue($defaultValue);
+        } elseif (isset($data['null']) && $data['null'] !== false) {
+            $out .= ' DEFAULT NULL';
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s ADD %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $sql[] = sprintf($sqlPattern, $tableName, $this->constraintSql($schema, $name));
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s DROP CONSTRAINT %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $constraintName = $this->_driver->quoteIdentifier($name);
+                $sql[] = sprintf($sqlPattern, $tableName, $constraintName);
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function indexSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getIndex($name);
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+
+        return sprintf(
+            'CREATE INDEX %s ON %s (%s)',
+            $this->_driver->quoteIdentifier($name),
+            $this->_driver->quoteIdentifier($schema->name()),
+            implode(', ', $columns)
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function constraintSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getConstraint($name);
+        $out = 'CONSTRAINT ' . $this->_driver->quoteIdentifier($name);
+        if ($data['type'] === TableSchema::CONSTRAINT_PRIMARY) {
+            $out = 'PRIMARY KEY';
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_UNIQUE) {
+            $out .= ' UNIQUE';
+        }
+
+        return $this->_keySql($out, $data);
+    }
+
+    /**
+     * Helper method for generating key SQL snippets.
+     *
+     * @param string $prefix The key prefix
+     * @param array $data Key data.
+     * @return string
+     */
+    protected function _keySql(string $prefix, array $data): string
+    {
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+        if ($data['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+            return $prefix . sprintf(
+                ' FOREIGN KEY (%s) REFERENCES %s (%s) ON UPDATE %s ON DELETE %s DEFERRABLE INITIALLY IMMEDIATE',
+                implode(', ', $columns),
+                $this->_driver->quoteIdentifier($data['references'][0]),
+                $this->_convertConstraintColumns($data['references'][1]),
+                $this->_foreignOnClause($data['update']),
+                $this->_foreignOnClause($data['delete'])
+            );
+        }
+
+        return $prefix . ' (' . implode(', ', $columns) . ')';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function createTableSql(TableSchema $schema, array $columns, array $constraints, array $indexes): array
+    {
+        $content = array_merge($columns, $constraints);
+        $content = implode(",\n", array_filter($content));
+        $tableName = $this->_driver->quoteIdentifier($schema->name());
+        $dbSchema = $this->_driver->schema();
+        if ($dbSchema != 'public') {
+            $tableName = $this->_driver->quoteIdentifier($dbSchema) . '.' . $tableName;
+        }
+        $temporary = $schema->isTemporary() ? ' TEMPORARY ' : ' ';
+        $out = [];
+        $out[] = sprintf("CREATE%sTABLE %s (\n%s\n)", $temporary, $tableName, $content);
+        foreach ($indexes as $index) {
+            $out[] = $index;
+        }
+        foreach ($schema->columns() as $column) {
+            $columnData = $schema->getColumn($column);
+            if (isset($columnData['comment'])) {
+                $out[] = sprintf(
+                    'COMMENT ON COLUMN %s.%s IS %s',
+                    $tableName,
+                    $this->_driver->quoteIdentifier($column),
+                    $this->_driver->schemaValue($columnData['comment'])
+                );
+            }
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function truncateTableSql(TableSchema $schema): array
+    {
+        $name = $this->_driver->quoteIdentifier($schema->name());
+
+        return [
+            sprintf('TRUNCATE %s RESTART IDENTITY CASCADE', $name),
+        ];
+    }
+
+    /**
+     * Generate the SQL to drop a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema Table instance
+     * @return array SQL statements to drop a table.
+     */
+    public function dropTableSql(TableSchema $schema): array
+    {
+        $sql = sprintf(
+            'DROP TABLE %s CASCADE',
+            $this->_driver->quoteIdentifier($schema->name())
+        );
+
+        return [$sql];
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Schema\PostgresSchemaDialect',
+    'Cake\Database\Schema\PostgresSchema'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Schema/SchemaDialect.php b/vendor/cakephp/database/Schema/SchemaDialect.php
new file mode 100755
index 0000000..a9a1f91
--- /dev/null
+++ b/vendor/cakephp/database/Schema/SchemaDialect.php
@@ -0,0 +1,346 @@
+ listTablesWithoutViewsSql(array $config) Generate the SQL to list the tables, excluding all views.
+ */
+abstract class SchemaDialect
+{
+    /**
+     * The driver instance being used.
+     *
+     * @var \Cake\Database\DriverInterface
+     */
+    protected $_driver;
+
+    /**
+     * Constructor
+     *
+     * This constructor will connect the driver so that methods like columnSql() and others
+     * will fail when the driver has not been connected.
+     *
+     * @param \Cake\Database\DriverInterface $driver The driver to use.
+     */
+    public function __construct(DriverInterface $driver)
+    {
+        $driver->connect();
+        $this->_driver = $driver;
+    }
+
+    /**
+     * Generate an ON clause for a foreign key.
+     *
+     * @param string $on The on clause
+     * @return string
+     */
+    protected function _foreignOnClause(string $on): string
+    {
+        if ($on === TableSchema::ACTION_SET_NULL) {
+            return 'SET NULL';
+        }
+        if ($on === TableSchema::ACTION_SET_DEFAULT) {
+            return 'SET DEFAULT';
+        }
+        if ($on === TableSchema::ACTION_CASCADE) {
+            return 'CASCADE';
+        }
+        if ($on === TableSchema::ACTION_RESTRICT) {
+            return 'RESTRICT';
+        }
+        if ($on === TableSchema::ACTION_NO_ACTION) {
+            return 'NO ACTION';
+        }
+
+        throw new InvalidArgumentException('Invalid value for "on": ' . $on);
+    }
+
+    /**
+     * Convert string on clauses to the abstract ones.
+     *
+     * @param string $clause The on clause to convert.
+     * @return string
+     */
+    protected function _convertOnClause(string $clause): string
+    {
+        if ($clause === 'CASCADE' || $clause === 'RESTRICT') {
+            return strtolower($clause);
+        }
+        if ($clause === 'NO ACTION') {
+            return TableSchema::ACTION_NO_ACTION;
+        }
+
+        return TableSchema::ACTION_SET_NULL;
+    }
+
+    /**
+     * Convert foreign key constraints references to a valid
+     * stringified list
+     *
+     * @param array|string $references The referenced columns of a foreign key constraint statement
+     * @return string
+     */
+    protected function _convertConstraintColumns($references): string
+    {
+        if (is_string($references)) {
+            return $this->_driver->quoteIdentifier($references);
+        }
+
+        return implode(', ', array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $references
+        ));
+    }
+
+    /**
+     * Tries to use a matching database type to generate the SQL
+     * fragment for a single column in a table.
+     *
+     * @param string $columnType The column type.
+     * @param \Cake\Database\Schema\TableSchemaInterface $schema The table schema instance the column is in.
+     * @param string $column The name of the column.
+     * @return string|null An SQL fragment, or `null` in case no corresponding type was found or the type didn't provide
+     *  custom column SQL.
+     */
+    protected function _getTypeSpecificColumnSql(
+        string $columnType,
+        TableSchemaInterface $schema,
+        string $column
+    ): ?string {
+        if (!TypeFactory::getMap($columnType)) {
+            return null;
+        }
+
+        $type = TypeFactory::build($columnType);
+        if (!($type instanceof ColumnSchemaAwareInterface)) {
+            return null;
+        }
+
+        return $type->getColumnSql($schema, $column, $this->_driver);
+    }
+
+    /**
+     * Tries to use a matching database type to convert a SQL column
+     * definition to an abstract type definition.
+     *
+     * @param string $columnType The column type.
+     * @param array $definition The column definition.
+     * @return array|null Array of column information, or `null` in case no corresponding type was found or the type
+     *  didn't provide custom column information.
+     */
+    protected function _applyTypeSpecificColumnConversion(string $columnType, array $definition): ?array
+    {
+        if (!TypeFactory::getMap($columnType)) {
+            return null;
+        }
+
+        $type = TypeFactory::build($columnType);
+        if (!($type instanceof ColumnSchemaAwareInterface)) {
+            return null;
+        }
+
+        return $type->convertColumnDefinition($definition, $this->_driver);
+    }
+
+    /**
+     * Generate the SQL to drop a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema Schema instance
+     * @return array SQL statements to drop a table.
+     */
+    public function dropTableSql(TableSchema $schema): array
+    {
+        $sql = sprintf(
+            'DROP TABLE %s',
+            $this->_driver->quoteIdentifier($schema->name())
+        );
+
+        return [$sql];
+    }
+
+    /**
+     * Generate the SQL to list the tables.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    abstract public function listTablesSql(array $config): array;
+
+    /**
+     * Generate the SQL to describe a table.
+     *
+     * @param string $tableName The table name to get information on.
+     * @param array $config The connection configuration.
+     * @return array An array of (sql, params) to execute.
+     */
+    abstract public function describeColumnSql(string $tableName, array $config): array;
+
+    /**
+     * Generate the SQL to describe the indexes in a table.
+     *
+     * @param string $tableName The table name to get information on.
+     * @param array $config The connection configuration.
+     * @return array An array of (sql, params) to execute.
+     */
+    abstract public function describeIndexSql(string $tableName, array $config): array;
+
+    /**
+     * Generate the SQL to describe the foreign keys in a table.
+     *
+     * @param string $tableName The table name to get information on.
+     * @param array $config The connection configuration.
+     * @return array An array of (sql, params) to execute.
+     */
+    abstract public function describeForeignKeySql(string $tableName, array $config): array;
+
+    /**
+     * Generate the SQL to describe table options
+     *
+     * @param string $tableName Table name.
+     * @param array $config The connection configuration.
+     * @return array SQL statements to get options for a table.
+     */
+    public function describeOptionsSql(string $tableName, array $config): array
+    {
+        return ['', ''];
+    }
+
+    /**
+     * Convert field description results into abstract schema fields.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table object to append fields to.
+     * @param array $row The row data from `describeColumnSql`.
+     * @return void
+     */
+    abstract public function convertColumnDescription(TableSchema $schema, array $row): void;
+
+    /**
+     * Convert an index description results into abstract schema indexes or constraints.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table object to append
+     *    an index or constraint to.
+     * @param array $row The row data from `describeIndexSql`.
+     * @return void
+     */
+    abstract public function convertIndexDescription(TableSchema $schema, array $row): void;
+
+    /**
+     * Convert a foreign key description into constraints on the Table object.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table object to append
+     *    a constraint to.
+     * @param array $row The row data from `describeForeignKeySql`.
+     * @return void
+     */
+    abstract public function convertForeignKeyDescription(TableSchema $schema, array $row): void;
+
+    /**
+     * Convert options data into table options.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema Table instance.
+     * @param array $row The row of data.
+     * @return void
+     */
+    public function convertOptionsDescription(TableSchema $schema, array $row): void
+    {
+    }
+
+    /**
+     * Generate the SQL to create a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema Table instance.
+     * @param array $columns The columns to go inside the table.
+     * @param array $constraints The constraints for the table.
+     * @param array $indexes The indexes for the table.
+     * @return array SQL statements to create a table.
+     */
+    abstract public function createTableSql(
+        TableSchema $schema,
+        array $columns,
+        array $constraints,
+        array $indexes
+    ): array;
+
+    /**
+     * Generate the SQL fragment for a single column in a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the column is in.
+     * @param string $name The name of the column.
+     * @return string SQL fragment.
+     */
+    abstract public function columnSql(TableSchema $schema, string $name): string;
+
+    /**
+     * Generate the SQL queries needed to add foreign key constraints to the table
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the foreign key constraints are.
+     * @return array SQL fragment.
+     */
+    abstract public function addConstraintSql(TableSchema $schema): array;
+
+    /**
+     * Generate the SQL queries needed to drop foreign key constraints from the table
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the foreign key constraints are.
+     * @return array SQL fragment.
+     */
+    abstract public function dropConstraintSql(TableSchema $schema): array;
+
+    /**
+     * Generate the SQL fragments for defining table constraints.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the column is in.
+     * @param string $name The name of the column.
+     * @return string SQL fragment.
+     */
+    abstract public function constraintSql(TableSchema $schema, string $name): string;
+
+    /**
+     * Generate the SQL fragment for a single index in a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table object the column is in.
+     * @param string $name The name of the column.
+     * @return string SQL fragment.
+     */
+    abstract public function indexSql(TableSchema $schema, string $name): string;
+
+    /**
+     * Generate the SQL to truncate a table.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema Table instance.
+     * @return array SQL statements to truncate a table.
+     */
+    abstract public function truncateTableSql(TableSchema $schema): array;
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Schema\SchemaDialect',
+    'Cake\Database\Schema\BaseSchema'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Schema/SqlGeneratorInterface.php b/vendor/cakephp/database/Schema/SqlGeneratorInterface.php
new file mode 100755
index 0000000..9fbd591
--- /dev/null
+++ b/vendor/cakephp/database/Schema/SqlGeneratorInterface.php
@@ -0,0 +1,72 @@
+
+     */
+    protected $_constraintsIdMap = [];
+
+    /**
+     * Whether there is any table in this connection to SQLite containing sequences.
+     *
+     * @var bool
+     */
+    protected $_hasSequences;
+
+    /**
+     * Convert a column definition to the abstract types.
+     *
+     * The returned type will be a type that
+     * Cake\Database\TypeFactory can handle.
+     *
+     * @param string $column The column type + length
+     * @throws \Cake\Database\Exception\DatabaseException when unable to parse column type
+     * @return array Array of column information.
+     */
+    protected function _convertColumn(string $column): array
+    {
+        if ($column === '') {
+            return ['type' => TableSchema::TYPE_TEXT, 'length' => null];
+        }
+
+        preg_match('/(unsigned)?\s*([a-z]+)(?:\(([0-9,]+)\))?/i', $column, $matches);
+        if (empty($matches)) {
+            throw new DatabaseException(sprintf('Unable to parse column type from "%s"', $column));
+        }
+
+        $unsigned = false;
+        if (strtolower($matches[1]) === 'unsigned') {
+            $unsigned = true;
+        }
+
+        $col = strtolower($matches[2]);
+        $length = $precision = $scale = null;
+        if (isset($matches[3])) {
+            $length = $matches[3];
+            if (strpos($length, ',') !== false) {
+                [$length, $precision] = explode(',', $length);
+            }
+            $length = (int)$length;
+            $precision = (int)$precision;
+        }
+
+        $type = $this->_applyTypeSpecificColumnConversion(
+            $col,
+            compact('length', 'precision', 'scale')
+        );
+        if ($type !== null) {
+            return $type;
+        }
+
+        if ($col === 'bigint') {
+            return ['type' => TableSchema::TYPE_BIGINTEGER, 'length' => $length, 'unsigned' => $unsigned];
+        }
+        if ($col === 'smallint') {
+            return ['type' => TableSchema::TYPE_SMALLINTEGER, 'length' => $length, 'unsigned' => $unsigned];
+        }
+        if ($col === 'tinyint') {
+            return ['type' => TableSchema::TYPE_TINYINTEGER, 'length' => $length, 'unsigned' => $unsigned];
+        }
+        if (strpos($col, 'int') !== false) {
+            return ['type' => TableSchema::TYPE_INTEGER, 'length' => $length, 'unsigned' => $unsigned];
+        }
+        if (strpos($col, 'decimal') !== false) {
+            return [
+                'type' => TableSchema::TYPE_DECIMAL,
+                'length' => $length,
+                'precision' => $precision,
+                'unsigned' => $unsigned,
+            ];
+        }
+        if (in_array($col, ['float', 'real', 'double'])) {
+            return [
+                'type' => TableSchema::TYPE_FLOAT,
+                'length' => $length,
+                'precision' => $precision,
+                'unsigned' => $unsigned,
+            ];
+        }
+
+        if (strpos($col, 'boolean') !== false) {
+            return ['type' => TableSchema::TYPE_BOOLEAN, 'length' => null];
+        }
+
+        if (($col === 'char' && $length === 36) || $col === 'uuid') {
+            return ['type' => TableSchema::TYPE_UUID, 'length' => null];
+        }
+        if ($col === 'char') {
+            return ['type' => TableSchema::TYPE_CHAR, 'length' => $length];
+        }
+        if (strpos($col, 'char') !== false) {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => $length];
+        }
+
+        if ($col === 'binary' && $length === 16) {
+            return ['type' => TableSchema::TYPE_BINARY_UUID, 'length' => null];
+        }
+        if (in_array($col, ['blob', 'clob', 'binary', 'varbinary'])) {
+            return ['type' => TableSchema::TYPE_BINARY, 'length' => $length];
+        }
+
+        $datetimeTypes = [
+            'date',
+            'time',
+            'timestamp',
+            'timestampfractional',
+            'timestamptimezone',
+            'datetime',
+            'datetimefractional',
+        ];
+        if (in_array($col, $datetimeTypes)) {
+            return ['type' => $col, 'length' => null];
+        }
+
+        return ['type' => TableSchema::TYPE_TEXT, 'length' => null];
+    }
+
+    /**
+     * Generate the SQL to list the tables and views.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesSql(array $config): array
+    {
+        return [
+            'SELECT name FROM sqlite_master ' .
+            'WHERE (type="table" OR type="view") ' .
+            'AND name != "sqlite_sequence" ORDER BY name',
+            [],
+        ];
+    }
+
+    /**
+     * Generate the SQL to list the tables, excluding all views.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesWithoutViewsSql(array $config): array
+    {
+        return [
+            'SELECT name FROM sqlite_master WHERE type="table" ' .
+            'AND name != "sqlite_sequence" ORDER BY name',
+            [],
+        ];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeColumnSql(string $tableName, array $config): array
+    {
+        $sql = sprintf(
+            'PRAGMA table_info(%s)',
+            $this->_driver->quoteIdentifier($tableName)
+        );
+
+        return [$sql, []];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertColumnDescription(TableSchema $schema, array $row): void
+    {
+        $field = $this->_convertColumn($row['type']);
+        $field += [
+            'null' => !$row['notnull'],
+            'default' => $this->_defaultValue($row['dflt_value']),
+        ];
+        $primary = $schema->getConstraint('primary');
+
+        if ($row['pk'] && empty($primary)) {
+            $field['null'] = false;
+            $field['autoIncrement'] = true;
+        }
+
+        // SQLite does not support autoincrement on composite keys.
+        if ($row['pk'] && !empty($primary)) {
+            $existingColumn = $primary['columns'][0];
+            /** @psalm-suppress PossiblyNullOperand */
+            $schema->addColumn($existingColumn, ['autoIncrement' => null] + $schema->getColumn($existingColumn));
+        }
+
+        $schema->addColumn($row['name'], $field);
+        if ($row['pk']) {
+            $constraint = (array)$schema->getConstraint('primary') + [
+                'type' => TableSchema::CONSTRAINT_PRIMARY,
+                'columns' => [],
+            ];
+            $constraint['columns'] = array_merge($constraint['columns'], [$row['name']]);
+            $schema->addConstraint('primary', $constraint);
+        }
+    }
+
+    /**
+     * Manipulate the default value.
+     *
+     * Sqlite includes quotes and bared NULLs in default values.
+     * We need to remove those.
+     *
+     * @param string|int|null $default The default value.
+     * @return string|int|null
+     */
+    protected function _defaultValue($default)
+    {
+        if ($default === 'NULL' || $default === null) {
+            return null;
+        }
+
+        // Remove quotes
+        if (is_string($default) && preg_match("/^'(.*)'$/", $default, $matches)) {
+            return str_replace("''", "'", $matches[1]);
+        }
+
+        return $default;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeIndexSql(string $tableName, array $config): array
+    {
+        $sql = sprintf(
+            'PRAGMA index_list(%s)',
+            $this->_driver->quoteIdentifier($tableName)
+        );
+
+        return [$sql, []];
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Since SQLite does not have a way to get metadata about all indexes at once,
+     * additional queries are done here. Sqlite constraint names are not
+     * stable, and the names for constraints will not match those used to create
+     * the table. This is a limitation in Sqlite's metadata features.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table object to append
+     *    an index or constraint to.
+     * @param array $row The row data from `describeIndexSql`.
+     * @return void
+     */
+    public function convertIndexDescription(TableSchema $schema, array $row): void
+    {
+        $sql = sprintf(
+            'PRAGMA index_info(%s)',
+            $this->_driver->quoteIdentifier($row['name'])
+        );
+        $statement = $this->_driver->prepare($sql);
+        $statement->execute();
+        $columns = [];
+        /** @psalm-suppress PossiblyFalseIterator */
+        foreach ($statement->fetchAll('assoc') as $column) {
+            $columns[] = $column['name'];
+        }
+        $statement->closeCursor();
+        if ($row['unique']) {
+            $schema->addConstraint($row['name'], [
+                'type' => TableSchema::CONSTRAINT_UNIQUE,
+                'columns' => $columns,
+            ]);
+        } else {
+            $schema->addIndex($row['name'], [
+                'type' => TableSchema::INDEX_INDEX,
+                'columns' => $columns,
+            ]);
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeForeignKeySql(string $tableName, array $config): array
+    {
+        $sql = sprintf('PRAGMA foreign_key_list(%s)', $this->_driver->quoteIdentifier($tableName));
+
+        return [$sql, []];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertForeignKeyDescription(TableSchema $schema, array $row): void
+    {
+        $name = $row['from'] . '_fk';
+
+        $update = $row['on_update'] ?? '';
+        $delete = $row['on_delete'] ?? '';
+        $data = [
+            'type' => TableSchema::CONSTRAINT_FOREIGN,
+            'columns' => [$row['from']],
+            'references' => [$row['table'], $row['to']],
+            'update' => $this->_convertOnClause($update),
+            'delete' => $this->_convertOnClause($delete),
+        ];
+
+        if (isset($this->_constraintsIdMap[$schema->name()][$row['id']])) {
+            $name = $this->_constraintsIdMap[$schema->name()][$row['id']];
+        } else {
+            $this->_constraintsIdMap[$schema->name()][$row['id']] = $name;
+        }
+
+        $schema->addConstraint($name, $data);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the column is in.
+     * @param string $name The name of the column.
+     * @return string SQL fragment.
+     * @throws \Cake\Database\Exception\DatabaseException when the column type is unknown
+     */
+    public function columnSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getColumn($name);
+
+        $sql = $this->_getTypeSpecificColumnSql($data['type'], $schema, $name);
+        if ($sql !== null) {
+            return $sql;
+        }
+
+        $typeMap = [
+            TableSchema::TYPE_BINARY_UUID => ' BINARY(16)',
+            TableSchema::TYPE_UUID => ' CHAR(36)',
+            TableSchema::TYPE_CHAR => ' CHAR',
+            TableSchema::TYPE_TINYINTEGER => ' TINYINT',
+            TableSchema::TYPE_SMALLINTEGER => ' SMALLINT',
+            TableSchema::TYPE_INTEGER => ' INTEGER',
+            TableSchema::TYPE_BIGINTEGER => ' BIGINT',
+            TableSchema::TYPE_BOOLEAN => ' BOOLEAN',
+            TableSchema::TYPE_FLOAT => ' FLOAT',
+            TableSchema::TYPE_DECIMAL => ' DECIMAL',
+            TableSchema::TYPE_DATE => ' DATE',
+            TableSchema::TYPE_TIME => ' TIME',
+            TableSchema::TYPE_DATETIME => ' DATETIME',
+            TableSchema::TYPE_DATETIME_FRACTIONAL => ' DATETIMEFRACTIONAL',
+            TableSchema::TYPE_TIMESTAMP => ' TIMESTAMP',
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL => ' TIMESTAMPFRACTIONAL',
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE => ' TIMESTAMPTIMEZONE',
+            TableSchema::TYPE_JSON => ' TEXT',
+        ];
+
+        $out = $this->_driver->quoteIdentifier($name);
+        $hasUnsigned = [
+            TableSchema::TYPE_TINYINTEGER,
+            TableSchema::TYPE_SMALLINTEGER,
+            TableSchema::TYPE_INTEGER,
+            TableSchema::TYPE_BIGINTEGER,
+            TableSchema::TYPE_FLOAT,
+            TableSchema::TYPE_DECIMAL,
+        ];
+
+        if (
+            in_array($data['type'], $hasUnsigned, true) &&
+            isset($data['unsigned']) &&
+            $data['unsigned'] === true
+        ) {
+            if ($data['type'] !== TableSchema::TYPE_INTEGER || $schema->getPrimaryKey() !== [$name]) {
+                $out .= ' UNSIGNED';
+            }
+        }
+
+        if (isset($typeMap[$data['type']])) {
+            $out .= $typeMap[$data['type']];
+        }
+
+        if ($data['type'] === TableSchema::TYPE_TEXT && $data['length'] !== TableSchema::LENGTH_TINY) {
+            $out .= ' TEXT';
+        }
+
+        if ($data['type'] === TableSchema::TYPE_CHAR) {
+            $out .= '(' . $data['length'] . ')';
+        }
+
+        if (
+            $data['type'] === TableSchema::TYPE_STRING ||
+            (
+                $data['type'] === TableSchema::TYPE_TEXT &&
+                $data['length'] === TableSchema::LENGTH_TINY
+            )
+        ) {
+            $out .= ' VARCHAR';
+
+            if (isset($data['length'])) {
+                $out .= '(' . $data['length'] . ')';
+            }
+        }
+
+        if ($data['type'] === TableSchema::TYPE_BINARY) {
+            if (isset($data['length'])) {
+                $out .= ' BLOB(' . $data['length'] . ')';
+            } else {
+                $out .= ' BLOB';
+            }
+        }
+
+        $integerTypes = [
+            TableSchema::TYPE_TINYINTEGER,
+            TableSchema::TYPE_SMALLINTEGER,
+            TableSchema::TYPE_INTEGER,
+        ];
+        if (
+            in_array($data['type'], $integerTypes, true) &&
+            isset($data['length']) &&
+            $schema->getPrimaryKey() !== [$name]
+        ) {
+            $out .= '(' . (int)$data['length'] . ')';
+        }
+
+        $hasPrecision = [TableSchema::TYPE_FLOAT, TableSchema::TYPE_DECIMAL];
+        if (
+            in_array($data['type'], $hasPrecision, true) &&
+            (
+                isset($data['length']) ||
+                isset($data['precision'])
+            )
+        ) {
+            $out .= '(' . (int)$data['length'] . ',' . (int)$data['precision'] . ')';
+        }
+
+        if (isset($data['null']) && $data['null'] === false) {
+            $out .= ' NOT NULL';
+        }
+
+        if ($data['type'] === TableSchema::TYPE_INTEGER && $schema->getPrimaryKey() === [$name]) {
+            $out .= ' PRIMARY KEY AUTOINCREMENT';
+        }
+
+        $timestampTypes = [
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE,
+        ];
+        if (isset($data['null']) && $data['null'] === true && in_array($data['type'], $timestampTypes, true)) {
+            $out .= ' DEFAULT NULL';
+        }
+        if (isset($data['default'])) {
+            $out .= ' DEFAULT ' . $this->_driver->schemaValue($data['default']);
+        }
+
+        return $out;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Note integer primary keys will return ''. This is intentional as Sqlite requires
+     * that integer primary keys be defined in the column definition.
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the column is in.
+     * @param string $name The name of the column.
+     * @return string SQL fragment.
+     */
+    public function constraintSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getConstraint($name);
+        /** @psalm-suppress PossiblyNullArrayAccess */
+        if (
+            $data['type'] === TableSchema::CONSTRAINT_PRIMARY &&
+            count($data['columns']) === 1 &&
+            $schema->getColumn($data['columns'][0])['type'] === TableSchema::TYPE_INTEGER
+        ) {
+            return '';
+        }
+        $clause = '';
+        $type = '';
+        if ($data['type'] === TableSchema::CONSTRAINT_PRIMARY) {
+            $type = 'PRIMARY KEY';
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_UNIQUE) {
+            $type = 'UNIQUE';
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+            $type = 'FOREIGN KEY';
+
+            $clause = sprintf(
+                ' REFERENCES %s (%s) ON UPDATE %s ON DELETE %s',
+                $this->_driver->quoteIdentifier($data['references'][0]),
+                $this->_convertConstraintColumns($data['references'][1]),
+                $this->_foreignOnClause($data['update']),
+                $this->_foreignOnClause($data['delete'])
+            );
+        }
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+
+        return sprintf(
+            'CONSTRAINT %s %s (%s)%s',
+            $this->_driver->quoteIdentifier($name),
+            $type,
+            implode(', ', $columns),
+            $clause
+        );
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * SQLite can not properly handle adding a constraint to an existing table.
+     * This method is no-op
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the foreign key constraints are.
+     * @return array SQL fragment.
+     */
+    public function addConstraintSql(TableSchema $schema): array
+    {
+        return [];
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * SQLite can not properly handle dropping a constraint to an existing table.
+     * This method is no-op
+     *
+     * @param \Cake\Database\Schema\TableSchema $schema The table instance the foreign key constraints are.
+     * @return array SQL fragment.
+     */
+    public function dropConstraintSql(TableSchema $schema): array
+    {
+        return [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function indexSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getIndex($name);
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+
+        return sprintf(
+            'CREATE INDEX %s ON %s (%s)',
+            $this->_driver->quoteIdentifier($name),
+            $this->_driver->quoteIdentifier($schema->name()),
+            implode(', ', $columns)
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function createTableSql(TableSchema $schema, array $columns, array $constraints, array $indexes): array
+    {
+        $lines = array_merge($columns, $constraints);
+        $content = implode(",\n", array_filter($lines));
+        $temporary = $schema->isTemporary() ? ' TEMPORARY ' : ' ';
+        $table = sprintf("CREATE%sTABLE \"%s\" (\n%s\n)", $temporary, $schema->name(), $content);
+        $out = [$table];
+        foreach ($indexes as $index) {
+            $out[] = $index;
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function truncateTableSql(TableSchema $schema): array
+    {
+        $name = $schema->name();
+        $sql = [];
+        if ($this->hasSequences()) {
+            $sql[] = sprintf('DELETE FROM sqlite_sequence WHERE name="%s"', $name);
+        }
+
+        $sql[] = sprintf('DELETE FROM "%s"', $name);
+
+        return $sql;
+    }
+
+    /**
+     * Returns whether there is any table in this connection to SQLite containing
+     * sequences
+     *
+     * @return bool
+     */
+    public function hasSequences(): bool
+    {
+        $result = $this->_driver->prepare(
+            'SELECT 1 FROM sqlite_master WHERE name = "sqlite_sequence"'
+        );
+        $result->execute();
+        $this->_hasSequences = (bool)$result->rowCount();
+        $result->closeCursor();
+
+        return $this->_hasSequences;
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Schema\SqliteSchemaDialect',
+    'Cake\Database\Schema\SqliteSchema'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Schema/SqlserverSchema.php b/vendor/cakephp/database/Schema/SqlserverSchema.php
new file mode 100755
index 0000000..62e3f69
--- /dev/null
+++ b/vendor/cakephp/database/Schema/SqlserverSchema.php
@@ -0,0 +1,10 @@
+ $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesSql(array $config): array
+    {
+        $sql = "SELECT TABLE_NAME
+            FROM INFORMATION_SCHEMA.TABLES
+            WHERE TABLE_SCHEMA = ?
+            AND (TABLE_TYPE = 'BASE TABLE' OR TABLE_TYPE = 'VIEW')
+            ORDER BY TABLE_NAME";
+        $schema = empty($config['schema']) ? static::DEFAULT_SCHEMA_NAME : $config['schema'];
+
+        return [$sql, [$schema]];
+    }
+
+    /**
+     * Generate the SQL to list the tables, excluding all views.
+     *
+     * @param array $config The connection configuration to use for
+     *    getting tables from.
+     * @return array An array of (sql, params) to execute.
+     */
+    public function listTablesWithoutViewsSql(array $config): array
+    {
+        $sql = "SELECT TABLE_NAME
+            FROM INFORMATION_SCHEMA.TABLES
+            WHERE TABLE_SCHEMA = ?
+            AND (TABLE_TYPE = 'BASE TABLE')
+            ORDER BY TABLE_NAME";
+        $schema = empty($config['schema']) ? static::DEFAULT_SCHEMA_NAME : $config['schema'];
+
+        return [$sql, [$schema]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeColumnSql(string $tableName, array $config): array
+    {
+        $sql = 'SELECT DISTINCT
+            AC.column_id AS [column_id],
+            AC.name AS [name],
+            TY.name AS [type],
+            AC.max_length AS [char_length],
+            AC.precision AS [precision],
+            AC.scale AS [scale],
+            AC.is_identity AS [autoincrement],
+            AC.is_nullable AS [null],
+            OBJECT_DEFINITION(AC.default_object_id) AS [default],
+            AC.collation_name AS [collation_name]
+            FROM sys.[objects] T
+            INNER JOIN sys.[schemas] S ON S.[schema_id] = T.[schema_id]
+            INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id]
+            INNER JOIN sys.[types] TY ON TY.[user_type_id] = AC.[user_type_id]
+            WHERE T.[name] = ? AND S.[name] = ?
+            ORDER BY column_id';
+
+        $schema = empty($config['schema']) ? static::DEFAULT_SCHEMA_NAME : $config['schema'];
+
+        return [$sql, [$tableName, $schema]];
+    }
+
+    /**
+     * Convert a column definition to the abstract types.
+     *
+     * The returned type will be a type that
+     * Cake\Database\TypeFactory  can handle.
+     *
+     * @param string $col The column type
+     * @param int|null $length the column length
+     * @param int|null $precision The column precision
+     * @param int|null $scale The column scale
+     * @return array Array of column information.
+     * @link https://technet.microsoft.com/en-us/library/ms187752.aspx
+     */
+    protected function _convertColumn(
+        string $col,
+        ?int $length = null,
+        ?int $precision = null,
+        ?int $scale = null
+    ): array {
+        $col = strtolower($col);
+
+        $type = $this->_applyTypeSpecificColumnConversion(
+            $col,
+            compact('length', 'precision', 'scale')
+        );
+        if ($type !== null) {
+            return $type;
+        }
+
+        if (in_array($col, ['date', 'time'])) {
+            return ['type' => $col, 'length' => null];
+        }
+
+        if ($col === 'datetime') {
+            // datetime cannot parse more than 3 digits of precision and isn't accurate
+            return ['type' => TableSchema::TYPE_DATETIME, 'length' => null];
+        }
+        if (strpos($col, 'datetime') !== false) {
+            $typeName = TableSchema::TYPE_DATETIME;
+            if ($scale > 0) {
+                $typeName = TableSchema::TYPE_DATETIME_FRACTIONAL;
+            }
+
+            return ['type' => $typeName, 'length' => null, 'precision' => $scale];
+        }
+
+        if ($col === 'char') {
+            return ['type' => TableSchema::TYPE_CHAR, 'length' => $length];
+        }
+
+        if ($col === 'tinyint') {
+            return ['type' => TableSchema::TYPE_TINYINTEGER, 'length' => $precision ?: 3];
+        }
+        if ($col === 'smallint') {
+            return ['type' => TableSchema::TYPE_SMALLINTEGER, 'length' => $precision ?: 5];
+        }
+        if ($col === 'int' || $col === 'integer') {
+            return ['type' => TableSchema::TYPE_INTEGER, 'length' => $precision ?: 10];
+        }
+        if ($col === 'bigint') {
+            return ['type' => TableSchema::TYPE_BIGINTEGER, 'length' => $precision ?: 20];
+        }
+        if ($col === 'bit') {
+            return ['type' => TableSchema::TYPE_BOOLEAN, 'length' => null];
+        }
+        if (
+            strpos($col, 'numeric') !== false ||
+            strpos($col, 'money') !== false ||
+            strpos($col, 'decimal') !== false
+        ) {
+            return ['type' => TableSchema::TYPE_DECIMAL, 'length' => $precision, 'precision' => $scale];
+        }
+
+        if ($col === 'real' || $col === 'float') {
+            return ['type' => TableSchema::TYPE_FLOAT, 'length' => null];
+        }
+        // SqlServer schema reflection returns double length for unicode
+        // columns because internally it uses UTF16/UCS2
+        if ($col === 'nvarchar' || $col === 'nchar' || $col === 'ntext') {
+            $length /= 2;
+        }
+        if (strpos($col, 'varchar') !== false && $length < 0) {
+            return ['type' => TableSchema::TYPE_TEXT, 'length' => null];
+        }
+
+        if (strpos($col, 'varchar') !== false) {
+            return ['type' => TableSchema::TYPE_STRING, 'length' => $length ?: 255];
+        }
+
+        if (strpos($col, 'char') !== false) {
+            return ['type' => TableSchema::TYPE_CHAR, 'length' => $length];
+        }
+
+        if (strpos($col, 'text') !== false) {
+            return ['type' => TableSchema::TYPE_TEXT, 'length' => null];
+        }
+
+        if ($col === 'image' || strpos($col, 'binary') !== false) {
+            // -1 is the value for MAX which we treat as a 'long' binary
+            if ($length == -1) {
+                $length = TableSchema::LENGTH_LONG;
+            }
+
+            return ['type' => TableSchema::TYPE_BINARY, 'length' => $length];
+        }
+
+        if ($col === 'uniqueidentifier') {
+            return ['type' => TableSchema::TYPE_UUID];
+        }
+
+        return ['type' => TableSchema::TYPE_STRING, 'length' => null];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertColumnDescription(TableSchema $schema, array $row): void
+    {
+        $field = $this->_convertColumn(
+            $row['type'],
+            $row['char_length'] !== null ? (int)$row['char_length'] : null,
+            $row['precision'] !== null ? (int)$row['precision'] : null,
+            $row['scale'] !== null ? (int)$row['scale'] : null
+        );
+
+        if (!empty($row['autoincrement'])) {
+            $field['autoIncrement'] = true;
+        }
+
+        $field += [
+            'null' => $row['null'] === '1',
+            'default' => $this->_defaultValue($field['type'], $row['default']),
+            'collate' => $row['collation_name'],
+        ];
+        $schema->addColumn($row['name'], $field);
+    }
+
+    /**
+     * Manipulate the default value.
+     *
+     * Removes () wrapping default values, extracts strings from
+     * N'' wrappers and collation text and converts NULL strings.
+     *
+     * @param string $type The schema type
+     * @param string|null $default The default value.
+     * @return string|int|null
+     */
+    protected function _defaultValue($type, $default)
+    {
+        if ($default === null) {
+            return null;
+        }
+
+        // remove () surrounding value (NULL) but leave () at the end of functions
+        // integers might have two ((0)) wrapping value
+        if (preg_match('/^\(+(.*?(\(\))?)\)+$/', $default, $matches)) {
+            $default = $matches[1];
+        }
+
+        if ($default === 'NULL') {
+            return null;
+        }
+
+        if ($type === TableSchema::TYPE_BOOLEAN) {
+            return (int)$default;
+        }
+
+        // Remove quotes
+        if (preg_match("/^\(?N?'(.*)'\)?/", $default, $matches)) {
+            return str_replace("''", "'", $matches[1]);
+        }
+
+        return $default;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeIndexSql(string $tableName, array $config): array
+    {
+        $sql = "SELECT
+                I.[name] AS [index_name],
+                IC.[index_column_id] AS [index_order],
+                AC.[name] AS [column_name],
+                I.[is_unique], I.[is_primary_key],
+                I.[is_unique_constraint]
+            FROM sys.[tables] AS T
+            INNER JOIN sys.[schemas] S ON S.[schema_id] = T.[schema_id]
+            INNER JOIN sys.[indexes] I ON T.[object_id] = I.[object_id]
+            INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id] AND I.[index_id] = IC.[index_id]
+            INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id]
+            WHERE T.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP' AND T.[name] = ? AND S.[name] = ?
+            ORDER BY I.[index_id], IC.[index_column_id]";
+
+        $schema = empty($config['schema']) ? static::DEFAULT_SCHEMA_NAME : $config['schema'];
+
+        return [$sql, [$tableName, $schema]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertIndexDescription(TableSchema $schema, array $row): void
+    {
+        $type = TableSchema::INDEX_INDEX;
+        $name = $row['index_name'];
+        if ($row['is_primary_key']) {
+            $name = $type = TableSchema::CONSTRAINT_PRIMARY;
+        }
+        if ($row['is_unique_constraint'] && $type === TableSchema::INDEX_INDEX) {
+            $type = TableSchema::CONSTRAINT_UNIQUE;
+        }
+
+        if ($type === TableSchema::INDEX_INDEX) {
+            $existing = $schema->getIndex($name);
+        } else {
+            $existing = $schema->getConstraint($name);
+        }
+
+        $columns = [$row['column_name']];
+        if (!empty($existing)) {
+            $columns = array_merge($existing['columns'], $columns);
+        }
+
+        if ($type === TableSchema::CONSTRAINT_PRIMARY || $type === TableSchema::CONSTRAINT_UNIQUE) {
+            $schema->addConstraint($name, [
+                'type' => $type,
+                'columns' => $columns,
+            ]);
+
+            return;
+        }
+        $schema->addIndex($name, [
+            'type' => $type,
+            'columns' => $columns,
+        ]);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function describeForeignKeySql(string $tableName, array $config): array
+    {
+        // phpcs:disable Generic.Files.LineLength
+        $sql = 'SELECT FK.[name] AS [foreign_key_name], FK.[delete_referential_action_desc] AS [delete_type],
+                FK.[update_referential_action_desc] AS [update_type], C.name AS [column], RT.name AS [reference_table],
+                RC.name AS [reference_column]
+            FROM sys.foreign_keys FK
+            INNER JOIN sys.foreign_key_columns FKC ON FKC.constraint_object_id = FK.object_id
+            INNER JOIN sys.tables T ON T.object_id = FKC.parent_object_id
+            INNER JOIN sys.tables RT ON RT.object_id = FKC.referenced_object_id
+            INNER JOIN sys.schemas S ON S.schema_id = T.schema_id AND S.schema_id = RT.schema_id
+            INNER JOIN sys.columns C ON C.column_id = FKC.parent_column_id AND C.object_id = FKC.parent_object_id
+            INNER JOIN sys.columns RC ON RC.column_id = FKC.referenced_column_id AND RC.object_id = FKC.referenced_object_id
+            WHERE FK.is_ms_shipped = 0 AND T.name = ? AND S.name = ?
+            ORDER BY FKC.constraint_column_id';
+        // phpcs:enable Generic.Files.LineLength
+
+        $schema = empty($config['schema']) ? static::DEFAULT_SCHEMA_NAME : $config['schema'];
+
+        return [$sql, [$tableName, $schema]];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function convertForeignKeyDescription(TableSchema $schema, array $row): void
+    {
+        $data = [
+            'type' => TableSchema::CONSTRAINT_FOREIGN,
+            'columns' => [$row['column']],
+            'references' => [$row['reference_table'], $row['reference_column']],
+            'update' => $this->_convertOnClause($row['update_type']),
+            'delete' => $this->_convertOnClause($row['delete_type']),
+        ];
+        $name = $row['foreign_key_name'];
+        $schema->addConstraint($name, $data);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _foreignOnClause(string $on): string
+    {
+        $parent = parent::_foreignOnClause($on);
+
+        return $parent === 'RESTRICT' ? parent::_foreignOnClause(TableSchema::ACTION_NO_ACTION) : $parent;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _convertOnClause(string $clause): string
+    {
+        switch ($clause) {
+            case 'NO_ACTION':
+                return TableSchema::ACTION_NO_ACTION;
+            case 'CASCADE':
+                return TableSchema::ACTION_CASCADE;
+            case 'SET_NULL':
+                return TableSchema::ACTION_SET_NULL;
+            case 'SET_DEFAULT':
+                return TableSchema::ACTION_SET_DEFAULT;
+        }
+
+        return TableSchema::ACTION_SET_NULL;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function columnSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getColumn($name);
+
+        $sql = $this->_getTypeSpecificColumnSql($data['type'], $schema, $name);
+        if ($sql !== null) {
+            return $sql;
+        }
+
+        $out = $this->_driver->quoteIdentifier($name);
+        $typeMap = [
+            TableSchema::TYPE_TINYINTEGER => ' TINYINT',
+            TableSchema::TYPE_SMALLINTEGER => ' SMALLINT',
+            TableSchema::TYPE_INTEGER => ' INTEGER',
+            TableSchema::TYPE_BIGINTEGER => ' BIGINT',
+            TableSchema::TYPE_BINARY_UUID => ' UNIQUEIDENTIFIER',
+            TableSchema::TYPE_BOOLEAN => ' BIT',
+            TableSchema::TYPE_CHAR => ' NCHAR',
+            TableSchema::TYPE_FLOAT => ' FLOAT',
+            TableSchema::TYPE_DECIMAL => ' DECIMAL',
+            TableSchema::TYPE_DATE => ' DATE',
+            TableSchema::TYPE_TIME => ' TIME',
+            TableSchema::TYPE_DATETIME => ' DATETIME2',
+            TableSchema::TYPE_DATETIME_FRACTIONAL => ' DATETIME2',
+            TableSchema::TYPE_TIMESTAMP => ' DATETIME2',
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL => ' DATETIME2',
+            TableSchema::TYPE_TIMESTAMP_TIMEZONE => ' DATETIME2',
+            TableSchema::TYPE_UUID => ' UNIQUEIDENTIFIER',
+            TableSchema::TYPE_JSON => ' NVARCHAR(MAX)',
+        ];
+
+        if (isset($typeMap[$data['type']])) {
+            $out .= $typeMap[$data['type']];
+        }
+
+        if ($data['type'] === TableSchema::TYPE_INTEGER || $data['type'] === TableSchema::TYPE_BIGINTEGER) {
+            if ($schema->getPrimaryKey() === [$name] || $data['autoIncrement'] === true) {
+                unset($data['null'], $data['default']);
+                $out .= ' IDENTITY(1, 1)';
+            }
+        }
+
+        if ($data['type'] === TableSchema::TYPE_TEXT && $data['length'] !== TableSchema::LENGTH_TINY) {
+            $out .= ' NVARCHAR(MAX)';
+        }
+
+        if ($data['type'] === TableSchema::TYPE_CHAR) {
+            $out .= '(' . $data['length'] . ')';
+        }
+
+        if ($data['type'] === TableSchema::TYPE_BINARY) {
+            if (
+                !isset($data['length'])
+                || in_array($data['length'], [TableSchema::LENGTH_MEDIUM, TableSchema::LENGTH_LONG], true)
+            ) {
+                $data['length'] = 'MAX';
+            }
+
+            if ($data['length'] === 1) {
+                $out .= ' BINARY(1)';
+            } else {
+                $out .= ' VARBINARY';
+
+                $out .= sprintf('(%s)', $data['length']);
+            }
+        }
+
+        if (
+            $data['type'] === TableSchema::TYPE_STRING ||
+            (
+                $data['type'] === TableSchema::TYPE_TEXT &&
+                $data['length'] === TableSchema::LENGTH_TINY
+            )
+        ) {
+            $type = ' NVARCHAR';
+            $length = $data['length'] ?? TableSchema::LENGTH_TINY;
+            $out .= sprintf('%s(%d)', $type, $length);
+        }
+
+        $hasCollate = [TableSchema::TYPE_TEXT, TableSchema::TYPE_STRING, TableSchema::TYPE_CHAR];
+        if (in_array($data['type'], $hasCollate, true) && isset($data['collate']) && $data['collate'] !== '') {
+            $out .= ' COLLATE ' . $data['collate'];
+        }
+
+        $precisionTypes = [
+            TableSchema::TYPE_FLOAT,
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+        ];
+        if (in_array($data['type'], $precisionTypes, true) && isset($data['precision'])) {
+            $out .= '(' . (int)$data['precision'] . ')';
+        }
+
+        if (
+            $data['type'] === TableSchema::TYPE_DECIMAL &&
+            (
+                isset($data['length']) ||
+                isset($data['precision'])
+            )
+        ) {
+            $out .= '(' . (int)$data['length'] . ',' . (int)$data['precision'] . ')';
+        }
+
+        if (isset($data['null']) && $data['null'] === false) {
+            $out .= ' NOT NULL';
+        }
+
+        $dateTimeTypes = [
+            TableSchema::TYPE_DATETIME,
+            TableSchema::TYPE_DATETIME_FRACTIONAL,
+            TableSchema::TYPE_TIMESTAMP,
+            TableSchema::TYPE_TIMESTAMP_FRACTIONAL,
+        ];
+        $dateTimeDefaults = [
+            'current_timestamp',
+            'getdate()',
+            'getutcdate()',
+            'sysdatetime()',
+            'sysutcdatetime()',
+            'sysdatetimeoffset()',
+        ];
+        if (
+            isset($data['default']) &&
+            in_array($data['type'], $dateTimeTypes, true) &&
+            in_array(strtolower($data['default']), $dateTimeDefaults, true)
+        ) {
+            $out .= ' DEFAULT ' . strtoupper($data['default']);
+        } elseif (isset($data['default'])) {
+            $default = is_bool($data['default'])
+                ? (int)$data['default']
+                : $this->_driver->schemaValue($data['default']);
+            $out .= ' DEFAULT ' . $default;
+        } elseif (isset($data['null']) && $data['null'] !== false) {
+            $out .= ' DEFAULT NULL';
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s ADD %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $sql[] = sprintf($sqlPattern, $tableName, $this->constraintSql($schema, $name));
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropConstraintSql(TableSchema $schema): array
+    {
+        $sqlPattern = 'ALTER TABLE %s DROP CONSTRAINT %s;';
+        $sql = [];
+
+        foreach ($schema->constraints() as $name) {
+            /** @var array $constraint */
+            $constraint = $schema->getConstraint($name);
+            if ($constraint['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+                $tableName = $this->_driver->quoteIdentifier($schema->name());
+                $constraintName = $this->_driver->quoteIdentifier($name);
+                $sql[] = sprintf($sqlPattern, $tableName, $constraintName);
+            }
+        }
+
+        return $sql;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function indexSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getIndex($name);
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+
+        return sprintf(
+            'CREATE INDEX %s ON %s (%s)',
+            $this->_driver->quoteIdentifier($name),
+            $this->_driver->quoteIdentifier($schema->name()),
+            implode(', ', $columns)
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function constraintSql(TableSchema $schema, string $name): string
+    {
+        /** @var array $data */
+        $data = $schema->getConstraint($name);
+        $out = 'CONSTRAINT ' . $this->_driver->quoteIdentifier($name);
+        if ($data['type'] === TableSchema::CONSTRAINT_PRIMARY) {
+            $out = 'PRIMARY KEY';
+        }
+        if ($data['type'] === TableSchema::CONSTRAINT_UNIQUE) {
+            $out .= ' UNIQUE';
+        }
+
+        return $this->_keySql($out, $data);
+    }
+
+    /**
+     * Helper method for generating key SQL snippets.
+     *
+     * @param string $prefix The key prefix
+     * @param array $data Key data.
+     * @return string
+     */
+    protected function _keySql(string $prefix, array $data): string
+    {
+        $columns = array_map(
+            [$this->_driver, 'quoteIdentifier'],
+            $data['columns']
+        );
+        if ($data['type'] === TableSchema::CONSTRAINT_FOREIGN) {
+            return $prefix . sprintf(
+                ' FOREIGN KEY (%s) REFERENCES %s (%s) ON UPDATE %s ON DELETE %s',
+                implode(', ', $columns),
+                $this->_driver->quoteIdentifier($data['references'][0]),
+                $this->_convertConstraintColumns($data['references'][1]),
+                $this->_foreignOnClause($data['update']),
+                $this->_foreignOnClause($data['delete'])
+            );
+        }
+
+        return $prefix . ' (' . implode(', ', $columns) . ')';
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function createTableSql(TableSchema $schema, array $columns, array $constraints, array $indexes): array
+    {
+        $content = array_merge($columns, $constraints);
+        $content = implode(",\n", array_filter($content));
+        $tableName = $this->_driver->quoteIdentifier($schema->name());
+        $out = [];
+        $out[] = sprintf("CREATE TABLE %s (\n%s\n)", $tableName, $content);
+        foreach ($indexes as $index) {
+            $out[] = $index;
+        }
+
+        return $out;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function truncateTableSql(TableSchema $schema): array
+    {
+        $name = $this->_driver->quoteIdentifier($schema->name());
+        $queries = [
+            sprintf('DELETE FROM %s', $name),
+        ];
+
+        // Restart identity sequences
+        $pk = $schema->getPrimaryKey();
+        if (count($pk) === 1) {
+            /** @var array $column */
+            $column = $schema->getColumn($pk[0]);
+            if (in_array($column['type'], ['integer', 'biginteger'])) {
+                $queries[] = sprintf(
+                    "IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '%s' AND " .
+                    "last_value IS NOT NULL) DBCC CHECKIDENT('%s', RESEED, 0)",
+                    $schema->name(),
+                    $schema->name()
+                );
+            }
+        }
+
+        return $queries;
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\Schema\SqlserverSchemaDialect', 
+    'Cake\Database\Schema\SqlserverSchema'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/Schema/TableSchema.php b/vendor/cakephp/database/Schema/TableSchema.php
new file mode 100755
index 0000000..a58779a
--- /dev/null
+++ b/vendor/cakephp/database/Schema/TableSchema.php
@@ -0,0 +1,793 @@
+
+     */
+    protected $_columns = [];
+
+    /**
+     * A map with columns to types
+     *
+     * @var array
+     */
+    protected $_typeMap = [];
+
+    /**
+     * Indexes in the table.
+     *
+     * @var array
+     */
+    protected $_indexes = [];
+
+    /**
+     * Constraints in the table.
+     *
+     * @var array>
+     */
+    protected $_constraints = [];
+
+    /**
+     * Options for the table.
+     *
+     * @var array
+     */
+    protected $_options = [];
+
+    /**
+     * Whether the table is temporary
+     *
+     * @var bool
+     */
+    protected $_temporary = false;
+
+    /**
+     * Column length when using a `tiny` column type
+     *
+     * @var int
+     */
+    public const LENGTH_TINY = 255;
+
+    /**
+     * Column length when using a `medium` column type
+     *
+     * @var int
+     */
+    public const LENGTH_MEDIUM = 16777215;
+
+    /**
+     * Column length when using a `long` column type
+     *
+     * @var int
+     */
+    public const LENGTH_LONG = 4294967295;
+
+    /**
+     * Valid column length that can be used with text type columns
+     *
+     * @var array
+     */
+    public static $columnLengths = [
+        'tiny' => self::LENGTH_TINY,
+        'medium' => self::LENGTH_MEDIUM,
+        'long' => self::LENGTH_LONG,
+    ];
+
+    /**
+     * The valid keys that can be used in a column
+     * definition.
+     *
+     * @var array
+     */
+    protected static $_columnKeys = [
+        'type' => null,
+        'baseType' => null,
+        'length' => null,
+        'precision' => null,
+        'null' => null,
+        'default' => null,
+        'comment' => null,
+    ];
+
+    /**
+     * Additional type specific properties.
+     *
+     * @var array>
+     */
+    protected static $_columnExtras = [
+        'string' => [
+            'collate' => null,
+        ],
+        'char' => [
+            'collate' => null,
+        ],
+        'text' => [
+            'collate' => null,
+        ],
+        'tinyinteger' => [
+            'unsigned' => null,
+        ],
+        'smallinteger' => [
+            'unsigned' => null,
+        ],
+        'integer' => [
+            'unsigned' => null,
+            'autoIncrement' => null,
+        ],
+        'biginteger' => [
+            'unsigned' => null,
+            'autoIncrement' => null,
+        ],
+        'decimal' => [
+            'unsigned' => null,
+        ],
+        'float' => [
+            'unsigned' => null,
+        ],
+    ];
+
+    /**
+     * The valid keys that can be used in an index
+     * definition.
+     *
+     * @var array
+     */
+    protected static $_indexKeys = [
+        'type' => null,
+        'columns' => [],
+        'length' => [],
+        'references' => [],
+        'update' => 'restrict',
+        'delete' => 'restrict',
+    ];
+
+    /**
+     * Names of the valid index types.
+     *
+     * @var array
+     */
+    protected static $_validIndexTypes = [
+        self::INDEX_INDEX,
+        self::INDEX_FULLTEXT,
+    ];
+
+    /**
+     * Names of the valid constraint types.
+     *
+     * @var array
+     */
+    protected static $_validConstraintTypes = [
+        self::CONSTRAINT_PRIMARY,
+        self::CONSTRAINT_UNIQUE,
+        self::CONSTRAINT_FOREIGN,
+    ];
+
+    /**
+     * Names of the valid foreign key actions.
+     *
+     * @var array
+     */
+    protected static $_validForeignKeyActions = [
+        self::ACTION_CASCADE,
+        self::ACTION_SET_NULL,
+        self::ACTION_SET_DEFAULT,
+        self::ACTION_NO_ACTION,
+        self::ACTION_RESTRICT,
+    ];
+
+    /**
+     * Primary constraint type
+     *
+     * @var string
+     */
+    public const CONSTRAINT_PRIMARY = 'primary';
+
+    /**
+     * Unique constraint type
+     *
+     * @var string
+     */
+    public const CONSTRAINT_UNIQUE = 'unique';
+
+    /**
+     * Foreign constraint type
+     *
+     * @var string
+     */
+    public const CONSTRAINT_FOREIGN = 'foreign';
+
+    /**
+     * Index - index type
+     *
+     * @var string
+     */
+    public const INDEX_INDEX = 'index';
+
+    /**
+     * Fulltext index type
+     *
+     * @var string
+     */
+    public const INDEX_FULLTEXT = 'fulltext';
+
+    /**
+     * Foreign key cascade action
+     *
+     * @var string
+     */
+    public const ACTION_CASCADE = 'cascade';
+
+    /**
+     * Foreign key set null action
+     *
+     * @var string
+     */
+    public const ACTION_SET_NULL = 'setNull';
+
+    /**
+     * Foreign key no action
+     *
+     * @var string
+     */
+    public const ACTION_NO_ACTION = 'noAction';
+
+    /**
+     * Foreign key restrict action
+     *
+     * @var string
+     */
+    public const ACTION_RESTRICT = 'restrict';
+
+    /**
+     * Foreign key restrict default
+     *
+     * @var string
+     */
+    public const ACTION_SET_DEFAULT = 'setDefault';
+
+    /**
+     * Constructor.
+     *
+     * @param string $table The table name.
+     * @param array $columns The list of columns for the schema.
+     */
+    public function __construct(string $table, array $columns = [])
+    {
+        $this->_table = $table;
+        foreach ($columns as $field => $definition) {
+            $this->addColumn($field, $definition);
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function name(): string
+    {
+        return $this->_table;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addColumn(string $name, $attrs)
+    {
+        if (is_string($attrs)) {
+            $attrs = ['type' => $attrs];
+        }
+        $valid = static::$_columnKeys;
+        if (isset(static::$_columnExtras[$attrs['type']])) {
+            $valid += static::$_columnExtras[$attrs['type']];
+        }
+        $attrs = array_intersect_key($attrs, $valid);
+        $this->_columns[$name] = $attrs + $valid;
+        $this->_typeMap[$name] = $this->_columns[$name]['type'];
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function removeColumn(string $name)
+    {
+        unset($this->_columns[$name], $this->_typeMap[$name]);
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function columns(): array
+    {
+        return array_keys($this->_columns);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getColumn(string $name): ?array
+    {
+        if (!isset($this->_columns[$name])) {
+            return null;
+        }
+        $column = $this->_columns[$name];
+        unset($column['baseType']);
+
+        return $column;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getColumnType(string $name): ?string
+    {
+        if (!isset($this->_columns[$name])) {
+            return null;
+        }
+
+        return $this->_columns[$name]['type'];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function setColumnType(string $name, string $type)
+    {
+        if (!isset($this->_columns[$name])) {
+            return $this;
+        }
+
+        $this->_columns[$name]['type'] = $type;
+        $this->_typeMap[$name] = $type;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function hasColumn(string $name): bool
+    {
+        return isset($this->_columns[$name]);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function baseColumnType(string $column): ?string
+    {
+        if (isset($this->_columns[$column]['baseType'])) {
+            return $this->_columns[$column]['baseType'];
+        }
+
+        $type = $this->getColumnType($column);
+
+        if ($type === null) {
+            return null;
+        }
+
+        if (TypeFactory::getMap($type)) {
+            $type = TypeFactory::build($type)->getBaseType();
+        }
+
+        return $this->_columns[$column]['baseType'] = $type;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function typeMap(): array
+    {
+        return $this->_typeMap;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function isNullable(string $name): bool
+    {
+        if (!isset($this->_columns[$name])) {
+            return true;
+        }
+
+        return $this->_columns[$name]['null'] === true;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function defaultValues(): array
+    {
+        $defaults = [];
+        foreach ($this->_columns as $name => $data) {
+            if (!array_key_exists('default', $data)) {
+                continue;
+            }
+            if ($data['default'] === null && $data['null'] !== true) {
+                continue;
+            }
+            $defaults[$name] = $data['default'];
+        }
+
+        return $defaults;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addIndex(string $name, $attrs)
+    {
+        if (is_string($attrs)) {
+            $attrs = ['type' => $attrs];
+        }
+        $attrs = array_intersect_key($attrs, static::$_indexKeys);
+        $attrs += static::$_indexKeys;
+        unset($attrs['references'], $attrs['update'], $attrs['delete']);
+
+        if (!in_array($attrs['type'], static::$_validIndexTypes, true)) {
+            throw new DatabaseException(sprintf(
+                'Invalid index type "%s" in index "%s" in table "%s".',
+                $attrs['type'],
+                $name,
+                $this->_table
+            ));
+        }
+        $attrs['columns'] = (array)$attrs['columns'];
+        foreach ($attrs['columns'] as $field) {
+            if (empty($this->_columns[$field])) {
+                $msg = sprintf(
+                    'Columns used in index "%s" in table "%s" must be added to the Table schema first. ' .
+                    'The column "%s" was not found.',
+                    $name,
+                    $this->_table,
+                    $field
+                );
+                throw new DatabaseException($msg);
+            }
+        }
+        $this->_indexes[$name] = $attrs;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function indexes(): array
+    {
+        return array_keys($this->_indexes);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getIndex(string $name): ?array
+    {
+        if (!isset($this->_indexes[$name])) {
+            return null;
+        }
+
+        return $this->_indexes[$name];
+    }
+
+    /**
+     * Get the column(s) used for the primary key.
+     *
+     * @return array Column name(s) for the primary key. An
+     *   empty list will be returned when the table has no primary key.
+     * @deprecated 4.0.0 Renamed to {@link getPrimaryKey()}.
+     */
+    public function primaryKey(): array
+    {
+        deprecationWarning('`TableSchema::primaryKey()` is deprecated. Use `TableSchema::getPrimaryKey()`.');
+
+        return $this->getPrimarykey();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getPrimaryKey(): array
+    {
+        foreach ($this->_constraints as $data) {
+            if ($data['type'] === static::CONSTRAINT_PRIMARY) {
+                return $data['columns'];
+            }
+        }
+
+        return [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addConstraint(string $name, $attrs)
+    {
+        if (is_string($attrs)) {
+            $attrs = ['type' => $attrs];
+        }
+        $attrs = array_intersect_key($attrs, static::$_indexKeys);
+        $attrs += static::$_indexKeys;
+        if (!in_array($attrs['type'], static::$_validConstraintTypes, true)) {
+            throw new DatabaseException(sprintf(
+                'Invalid constraint type "%s" in table "%s".',
+                $attrs['type'],
+                $this->_table
+            ));
+        }
+        if (empty($attrs['columns'])) {
+            throw new DatabaseException(sprintf(
+                'Constraints in table "%s" must have at least one column.',
+                $this->_table
+            ));
+        }
+        $attrs['columns'] = (array)$attrs['columns'];
+        foreach ($attrs['columns'] as $field) {
+            if (empty($this->_columns[$field])) {
+                $msg = sprintf(
+                    'Columns used in constraints must be added to the Table schema first. ' .
+                    'The column "%s" was not found in table "%s".',
+                    $field,
+                    $this->_table
+                );
+                throw new DatabaseException($msg);
+            }
+        }
+
+        if ($attrs['type'] === static::CONSTRAINT_FOREIGN) {
+            $attrs = $this->_checkForeignKey($attrs);
+
+            if (isset($this->_constraints[$name])) {
+                $this->_constraints[$name]['columns'] = array_unique(array_merge(
+                    $this->_constraints[$name]['columns'],
+                    $attrs['columns']
+                ));
+
+                if (isset($this->_constraints[$name]['references'])) {
+                    $this->_constraints[$name]['references'][1] = array_unique(array_merge(
+                        (array)$this->_constraints[$name]['references'][1],
+                        [$attrs['references'][1]]
+                    ));
+                }
+
+                return $this;
+            }
+        } else {
+            unset($attrs['references'], $attrs['update'], $attrs['delete']);
+        }
+
+        $this->_constraints[$name] = $attrs;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropConstraint(string $name)
+    {
+        if (isset($this->_constraints[$name])) {
+            unset($this->_constraints[$name]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Check whether a table has an autoIncrement column defined.
+     *
+     * @return bool
+     */
+    public function hasAutoincrement(): bool
+    {
+        foreach ($this->_columns as $column) {
+            if (isset($column['autoIncrement']) && $column['autoIncrement']) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Helper method to check/validate foreign keys.
+     *
+     * @param array $attrs Attributes to set.
+     * @return array
+     * @throws \Cake\Database\Exception\DatabaseException When foreign key definition is not valid.
+     */
+    protected function _checkForeignKey(array $attrs): array
+    {
+        if (count($attrs['references']) < 2) {
+            throw new DatabaseException('References must contain a table and column.');
+        }
+        if (!in_array($attrs['update'], static::$_validForeignKeyActions)) {
+            throw new DatabaseException(sprintf(
+                'Update action is invalid. Must be one of %s',
+                implode(',', static::$_validForeignKeyActions)
+            ));
+        }
+        if (!in_array($attrs['delete'], static::$_validForeignKeyActions)) {
+            throw new DatabaseException(sprintf(
+                'Delete action is invalid. Must be one of %s',
+                implode(',', static::$_validForeignKeyActions)
+            ));
+        }
+
+        return $attrs;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function constraints(): array
+    {
+        return array_keys($this->_constraints);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getConstraint(string $name): ?array
+    {
+        return $this->_constraints[$name] ?? null;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function setOptions(array $options)
+    {
+        $this->_options = $options + $this->_options;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getOptions(): array
+    {
+        return $this->_options;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function setTemporary(bool $temporary)
+    {
+        $this->_temporary = $temporary;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function isTemporary(): bool
+    {
+        return $this->_temporary;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function createSql(Connection $connection): array
+    {
+        $dialect = $connection->getDriver()->schemaDialect();
+        $columns = $constraints = $indexes = [];
+        foreach (array_keys($this->_columns) as $name) {
+            $columns[] = $dialect->columnSql($this, $name);
+        }
+        foreach (array_keys($this->_constraints) as $name) {
+            $constraints[] = $dialect->constraintSql($this, $name);
+        }
+        foreach (array_keys($this->_indexes) as $name) {
+            $indexes[] = $dialect->indexSql($this, $name);
+        }
+
+        return $dialect->createTableSql($this, $columns, $constraints, $indexes);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropSql(Connection $connection): array
+    {
+        $dialect = $connection->getDriver()->schemaDialect();
+
+        return $dialect->dropTableSql($this);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function truncateSql(Connection $connection): array
+    {
+        $dialect = $connection->getDriver()->schemaDialect();
+
+        return $dialect->truncateTableSql($this);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addConstraintSql(Connection $connection): array
+    {
+        $dialect = $connection->getDriver()->schemaDialect();
+
+        return $dialect->addConstraintSql($this);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function dropConstraintSql(Connection $connection): array
+    {
+        $dialect = $connection->getDriver()->schemaDialect();
+
+        return $dialect->dropConstraintSql($this);
+    }
+
+    /**
+     * Returns an array of the table schema.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        return [
+            'table' => $this->_table,
+            'columns' => $this->_columns,
+            'indexes' => $this->_indexes,
+            'constraints' => $this->_constraints,
+            'options' => $this->_options,
+            'typeMap' => $this->_typeMap,
+            'temporary' => $this->_temporary,
+        ];
+    }
+}
diff --git a/vendor/cakephp/database/Schema/TableSchemaAwareInterface.php b/vendor/cakephp/database/Schema/TableSchemaAwareInterface.php
new file mode 100755
index 0000000..d4045f9
--- /dev/null
+++ b/vendor/cakephp/database/Schema/TableSchemaAwareInterface.php
@@ -0,0 +1,38 @@
+ Column name(s) for the primary key. An
+     *   empty list will be returned when the table has no primary key.
+     */
+    public function getPrimaryKey(): array;
+
+    /**
+     * Add an index.
+     *
+     * Used to add indexes, and full text indexes in platforms that support
+     * them.
+     *
+     * ### Attributes
+     *
+     * - `type` The type of index being added.
+     * - `columns` The columns in the index.
+     *
+     * @param string $name The name of the index.
+     * @param array|string $attrs The attributes for the index.
+     *   If string it will be used as `type`.
+     * @return $this
+     * @throws \Cake\Database\Exception\DatabaseException
+     */
+    public function addIndex(string $name, $attrs);
+
+    /**
+     * Read information about an index based on name.
+     *
+     * @param string $name The name of the index.
+     * @return array|null Array of index data, or null
+     */
+    public function getIndex(string $name): ?array;
+
+    /**
+     * Get the names of all the indexes in the table.
+     *
+     * @return array
+     */
+    public function indexes(): array;
+
+    /**
+     * Add a constraint.
+     *
+     * Used to add constraints to a table. For example primary keys, unique
+     * keys and foreign keys.
+     *
+     * ### Attributes
+     *
+     * - `type` The type of constraint being added.
+     * - `columns` The columns in the index.
+     * - `references` The table, column a foreign key references.
+     * - `update` The behavior on update. Options are 'restrict', 'setNull', 'cascade', 'noAction'.
+     * - `delete` The behavior on delete. Options are 'restrict', 'setNull', 'cascade', 'noAction'.
+     *
+     * The default for 'update' & 'delete' is 'cascade'.
+     *
+     * @param string $name The name of the constraint.
+     * @param array|string $attrs The attributes for the constraint.
+     *   If string it will be used as `type`.
+     * @return $this
+     * @throws \Cake\Database\Exception\DatabaseException
+     */
+    public function addConstraint(string $name, $attrs);
+
+    /**
+     * Read information about a constraint based on name.
+     *
+     * @param string $name The name of the constraint.
+     * @return array|null Array of constraint data, or null
+     */
+    public function getConstraint(string $name): ?array;
+
+    /**
+     * Remove a constraint.
+     *
+     * @param string $name Name of the constraint to remove
+     * @return $this
+     */
+    public function dropConstraint(string $name);
+
+    /**
+     * Get the names of all the constraints in the table.
+     *
+     * @return array
+     */
+    public function constraints(): array;
+}
diff --git a/vendor/cakephp/database/SchemaCache.php b/vendor/cakephp/database/SchemaCache.php
new file mode 100755
index 0000000..953ff1e
--- /dev/null
+++ b/vendor/cakephp/database/SchemaCache.php
@@ -0,0 +1,114 @@
+_schema = $this->getSchema($connection);
+    }
+
+    /**
+     * Build metadata.
+     *
+     * @param string|null $name The name of the table to build cache data for.
+     * @return array Returns a list build table caches
+     */
+    public function build(?string $name = null): array
+    {
+        if ($name) {
+            $tables = [$name];
+        } else {
+            $tables = $this->_schema->listTables();
+        }
+
+        foreach ($tables as $table) {
+            $this->_schema->describe($table, ['forceRefresh' => true]);
+        }
+
+        return $tables;
+    }
+
+    /**
+     * Clear metadata.
+     *
+     * @param string|null $name The name of the table to clear cache data for.
+     * @return array Returns a list of cleared table caches
+     */
+    public function clear(?string $name = null): array
+    {
+        if ($name) {
+            $tables = [$name];
+        } else {
+            $tables = $this->_schema->listTables();
+        }
+
+        $cacher = $this->_schema->getCacher();
+
+        foreach ($tables as $table) {
+            $key = $this->_schema->cacheKey($table);
+            $cacher->delete($key);
+        }
+
+        return $tables;
+    }
+
+    /**
+     * Helper method to get the schema collection.
+     *
+     * @param \Cake\Database\Connection $connection Connection object
+     * @return \Cake\Database\Schema\CachedCollection
+     * @throws \RuntimeException If given connection object is not compatible with schema caching
+     */
+    public function getSchema(Connection $connection): CachedCollection
+    {
+        $config = $connection->config();
+        if (empty($config['cacheMetadata'])) {
+            $connection->cacheMetadata(true);
+        }
+
+        /** @var \Cake\Database\Schema\CachedCollection $schemaCollection */
+        $schemaCollection = $connection->getSchemaCollection();
+
+        return $schemaCollection;
+    }
+}
diff --git a/vendor/cakephp/database/SqlDialectTrait.php b/vendor/cakephp/database/SqlDialectTrait.php
new file mode 100755
index 0000000..763f8fd
--- /dev/null
+++ b/vendor/cakephp/database/SqlDialectTrait.php
@@ -0,0 +1,10 @@
+ 'DELETE',
+        'where' => ' WHERE %s',
+        'group' => ' GROUP BY %s',
+        'order' => ' %s',
+        'offset' => ' OFFSET %s ROWS',
+        'epilog' => ' %s',
+    ];
+
+    /**
+     * @inheritDoc
+     */
+    protected $_selectParts = [
+        'with', 'select', 'from', 'join', 'where', 'group', 'having', 'window', 'order',
+        'offset', 'limit', 'union', 'epilog',
+    ];
+
+    /**
+     * Helper function used to build the string representation of a `WITH` clause,
+     * it constructs the CTE definitions list without generating the `RECURSIVE`
+     * keyword that is neither required nor valid.
+     *
+     * @param array $parts List of CTEs to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildWithPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        $expressions = [];
+        foreach ($parts as $cte) {
+            $expressions[] = $cte->sql($binder);
+        }
+
+        return sprintf('WITH %s ', implode(', ', $expressions));
+    }
+
+    /**
+     * Generates the INSERT part of a SQL query
+     *
+     * To better handle concurrency and low transaction isolation levels,
+     * we also include an OUTPUT clause so we can ensure we get the inserted
+     * row's data back.
+     *
+     * @param array $parts The parts to build
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildInsertPart(array $parts, Query $query, ValueBinder $binder): string
+    {
+        if (!isset($parts[0])) {
+            throw new DatabaseException(
+                'Could not compile insert query. No table was specified. ' .
+                'Use `into()` to define a table.'
+            );
+        }
+        $table = $parts[0];
+        $columns = $this->_stringifyExpressions($parts[1], $binder);
+        $modifiers = $this->_buildModifierPart($query->clause('modifier'), $query, $binder);
+
+        return sprintf(
+            'INSERT%s INTO %s (%s) OUTPUT INSERTED.*',
+            $modifiers,
+            $table,
+            implode(', ', $columns)
+        );
+    }
+
+    /**
+     * Generates the LIMIT part of a SQL query
+     *
+     * @param int $limit the limit clause
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @return string
+     */
+    protected function _buildLimitPart(int $limit, Query $query): string
+    {
+        if ($query->clause('offset') === null) {
+            return '';
+        }
+
+        return sprintf(' FETCH FIRST %d ROWS ONLY', $limit);
+    }
+
+    /**
+     * Helper function used to build the string representation of a HAVING clause,
+     * it constructs the field list taking care of aliasing and
+     * converting expression objects to string.
+     *
+     * @param array $parts list of fields to be transformed to string
+     * @param \Cake\Database\Query $query The query that is being compiled
+     * @param \Cake\Database\ValueBinder $binder Value binder used to generate parameter placeholder
+     * @return string
+     */
+    protected function _buildHavingPart($parts, $query, $binder)
+    {
+        $selectParts = $query->clause('select');
+
+        foreach ($selectParts as $selectKey => $selectPart) {
+            if (!$selectPart instanceof FunctionExpression) {
+                continue;
+            }
+            foreach ($parts as $k => $p) {
+                if (!is_string($p)) {
+                    continue;
+                }
+                preg_match_all(
+                    '/\b' . trim($selectKey, '[]') . '\b/i',
+                    $p,
+                    $matches
+                );
+
+                if (empty($matches[0])) {
+                    continue;
+                }
+
+                $parts[$k] = preg_replace(
+                    ['/\[|\]/', '/\b' . trim($selectKey, '[]') . '\b/i'],
+                    ['', $selectPart->sql($binder)],
+                    $p
+                );
+            }
+        }
+
+        return sprintf(' HAVING %s', implode(', ', $parts));
+    }
+}
diff --git a/vendor/cakephp/database/Statement/BufferResultsTrait.php b/vendor/cakephp/database/Statement/BufferResultsTrait.php
new file mode 100755
index 0000000..b6a5e57
--- /dev/null
+++ b/vendor/cakephp/database/Statement/BufferResultsTrait.php
@@ -0,0 +1,45 @@
+_bufferResults = $buffer;
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/Statement/BufferedStatement.php b/vendor/cakephp/database/Statement/BufferedStatement.php
new file mode 100755
index 0000000..59aea0d
--- /dev/null
+++ b/vendor/cakephp/database/Statement/BufferedStatement.php
@@ -0,0 +1,361 @@
+
+ */
+class BufferedStatement implements Iterator, StatementInterface
+{
+    use TypeConverterTrait;
+
+    /**
+     * If true, all rows were fetched
+     *
+     * @var bool
+     */
+    protected $_allFetched = false;
+
+    /**
+     * The decorated statement
+     *
+     * @var \Cake\Database\StatementInterface
+     */
+    protected $statement;
+
+    /**
+     * The driver for the statement
+     *
+     * @var \Cake\Database\DriverInterface
+     */
+    protected $_driver;
+
+    /**
+     * The in-memory cache containing results from previous iterators
+     *
+     * @var array
+     */
+    protected $buffer = [];
+
+    /**
+     * Whether this statement has already been executed
+     *
+     * @var bool
+     */
+    protected $_hasExecuted = false;
+
+    /**
+     * The current iterator index.
+     *
+     * @var int
+     */
+    protected $index = 0;
+
+    /**
+     * Constructor
+     *
+     * @param \Cake\Database\StatementInterface $statement Statement implementation such as PDOStatement
+     * @param \Cake\Database\DriverInterface $driver Driver instance
+     */
+    public function __construct(StatementInterface $statement, DriverInterface $driver)
+    {
+        $this->statement = $statement;
+        $this->_driver = $driver;
+    }
+
+    /**
+     * Returns the connection driver.
+     *
+     * @return \Cake\Database\DriverInterface
+     */
+    protected function getDriver(): DriverInterface
+    {
+        return $this->_driver;
+    }
+
+    /**
+     * Magic getter to return $queryString as read-only.
+     *
+     * @param string $property internal property to get
+     * @return string|null
+     */
+    public function __get(string $property)
+    {
+        if ($property === 'queryString') {
+            /** @psalm-suppress NoInterfaceProperties */
+            return $this->statement->queryString;
+        }
+
+        return null;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function bindValue($column, $value, $type = 'string'): void
+    {
+        $this->statement->bindValue($column, $value, $type);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function closeCursor(): void
+    {
+        $this->statement->closeCursor();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function columnCount(): int
+    {
+        return $this->statement->columnCount();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function errorCode()
+    {
+        return $this->statement->errorCode();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function errorInfo(): array
+    {
+        return $this->statement->errorInfo();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function execute(?array $params = null): bool
+    {
+        $this->_reset();
+        $this->_hasExecuted = true;
+
+        return $this->statement->execute($params);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function fetchColumn(int $position)
+    {
+        $result = $this->fetch(static::FETCH_TYPE_NUM);
+        if ($result !== false && isset($result[$position])) {
+            return $result[$position];
+        }
+
+        return false;
+    }
+
+    /**
+     * Statements can be passed as argument for count() to return the number
+     * for affected rows from last execution.
+     *
+     * @return int
+     */
+    public function count(): int
+    {
+        return $this->rowCount();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function bind(array $params, array $types): void
+    {
+        $this->statement->bind($params, $types);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function lastInsertId(?string $table = null, ?string $column = null)
+    {
+        return $this->statement->lastInsertId($table, $column);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param string|int $type The type to fetch.
+     * @return array|false
+     */
+    public function fetch($type = self::FETCH_TYPE_NUM)
+    {
+        if ($this->_allFetched) {
+            $row = false;
+            if (isset($this->buffer[$this->index])) {
+                $row = $this->buffer[$this->index];
+            }
+            $this->index += 1;
+
+            if ($row && $type === static::FETCH_TYPE_NUM) {
+                return array_values($row);
+            }
+
+            return $row;
+        }
+
+        $record = $this->statement->fetch($type);
+        if ($record === false) {
+            $this->_allFetched = true;
+            $this->statement->closeCursor();
+
+            return false;
+        }
+        $this->buffer[] = $record;
+
+        return $record;
+    }
+
+    /**
+     * @return array
+     */
+    public function fetchAssoc(): array
+    {
+        $result = $this->fetch(static::FETCH_TYPE_ASSOC);
+
+        return $result ?: [];
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function fetchAll($type = self::FETCH_TYPE_NUM)
+    {
+        if ($this->_allFetched) {
+            return $this->buffer;
+        }
+        $results = $this->statement->fetchAll($type);
+        if ($results !== false) {
+            $this->buffer = array_merge($this->buffer, $results);
+        }
+        $this->_allFetched = true;
+        $this->statement->closeCursor();
+
+        return $this->buffer;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function rowCount(): int
+    {
+        if (!$this->_allFetched) {
+            $this->fetchAll(static::FETCH_TYPE_ASSOC);
+        }
+
+        return count($this->buffer);
+    }
+
+    /**
+     * Reset all properties
+     *
+     * @return void
+     */
+    protected function _reset(): void
+    {
+        $this->buffer = [];
+        $this->_allFetched = false;
+        $this->index = 0;
+    }
+
+    /**
+     * Returns the current key in the iterator
+     *
+     * @return mixed
+     */
+    #[\ReturnTypeWillChange]
+    public function key()
+    {
+        return $this->index;
+    }
+
+    /**
+     * Returns the current record in the iterator
+     *
+     * @return mixed
+     */
+    #[\ReturnTypeWillChange]
+    public function current()
+    {
+        return $this->buffer[$this->index];
+    }
+
+    /**
+     * Rewinds the collection
+     *
+     * @return void
+     */
+    public function rewind(): void
+    {
+        $this->index = 0;
+    }
+
+    /**
+     * Returns whether the iterator has more elements
+     *
+     * @return bool
+     */
+    public function valid(): bool
+    {
+        $old = $this->index;
+        $row = $this->fetch(self::FETCH_TYPE_ASSOC);
+
+        // Restore the index as fetch() increments during
+        // the cache scenario.
+        $this->index = $old;
+
+        return $row !== false;
+    }
+
+    /**
+     * Advances the iterator pointer to the next element
+     *
+     * @return void
+     */
+    public function next(): void
+    {
+        $this->index += 1;
+    }
+
+    /**
+     * Get the wrapped statement
+     *
+     * @return \Cake\Database\StatementInterface
+     */
+    public function getInnerStatement(): StatementInterface
+    {
+        return $this->statement;
+    }
+}
diff --git a/vendor/cakephp/database/Statement/CallbackStatement.php b/vendor/cakephp/database/Statement/CallbackStatement.php
new file mode 100755
index 0000000..a0b59c3
--- /dev/null
+++ b/vendor/cakephp/database/Statement/CallbackStatement.php
@@ -0,0 +1,77 @@
+_callback = $callback;
+    }
+
+    /**
+     * Fetch a row from the statement.
+     *
+     * The result will be processed by the callback when it is not `false`.
+     *
+     * @param string|int $type Either 'num' or 'assoc' to indicate the result format you would like.
+     * @return array|false
+     */
+    public function fetch($type = parent::FETCH_TYPE_NUM)
+    {
+        $callback = $this->_callback;
+        $row = $this->_statement->fetch($type);
+
+        return $row === false ? $row : $callback($row);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * Each row in the result will be processed by the callback when it is not `false.
+     */
+    public function fetchAll($type = parent::FETCH_TYPE_NUM)
+    {
+        $results = $this->_statement->fetchAll($type);
+
+        return $results !== false ? array_map($this->_callback, $results) : false;
+    }
+}
diff --git a/vendor/cakephp/database/Statement/MysqlStatement.php b/vendor/cakephp/database/Statement/MysqlStatement.php
new file mode 100755
index 0000000..2ad4ec0
--- /dev/null
+++ b/vendor/cakephp/database/Statement/MysqlStatement.php
@@ -0,0 +1,46 @@
+_driver->getConnection();
+
+        try {
+            $connection->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, $this->_bufferResults);
+            $result = $this->_statement->execute($params);
+        } finally {
+            $connection->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/cakephp/database/Statement/PDOStatement.php b/vendor/cakephp/database/Statement/PDOStatement.php
new file mode 100755
index 0000000..6cbc827
--- /dev/null
+++ b/vendor/cakephp/database/Statement/PDOStatement.php
@@ -0,0 +1,176 @@
+_statement = $statement;
+        $this->_driver = $driver;
+    }
+
+    /**
+     * Magic getter to return PDOStatement::$queryString as read-only.
+     *
+     * @param string $property internal property to get
+     * @return string|null
+     */
+    public function __get(string $property)
+    {
+        if ($property === 'queryString' && isset($this->_statement->queryString)) {
+            return $this->_statement->queryString;
+        }
+
+        return null;
+    }
+
+    /**
+     * Assign a value to a positional or named variable in prepared query. If using
+     * positional variables you need to start with index one, if using named params then
+     * just use the name in any order.
+     *
+     * You can pass PDO compatible constants for binding values with a type or optionally
+     * any type name registered in the Type class. Any value will be converted to the valid type
+     * representation if needed.
+     *
+     * It is not allowed to combine positional and named variables in the same statement
+     *
+     * ### Examples:
+     *
+     * ```
+     * $statement->bindValue(1, 'a title');
+     * $statement->bindValue(2, 5, PDO::INT);
+     * $statement->bindValue('active', true, 'boolean');
+     * $statement->bindValue(5, new \DateTime(), 'date');
+     * ```
+     *
+     * @param string|int $column name or param position to be bound
+     * @param mixed $value The value to bind to variable in query
+     * @param string|int|null $type PDO type or name of configured Type class
+     * @return void
+     */
+    public function bindValue($column, $value, $type = 'string'): void
+    {
+        if ($type === null) {
+            $type = 'string';
+        }
+        if (!is_int($type)) {
+            [$value, $type] = $this->cast($value, $type);
+        }
+        $this->_statement->bindValue($column, $value, $type);
+    }
+
+    /**
+     * Returns the next row for the result set after executing this statement.
+     * Rows can be fetched to contain columns as names or positions. If no
+     * rows are left in result set, this method will return false
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  print_r($statement->fetch('assoc')); // will show ['id' => 1, 'title' => 'a title']
+     * ```
+     *
+     * @param string|int $type 'num' for positional columns, assoc for named columns
+     * @return mixed Result array containing columns and values or false if no results
+     * are left
+     */
+    public function fetch($type = parent::FETCH_TYPE_NUM)
+    {
+        if ($type === static::FETCH_TYPE_NUM) {
+            return $this->_statement->fetch(PDO::FETCH_NUM);
+        }
+        if ($type === static::FETCH_TYPE_ASSOC) {
+            return $this->_statement->fetch(PDO::FETCH_ASSOC);
+        }
+        if ($type === static::FETCH_TYPE_OBJ) {
+            return $this->_statement->fetch(PDO::FETCH_OBJ);
+        }
+
+        if (!is_int($type)) {
+            throw new CakeException(sprintf(
+                'Fetch type for PDOStatement must be an integer, found `%s` instead',
+                getTypeName($type)
+            ));
+        }
+
+        return $this->_statement->fetch($type);
+    }
+
+    /**
+     * Returns an array with all rows resulting from executing this statement
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  print_r($statement->fetchAll('assoc')); // will show [0 => ['id' => 1, 'title' => 'a title']]
+     * ```
+     *
+     * @param string|int $type num for fetching columns as positional keys or assoc for column names as keys
+     * @return array|false list of all results from database for this statement, false on failure
+     * @psalm-assert string $type
+     */
+    public function fetchAll($type = parent::FETCH_TYPE_NUM)
+    {
+        if ($type === static::FETCH_TYPE_NUM) {
+            return $this->_statement->fetchAll(PDO::FETCH_NUM);
+        }
+        if ($type === static::FETCH_TYPE_ASSOC) {
+            return $this->_statement->fetchAll(PDO::FETCH_ASSOC);
+        }
+        if ($type === static::FETCH_TYPE_OBJ) {
+            return $this->_statement->fetchAll(PDO::FETCH_OBJ);
+        }
+
+        if (!is_int($type)) {
+            throw new CakeException(sprintf(
+                'Fetch type for PDOStatement must be an integer, found `%s` instead',
+                getTypeName($type)
+            ));
+        }
+
+        return $this->_statement->fetchAll($type);
+    }
+}
diff --git a/vendor/cakephp/database/Statement/SqliteStatement.php b/vendor/cakephp/database/Statement/SqliteStatement.php
new file mode 100755
index 0000000..cc965a8
--- /dev/null
+++ b/vendor/cakephp/database/Statement/SqliteStatement.php
@@ -0,0 +1,70 @@
+_statement instanceof BufferedStatement) {
+            $this->_statement = $this->_statement->getInnerStatement();
+        }
+
+        if ($this->_bufferResults) {
+            $this->_statement = new BufferedStatement($this->_statement, $this->_driver);
+        }
+
+        return $this->_statement->execute($params);
+    }
+
+    /**
+     * Returns the number of rows returned of affected by last execution
+     *
+     * @return int
+     */
+    public function rowCount(): int
+    {
+        /** @psalm-suppress NoInterfaceProperties */
+        if (
+            $this->_statement->queryString &&
+            preg_match('/^(?:DELETE|UPDATE|INSERT)/i', $this->_statement->queryString)
+        ) {
+            $changes = $this->_driver->prepare('SELECT CHANGES()');
+            $changes->execute();
+            $row = $changes->fetch();
+            $changes->closeCursor();
+
+            if (!$row) {
+                return 0;
+            }
+
+            return (int)$row[0];
+        }
+
+        return parent::rowCount();
+    }
+}
diff --git a/vendor/cakephp/database/Statement/SqlserverStatement.php b/vendor/cakephp/database/Statement/SqlserverStatement.php
new file mode 100755
index 0000000..39f3be8
--- /dev/null
+++ b/vendor/cakephp/database/Statement/SqlserverStatement.php
@@ -0,0 +1,53 @@
+cast($value, $type);
+        }
+        if ($type === PDO::PARAM_LOB) {
+            $this->_statement->bindParam($column, $value, $type, 0, PDO::SQLSRV_ENCODING_BINARY);
+        } else {
+            $this->_statement->bindValue($column, $value, $type);
+        }
+    }
+}
diff --git a/vendor/cakephp/database/Statement/StatementDecorator.php b/vendor/cakephp/database/Statement/StatementDecorator.php
new file mode 100755
index 0000000..2c2f46b
--- /dev/null
+++ b/vendor/cakephp/database/Statement/StatementDecorator.php
@@ -0,0 +1,373 @@
+
+ */
+class StatementDecorator implements StatementInterface, Countable, IteratorAggregate
+{
+    use TypeConverterTrait;
+
+    /**
+     * Statement instance implementation, such as PDOStatement
+     * or any other custom implementation.
+     *
+     * @var \Cake\Database\StatementInterface
+     */
+    protected $_statement;
+
+    /**
+     * Reference to the driver object associated to this statement.
+     *
+     * @var \Cake\Database\DriverInterface
+     */
+    protected $_driver;
+
+    /**
+     * Whether this statement has already been executed
+     *
+     * @var bool
+     */
+    protected $_hasExecuted = false;
+
+    /**
+     * Constructor
+     *
+     * @param \Cake\Database\StatementInterface $statement Statement implementation
+     *  such as PDOStatement.
+     * @param \Cake\Database\DriverInterface $driver Driver instance
+     */
+    public function __construct(StatementInterface $statement, DriverInterface $driver)
+    {
+        $this->_statement = $statement;
+        $this->_driver = $driver;
+    }
+
+    /**
+     * Returns the connection driver.
+     *
+     * @return \Cake\Database\DriverInterface
+     */
+    protected function getDriver(): DriverInterface
+    {
+        return $this->_driver;
+    }
+
+    /**
+     * Magic getter to return $queryString as read-only.
+     *
+     * @param string $property internal property to get
+     * @return string|null
+     */
+    public function __get(string $property)
+    {
+        if ($property === 'queryString') {
+            /** @psalm-suppress NoInterfaceProperties */
+            return $this->_statement->queryString;
+        }
+
+        return null;
+    }
+
+    /**
+     * Assign a value to a positional or named variable in prepared query. If using
+     * positional variables you need to start with index one, if using named params then
+     * just use the name in any order.
+     *
+     * It is not allowed to combine positional and named variables in the same statement.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $statement->bindValue(1, 'a title');
+     * $statement->bindValue('active', true, 'boolean');
+     * $statement->bindValue(5, new \DateTime(), 'date');
+     * ```
+     *
+     * @param string|int $column name or param position to be bound
+     * @param mixed $value The value to bind to variable in query
+     * @param string|int|null $type name of configured Type class
+     * @return void
+     */
+    public function bindValue($column, $value, $type = 'string'): void
+    {
+        $this->_statement->bindValue($column, $value, $type);
+    }
+
+    /**
+     * Closes a cursor in the database, freeing up any resources and memory
+     * allocated to it. In most cases you don't need to call this method, as it is
+     * automatically called after fetching all results from the result set.
+     *
+     * @return void
+     */
+    public function closeCursor(): void
+    {
+        $this->_statement->closeCursor();
+    }
+
+    /**
+     * Returns the number of columns this statement's results will contain.
+     *
+     * ### Example:
+     *
+     * ```
+     * $statement = $connection->prepare('SELECT id, title from articles');
+     * $statement->execute();
+     * echo $statement->columnCount(); // outputs 2
+     * ```
+     *
+     * @return int
+     */
+    public function columnCount(): int
+    {
+        return $this->_statement->columnCount();
+    }
+
+    /**
+     * Returns the error code for the last error that occurred when executing this statement.
+     *
+     * @return string|int
+     */
+    public function errorCode()
+    {
+        return $this->_statement->errorCode();
+    }
+
+    /**
+     * Returns the error information for the last error that occurred when executing
+     * this statement.
+     *
+     * @return array
+     */
+    public function errorInfo(): array
+    {
+        return $this->_statement->errorInfo();
+    }
+
+    /**
+     * Executes the statement by sending the SQL query to the database. It can optionally
+     * take an array or arguments to be bound to the query variables. Please note
+     * that binding parameters from this method will not perform any custom type conversion
+     * as it would normally happen when calling `bindValue`.
+     *
+     * @param array|null $params list of values to be bound to query
+     * @return bool true on success, false otherwise
+     */
+    public function execute(?array $params = null): bool
+    {
+        $this->_hasExecuted = true;
+
+        return $this->_statement->execute($params);
+    }
+
+    /**
+     * Returns the next row for the result set after executing this statement.
+     * Rows can be fetched to contain columns as names or positions. If no
+     * rows are left in result set, this method will return false.
+     *
+     * ### Example:
+     *
+     * ```
+     * $statement = $connection->prepare('SELECT id, title from articles');
+     * $statement->execute();
+     * print_r($statement->fetch('assoc')); // will show ['id' => 1, 'title' => 'a title']
+     * ```
+     *
+     * @param string|int $type 'num' for positional columns, assoc for named columns
+     * @return mixed Result array containing columns and values or false if no results
+     * are left
+     */
+    public function fetch($type = self::FETCH_TYPE_NUM)
+    {
+        return $this->_statement->fetch($type);
+    }
+
+    /**
+     * Returns the next row in a result set as an associative array. Calling this function is the same as calling
+     * $statement->fetch(StatementDecorator::FETCH_TYPE_ASSOC). If no results are found an empty array is returned.
+     *
+     * @return array
+     */
+    public function fetchAssoc(): array
+    {
+        $result = $this->fetch(static::FETCH_TYPE_ASSOC);
+
+        return $result ?: [];
+    }
+
+    /**
+     * Returns the value of the result at position.
+     *
+     * @param int $position The numeric position of the column to retrieve in the result
+     * @return mixed Returns the specific value of the column designated at $position
+     */
+    public function fetchColumn(int $position)
+    {
+        $result = $this->fetch(static::FETCH_TYPE_NUM);
+        if ($result && isset($result[$position])) {
+            return $result[$position];
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns an array with all rows resulting from executing this statement.
+     *
+     * ### Example:
+     *
+     * ```
+     * $statement = $connection->prepare('SELECT id, title from articles');
+     * $statement->execute();
+     * print_r($statement->fetchAll('assoc')); // will show [0 => ['id' => 1, 'title' => 'a title']]
+     * ```
+     *
+     * @param string|int $type num for fetching columns as positional keys or assoc for column names as keys
+     * @return array|false List of all results from database for this statement. False on failure.
+     */
+    public function fetchAll($type = self::FETCH_TYPE_NUM)
+    {
+        return $this->_statement->fetchAll($type);
+    }
+
+    /**
+     * Returns the number of rows affected by this SQL statement.
+     *
+     * ### Example:
+     *
+     * ```
+     * $statement = $connection->prepare('SELECT id, title from articles');
+     * $statement->execute();
+     * print_r($statement->rowCount()); // will show 1
+     * ```
+     *
+     * @return int
+     */
+    public function rowCount(): int
+    {
+        return $this->_statement->rowCount();
+    }
+
+    /**
+     * Statements are iterable as arrays, this method will return
+     * the iterator object for traversing all items in the result.
+     *
+     * ### Example:
+     *
+     * ```
+     * $statement = $connection->prepare('SELECT id, title from articles');
+     * foreach ($statement as $row) {
+     *   //do stuff
+     * }
+     * ```
+     *
+     * @return \Cake\Database\StatementInterface
+     * @psalm-suppress ImplementedReturnTypeMismatch
+     */
+    #[\ReturnTypeWillChange]
+    public function getIterator()
+    {
+        if (!$this->_hasExecuted) {
+            $this->execute();
+        }
+
+        return $this->_statement;
+    }
+
+    /**
+     * Statements can be passed as argument for count() to return the number
+     * for affected rows from last execution.
+     *
+     * @return int
+     */
+    public function count(): int
+    {
+        return $this->rowCount();
+    }
+
+    /**
+     * Binds a set of values to statement object with corresponding type.
+     *
+     * @param array $params list of values to be bound
+     * @param array $types list of types to be used, keys should match those in $params
+     * @return void
+     */
+    public function bind(array $params, array $types): void
+    {
+        if (empty($params)) {
+            return;
+        }
+
+        $anonymousParams = is_int(key($params));
+        $offset = 1;
+        foreach ($params as $index => $value) {
+            $type = $types[$index] ?? null;
+            if ($anonymousParams) {
+                /** @psalm-suppress InvalidOperand */
+                $index += $offset;
+            }
+            $this->bindValue($index, $value, $type);
+        }
+    }
+
+    /**
+     * Returns the latest primary inserted using this statement.
+     *
+     * @param string|null $table table name or sequence to get last insert value from
+     * @param string|null $column the name of the column representing the primary key
+     * @return string|int
+     */
+    public function lastInsertId(?string $table = null, ?string $column = null)
+    {
+        if ($column && $this->columnCount()) {
+            $row = $this->fetch(static::FETCH_TYPE_ASSOC);
+
+            if ($row && isset($row[$column])) {
+                return $row[$column];
+            }
+        }
+
+        return $this->_driver->lastInsertId($table, $column);
+    }
+
+    /**
+     * Returns the statement object that was decorated by this class.
+     *
+     * @return \Cake\Database\StatementInterface
+     */
+    public function getInnerStatement()
+    {
+        return $this->_statement;
+    }
+}
diff --git a/vendor/cakephp/database/StatementInterface.php b/vendor/cakephp/database/StatementInterface.php
new file mode 100755
index 0000000..dc5bbc6
--- /dev/null
+++ b/vendor/cakephp/database/StatementInterface.php
@@ -0,0 +1,203 @@
+bindValue(1, 'a title');
+     * $statement->bindValue('active', true, 'boolean');
+     * $statement->bindValue(5, new \DateTime(), 'date');
+     * ```
+     *
+     * @param string|int $column name or param position to be bound
+     * @param mixed $value The value to bind to variable in query
+     * @param string|int|null $type name of configured Type class, or PDO type constant.
+     * @return void
+     */
+    public function bindValue($column, $value, $type = 'string'): void;
+
+    /**
+     * Closes a cursor in the database, freeing up any resources and memory
+     * allocated to it. In most cases you don't need to call this method, as it is
+     * automatically called after fetching all results from the result set.
+     *
+     * @return void
+     */
+    public function closeCursor(): void;
+
+    /**
+     * Returns the number of columns this statement's results will contain
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  echo $statement->columnCount(); // outputs 2
+     * ```
+     *
+     * @return int
+     */
+    public function columnCount(): int;
+
+    /**
+     * Returns the error code for the last error that occurred when executing this statement
+     *
+     * @return string|int
+     */
+    public function errorCode();
+
+    /**
+     * Returns the error information for the last error that occurred when executing
+     * this statement
+     *
+     * @return array
+     */
+    public function errorInfo(): array;
+
+    /**
+     * Executes the statement by sending the SQL query to the database. It can optionally
+     * take an array or arguments to be bound to the query variables. Please note
+     * that binding parameters from this method will not perform any custom type conversion
+     * as it would normally happen when calling `bindValue`
+     *
+     * @param array|null $params list of values to be bound to query
+     * @return bool true on success, false otherwise
+     */
+    public function execute(?array $params = null): bool;
+
+    /**
+     * Returns the next row for the result set after executing this statement.
+     * Rows can be fetched to contain columns as names or positions. If no
+     * rows are left in result set, this method will return false
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  print_r($statement->fetch('assoc')); // will show ['id' => 1, 'title' => 'a title']
+     * ```
+     *
+     * @param string|int $type 'num' for positional columns, assoc for named columns, or PDO fetch mode constants.
+     * @return mixed Result array containing columns and values or false if no results
+     * are left
+     */
+    public function fetch($type = 'num');
+
+    /**
+     * Returns an array with all rows resulting from executing this statement
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  print_r($statement->fetchAll('assoc')); // will show [0 => ['id' => 1, 'title' => 'a title']]
+     * ```
+     *
+     * @param string|int $type num for fetching columns as positional keys or assoc for column names as keys
+     * @return array|false list of all results from database for this statement or false on failure.
+     */
+    public function fetchAll($type = 'num');
+
+    /**
+     * Returns the value of the result at position.
+     *
+     * @param int $position The numeric position of the column to retrieve in the result
+     * @return mixed Returns the specific value of the column designated at $position
+     */
+    public function fetchColumn(int $position);
+
+    /**
+     * Returns the number of rows affected by this SQL statement
+     *
+     * ### Example:
+     *
+     * ```
+     *  $statement = $connection->prepare('SELECT id, title from articles');
+     *  $statement->execute();
+     *  print_r($statement->rowCount()); // will show 1
+     * ```
+     *
+     * @return int
+     */
+    public function rowCount(): int;
+
+    /**
+     * Statements can be passed as argument for count()
+     * to return the number for affected rows from last execution
+     *
+     * @return int
+     */
+    public function count(): int;
+
+    /**
+     * Binds a set of values to statement object with corresponding type
+     *
+     * @param array $params list of values to be bound
+     * @param array $types list of types to be used, keys should match those in $params
+     * @return void
+     */
+    public function bind(array $params, array $types): void;
+
+    /**
+     * Returns the latest primary inserted using this statement
+     *
+     * @param string|null $table table name or sequence to get last insert value from
+     * @param string|null $column the name of the column representing the primary key
+     * @return string|int
+     */
+    public function lastInsertId(?string $table = null, ?string $column = null);
+}
diff --git a/vendor/cakephp/database/Type.php b/vendor/cakephp/database/Type.php
new file mode 100755
index 0000000..164419c
--- /dev/null
+++ b/vendor/cakephp/database/Type.php
@@ -0,0 +1,9 @@
+_name = $name;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getName(): ?string
+    {
+        return $this->_name;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getBaseType(): ?string
+    {
+        return $this->_name;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function toStatement($value, DriverInterface $driver)
+    {
+        if ($value === null) {
+            return PDO::PARAM_NULL;
+        }
+
+        return PDO::PARAM_STR;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function newId()
+    {
+        return null;
+    }
+}
diff --git a/vendor/cakephp/database/Type/BatchCastingInterface.php b/vendor/cakephp/database/Type/BatchCastingInterface.php
new file mode 100755
index 0000000..8761f1c
--- /dev/null
+++ b/vendor/cakephp/database/Type/BatchCastingInterface.php
@@ -0,0 +1,37 @@
+ $fields The field keys to cast
+     * @param \Cake\Database\DriverInterface $driver Object from which database preferences and configuration will be extracted.
+     * @return array
+     */
+    public function manyToPHP(array $values, array $fields, DriverInterface $driver): array;
+}
diff --git a/vendor/cakephp/database/Type/BinaryType.php b/vendor/cakephp/database/Type/BinaryType.php
new file mode 100755
index 0000000..e570f53
--- /dev/null
+++ b/vendor/cakephp/database/Type/BinaryType.php
@@ -0,0 +1,92 @@
+convertStringToBinaryUuid($value);
+    }
+
+    /**
+     * Generate a new binary UUID
+     *
+     * @return string A new primary key value.
+     */
+    public function newId(): string
+    {
+        return Text::uuid();
+    }
+
+    /**
+     * Convert binary uuid into resource handles
+     *
+     * @param mixed $value The value to convert.
+     * @param \Cake\Database\DriverInterface $driver The driver instance to convert with.
+     * @return resource|string|null
+     * @throws \Cake\Core\Exception\CakeException
+     */
+    public function toPHP($value, DriverInterface $driver)
+    {
+        if ($value === null) {
+            return null;
+        }
+        if (is_string($value)) {
+            return $this->convertBinaryUuidToString($value);
+        }
+        if (is_resource($value)) {
+            return $value;
+        }
+
+        throw new CakeException(sprintf('Unable to convert %s into binary uuid.', gettype($value)));
+    }
+
+    /**
+     * Get the correct PDO binding type for Binary data.
+     *
+     * @param mixed $value The value being bound.
+     * @param \Cake\Database\DriverInterface $driver The driver.
+     * @return int
+     */
+    public function toStatement($value, DriverInterface $driver): int
+    {
+        return PDO::PARAM_LOB;
+    }
+
+    /**
+     * Marshals flat data into PHP objects.
+     *
+     * Most useful for converting request data into PHP objects
+     * that make sense for the rest of the ORM/Database layers.
+     *
+     * @param mixed $value The value to convert.
+     * @return mixed Converted value.
+     */
+    public function marshal($value)
+    {
+        return $value;
+    }
+
+    /**
+     * Converts a binary uuid to a string representation
+     *
+     * @param mixed $binary The value to convert.
+     * @return string Converted value.
+     */
+    protected function convertBinaryUuidToString($binary): string
+    {
+        $string = unpack('H*', $binary);
+
+        $string = preg_replace(
+            '/([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})/',
+            '$1-$2-$3-$4-$5',
+            $string
+        );
+
+        return $string[1];
+    }
+
+    /**
+     * Converts a string UUID (36 or 32 char) to a binary representation.
+     *
+     * @param string $string The value to convert.
+     * @return string Converted value.
+     */
+    protected function convertStringToBinaryUuid($string): string
+    {
+        $string = str_replace('-', '', $string);
+
+        return pack('H*', $string);
+    }
+}
diff --git a/vendor/cakephp/database/Type/BoolType.php b/vendor/cakephp/database/Type/BoolType.php
new file mode 100755
index 0000000..0bb8b0a
--- /dev/null
+++ b/vendor/cakephp/database/Type/BoolType.php
@@ -0,0 +1,126 @@
+|null Array of column information, or `null` in case the column isn't processed by this type.
+     */
+    public function convertColumnDefinition(array $definition, DriverInterface $driver): ?array;
+}
diff --git a/vendor/cakephp/database/Type/DateTimeFractionalType.php b/vendor/cakephp/database/Type/DateTimeFractionalType.php
new file mode 100755
index 0000000..3cc149d
--- /dev/null
+++ b/vendor/cakephp/database/Type/DateTimeFractionalType.php
@@ -0,0 +1,42 @@
+
+     */
+    protected $_marshalFormats = [
+        'Y-m-d H:i',
+        'Y-m-d H:i:s',
+        'Y-m-d\TH:i',
+        'Y-m-d\TH:i:s',
+        'Y-m-d\TH:i:sP',
+    ];
+
+    /**
+     * Whether `marshal()` should use locale-aware parser with `_localeMarshalFormat`.
+     *
+     * @var bool
+     */
+    protected $_useLocaleMarshal = false;
+
+    /**
+     * The locale-aware format `marshal()` uses when `_useLocaleParser` is true.
+     *
+     * See `Cake\I18n\Time::parseDateTime()` for accepted formats.
+     *
+     * @var array|string|int
+     */
+    protected $_localeMarshalFormat;
+
+    /**
+     * The classname to use when creating objects.
+     *
+     * @var string
+     * @psalm-var class-string<\DateTime>|class-string<\DateTimeImmutable>
+     */
+    protected $_className;
+
+    /**
+     * Database time zone.
+     *
+     * @var \DateTimeZone|null
+     */
+    protected $dbTimezone;
+
+    /**
+     * User time zone.
+     *
+     * @var \DateTimeZone|null
+     */
+    protected $userTimezone;
+
+    /**
+     * Default time zone.
+     *
+     * @var \DateTimeZone
+     */
+    protected $defaultTimezone;
+
+    /**
+     * Whether database time zone is kept when converting
+     *
+     * @var bool
+     */
+    protected $keepDatabaseTimezone = false;
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param string|null $name The name identifying this type
+     */
+    public function __construct(?string $name = null)
+    {
+        parent::__construct($name);
+
+        $this->defaultTimezone = new DateTimeZone(date_default_timezone_get());
+        $this->_setClassName(FrozenTime::class, DateTimeImmutable::class);
+    }
+
+    /**
+     * Convert DateTime instance into strings.
+     *
+     * @param mixed $value The value to convert.
+     * @param \Cake\Database\DriverInterface $driver The driver instance to convert with.
+     * @return string|null
+     */
+    public function toDatabase($value, DriverInterface $driver): ?string
+    {
+        if ($value === null || is_string($value)) {
+            return $value;
+        }
+        if (is_int($value)) {
+            $class = $this->_className;
+            $value = new $class('@' . $value);
+        }
+
+        if (
+            $this->dbTimezone !== null
+            && $this->dbTimezone->getName() !== $value->getTimezone()->getName()
+        ) {
+            if (!$value instanceof DateTimeImmutable) {
+                $value = clone $value;
+            }
+            $value = $value->setTimezone($this->dbTimezone);
+        }
+
+        return $value->format($this->_format);
+    }
+
+    /**
+     * Alias for `setDatabaseTimezone()`.
+     *
+     * @param \DateTimeZone|string|null $timezone Database timezone.
+     * @return $this
+     * @deprecated 4.1.0 Use {@link setDatabaseTimezone()} instead.
+     */
+    public function setTimezone($timezone)
+    {
+        deprecationWarning('DateTimeType::setTimezone() is deprecated. Use setDatabaseTimezone() instead.');
+
+        return $this->setDatabaseTimezone($timezone);
+    }
+
+    /**
+     * Set database timezone.
+     *
+     * This is the time zone used when converting database strings to DateTime
+     * instances and converting DateTime instances to database strings.
+     *
+     * @see DateTimeType::setKeepDatabaseTimezone
+     * @param \DateTimeZone|string|null $timezone Database timezone.
+     * @return $this
+     */
+    public function setDatabaseTimezone($timezone)
+    {
+        if (is_string($timezone)) {
+            $timezone = new DateTimeZone($timezone);
+        }
+        $this->dbTimezone = $timezone;
+
+        return $this;
+    }
+
+    /**
+     * Set user timezone.
+     *
+     * This is the time zone used when marshalling strings to DateTime instances.
+     *
+     * @param \DateTimeZone|string|null $timezone User timezone.
+     * @return $this
+     */
+    public function setUserTimezone($timezone)
+    {
+        if (is_string($timezone)) {
+            $timezone = new DateTimeZone($timezone);
+        }
+        $this->userTimezone = $timezone;
+
+        return $this;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param mixed $value Value to be converted to PHP equivalent
+     * @param \Cake\Database\DriverInterface $driver Object from which database preferences and configuration will be extracted
+     * @return \DateTimeInterface|null
+     */
+    public function toPHP($value, DriverInterface $driver)
+    {
+        if ($value === null) {
+            return null;
+        }
+
+        $class = $this->_className;
+        if (is_int($value)) {
+            $instance = new $class('@' . $value);
+        } elseif (strpos($value, '0000-00-00') === 0) {
+            return null;
+        } else {
+            $instance = new $class($value, $this->dbTimezone);
+        }
+
+        if (
+            !$this->keepDatabaseTimezone &&
+            $instance->getTimezone()->getName() !== $this->defaultTimezone->getName()
+        ) {
+            $instance = $instance->setTimezone($this->defaultTimezone);
+        }
+
+        if ($this->setToDateStart) {
+            $instance = $instance->setTime(0, 0, 0);
+        }
+
+        return $instance;
+    }
+
+    /**
+     * Set whether DateTime object created from database string is converted
+     * to default time zone.
+     *
+     * If your database date times are in a specific time zone that you want
+     * to keep in the DateTime instance then set this to true.
+     *
+     * When false, datetime timezones are converted to default time zone.
+     * This is default behavior.
+     *
+     * @param bool $keep If true, database time zone is kept when converting
+     *      to DateTime instances.
+     * @return $this
+     */
+    public function setKeepDatabaseTimezone(bool $keep)
+    {
+        $this->keepDatabaseTimezone = $keep;
+
+        return $this;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function manyToPHP(array $values, array $fields, DriverInterface $driver): array
+    {
+        foreach ($fields as $field) {
+            if (!isset($values[$field])) {
+                continue;
+            }
+
+            $value = $values[$field];
+
+            $class = $this->_className;
+            if (is_int($value)) {
+                $instance = new $class('@' . $value);
+            } elseif (strpos($value, '0000-00-00') === 0) {
+                $values[$field] = null;
+                continue;
+            } else {
+                $instance = new $class($value, $this->dbTimezone);
+            }
+
+            if (
+                !$this->keepDatabaseTimezone &&
+                $instance->getTimezone()->getName() !== $this->defaultTimezone->getName()
+            ) {
+                $instance = $instance->setTimezone($this->defaultTimezone);
+            }
+
+            if ($this->setToDateStart) {
+                $instance = $instance->setTime(0, 0, 0);
+            }
+
+            $values[$field] = $instance;
+        }
+
+        return $values;
+    }
+
+    /**
+     * Convert request data into a datetime object.
+     *
+     * @param mixed $value Request data
+     * @return \DateTimeInterface|null
+     */
+    public function marshal($value): ?DateTimeInterface
+    {
+        if ($value instanceof DateTimeInterface) {
+            if ($value instanceof DateTime) {
+                $value = clone $value;
+            }
+
+            if ($value instanceof ChronosDate) {
+                return $value;
+            }
+
+            /** @var \Datetime|\DateTimeImmutable $value */
+            return $value->setTimezone($this->defaultTimezone);
+        }
+
+        /** @var class-string<\DateTimeInterface> $class */
+        $class = $this->_className;
+        try {
+            if ($value === '' || $value === null || is_bool($value)) {
+                return null;
+            }
+
+            if (is_int($value) || (is_string($value) && ctype_digit($value))) {
+                /** @var \DateTime|\DateTimeImmutable $dateTime */
+                $dateTime = new $class('@' . $value);
+
+                return $dateTime->setTimezone($this->defaultTimezone);
+            }
+
+            if (is_string($value)) {
+                if ($this->_useLocaleMarshal) {
+                    $dateTime = $this->_parseLocaleValue($value);
+                } else {
+                    $dateTime = $this->_parseValue($value);
+                }
+
+                /** @var \DateTime|\DateTimeImmutable $dateTime */
+                if ($dateTime !== null) {
+                    $dateTime = $dateTime->setTimezone($this->defaultTimezone);
+                }
+
+                return $dateTime;
+            }
+        } catch (Exception $e) {
+            return null;
+        }
+
+        if (is_array($value) && implode('', $value) === '') {
+            return null;
+        }
+        $value += ['hour' => 0, 'minute' => 0, 'second' => 0, 'microsecond' => 0];
+
+        $format = '';
+        if (
+            isset($value['year'], $value['month'], $value['day']) &&
+            (
+                is_numeric($value['year']) &&
+                is_numeric($value['month']) &&
+                is_numeric($value['day'])
+            )
+        ) {
+            $format .= sprintf('%d-%02d-%02d', $value['year'], $value['month'], $value['day']);
+        }
+
+        if (isset($value['meridian']) && (int)$value['hour'] === 12) {
+            $value['hour'] = 0;
+        }
+        if (isset($value['meridian'])) {
+            $value['hour'] = strtolower($value['meridian']) === 'am' ? $value['hour'] : $value['hour'] + 12;
+        }
+        $format .= sprintf(
+            '%s%02d:%02d:%02d.%06d',
+            empty($format) ? '' : ' ',
+            $value['hour'],
+            $value['minute'],
+            $value['second'],
+            $value['microsecond']
+        );
+
+        /** @var \DateTime|\DateTimeImmutable $dateTime */
+        $dateTime = new $class($format, $value['timezone'] ?? $this->userTimezone);
+
+        return $dateTime->setTimezone($this->defaultTimezone);
+    }
+
+    /**
+     * Sets whether to parse strings passed to `marshal()` using
+     * the locale-aware format set by `setLocaleFormat()`.
+     *
+     * @param bool $enable Whether to enable
+     * @return $this
+     */
+    public function useLocaleParser(bool $enable = true)
+    {
+        if ($enable === false) {
+            $this->_useLocaleMarshal = $enable;
+
+            return $this;
+        }
+        if (is_subclass_of($this->_className, I18nDateTimeInterface::class)) {
+            $this->_useLocaleMarshal = $enable;
+
+            return $this;
+        }
+        throw new RuntimeException(
+            sprintf('Cannot use locale parsing with the %s class', $this->_className)
+        );
+    }
+
+    /**
+     * Sets the locale-aware format used by `marshal()` when parsing strings.
+     *
+     * See `Cake\I18n\Time::parseDateTime()` for accepted formats.
+     *
+     * @param array|string $format The locale-aware format
+     * @see \Cake\I18n\Time::parseDateTime()
+     * @return $this
+     */
+    public function setLocaleFormat($format)
+    {
+        $this->_localeMarshalFormat = $format;
+
+        return $this;
+    }
+
+    /**
+     * Change the preferred class name to the FrozenTime implementation.
+     *
+     * @return $this
+     * @deprecated 4.3.0 This method is no longer needed as using immutable datetime class is the default behavior.
+     */
+    public function useImmutable()
+    {
+        deprecationWarning(
+            'Configuring immutable or mutable classes is deprecated and immutable'
+            . ' classes will be the permanent configuration in 5.0. Calling `useImmutable()` is unnecessary.'
+        );
+
+        $this->_setClassName(FrozenTime::class, DateTimeImmutable::class);
+
+        return $this;
+    }
+
+    /**
+     * Set the classname to use when building objects.
+     *
+     * @param string $class The classname to use.
+     * @param string $fallback The classname to use when the preferred class does not exist.
+     * @return void
+     * @psalm-param class-string<\DateTime>|class-string<\DateTimeImmutable> $class
+     * @psalm-param class-string<\DateTime>|class-string<\DateTimeImmutable> $fallback
+     */
+    protected function _setClassName(string $class, string $fallback): void
+    {
+        if (!class_exists($class)) {
+            $class = $fallback;
+        }
+        $this->_className = $class;
+    }
+
+    /**
+     * Get the classname used for building objects.
+     *
+     * @return string
+     * @psalm-return class-string<\DateTime>|class-string<\DateTimeImmutable>
+     */
+    public function getDateTimeClassName(): string
+    {
+        return $this->_className;
+    }
+
+    /**
+     * Change the preferred class name to the mutable Time implementation.
+     *
+     * @return $this
+     * @deprecated 4.3.0 Using mutable datetime objects is deprecated.
+     */
+    public function useMutable()
+    {
+        deprecationWarning(
+            'Configuring immutable or mutable classes is deprecated and immutable'
+            . ' classes will be the permanent configuration in 5.0. Calling `useImmutable()` is unnecessary.'
+        );
+
+        $this->_setClassName(Time::class, DateTime::class);
+
+        return $this;
+    }
+
+    /**
+     * Converts a string into a DateTime object after parsing it using the locale
+     * aware parser with the format set by `setLocaleFormat()`.
+     *
+     * @param string $value The value to parse and convert to an object.
+     * @return \Cake\I18n\I18nDateTimeInterface|null
+     */
+    protected function _parseLocaleValue(string $value): ?I18nDateTimeInterface
+    {
+        /** @psalm-var class-string<\Cake\I18n\I18nDateTimeInterface> $class */
+        $class = $this->_className;
+
+        return $class::parseDateTime($value, $this->_localeMarshalFormat, $this->userTimezone);
+    }
+
+    /**
+     * Converts a string into a DateTime object after parsing it using the
+     * formats in `_marshalFormats`.
+     *
+     * @param string $value The value to parse and convert to an object.
+     * @return \DateTimeInterface|null
+     */
+    protected function _parseValue(string $value): ?DateTimeInterface
+    {
+        $class = $this->_className;
+
+        foreach ($this->_marshalFormats as $format) {
+            try {
+                $dateTime = $class::createFromFormat($format, $value, $this->userTimezone);
+                // Check for false in case DateTime is used directly
+                if ($dateTime !== false) {
+                    return $dateTime;
+                }
+            } catch (InvalidArgumentException $e) {
+                // Chronos wraps DateTime::createFromFormat and throws
+                // exception if parse fails.
+                continue;
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Casts given value to Statement equivalent
+     *
+     * @param mixed $value value to be converted to PDO statement
+     * @param \Cake\Database\DriverInterface $driver object from which database preferences and configuration will be extracted
+     * @return mixed
+     */
+    public function toStatement($value, DriverInterface $driver)
+    {
+        return PDO::PARAM_STR;
+    }
+}
diff --git a/vendor/cakephp/database/Type/DateType.php b/vendor/cakephp/database/Type/DateType.php
new file mode 100755
index 0000000..0cd63cd
--- /dev/null
+++ b/vendor/cakephp/database/Type/DateType.php
@@ -0,0 +1,174 @@
+_setClassName(FrozenDate::class, DateTimeImmutable::class);
+    }
+
+    /**
+     * Change the preferred class name to the FrozenDate implementation.
+     *
+     * @return $this
+     * @deprecated 4.3.0 This method is no longer needed as using immutable datetime class is the default behavior.
+     */
+    public function useImmutable()
+    {
+        deprecationWarning(
+            'Configuring immutable or mutable classes is deprecated and immutable'
+            . ' classes will be the permanent configuration in 5.0. Calling `useImmutable()` is unnecessary.'
+        );
+
+        $this->_setClassName(FrozenDate::class, DateTimeImmutable::class);
+
+        return $this;
+    }
+
+    /**
+     * Change the preferred class name to the mutable Date implementation.
+     *
+     * @return $this
+     * @deprecated 4.3.0 Using mutable datetime objects is deprecated.
+     */
+    public function useMutable()
+    {
+        deprecationWarning(
+            'Configuring immutable or mutable classes is deprecated and immutable'
+            . ' classes will be the permanent configuration in 5.0. Calling `useImmutable()` is unnecessary.'
+        );
+
+        $this->_setClassName(Date::class, DateTime::class);
+
+        return $this;
+    }
+
+    /**
+     * Convert request data into a datetime object.
+     *
+     * @param mixed $value Request data
+     * @return \DateTimeInterface|null
+     */
+    public function marshal($value): ?DateTimeInterface
+    {
+        if ($value instanceof DateTimeInterface) {
+            return new FrozenDate($value);
+        }
+
+        /** @var class-string<\Cake\Chronos\ChronosDate> $class */
+        $class = $this->_className;
+        try {
+            if ($value === '' || $value === null || is_bool($value)) {
+                return null;
+            }
+
+            if (is_int($value) || (is_string($value) && ctype_digit($value))) {
+                /** @var \Cake\I18n\FrozenDate|\DateTimeImmutable $dateTime */
+                $dateTime = new $class('@' . $value);
+
+                return $dateTime;
+            }
+
+            if (is_string($value)) {
+                if ($this->_useLocaleMarshal) {
+                    $dateTime = $this->_parseLocaleValue($value);
+                } else {
+                    $dateTime = $this->_parseValue($value);
+                }
+
+                return $dateTime;
+            }
+        } catch (Exception $e) {
+            return null;
+        }
+
+        if (is_array($value) && implode('', $value) === '') {
+            return null;
+        }
+        $format = '';
+        if (
+            isset($value['year'], $value['month'], $value['day']) &&
+            (
+                is_numeric($value['year']) &&
+                is_numeric($value['month']) &&
+                is_numeric($value['day'])
+            )
+        ) {
+            $format .= sprintf('%d-%02d-%02d', $value['year'], $value['month'], $value['day']);
+        }
+
+        if (empty($format)) {
+            // Invalid array format.
+            return null;
+        }
+
+        /** @var \Cake\I18n\FrozenDate|\DateTimeImmutable $dateTime */
+        $dateTime = new $class($format);
+
+        return $dateTime;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    protected function _parseLocaleValue(string $value): ?I18nDateTimeInterface
+    {
+        /** @psalm-var class-string<\Cake\I18n\I18nDateTimeInterface> $class */
+        $class = $this->_className;
+
+        return $class::parseDate($value, $this->_localeMarshalFormat);
+    }
+}
diff --git a/vendor/cakephp/database/Type/DecimalType.php b/vendor/cakephp/database/Type/DecimalType.php
new file mode 100755
index 0000000..f06f6d7
--- /dev/null
+++ b/vendor/cakephp/database/Type/DecimalType.php
@@ -0,0 +1,190 @@
+_useLocaleParser) {
+            return $this->_parseValue($value);
+        }
+        if (is_numeric($value)) {
+            return (string)$value;
+        }
+        if (is_string($value) && preg_match('/^[0-9,. ]+$/', $value)) {
+            return $value;
+        }
+
+        return null;
+    }
+
+    /**
+     * Sets whether to parse numbers passed to the marshal() function
+     * by using a locale aware parser.
+     *
+     * @param bool $enable Whether to enable
+     * @return $this
+     * @throws \RuntimeException
+     */
+    public function useLocaleParser(bool $enable = true)
+    {
+        if ($enable === false) {
+            $this->_useLocaleParser = $enable;
+
+            return $this;
+        }
+        if (
+            static::$numberClass === Number::class ||
+            is_subclass_of(static::$numberClass, Number::class)
+        ) {
+            $this->_useLocaleParser = $enable;
+
+            return $this;
+        }
+        throw new RuntimeException(
+            sprintf('Cannot use locale parsing with the %s class', static::$numberClass)
+        );
+    }
+
+    /**
+     * Converts localized string into a decimal string after parsing it using
+     * the locale aware parser.
+     *
+     * @param string $value The value to parse and convert to an float.
+     * @return string
+     */
+    protected function _parseValue(string $value): string
+    {
+        /** @var \Cake\I18n\Number $class */
+        $class = static::$numberClass;
+
+        return (string)$class::parseFloat($value);
+    }
+}
diff --git a/vendor/cakephp/database/Type/ExpressionTypeCasterTrait.php b/vendor/cakephp/database/Type/ExpressionTypeCasterTrait.php
new file mode 100755
index 0000000..621bb9d
--- /dev/null
+++ b/vendor/cakephp/database/Type/ExpressionTypeCasterTrait.php
@@ -0,0 +1,80 @@
+toExpression($value);
+    }
+
+    /**
+     * Returns an array with the types that require values to
+     * be casted to expressions, out of the list of type names
+     * passed as parameter.
+     *
+     * @param array $types List of type names
+     * @return array
+     */
+    protected function _requiresToExpressionCasting(array $types): array
+    {
+        $result = [];
+        $types = array_filter($types);
+        foreach ($types as $k => $type) {
+            $object = TypeFactory::build($type);
+            if ($object instanceof ExpressionTypeInterface) {
+                $result[$k] = $object;
+            }
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/cakephp/database/Type/ExpressionTypeInterface.php b/vendor/cakephp/database/Type/ExpressionTypeInterface.php
new file mode 100755
index 0000000..7615cf9
--- /dev/null
+++ b/vendor/cakephp/database/Type/ExpressionTypeInterface.php
@@ -0,0 +1,36 @@
+_useLocaleParser) {
+            return $this->_parseValue($value);
+        }
+        if (is_numeric($value)) {
+            return (float)$value;
+        }
+        if (is_string($value) && preg_match('/^[0-9,. ]+$/', $value)) {
+            return $value;
+        }
+
+        return null;
+    }
+
+    /**
+     * Sets whether to parse numbers passed to the marshal() function
+     * by using a locale aware parser.
+     *
+     * @param bool $enable Whether to enable
+     * @return $this
+     */
+    public function useLocaleParser(bool $enable = true)
+    {
+        if ($enable === false) {
+            $this->_useLocaleParser = $enable;
+
+            return $this;
+        }
+        if (
+            static::$numberClass === Number::class ||
+            is_subclass_of(static::$numberClass, Number::class)
+        ) {
+            $this->_useLocaleParser = $enable;
+
+            return $this;
+        }
+        throw new RuntimeException(
+            sprintf('Cannot use locale parsing with the %s class', static::$numberClass)
+        );
+    }
+
+    /**
+     * Converts a string into a float point after parsing it using the locale
+     * aware parser.
+     *
+     * @param string $value The value to parse and convert to an float.
+     * @return float
+     */
+    protected function _parseValue(string $value): float
+    {
+        $class = static::$numberClass;
+
+        return $class::parseFloat($value);
+    }
+}
diff --git a/vendor/cakephp/database/Type/IntegerType.php b/vendor/cakephp/database/Type/IntegerType.php
new file mode 100755
index 0000000..973d7ca
--- /dev/null
+++ b/vendor/cakephp/database/Type/IntegerType.php
@@ -0,0 +1,129 @@
+checkNumeric($value);
+
+        return (int)$value;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param mixed $value The value to convert.
+     * @param \Cake\Database\DriverInterface $driver The driver instance to convert with.
+     * @return int|null
+     */
+    public function toPHP($value, DriverInterface $driver): ?int
+    {
+        if ($value === null) {
+            return null;
+        }
+
+        return (int)$value;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function manyToPHP(array $values, array $fields, DriverInterface $driver): array
+    {
+        foreach ($fields as $field) {
+            if (!isset($values[$field])) {
+                continue;
+            }
+
+            $this->checkNumeric($values[$field]);
+
+            $values[$field] = (int)$values[$field];
+        }
+
+        return $values;
+    }
+
+    /**
+     * Get the correct PDO binding type for integer data.
+     *
+     * @param mixed $value The value being bound.
+     * @param \Cake\Database\DriverInterface $driver The driver.
+     * @return int
+     */
+    public function toStatement($value, DriverInterface $driver): int
+    {
+        return PDO::PARAM_INT;
+    }
+
+    /**
+     * Marshals request data into PHP integers.
+     *
+     * @param mixed $value The value to convert.
+     * @return int|null Converted value.
+     */
+    public function marshal($value): ?int
+    {
+        if ($value === null || $value === '') {
+            return null;
+        }
+        if (is_numeric($value)) {
+            return (int)$value;
+        }
+
+        return null;
+    }
+}
diff --git a/vendor/cakephp/database/Type/JsonType.php b/vendor/cakephp/database/Type/JsonType.php
new file mode 100755
index 0000000..5648d94
--- /dev/null
+++ b/vendor/cakephp/database/Type/JsonType.php
@@ -0,0 +1,124 @@
+_encodingOptions);
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param mixed $value The value to convert.
+     * @param \Cake\Database\DriverInterface $driver The driver instance to convert with.
+     * @return array|string|null
+     */
+    public function toPHP($value, DriverInterface $driver)
+    {
+        if (!is_string($value)) {
+            return null;
+        }
+
+        return json_decode($value, true);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function manyToPHP(array $values, array $fields, DriverInterface $driver): array
+    {
+        foreach ($fields as $field) {
+            if (!isset($values[$field])) {
+                continue;
+            }
+
+            $values[$field] = json_decode($values[$field], true);
+        }
+
+        return $values;
+    }
+
+    /**
+     * Get the correct PDO binding type for string data.
+     *
+     * @param mixed $value The value being bound.
+     * @param \Cake\Database\DriverInterface $driver The driver.
+     * @return int
+     */
+    public function toStatement($value, DriverInterface $driver): int
+    {
+        return PDO::PARAM_STR;
+    }
+
+    /**
+     * Marshals request data into a JSON compatible structure.
+     *
+     * @param mixed $value The value to convert.
+     * @return mixed Converted value.
+     */
+    public function marshal($value)
+    {
+        return $value;
+    }
+
+    /**
+     * Set json_encode options.
+     *
+     * @param int $options Encoding flags. Use JSON_* flags. Set `0` to reset.
+     * @return $this
+     * @see https://www.php.net/manual/en/function.json-encode.php
+     */
+    public function setEncodingOptions(int $options)
+    {
+        $this->_encodingOptions = $options;
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/Type/OptionalConvertInterface.php b/vendor/cakephp/database/Type/OptionalConvertInterface.php
new file mode 100755
index 0000000..512683b
--- /dev/null
+++ b/vendor/cakephp/database/Type/OptionalConvertInterface.php
@@ -0,0 +1,32 @@
+__toString();
+        }
+
+        if (is_scalar($value)) {
+            return (string)$value;
+        }
+
+        throw new InvalidArgumentException(sprintf(
+            'Cannot convert value of type `%s` to string',
+            getTypeName($value)
+        ));
+    }
+
+    /**
+     * Convert string values to PHP strings.
+     *
+     * @param mixed $value The value to convert.
+     * @param \Cake\Database\DriverInterface $driver The driver instance to convert with.
+     * @return string|null
+     */
+    public function toPHP($value, DriverInterface $driver): ?string
+    {
+        if ($value === null) {
+            return null;
+        }
+
+        return (string)$value;
+    }
+
+    /**
+     * Get the correct PDO binding type for string data.
+     *
+     * @param mixed $value The value being bound.
+     * @param \Cake\Database\DriverInterface $driver The driver.
+     * @return int
+     */
+    public function toStatement($value, DriverInterface $driver): int
+    {
+        return PDO::PARAM_STR;
+    }
+
+    /**
+     * Marshals request data into PHP strings.
+     *
+     * @param mixed $value The value to convert.
+     * @return string|null Converted value.
+     */
+    public function marshal($value): ?string
+    {
+        if ($value === null || is_array($value)) {
+            return null;
+        }
+
+        return (string)$value;
+    }
+
+    /**
+     * {@inheritDoc}
+     *
+     * @return bool False as database results are returned already as strings
+     */
+    public function requiresToPhpCast(): bool
+    {
+        return false;
+    }
+}
diff --git a/vendor/cakephp/database/Type/TimeType.php b/vendor/cakephp/database/Type/TimeType.php
new file mode 100755
index 0000000..4c021e2
--- /dev/null
+++ b/vendor/cakephp/database/Type/TimeType.php
@@ -0,0 +1,52 @@
+ $class */
+        $class = $this->_className;
+
+        /** @psalm-suppress PossiblyInvalidArgument */
+        return $class::parseTime($value, $this->_localeMarshalFormat);
+    }
+}
diff --git a/vendor/cakephp/database/Type/UuidType.php b/vendor/cakephp/database/Type/UuidType.php
new file mode 100755
index 0000000..ce7f754
--- /dev/null
+++ b/vendor/cakephp/database/Type/UuidType.php
@@ -0,0 +1,67 @@
+toDatabase($value, $this->getDriver());
+            $type = $type->toStatement($value, $this->getDriver());
+        }
+
+        return [$value, $type];
+    }
+
+    /**
+     * Matches columns to corresponding types
+     *
+     * Both $columns and $types should either be numeric based or string key based at
+     * the same time.
+     *
+     * @param array $columns list or associative array of columns and parameters to be bound with types
+     * @param array $types list or associative array of types
+     * @return array
+     */
+    public function matchTypes(array $columns, array $types): array
+    {
+        if (!is_int(key($types))) {
+            $positions = array_intersect_key(array_flip($columns), $types);
+            $types = array_intersect_key($types, $positions);
+            $types = array_combine($positions, $types);
+        }
+
+        return $types;
+    }
+}
diff --git a/vendor/cakephp/database/TypeFactory.php b/vendor/cakephp/database/TypeFactory.php
new file mode 100755
index 0000000..617bad6
--- /dev/null
+++ b/vendor/cakephp/database/TypeFactory.php
@@ -0,0 +1,171 @@
+
+     * @psalm-var array>
+     */
+    protected static $_types = [
+        'tinyinteger' => Type\IntegerType::class,
+        'smallinteger' => Type\IntegerType::class,
+        'integer' => Type\IntegerType::class,
+        'biginteger' => Type\IntegerType::class,
+        'binary' => Type\BinaryType::class,
+        'binaryuuid' => Type\BinaryUuidType::class,
+        'boolean' => Type\BoolType::class,
+        'date' => Type\DateType::class,
+        'datetime' => Type\DateTimeType::class,
+        'datetimefractional' => Type\DateTimeFractionalType::class,
+        'decimal' => Type\DecimalType::class,
+        'float' => Type\FloatType::class,
+        'json' => Type\JsonType::class,
+        'string' => Type\StringType::class,
+        'char' => Type\StringType::class,
+        'text' => Type\StringType::class,
+        'time' => Type\TimeType::class,
+        'timestamp' => Type\DateTimeType::class,
+        'timestampfractional' => Type\DateTimeFractionalType::class,
+        'timestamptimezone' => Type\DateTimeTimezoneType::class,
+        'uuid' => Type\UuidType::class,
+    ];
+
+    /**
+     * Contains a map of type object instances to be reused if needed.
+     *
+     * @var array<\Cake\Database\TypeInterface>
+     */
+    protected static $_builtTypes = [];
+
+    /**
+     * Returns a Type object capable of converting a type identified by name.
+     *
+     * @param string $name type identifier
+     * @throws \InvalidArgumentException If type identifier is unknown
+     * @return \Cake\Database\TypeInterface
+     */
+    public static function build(string $name): TypeInterface
+    {
+        if (isset(static::$_builtTypes[$name])) {
+            return static::$_builtTypes[$name];
+        }
+        if (!isset(static::$_types[$name])) {
+            throw new InvalidArgumentException(sprintf('Unknown type "%s"', $name));
+        }
+
+        return static::$_builtTypes[$name] = new static::$_types[$name]($name);
+    }
+
+    /**
+     * Returns an arrays with all the mapped type objects, indexed by name.
+     *
+     * @return array<\Cake\Database\TypeInterface>
+     */
+    public static function buildAll(): array
+    {
+        $result = [];
+        foreach (static::$_types as $name => $type) {
+            $result[$name] = static::$_builtTypes[$name] ?? static::build($name);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Set TypeInterface instance capable of converting a type identified by $name
+     *
+     * @param string $name The type identifier you want to set.
+     * @param \Cake\Database\TypeInterface $instance The type instance you want to set.
+     * @return void
+     */
+    public static function set(string $name, TypeInterface $instance): void
+    {
+        static::$_builtTypes[$name] = $instance;
+        static::$_types[$name] = get_class($instance);
+    }
+
+    /**
+     * Registers a new type identifier and maps it to a fully namespaced classname.
+     *
+     * @param string $type Name of type to map.
+     * @param string $className The classname to register.
+     * @return void
+     * @psalm-param class-string<\Cake\Database\TypeInterface> $className
+     */
+    public static function map(string $type, string $className): void
+    {
+        static::$_types[$type] = $className;
+        unset(static::$_builtTypes[$type]);
+    }
+
+    /**
+     * Set type to classname mapping.
+     *
+     * @param array $map List of types to be mapped.
+     * @return void
+     * @psalm-param array> $map
+     */
+    public static function setMap(array $map): void
+    {
+        static::$_types = $map;
+        static::$_builtTypes = [];
+    }
+
+    /**
+     * Get mapped class name for given type or map array.
+     *
+     * @param string|null $type Type name to get mapped class for or null to get map array.
+     * @return array|string|null Configured class name for given $type or map array.
+     */
+    public static function getMap(?string $type = null)
+    {
+        if ($type === null) {
+            return static::$_types;
+        }
+
+        return static::$_types[$type] ?? null;
+    }
+
+    /**
+     * Clears out all created instances and mapped types classes, useful for testing
+     *
+     * @return void
+     */
+    public static function clear(): void
+    {
+        static::$_types = [];
+        static::$_builtTypes = [];
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Database\TypeFactory',
+    'Cake\Database\Type'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/database/TypeInterface.php b/vendor/cakephp/database/TypeInterface.php
new file mode 100755
index 0000000..fca0fdb
--- /dev/null
+++ b/vendor/cakephp/database/TypeInterface.php
@@ -0,0 +1,91 @@
+
+     */
+    protected $_defaults = [];
+
+    /**
+     * Array with the fields and the related types that override defaults this query might contain
+     *
+     * Used to avoid repetition when calling multiple functions inside this class that
+     * may require a custom type for a specific field.
+     *
+     * @var array
+     */
+    protected $_types = [];
+
+    /**
+     * Creates an instance with the given defaults
+     *
+     * @param array $defaults The defaults to use.
+     */
+    public function __construct(array $defaults = [])
+    {
+        $this->setDefaults($defaults);
+    }
+
+    /**
+     * Configures a map of fields and associated type.
+     *
+     * These values will be used as the default mapping of types for every function
+     * in this instance that supports a `$types` param.
+     *
+     * This method is useful when you want to avoid repeating type definitions
+     * as setting types overwrites the last set of types.
+     *
+     * ### Example
+     *
+     * ```
+     * $query->setDefaults(['created' => 'datetime', 'is_visible' => 'boolean']);
+     * ```
+     *
+     * This method will replace all the existing default mappings with the ones provided.
+     * To add into the mappings use `addDefaults()`.
+     *
+     * @param array $defaults Array where keys are field names / positions and values
+     * are the correspondent type.
+     * @return $this
+     */
+    public function setDefaults(array $defaults)
+    {
+        $this->_defaults = $defaults;
+
+        return $this;
+    }
+
+    /**
+     * Returns the currently configured types.
+     *
+     * @return array
+     */
+    public function getDefaults(): array
+    {
+        return $this->_defaults;
+    }
+
+    /**
+     * Add additional default types into the type map.
+     *
+     * If a key already exists it will not be overwritten.
+     *
+     * @param array $types The additional types to add.
+     * @return void
+     */
+    public function addDefaults(array $types): void
+    {
+        $this->_defaults += $types;
+    }
+
+    /**
+     * Sets a map of fields and their associated types for single-use.
+     *
+     * ### Example
+     *
+     * ```
+     * $query->setTypes(['created' => 'time']);
+     * ```
+     *
+     * This method will replace all the existing type maps with the ones provided.
+     *
+     * @param array $types Array where keys are field names / positions and values
+     * are the correspondent type.
+     * @return $this
+     */
+    public function setTypes(array $types)
+    {
+        $this->_types = $types;
+
+        return $this;
+    }
+
+    /**
+     * Gets a map of fields and their associated types for single-use.
+     *
+     * @return array
+     */
+    public function getTypes(): array
+    {
+        return $this->_types;
+    }
+
+    /**
+     * Returns the type of the given column. If there is no single use type is configured,
+     * the column type will be looked for inside the default mapping. If neither exist,
+     * null will be returned.
+     *
+     * @param string|int $column The type for a given column
+     * @return string|null
+     */
+    public function type($column): ?string
+    {
+        return $this->_types[$column] ?? $this->_defaults[$column] ?? null;
+    }
+
+    /**
+     * Returns an array of all types mapped types
+     *
+     * @return array
+     */
+    public function toArray(): array
+    {
+        return $this->_types + $this->_defaults;
+    }
+}
diff --git a/vendor/cakephp/database/TypeMapTrait.php b/vendor/cakephp/database/TypeMapTrait.php
new file mode 100755
index 0000000..402a9b5
--- /dev/null
+++ b/vendor/cakephp/database/TypeMapTrait.php
@@ -0,0 +1,89 @@
+_typeMap = is_array($typeMap) ? new TypeMap($typeMap) : $typeMap;
+
+        return $this;
+    }
+
+    /**
+     * Returns the existing type map.
+     *
+     * @return \Cake\Database\TypeMap
+     */
+    public function getTypeMap(): TypeMap
+    {
+        if ($this->_typeMap === null) {
+            $this->_typeMap = new TypeMap();
+        }
+
+        return $this->_typeMap;
+    }
+
+    /**
+     * Overwrite the default type mappings for fields
+     * in the implementing object.
+     *
+     * This method is useful if you need to set type mappings that are shared across
+     * multiple functions/expressions in a query.
+     *
+     * To add a default without overwriting existing ones
+     * use `getTypeMap()->addDefaults()`
+     *
+     * @param array $types The array of types to set.
+     * @return $this
+     * @see \Cake\Database\TypeMap::setDefaults()
+     */
+    public function setDefaultTypes(array $types)
+    {
+        $this->getTypeMap()->setDefaults($types);
+
+        return $this;
+    }
+
+    /**
+     * Gets default types of current type map.
+     *
+     * @return array
+     */
+    public function getDefaultTypes(): array
+    {
+        return $this->getTypeMap()->getDefaults();
+    }
+}
diff --git a/vendor/cakephp/database/TypedResultInterface.php b/vendor/cakephp/database/TypedResultInterface.php
new file mode 100755
index 0000000..434ff08
--- /dev/null
+++ b/vendor/cakephp/database/TypedResultInterface.php
@@ -0,0 +1,38 @@
+_returnType;
+    }
+
+    /**
+     * Sets the type of the value this object will generate.
+     *
+     * @param string $type The name of the type that is to be returned
+     * @return $this
+     */
+    public function setReturnType(string $type)
+    {
+        $this->_returnType = $type;
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/database/ValueBinder.php b/vendor/cakephp/database/ValueBinder.php
new file mode 100755
index 0000000..0e5dd3d
--- /dev/null
+++ b/vendor/cakephp/database/ValueBinder.php
@@ -0,0 +1,163 @@
+_bindings[$param] = compact('value', 'type') + [
+            'placeholder' => is_int($param) ? $param : substr($param, 1),
+        ];
+    }
+
+    /**
+     * Creates a unique placeholder name if the token provided does not start with ":"
+     * otherwise, it will return the same string and internally increment the number
+     * of placeholders generated by this object.
+     *
+     * @param string $token string from which the placeholder will be derived from,
+     * if it starts with a colon, then the same string is returned
+     * @return string to be used as a placeholder in a query expression
+     */
+    public function placeholder(string $token): string
+    {
+        $number = $this->_bindingsCount++;
+        if ($token[0] !== ':' && $token !== '?') {
+            $token = sprintf(':%s%s', $token, $number);
+        }
+
+        return $token;
+    }
+
+    /**
+     * Creates unique named placeholders for each of the passed values
+     * and binds them with the specified type.
+     *
+     * @param iterable $values The list of values to be bound
+     * @param string|int|null $type The type with which all values will be bound
+     * @return array with the placeholders to insert in the query
+     */
+    public function generateManyNamed(iterable $values, $type = null): array
+    {
+        $placeholders = [];
+        foreach ($values as $k => $value) {
+            $param = $this->placeholder('c');
+            $this->_bindings[$param] = [
+                'value' => $value,
+                'type' => $type,
+                'placeholder' => substr($param, 1),
+            ];
+            $placeholders[$k] = $param;
+        }
+
+        return $placeholders;
+    }
+
+    /**
+     * Returns all values bound to this expression object at this nesting level.
+     * Subexpression bound values will not be returned with this function.
+     *
+     * @return array
+     */
+    public function bindings(): array
+    {
+        return $this->_bindings;
+    }
+
+    /**
+     * Clears any bindings that were previously registered
+     *
+     * @return void
+     */
+    public function reset(): void
+    {
+        $this->_bindings = [];
+        $this->_bindingsCount = 0;
+    }
+
+    /**
+     * Resets the bindings count without clearing previously bound values
+     *
+     * @return void
+     */
+    public function resetCount(): void
+    {
+        $this->_bindingsCount = 0;
+    }
+
+    /**
+     * Binds all the stored values in this object to the passed statement.
+     *
+     * @param \Cake\Database\StatementInterface $statement The statement to add parameters to.
+     * @return void
+     */
+    public function attachTo(StatementInterface $statement): void
+    {
+        $bindings = $this->bindings();
+        if (empty($bindings)) {
+            return;
+        }
+
+        foreach ($bindings as $b) {
+            $statement->bindValue($b['placeholder'], $b['value'], $b['type']);
+        }
+    }
+
+    /**
+     * Get verbose debugging data.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        return [
+            'bindings' => $this->bindings(),
+        ];
+    }
+}
diff --git a/vendor/cakephp/database/composer.json b/vendor/cakephp/database/composer.json
new file mode 100755
index 0000000..64c22e8
--- /dev/null
+++ b/vendor/cakephp/database/composer.json
@@ -0,0 +1,40 @@
+{
+    "name": "cakephp/database",
+    "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API",
+    "type": "library",
+    "keywords": [
+        "cakephp",
+        "database",
+        "abstraction",
+        "database abstraction",
+        "pdo"
+    ],
+    "homepage": "https://cakephp.org",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "CakePHP Community",
+            "homepage": "https://github.com/cakephp/database/graphs/contributors"
+        }
+    ],
+    "support": {
+        "issues": "https://github.com/cakephp/cakephp/issues",
+        "forum": "https://stackoverflow.com/tags/cakephp",
+        "irc": "irc://irc.freenode.org/cakephp",
+        "source": "https://github.com/cakephp/database"
+    },
+    "require": {
+        "php": ">=7.4.0",
+        "cakephp/core": "^4.0",
+        "cakephp/datasource": "^4.0"
+    },
+    "suggest": {
+        "cakephp/i18n": "If you are using locale-aware datetime formats or Chronos types.",
+        "cakephp/log": "If you want to use query logging without providing a logger yourself."
+    },
+    "autoload": {
+        "psr-4": {
+            "Cake\\Database\\": "."
+        }
+    }
+}
diff --git a/vendor/cakephp/datasource/ConnectionInterface.php b/vendor/cakephp/datasource/ConnectionInterface.php
new file mode 100755
index 0000000..7efef43
--- /dev/null
+++ b/vendor/cakephp/datasource/ConnectionInterface.php
@@ -0,0 +1,154 @@
+
+     */
+    public function config(): array;
+
+    /**
+     * Executes a callable function inside a transaction, if any exception occurs
+     * while executing the passed callable, the transaction will be rolled back
+     * If the result of the callable function is `false`, the transaction will
+     * also be rolled back. Otherwise, the transaction is committed after executing
+     * the callback.
+     *
+     * The callback will receive the connection instance as its first argument.
+     *
+     * ### Example:
+     *
+     * ```
+     * $connection->transactional(function ($connection) {
+     *   $connection->newQuery()->delete('users')->execute();
+     * });
+     * ```
+     *
+     * @param callable $callback The callback to execute within a transaction.
+     * @return mixed The return value of the callback.
+     * @throws \Exception Will re-throw any exception raised in $callback after
+     *   rolling back the transaction.
+     */
+    public function transactional(callable $callback);
+
+    /**
+     * Run an operation with constraints disabled.
+     *
+     * Constraints should be re-enabled after the callback succeeds/fails.
+     *
+     * ### Example:
+     *
+     * ```
+     * $connection->disableConstraints(function ($connection) {
+     *   $connection->newQuery()->delete('users')->execute();
+     * });
+     * ```
+     *
+     * @param callable $callback The callback to execute within a transaction.
+     * @return mixed The return value of the callback.
+     * @throws \Exception Will re-throw any exception raised in $callback after
+     *   rolling back the transaction.
+     */
+    public function disableConstraints(callable $callback);
+
+    /**
+     * Enable/disable query logging
+     *
+     * @param bool $enable Enable/disable query logging
+     * @return $this
+     */
+    public function enableQueryLogging(bool $enable = true);
+
+    /**
+     * Disable query logging
+     *
+     * @return $this
+     */
+    public function disableQueryLogging();
+
+    /**
+     * Check if query logging is enabled.
+     *
+     * @return bool
+     */
+    public function isQueryLoggingEnabled(): bool;
+}
diff --git a/vendor/cakephp/datasource/ConnectionManager.php b/vendor/cakephp/datasource/ConnectionManager.php
new file mode 100755
index 0000000..8f244ea
--- /dev/null
+++ b/vendor/cakephp/datasource/ConnectionManager.php
@@ -0,0 +1,216 @@
+
+     */
+    protected static $_aliasMap = [];
+
+    /**
+     * An array mapping url schemes to fully qualified driver class names
+     *
+     * @var array
+     * @psalm-var array
+     */
+    protected static $_dsnClassMap = [
+        'mysql' => Mysql::class,
+        'postgres' => Postgres::class,
+        'sqlite' => Sqlite::class,
+        'sqlserver' => Sqlserver::class,
+    ];
+
+    /**
+     * The ConnectionRegistry used by the manager.
+     *
+     * @var \Cake\Datasource\ConnectionRegistry|null
+     */
+    protected static $_registry;
+
+    /**
+     * Configure a new connection object.
+     *
+     * The connection will not be constructed until it is first used.
+     *
+     * @param array|string $key The name of the connection config, or an array of multiple configs.
+     * @param array|null $config An array of name => config data for adapter.
+     * @return void
+     * @throws \Cake\Core\Exception\CakeException When trying to modify an existing config.
+     * @see \Cake\Core\StaticConfigTrait::config()
+     */
+    public static function setConfig($key, $config = null): void
+    {
+        if (is_array($config)) {
+            $config['name'] = $key;
+        }
+
+        static::_setConfig($key, $config);
+    }
+
+    /**
+     * Parses a DSN into a valid connection configuration
+     *
+     * This method allows setting a DSN using formatting similar to that used by PEAR::DB.
+     * The following is an example of its usage:
+     *
+     * ```
+     * $dsn = 'mysql://user:pass@localhost/database';
+     * $config = ConnectionManager::parseDsn($dsn);
+     *
+     * $dsn = 'Cake\Database\Driver\Mysql://localhost:3306/database?className=Cake\Database\Connection';
+     * $config = ConnectionManager::parseDsn($dsn);
+     *
+     * $dsn = 'Cake\Database\Connection://localhost:3306/database?driver=Cake\Database\Driver\Mysql';
+     * $config = ConnectionManager::parseDsn($dsn);
+     * ```
+     *
+     * For all classes, the value of `scheme` is set as the value of both the `className` and `driver`
+     * unless they have been otherwise specified.
+     *
+     * Note that query-string arguments are also parsed and set as values in the returned configuration.
+     *
+     * @param string $config The DSN string to convert to a configuration array
+     * @return array The configuration array to be stored after parsing the DSN
+     */
+    public static function parseDsn(string $config): array
+    {
+        $config = static::_parseDsn($config);
+
+        if (isset($config['path']) && empty($config['database'])) {
+            $config['database'] = substr($config['path'], 1);
+        }
+
+        if (empty($config['driver'])) {
+            $config['driver'] = $config['className'];
+            $config['className'] = Connection::class;
+        }
+
+        unset($config['path']);
+
+        return $config;
+    }
+
+    /**
+     * Set one or more connection aliases.
+     *
+     * Connection aliases allow you to rename active connections without overwriting
+     * the aliased connection. This is most useful in the test-suite for replacing
+     * connections with their test variant.
+     *
+     * Defined aliases will take precedence over normal connection names. For example,
+     * if you alias 'default' to 'test', fetching 'default' will always return the 'test'
+     * connection as long as the alias is defined.
+     *
+     * You can remove aliases with ConnectionManager::dropAlias().
+     *
+     * ### Usage
+     *
+     * ```
+     * // Make 'things' resolve to 'test_things' connection
+     * ConnectionManager::alias('test_things', 'things');
+     * ```
+     *
+     * @param string $source The existing connection to alias.
+     * @param string $alias The alias name that resolves to `$source`.
+     * @return void
+     */
+    public static function alias(string $source, string $alias): void
+    {
+        static::$_aliasMap[$alias] = $source;
+    }
+
+    /**
+     * Drop an alias.
+     *
+     * Removes an alias from ConnectionManager. Fetching the aliased
+     * connection may fail if there is no other connection with that name.
+     *
+     * @param string $alias The connection alias to drop
+     * @return void
+     */
+    public static function dropAlias(string $alias): void
+    {
+        unset(static::$_aliasMap[$alias]);
+    }
+
+    /**
+     * Returns the current connection aliases and what they alias.
+     *
+     * @return array
+     */
+    public static function aliases(): array
+    {
+        return static::$_aliasMap;
+    }
+
+    /**
+     * Get a connection.
+     *
+     * If the connection has not been constructed an instance will be added
+     * to the registry. This method will use any aliases that have been
+     * defined. If you want the original unaliased connections pass `false`
+     * as second parameter.
+     *
+     * @param string $name The connection name.
+     * @param bool $useAliases Whether connection aliases are used
+     * @return \Cake\Datasource\ConnectionInterface
+     * @throws \Cake\Datasource\Exception\MissingDatasourceConfigException When config
+     * data is missing.
+     */
+    public static function get(string $name, bool $useAliases = true)
+    {
+        if ($useAliases && isset(static::$_aliasMap[$name])) {
+            $name = static::$_aliasMap[$name];
+        }
+
+        if (!isset(static::$_config[$name])) {
+            throw new MissingDatasourceConfigException(['name' => $name]);
+        }
+
+        if (!isset(static::$_registry)) {
+            static::$_registry = new ConnectionRegistry();
+        }
+
+        return static::$_registry->{$name} ?? static::$_registry->load($name, static::$_config[$name]);
+    }
+}
diff --git a/vendor/cakephp/datasource/ConnectionRegistry.php b/vendor/cakephp/datasource/ConnectionRegistry.php
new file mode 100755
index 0000000..34a5aca
--- /dev/null
+++ b/vendor/cakephp/datasource/ConnectionRegistry.php
@@ -0,0 +1,104 @@
+
+ */
+class ConnectionRegistry extends ObjectRegistry
+{
+    /**
+     * Resolve a datasource classname.
+     *
+     * Part of the template method for Cake\Core\ObjectRegistry::load()
+     *
+     * @param string $class Partial classname to resolve.
+     * @return string|null Either the correct class name or null.
+     * @psalm-return class-string|null
+     */
+    protected function _resolveClassName(string $class): ?string
+    {
+        return App::className($class, 'Datasource');
+    }
+
+    /**
+     * Throws an exception when a datasource is missing
+     *
+     * Part of the template method for Cake\Core\ObjectRegistry::load()
+     *
+     * @param string $class The classname that is missing.
+     * @param string|null $plugin The plugin the datasource is missing in.
+     * @return void
+     * @throws \Cake\Datasource\Exception\MissingDatasourceException
+     */
+    protected function _throwMissingClassError(string $class, ?string $plugin): void
+    {
+        throw new MissingDatasourceException([
+            'class' => $class,
+            'plugin' => $plugin,
+        ]);
+    }
+
+    /**
+     * Create the connection object with the correct settings.
+     *
+     * Part of the template method for Cake\Core\ObjectRegistry::load()
+     *
+     * If a callable is passed as first argument, The returned value of this
+     * function will be the result of the callable.
+     *
+     * @param \Cake\Datasource\ConnectionInterface|callable|string $class The classname or object to make.
+     * @param string $alias The alias of the object.
+     * @param array $config An array of settings to use for the datasource.
+     * @return \Cake\Datasource\ConnectionInterface A connection with the correct settings.
+     */
+    protected function _create($class, string $alias, array $config)
+    {
+        if (is_callable($class)) {
+            return $class($alias);
+        }
+
+        if (is_object($class)) {
+            return $class;
+        }
+
+        unset($config['className']);
+
+        /** @var \Cake\Datasource\ConnectionInterface */
+        return new $class($config);
+    }
+
+    /**
+     * Remove a single adapter from the registry.
+     *
+     * @param string $name The adapter name.
+     * @return $this
+     */
+    public function unload(string $name)
+    {
+        unset($this->_loaded[$name]);
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/datasource/EntityInterface.php b/vendor/cakephp/datasource/EntityInterface.php
new file mode 100755
index 0000000..5887670
--- /dev/null
+++ b/vendor/cakephp/datasource/EntityInterface.php
@@ -0,0 +1,288 @@
+
+ */
+interface EntityInterface extends ArrayAccess, JsonSerializable
+{
+    /**
+     * Sets hidden fields.
+     *
+     * @param array $fields An array of fields to hide from array exports.
+     * @param bool $merge Merge the new fields with the existing. By default false.
+     * @return $this
+     */
+    public function setHidden(array $fields, bool $merge = false);
+
+    /**
+     * Gets the hidden fields.
+     *
+     * @return array
+     */
+    public function getHidden(): array;
+
+    /**
+     * Sets the virtual fields on this entity.
+     *
+     * @param array $fields An array of fields to treat as virtual.
+     * @param bool $merge Merge the new fields with the existing. By default false.
+     * @return $this
+     */
+    public function setVirtual(array $fields, bool $merge = false);
+
+    /**
+     * Gets the virtual fields on this entity.
+     *
+     * @return array
+     */
+    public function getVirtual(): array;
+
+    /**
+     * Sets the dirty status of a single field.
+     *
+     * @param string $field the field to set or check status for
+     * @param bool $isDirty true means the field was changed, false means
+     * it was not changed. Default true.
+     * @return $this
+     */
+    public function setDirty(string $field, bool $isDirty = true);
+
+    /**
+     * Checks if the entity is dirty or if a single field of it is dirty.
+     *
+     * @param string|null $field The field to check the status for. Null for the whole entity.
+     * @return bool Whether the field was changed or not
+     */
+    public function isDirty(?string $field = null): bool;
+
+    /**
+     * Gets the dirty fields.
+     *
+     * @return array
+     */
+    public function getDirty(): array;
+
+    /**
+     * Returns whether this entity has errors.
+     *
+     * @param bool $includeNested true will check nested entities for hasErrors()
+     * @return bool
+     */
+    public function hasErrors(bool $includeNested = true): bool;
+
+    /**
+     * Returns all validation errors.
+     *
+     * @return array
+     */
+    public function getErrors(): array;
+
+    /**
+     * Returns validation errors of a field
+     *
+     * @param string $field Field name to get the errors from
+     * @return array
+     */
+    public function getError(string $field): array;
+
+    /**
+     * Sets error messages to the entity
+     *
+     * @param array $errors The array of errors to set.
+     * @param bool $overwrite Whether to overwrite pre-existing errors for $fields
+     * @return $this
+     */
+    public function setErrors(array $errors, bool $overwrite = false);
+
+    /**
+     * Sets errors for a single field
+     *
+     * @param string $field The field to get errors for, or the array of errors to set.
+     * @param array|string $errors The errors to be set for $field
+     * @param bool $overwrite Whether to overwrite pre-existing errors for $field
+     * @return $this
+     */
+    public function setError(string $field, $errors, bool $overwrite = false);
+
+    /**
+     * Stores whether a field value can be changed or set in this entity.
+     *
+     * @param array|string $field single or list of fields to change its accessibility
+     * @param bool $set true marks the field as accessible, false will
+     * mark it as protected.
+     * @return $this
+     */
+    public function setAccess($field, bool $set);
+
+    /**
+     * Checks if a field is accessible
+     *
+     * @param string $field Field name to check
+     * @return bool
+     */
+    public function isAccessible(string $field): bool;
+
+    /**
+     * Sets the source alias
+     *
+     * @param string $alias the alias of the repository
+     * @return $this
+     */
+    public function setSource(string $alias);
+
+    /**
+     * Returns the alias of the repository from which this entity came from.
+     *
+     * @return string
+     */
+    public function getSource(): string;
+
+    /**
+     * Returns an array with the requested original fields
+     * stored in this entity, indexed by field name.
+     *
+     * @param array $fields List of fields to be returned
+     * @return array
+     */
+    public function extractOriginal(array $fields): array;
+
+    /**
+     * Returns an array with only the original fields
+     * stored in this entity, indexed by field name.
+     *
+     * @param array $fields List of fields to be returned
+     * @return array
+     */
+    public function extractOriginalChanged(array $fields): array;
+
+    /**
+     * Sets one or multiple fields to the specified value
+     *
+     * @param array|string $field the name of field to set or a list of
+     * fields with their respective values
+     * @param mixed $value The value to set to the field or an array if the
+     * first argument is also an array, in which case will be treated as $options
+     * @param array $options Options to be used for setting the field. Allowed option
+     * keys are `setter` and `guard`
+     * @return $this
+     */
+    public function set($field, $value = null, array $options = []);
+
+    /**
+     * Returns the value of a field by name
+     *
+     * @param string $field the name of the field to retrieve
+     * @return mixed
+     */
+    public function &get(string $field);
+
+    /**
+     * Returns the original value of a field.
+     *
+     * @param string $field The name of the field.
+     * @return mixed
+     */
+    public function getOriginal(string $field);
+
+    /**
+     * Gets all original values of the entity.
+     *
+     * @return array
+     */
+    public function getOriginalValues(): array;
+
+    /**
+     * Returns whether this entity contains a field named $field
+     * and is not set to null.
+     *
+     * @param array|string $field The field to check.
+     * @return bool
+     */
+    public function has($field): bool;
+
+    /**
+     * Removes a field or list of fields from this entity
+     *
+     * @param array|string $field The field to unset.
+     * @return $this
+     */
+    public function unset($field);
+
+    /**
+     * Get the list of visible fields.
+     *
+     * @return array A list of fields that are 'visible' in all representations.
+     */
+    public function getVisible(): array;
+
+    /**
+     * Returns an array with all the visible fields set in this entity.
+     *
+     * *Note* hidden fields are not visible, and will not be output
+     * by toArray().
+     *
+     * @return array
+     */
+    public function toArray(): array;
+
+    /**
+     * Returns an array with the requested fields
+     * stored in this entity, indexed by field name
+     *
+     * @param array $fields list of fields to be returned
+     * @param bool $onlyDirty Return the requested field only if it is dirty
+     * @return array
+     */
+    public function extract(array $fields, bool $onlyDirty = false): array;
+
+    /**
+     * Sets the entire entity as clean, which means that it will appear as
+     * no fields being modified or added at all. This is an useful call
+     * for an initial object hydration
+     *
+     * @return void
+     */
+    public function clean(): void;
+
+    /**
+     * Set the status of this entity.
+     *
+     * Using `true` means that the entity has not been persisted in the database,
+     * `false` indicates that the entity has been persisted.
+     *
+     * @param bool $new Indicate whether this entity has been persisted.
+     * @return $this
+     */
+    public function setNew(bool $new);
+
+    /**
+     * Returns whether this entity has already been persisted.
+     *
+     * @return bool Whether the entity has been persisted.
+     */
+    public function isNew(): bool;
+}
diff --git a/vendor/cakephp/datasource/EntityTrait.php b/vendor/cakephp/datasource/EntityTrait.php
new file mode 100755
index 0000000..3cd54bb
--- /dev/null
+++ b/vendor/cakephp/datasource/EntityTrait.php
@@ -0,0 +1,1304 @@
+
+     */
+    protected $_fields = [];
+
+    /**
+     * Holds all fields that have been changed and their original values for this entity.
+     *
+     * @var array
+     */
+    protected $_original = [];
+
+    /**
+     * List of field names that should **not** be included in JSON or Array
+     * representations of this Entity.
+     *
+     * @var array
+     */
+    protected $_hidden = [];
+
+    /**
+     * List of computed or virtual fields that **should** be included in JSON or array
+     * representations of this Entity. If a field is present in both _hidden and _virtual
+     * the field will **not** be in the array/JSON versions of the entity.
+     *
+     * @var array
+     */
+    protected $_virtual = [];
+
+    /**
+     * Holds a list of the fields that were modified or added after this object
+     * was originally created.
+     *
+     * @var array
+     */
+    protected $_dirty = [];
+
+    /**
+     * Holds a cached list of getters/setters per class
+     *
+     * @var array>>
+     */
+    protected static $_accessors = [];
+
+    /**
+     * Indicates whether this entity is yet to be persisted.
+     * Entities default to assuming they are new. You can use Table::persisted()
+     * to set the new flag on an entity based on records in the database.
+     *
+     * @var bool
+     */
+    protected $_new = true;
+
+    /**
+     * List of errors per field as stored in this object.
+     *
+     * @var array
+     */
+    protected $_errors = [];
+
+    /**
+     * List of invalid fields and their data for errors upon validation/patching.
+     *
+     * @var array
+     */
+    protected $_invalid = [];
+
+    /**
+     * Map of fields in this entity that can be safely assigned, each
+     * field name points to a boolean indicating its status. An empty array
+     * means no fields are accessible
+     *
+     * The special field '\*' can also be mapped, meaning that any other field
+     * not defined in the map will take its value. For example, `'*' => true`
+     * means that any field not defined in the map will be accessible by default
+     *
+     * @var array
+     */
+    protected $_accessible = ['*' => true];
+
+    /**
+     * The alias of the repository this entity came from
+     *
+     * @var string
+     */
+    protected $_registryAlias = '';
+
+    /**
+     * Storing the current visitation status while recursing through entities getting errors.
+     *
+     * @var bool
+     */
+    protected $_hasBeenVisited = false;
+
+    /**
+     * Set to true in your entity's class definition or
+     * via application logic. When true. has() and related
+     * methods will use `array_key_exists` instead of `isset`
+     * to decide if fields are 'defined' in an entity.
+     *
+     * @var bool
+     */
+    protected $_hasAllowsNull = false;
+
+    /**
+     * Magic getter to access fields that have been set in this entity
+     *
+     * @param string $field Name of the field to access
+     * @return mixed
+     */
+    public function &__get(string $field)
+    {
+        return $this->get($field);
+    }
+
+    /**
+     * Magic setter to add or edit a field in this entity
+     *
+     * @param string $field The name of the field to set
+     * @param mixed $value The value to set to the field
+     * @return void
+     */
+    public function __set(string $field, $value): void
+    {
+        $this->set($field, $value);
+    }
+
+    /**
+     * Returns whether this entity contains a field named $field
+     * and is not set to null.
+     *
+     * @param string $field The field to check.
+     * @return bool
+     * @see \Cake\ORM\Entity::has()
+     */
+    public function __isset(string $field): bool
+    {
+        return $this->has($field);
+    }
+
+    /**
+     * Removes a field from this entity
+     *
+     * @param string $field The field to unset
+     * @return void
+     */
+    public function __unset(string $field): void
+    {
+        $this->unset($field);
+    }
+
+    /**
+     * Sets a single field inside this entity.
+     *
+     * ### Example:
+     *
+     * ```
+     * $entity->set('name', 'Andrew');
+     * ```
+     *
+     * It is also possible to mass-assign multiple fields to this entity
+     * with one call by passing a hashed array as fields in the form of
+     * field => value pairs
+     *
+     * ### Example:
+     *
+     * ```
+     * $entity->set(['name' => 'andrew', 'id' => 1]);
+     * echo $entity->name // prints andrew
+     * echo $entity->id // prints 1
+     * ```
+     *
+     * Some times it is handy to bypass setter functions in this entity when assigning
+     * fields. You can achieve this by disabling the `setter` option using the
+     * `$options` parameter:
+     *
+     * ```
+     * $entity->set('name', 'Andrew', ['setter' => false]);
+     * $entity->set(['name' => 'Andrew', 'id' => 1], ['setter' => false]);
+     * ```
+     *
+     * Mass assignment should be treated carefully when accepting user input, by default
+     * entities will guard all fields when fields are assigned in bulk. You can disable
+     * the guarding for a single set call with the `guard` option:
+     *
+     * ```
+     * $entity->set(['name' => 'Andrew', 'id' => 1], ['guard' => false]);
+     * ```
+     *
+     * You do not need to use the guard option when assigning fields individually:
+     *
+     * ```
+     * // No need to use the guard option.
+     * $entity->set('name', 'Andrew');
+     * ```
+     *
+     * @param array|string $field the name of field to set or a list of
+     * fields with their respective values
+     * @param mixed $value The value to set to the field or an array if the
+     * first argument is also an array, in which case will be treated as $options
+     * @param array $options Options to be used for setting the field. Allowed option
+     * keys are `setter` and `guard`
+     * @return $this
+     * @throws \InvalidArgumentException
+     */
+    public function set($field, $value = null, array $options = [])
+    {
+        if (is_string($field) && $field !== '') {
+            $guard = false;
+            $field = [$field => $value];
+        } else {
+            $guard = true;
+            $options = (array)$value;
+        }
+
+        if (!is_array($field)) {
+            throw new InvalidArgumentException('Cannot set an empty field');
+        }
+        $options += ['setter' => true, 'guard' => $guard];
+
+        foreach ($field as $name => $value) {
+            $name = (string)$name;
+            if ($options['guard'] === true && !$this->isAccessible($name)) {
+                continue;
+            }
+
+            $this->setDirty($name, true);
+
+            if (
+                !array_key_exists($name, $this->_original) &&
+                array_key_exists($name, $this->_fields) &&
+                $this->_fields[$name] !== $value
+            ) {
+                $this->_original[$name] = $this->_fields[$name];
+            }
+
+            if (!$options['setter']) {
+                $this->_fields[$name] = $value;
+                continue;
+            }
+
+            $setter = static::_accessor($name, 'set');
+            if ($setter) {
+                $value = $this->{$setter}($value);
+            }
+            $this->_fields[$name] = $value;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns the value of a field by name
+     *
+     * @param string $field the name of the field to retrieve
+     * @return mixed
+     * @throws \InvalidArgumentException if an empty field name is passed
+     */
+    public function &get(string $field)
+    {
+        if ($field === '') {
+            throw new InvalidArgumentException('Cannot get an empty field');
+        }
+
+        $value = null;
+
+        if (isset($this->_fields[$field])) {
+            $value = &$this->_fields[$field];
+        }
+
+        $method = static::_accessor($field, 'get');
+        if ($method) {
+            $result = $this->{$method}($value);
+
+            return $result;
+        }
+
+        return $value;
+    }
+
+    /**
+     * Returns the value of an original field by name
+     *
+     * @param string $field the name of the field for which original value is retrieved.
+     * @return mixed
+     * @throws \InvalidArgumentException if an empty field name is passed.
+     */
+    public function getOriginal(string $field)
+    {
+        if ($field === '') {
+            throw new InvalidArgumentException('Cannot get an empty field');
+        }
+        if (array_key_exists($field, $this->_original)) {
+            return $this->_original[$field];
+        }
+
+        return $this->get($field);
+    }
+
+    /**
+     * Gets all original values of the entity.
+     *
+     * @return array
+     */
+    public function getOriginalValues(): array
+    {
+        $originals = $this->_original;
+        $originalKeys = array_keys($originals);
+        foreach ($this->_fields as $key => $value) {
+            if (!in_array($key, $originalKeys, true)) {
+                $originals[$key] = $value;
+            }
+        }
+
+        return $originals;
+    }
+
+    /**
+     * Returns whether this entity contains a field named $field
+     * that contains a non-null value.
+     *
+     * ### Example:
+     *
+     * ```
+     * $entity = new Entity(['id' => 1, 'name' => null]);
+     * $entity->has('id'); // true
+     * $entity->has('name'); // false
+     * $entity->has('last_name'); // false
+     * ```
+     *
+     * You can check multiple fields by passing an array:
+     *
+     * ```
+     * $entity->has(['name', 'last_name']);
+     * ```
+     *
+     * All fields must not be null to get a truthy result.
+     *
+     * When checking multiple fields. All fields must not be null
+     * in order for true to be returned.
+     *
+     * @param array|string $field The field or fields to check.
+     * @return bool
+     */
+    public function has($field): bool
+    {
+        foreach ((array)$field as $prop) {
+            if ($this->_hasAllowsNull) {
+                if (!array_key_exists($prop, $this->_fields) && !static::_accessor($prop, 'get')) {
+                    return false;
+                }
+            } elseif ($this->get($prop) === null) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Checks that a field is empty
+     *
+     * This is not working like the PHP `empty()` function. The method will
+     * return true for:
+     *
+     * - `''` (empty string)
+     * - `null`
+     * - `[]`
+     *
+     * and false in all other cases.
+     *
+     * @param string $field The field to check.
+     * @return bool
+     */
+    public function isEmpty(string $field): bool
+    {
+        $value = $this->get($field);
+        if (
+            $value === null ||
+            (
+                is_array($value) &&
+                empty($value) ||
+                (
+                    is_string($value) &&
+                    $value === ''
+                )
+            )
+        ) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks that a field has a value.
+     *
+     * This method will return true for
+     *
+     * - Non-empty strings
+     * - Non-empty arrays
+     * - Any object
+     * - Integer, even `0`
+     * - Float, even 0.0
+     *
+     * and false in all other cases.
+     *
+     * @param string $field The field to check.
+     * @return bool
+     */
+    public function hasValue(string $field): bool
+    {
+        return !$this->isEmpty($field);
+    }
+
+    /**
+     * Removes a field or list of fields from this entity
+     *
+     * ### Examples:
+     *
+     * ```
+     * $entity->unset('name');
+     * $entity->unset(['name', 'last_name']);
+     * ```
+     *
+     * @param array|string $field The field to unset.
+     * @return $this
+     */
+    public function unset($field)
+    {
+        $field = (array)$field;
+        foreach ($field as $p) {
+            unset($this->_fields[$p], $this->_original[$p], $this->_dirty[$p]);
+        }
+
+        return $this;
+    }
+
+    /**
+     * Removes a field or list of fields from this entity
+     *
+     * @deprecated 4.0.0 Use {@link unset()} instead. Will be removed in 5.0.
+     * @param array|string $field The field to unset.
+     * @return $this
+     */
+    public function unsetProperty($field)
+    {
+        deprecationWarning('EntityTrait::unsetProperty() is deprecated. Use unset() instead.');
+
+        return $this->unset($field);
+    }
+
+    /**
+     * Sets hidden fields.
+     *
+     * @param array $fields An array of fields to hide from array exports.
+     * @param bool $merge Merge the new fields with the existing. By default false.
+     * @return $this
+     */
+    public function setHidden(array $fields, bool $merge = false)
+    {
+        if ($merge === false) {
+            $this->_hidden = $fields;
+
+            return $this;
+        }
+
+        $fields = array_merge($this->_hidden, $fields);
+        $this->_hidden = array_unique($fields);
+
+        return $this;
+    }
+
+    /**
+     * Gets the hidden fields.
+     *
+     * @return array
+     */
+    public function getHidden(): array
+    {
+        return $this->_hidden;
+    }
+
+    /**
+     * Sets the virtual fields on this entity.
+     *
+     * @param array $fields An array of fields to treat as virtual.
+     * @param bool $merge Merge the new fields with the existing. By default false.
+     * @return $this
+     */
+    public function setVirtual(array $fields, bool $merge = false)
+    {
+        if ($merge === false) {
+            $this->_virtual = $fields;
+
+            return $this;
+        }
+
+        $fields = array_merge($this->_virtual, $fields);
+        $this->_virtual = array_unique($fields);
+
+        return $this;
+    }
+
+    /**
+     * Gets the virtual fields on this entity.
+     *
+     * @return array
+     */
+    public function getVirtual(): array
+    {
+        return $this->_virtual;
+    }
+
+    /**
+     * Gets the list of visible fields.
+     *
+     * The list of visible fields is all standard fields
+     * plus virtual fields minus hidden fields.
+     *
+     * @return array A list of fields that are 'visible' in all
+     *     representations.
+     */
+    public function getVisible(): array
+    {
+        $fields = array_keys($this->_fields);
+        $fields = array_merge($fields, $this->_virtual);
+
+        return array_diff($fields, $this->_hidden);
+    }
+
+    /**
+     * Returns an array with all the fields that have been set
+     * to this entity
+     *
+     * This method will recursively transform entities assigned to fields
+     * into arrays as well.
+     *
+     * @return array
+     */
+    public function toArray(): array
+    {
+        $result = [];
+        foreach ($this->getVisible() as $field) {
+            $value = $this->get($field);
+            if (is_array($value)) {
+                $result[$field] = [];
+                foreach ($value as $k => $entity) {
+                    if ($entity instanceof EntityInterface) {
+                        $result[$field][$k] = $entity->toArray();
+                    } else {
+                        $result[$field][$k] = $entity;
+                    }
+                }
+            } elseif ($value instanceof EntityInterface) {
+                $result[$field] = $value->toArray();
+            } else {
+                $result[$field] = $value;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the fields that will be serialized as JSON
+     *
+     * @return array
+     */
+    public function jsonSerialize(): array
+    {
+        return $this->extract($this->getVisible());
+    }
+
+    /**
+     * Implements isset($entity);
+     *
+     * @param string $offset The offset to check.
+     * @return bool Success
+     */
+    public function offsetExists($offset): bool
+    {
+        return $this->has($offset);
+    }
+
+    /**
+     * Implements $entity[$offset];
+     *
+     * @param string $offset The offset to get.
+     * @return mixed
+     */
+    #[\ReturnTypeWillChange]
+    public function &offsetGet($offset)
+    {
+        return $this->get($offset);
+    }
+
+    /**
+     * Implements $entity[$offset] = $value;
+     *
+     * @param string $offset The offset to set.
+     * @param mixed $value The value to set.
+     * @return void
+     */
+    public function offsetSet($offset, $value): void
+    {
+        $this->set($offset, $value);
+    }
+
+    /**
+     * Implements unset($result[$offset]);
+     *
+     * @param string $offset The offset to remove.
+     * @return void
+     */
+    public function offsetUnset($offset): void
+    {
+        $this->unset($offset);
+    }
+
+    /**
+     * Fetch accessor method name
+     * Accessor methods (available or not) are cached in $_accessors
+     *
+     * @param string $property the field name to derive getter name from
+     * @param string $type the accessor type ('get' or 'set')
+     * @return string method name or empty string (no method available)
+     */
+    protected static function _accessor(string $property, string $type): string
+    {
+        $class = static::class;
+
+        if (isset(static::$_accessors[$class][$type][$property])) {
+            return static::$_accessors[$class][$type][$property];
+        }
+
+        if (!empty(static::$_accessors[$class])) {
+            return static::$_accessors[$class][$type][$property] = '';
+        }
+
+        if (static::class === Entity::class) {
+            return '';
+        }
+
+        foreach (get_class_methods($class) as $method) {
+            $prefix = substr($method, 1, 3);
+            if ($method[0] !== '_' || ($prefix !== 'get' && $prefix !== 'set')) {
+                continue;
+            }
+            $field = lcfirst(substr($method, 4));
+            $snakeField = Inflector::underscore($field);
+            $titleField = ucfirst($field);
+            static::$_accessors[$class][$prefix][$snakeField] = $method;
+            static::$_accessors[$class][$prefix][$field] = $method;
+            static::$_accessors[$class][$prefix][$titleField] = $method;
+        }
+
+        if (!isset(static::$_accessors[$class][$type][$property])) {
+            static::$_accessors[$class][$type][$property] = '';
+        }
+
+        return static::$_accessors[$class][$type][$property];
+    }
+
+    /**
+     * Returns an array with the requested fields
+     * stored in this entity, indexed by field name
+     *
+     * @param array $fields list of fields to be returned
+     * @param bool $onlyDirty Return the requested field only if it is dirty
+     * @return array
+     */
+    public function extract(array $fields, bool $onlyDirty = false): array
+    {
+        $result = [];
+        foreach ($fields as $field) {
+            if (!$onlyDirty || $this->isDirty($field)) {
+                $result[$field] = $this->get($field);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns an array with the requested original fields
+     * stored in this entity, indexed by field name.
+     *
+     * Fields that are unchanged from their original value will be included in the
+     * return of this method.
+     *
+     * @param array $fields List of fields to be returned
+     * @return array
+     */
+    public function extractOriginal(array $fields): array
+    {
+        $result = [];
+        foreach ($fields as $field) {
+            $result[$field] = $this->getOriginal($field);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns an array with only the original fields
+     * stored in this entity, indexed by field name.
+     *
+     * This method will only return fields that have been modified since
+     * the entity was built. Unchanged fields will be omitted.
+     *
+     * @param array $fields List of fields to be returned
+     * @return array
+     */
+    public function extractOriginalChanged(array $fields): array
+    {
+        $result = [];
+        foreach ($fields as $field) {
+            $original = $this->getOriginal($field);
+            if ($original !== $this->get($field)) {
+                $result[$field] = $original;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Sets the dirty status of a single field.
+     *
+     * @param string $field the field to set or check status for
+     * @param bool $isDirty true means the field was changed, false means
+     * it was not changed. Defaults to true.
+     * @return $this
+     */
+    public function setDirty(string $field, bool $isDirty = true)
+    {
+        if ($isDirty === false) {
+            unset($this->_dirty[$field]);
+
+            return $this;
+        }
+
+        $this->_dirty[$field] = true;
+        unset($this->_errors[$field], $this->_invalid[$field]);
+
+        return $this;
+    }
+
+    /**
+     * Checks if the entity is dirty or if a single field of it is dirty.
+     *
+     * @param string|null $field The field to check the status for. Null for the whole entity.
+     * @return bool Whether the field was changed or not
+     */
+    public function isDirty(?string $field = null): bool
+    {
+        if ($field === null) {
+            return !empty($this->_dirty);
+        }
+
+        return isset($this->_dirty[$field]);
+    }
+
+    /**
+     * Gets the dirty fields.
+     *
+     * @return array
+     */
+    public function getDirty(): array
+    {
+        return array_keys($this->_dirty);
+    }
+
+    /**
+     * Sets the entire entity as clean, which means that it will appear as
+     * no fields being modified or added at all. This is an useful call
+     * for an initial object hydration
+     *
+     * @return void
+     */
+    public function clean(): void
+    {
+        $this->_dirty = [];
+        $this->_errors = [];
+        $this->_invalid = [];
+        $this->_original = [];
+    }
+
+    /**
+     * Set the status of this entity.
+     *
+     * Using `true` means that the entity has not been persisted in the database,
+     * `false` that it already is.
+     *
+     * @param bool $new Indicate whether this entity has been persisted.
+     * @return $this
+     */
+    public function setNew(bool $new)
+    {
+        if ($new) {
+            foreach ($this->_fields as $k => $p) {
+                $this->_dirty[$k] = true;
+            }
+        }
+
+        $this->_new = $new;
+
+        return $this;
+    }
+
+    /**
+     * Returns whether this entity has already been persisted.
+     *
+     * @return bool Whether the entity has been persisted.
+     */
+    public function isNew(): bool
+    {
+        if (func_num_args()) {
+            deprecationWarning('Using isNew() as setter is deprecated. Use setNew() instead.');
+
+            $this->setNew(func_get_arg(0));
+        }
+
+        return $this->_new;
+    }
+
+    /**
+     * Returns whether this entity has errors.
+     *
+     * @param bool $includeNested true will check nested entities for hasErrors()
+     * @return bool
+     */
+    public function hasErrors(bool $includeNested = true): bool
+    {
+        if ($this->_hasBeenVisited) {
+            // While recursing through entities, each entity should only be visited once. See https://github.com/cakephp/cakephp/issues/17318
+            return false;
+        }
+
+        if (Hash::filter($this->_errors)) {
+            return true;
+        }
+
+        if ($includeNested === false) {
+            return false;
+        }
+
+        $this->_hasBeenVisited = true;
+        try {
+            foreach ($this->_fields as $field) {
+                if ($this->_readHasErrors($field)) {
+                    return true;
+                }
+            }
+        } finally {
+            $this->_hasBeenVisited = false;
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns all validation errors.
+     *
+     * @return array
+     */
+    public function getErrors(): array
+    {
+        if ($this->_hasBeenVisited) {
+            // While recursing through entities, each entity should only be visited once. See https://github.com/cakephp/cakephp/issues/17318
+            return [];
+        }
+
+        $diff = array_diff_key($this->_fields, $this->_errors);
+
+        $this->_hasBeenVisited = true;
+        try {
+            $errors = $this->_errors + (new Collection($diff))
+                ->filter(function ($value) {
+                    return is_array($value) || $value instanceof EntityInterface;
+                })
+                ->map(function ($value) {
+                    return $this->_readError($value);
+                })
+                ->filter()
+                ->toArray();
+        } finally {
+            $this->_hasBeenVisited = false;
+        }
+
+        return $errors;
+    }
+
+    /**
+     * Returns validation errors of a field
+     *
+     * @param string $field Field name to get the errors from
+     * @return array
+     */
+    public function getError(string $field): array
+    {
+        $errors = $this->_errors[$field] ?? [];
+        if ($errors) {
+            return $errors;
+        }
+
+        return $this->_nestedErrors($field);
+    }
+
+    /**
+     * Sets error messages to the entity
+     *
+     * ## Example
+     *
+     * ```
+     * // Sets the error messages for multiple fields at once
+     * $entity->setErrors(['salary' => ['message'], 'name' => ['another message']]);
+     * ```
+     *
+     * @param array $errors The array of errors to set.
+     * @param bool $overwrite Whether to overwrite pre-existing errors for $fields
+     * @return $this
+     */
+    public function setErrors(array $errors, bool $overwrite = false)
+    {
+        if ($overwrite) {
+            foreach ($errors as $f => $error) {
+                $this->_errors[$f] = (array)$error;
+            }
+
+            return $this;
+        }
+
+        foreach ($errors as $f => $error) {
+            $this->_errors += [$f => []];
+
+            // String messages are appended to the list,
+            // while more complex error structures need their
+            // keys preserved for nested validator.
+            if (is_string($error)) {
+                $this->_errors[$f][] = $error;
+            } else {
+                foreach ($error as $k => $v) {
+                    $this->_errors[$f][$k] = $v;
+                }
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Sets errors for a single field
+     *
+     * ### Example
+     *
+     * ```
+     * // Sets the error messages for a single field
+     * $entity->setError('salary', ['must be numeric', 'must be a positive number']);
+     * ```
+     *
+     * @param string $field The field to get errors for, or the array of errors to set.
+     * @param array|string $errors The errors to be set for $field
+     * @param bool $overwrite Whether to overwrite pre-existing errors for $field
+     * @return $this
+     */
+    public function setError(string $field, $errors, bool $overwrite = false)
+    {
+        if (is_string($errors)) {
+            $errors = [$errors];
+        }
+
+        return $this->setErrors([$field => $errors], $overwrite);
+    }
+
+    /**
+     * Auxiliary method for getting errors in nested entities
+     *
+     * @param string $field the field in this entity to check for errors
+     * @return array errors in nested entity if any
+     */
+    protected function _nestedErrors(string $field): array
+    {
+        // Only one path element, check for nested entity with error.
+        if (strpos($field, '.') === false) {
+            return $this->_readError($this->get($field));
+        }
+        // Try reading the errors data with field as a simple path
+        $error = Hash::get($this->_errors, $field);
+        if ($error !== null) {
+            return $error;
+        }
+        $path = explode('.', $field);
+
+        // Traverse down the related entities/arrays for
+        // the relevant entity.
+        $entity = $this;
+        $len = count($path);
+        while ($len) {
+            $part = array_shift($path);
+            $len = count($path);
+            $val = null;
+            if ($entity instanceof EntityInterface) {
+                $val = $entity->get($part);
+            } elseif (is_array($entity)) {
+                $val = $entity[$part] ?? false;
+            }
+
+            if (
+                is_array($val) ||
+                $val instanceof Traversable ||
+                $val instanceof EntityInterface
+            ) {
+                $entity = $val;
+            } else {
+                $path[] = $part;
+                break;
+            }
+        }
+        if (count($path) <= 1) {
+            return $this->_readError($entity, array_pop($path));
+        }
+
+        return [];
+    }
+
+    /**
+     * Reads if there are errors for one or many objects.
+     *
+     * @param \Cake\Datasource\EntityInterface|array $object The object to read errors from.
+     * @return bool
+     */
+    protected function _readHasErrors($object): bool
+    {
+        if ($object instanceof EntityInterface && $object->hasErrors()) {
+            return true;
+        }
+
+        if (is_array($object)) {
+            foreach ($object as $value) {
+                if ($this->_readHasErrors($value)) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Read the error(s) from one or many objects.
+     *
+     * @param \Cake\Datasource\EntityInterface|iterable $object The object to read errors from.
+     * @param string|null $path The field name for errors.
+     * @return array
+     */
+    protected function _readError($object, $path = null): array
+    {
+        if ($path !== null && $object instanceof EntityInterface) {
+            return $object->getError($path);
+        }
+        if ($object instanceof EntityInterface) {
+            return $object->getErrors();
+        }
+        if (is_iterable($object)) {
+            $array = array_map(function ($val) {
+                if ($val instanceof EntityInterface) {
+                    return $val->getErrors();
+                }
+
+                return null;
+            }, (array)$object);
+
+            return array_filter($array);
+        }
+
+        return [];
+    }
+
+    /**
+     * Get a list of invalid fields and their data for errors upon validation/patching
+     *
+     * @return array
+     */
+    public function getInvalid(): array
+    {
+        return $this->_invalid;
+    }
+
+    /**
+     * Get a single value of an invalid field. Returns null if not set.
+     *
+     * @param string $field The name of the field.
+     * @return mixed|null
+     */
+    public function getInvalidField(string $field)
+    {
+        return $this->_invalid[$field] ?? null;
+    }
+
+    /**
+     * Set fields as invalid and not patchable into the entity.
+     *
+     * This is useful for batch operations when one needs to get the original value for an error message after patching.
+     * This value could not be patched into the entity and is simply copied into the _invalid property for debugging
+     * purposes or to be able to log it away.
+     *
+     * @param array $fields The values to set.
+     * @param bool $overwrite Whether to overwrite pre-existing values for $field.
+     * @return $this
+     */
+    public function setInvalid(array $fields, bool $overwrite = false)
+    {
+        foreach ($fields as $field => $value) {
+            if ($overwrite === true) {
+                $this->_invalid[$field] = $value;
+                continue;
+            }
+            $this->_invalid += [$field => $value];
+        }
+
+        return $this;
+    }
+
+    /**
+     * Sets a field as invalid and not patchable into the entity.
+     *
+     * @param string $field The value to set.
+     * @param mixed $value The invalid value to be set for $field.
+     * @return $this
+     */
+    public function setInvalidField(string $field, $value)
+    {
+        $this->_invalid[$field] = $value;
+
+        return $this;
+    }
+
+    /**
+     * Stores whether a field value can be changed or set in this entity.
+     * The special field `*` can also be marked as accessible or protected, meaning
+     * that any other field specified before will take its value. For example
+     * `$entity->setAccess('*', true)` means that any field not specified already
+     * will be accessible by default.
+     *
+     * You can also call this method with an array of fields, in which case they
+     * will each take the accessibility value specified in the second argument.
+     *
+     * ### Example:
+     *
+     * ```
+     * $entity->setAccess('id', true); // Mark id as not protected
+     * $entity->setAccess('author_id', false); // Mark author_id as protected
+     * $entity->setAccess(['id', 'user_id'], true); // Mark both fields as accessible
+     * $entity->setAccess('*', false); // Mark all fields as protected
+     * ```
+     *
+     * @param array|string $field Single or list of fields to change its accessibility
+     * @param bool $set True marks the field as accessible, false will
+     * mark it as protected.
+     * @return $this
+     */
+    public function setAccess($field, bool $set)
+    {
+        if ($field === '*') {
+            $this->_accessible = array_map(function ($p) use ($set) {
+                return $set;
+            }, $this->_accessible);
+            $this->_accessible['*'] = $set;
+
+            return $this;
+        }
+
+        foreach ((array)$field as $prop) {
+            $this->_accessible[$prop] = $set;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Returns the raw accessible configuration for this entity.
+     * The `*` wildcard refers to all fields.
+     *
+     * @return array
+     */
+    public function getAccessible(): array
+    {
+        return $this->_accessible;
+    }
+
+    /**
+     * Checks if a field is accessible
+     *
+     * ### Example:
+     *
+     * ```
+     * $entity->isAccessible('id'); // Returns whether it can be set or not
+     * ```
+     *
+     * @param string $field Field name to check
+     * @return bool
+     */
+    public function isAccessible(string $field): bool
+    {
+        $value = $this->_accessible[$field] ?? null;
+
+        return ($value === null && !empty($this->_accessible['*'])) || $value;
+    }
+
+    /**
+     * Returns the alias of the repository from which this entity came from.
+     *
+     * @return string
+     */
+    public function getSource(): string
+    {
+        return $this->_registryAlias;
+    }
+
+    /**
+     * Sets the source alias
+     *
+     * @param string $alias the alias of the repository
+     * @return $this
+     */
+    public function setSource(string $alias)
+    {
+        $this->_registryAlias = $alias;
+
+        return $this;
+    }
+
+    /**
+     * Returns a string representation of this object in a human readable format.
+     *
+     * @return string
+     */
+    public function __toString(): string
+    {
+        return (string)json_encode($this, JSON_PRETTY_PRINT);
+    }
+
+    /**
+     * Returns an array that can be used to describe the internal state of this
+     * object.
+     *
+     * @return array
+     */
+    public function __debugInfo(): array
+    {
+        $fields = $this->_fields;
+        foreach ($this->_virtual as $field) {
+            $fields[$field] = $this->$field;
+        }
+
+        return $fields + [
+            '[new]' => $this->isNew(),
+            '[accessible]' => $this->_accessible,
+            '[dirty]' => $this->_dirty,
+            '[original]' => $this->_original,
+            '[virtual]' => $this->_virtual,
+            '[hasErrors]' => $this->hasErrors(),
+            '[errors]' => $this->_errors,
+            '[invalid]' => $this->_invalid,
+            '[repository]' => $this->_registryAlias,
+        ];
+    }
+}
diff --git a/vendor/cakephp/datasource/Exception/InvalidPrimaryKeyException.php b/vendor/cakephp/datasource/Exception/InvalidPrimaryKeyException.php
new file mode 100755
index 0000000..ac7a72b
--- /dev/null
+++ b/vendor/cakephp/datasource/Exception/InvalidPrimaryKeyException.php
@@ -0,0 +1,26 @@
+
+     */
+    protected static $_modelFactories = [];
+
+    /**
+     * Register a callable to generate repositories of a given type.
+     *
+     * @param string $type The name of the repository type the factory function is for.
+     * @param \Cake\Datasource\Locator\LocatorInterface|callable $factory The factory function used to create instances.
+     * @return void
+     */
+    public static function add(string $type, $factory): void
+    {
+        if ($factory instanceof LocatorInterface) {
+            static::$_modelFactories[$type] = $factory;
+
+            return;
+        }
+
+        if (is_callable($factory)) {
+            deprecationWarning(
+                'Using a callable as a locator has been deprecated.'
+                . ' Use an instance of Cake\Datasource\Locator\LocatorInterface instead.'
+            );
+
+            static::$_modelFactories[$type] = $factory;
+
+            return;
+        }
+
+        throw new InvalidArgumentException(sprintf(
+            '`$factory` must be an instance of Cake\Datasource\Locator\LocatorInterface or a callable.'
+            . ' Got type `%s` instead.',
+            getTypeName($factory)
+        ));
+    }
+
+    /**
+     * Drop a model factory.
+     *
+     * @param string $type The name of the repository type to drop the factory for.
+     * @return void
+     */
+    public static function drop(string $type): void
+    {
+        unset(static::$_modelFactories[$type]);
+    }
+
+    /**
+     * Get the factory for the specified repository type.
+     *
+     * @param string $type The repository type to get the factory for.
+     * @throws \InvalidArgumentException If the specified repository type has no factory.
+     * @return \Cake\Datasource\Locator\LocatorInterface|callable The factory for the repository type.
+     */
+    public static function get(string $type)
+    {
+        if (!isset(static::$_modelFactories['Table'])) {
+            static::$_modelFactories['Table'] = new TableLocator();
+        }
+
+        if (!isset(static::$_modelFactories[$type])) {
+            throw new InvalidArgumentException(sprintf(
+                'Unknown repository type "%s". Make sure you register a type before trying to use it.',
+                $type
+            ));
+        }
+
+        return static::$_modelFactories[$type];
+    }
+}
diff --git a/vendor/cakephp/datasource/FixtureInterface.php b/vendor/cakephp/datasource/FixtureInterface.php
new file mode 100755
index 0000000..64c28e4
--- /dev/null
+++ b/vendor/cakephp/datasource/FixtureInterface.php
@@ -0,0 +1,73 @@
+ $fields The values to set.
+     * @param bool $overwrite Whether to overwrite pre-existing values for $field.
+     * @return $this
+     */
+    public function setInvalid(array $fields, bool $overwrite = false);
+
+    /**
+     * Get a single value of an invalid field. Returns null if not set.
+     *
+     * @param string $field The name of the field.
+     * @return mixed|null
+     */
+    public function getInvalidField(string $field);
+
+    /**
+     * Sets a field as invalid and not patchable into the entity.
+     *
+     * @param string $field The value to set.
+     * @param mixed $value The invalid value to be set for $field.
+     * @return $this
+     */
+    public function setInvalidField(string $field, $value);
+}
diff --git a/vendor/cakephp/datasource/LICENSE.txt b/vendor/cakephp/datasource/LICENSE.txt
new file mode 100755
index 0000000..b938c9e
--- /dev/null
+++ b/vendor/cakephp/datasource/LICENSE.txt
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+CakePHP(tm) : The Rapid Development PHP Framework (https://cakephp.org)
+Copyright (c) 2005-2020, Cake Software Foundation, Inc. (https://cakefoundation.org)
+
+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.
diff --git a/vendor/cakephp/datasource/Locator/AbstractLocator.php b/vendor/cakephp/datasource/Locator/AbstractLocator.php
new file mode 100755
index 0000000..1d925c0
--- /dev/null
+++ b/vendor/cakephp/datasource/Locator/AbstractLocator.php
@@ -0,0 +1,115 @@
+
+     */
+    protected $instances = [];
+
+    /**
+     * Contains a list of options that were passed to get() method.
+     *
+     * @var array
+     */
+    protected $options = [];
+
+    /**
+     * {@inheritDoc}
+     *
+     * @param string $alias The alias name you want to get.
+     * @param array $options The options you want to build the table with.
+     * @return \Cake\Datasource\RepositoryInterface
+     * @throws \RuntimeException When trying to get alias for which instance
+     *   has already been created with different options.
+     */
+    public function get(string $alias, array $options = [])
+    {
+        $storeOptions = $options;
+        unset($storeOptions['allowFallbackClass']);
+
+        if (isset($this->instances[$alias])) {
+            if (!empty($storeOptions) && isset($this->options[$alias]) && $this->options[$alias] !== $storeOptions) {
+                throw new RuntimeException(sprintf(
+                    'You cannot configure "%s", it already exists in the registry.',
+                    $alias
+                ));
+            }
+
+            return $this->instances[$alias];
+        }
+
+        $this->options[$alias] = $storeOptions;
+
+        return $this->instances[$alias] = $this->createInstance($alias, $options);
+    }
+
+    /**
+     * Create an instance of a given classname.
+     *
+     * @param string $alias Repository alias.
+     * @param array $options The options you want to build the instance with.
+     * @return \Cake\Datasource\RepositoryInterface
+     */
+    abstract protected function createInstance(string $alias, array $options);
+
+    /**
+     * @inheritDoc
+     */
+    public function set(string $alias, RepositoryInterface $repository)
+    {
+        return $this->instances[$alias] = $repository;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function exists(string $alias): bool
+    {
+        return isset($this->instances[$alias]);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function remove(string $alias): void
+    {
+        unset(
+            $this->instances[$alias],
+            $this->options[$alias]
+        );
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function clear(): void
+    {
+        $this->instances = [];
+        $this->options = [];
+    }
+}
diff --git a/vendor/cakephp/datasource/Locator/LocatorInterface.php b/vendor/cakephp/datasource/Locator/LocatorInterface.php
new file mode 100755
index 0000000..256ae0a
--- /dev/null
+++ b/vendor/cakephp/datasource/Locator/LocatorInterface.php
@@ -0,0 +1,68 @@
+ $options The options you want to build the table with.
+     * @return \Cake\Datasource\RepositoryInterface
+     * @throws \RuntimeException When trying to get alias for which instance
+     *   has already been created with different options.
+     */
+    public function get(string $alias, array $options = []);
+
+    /**
+     * Set a repository instance.
+     *
+     * @param string $alias The alias to set.
+     * @param \Cake\Datasource\RepositoryInterface $repository The repository to set.
+     * @return \Cake\Datasource\RepositoryInterface
+     */
+    public function set(string $alias, RepositoryInterface $repository);
+
+    /**
+     * Check to see if an instance exists in the registry.
+     *
+     * @param string $alias The alias to check for.
+     * @return bool
+     */
+    public function exists(string $alias): bool;
+
+    /**
+     * Removes an repository instance from the registry.
+     *
+     * @param string $alias The alias to remove.
+     * @return void
+     */
+    public function remove(string $alias): void;
+
+    /**
+     * Clears the registry of configuration and instances.
+     *
+     * @return void
+     */
+    public function clear(): void;
+}
diff --git a/vendor/cakephp/datasource/ModelAwareTrait.php b/vendor/cakephp/datasource/ModelAwareTrait.php
new file mode 100755
index 0000000..cfc71c8
--- /dev/null
+++ b/vendor/cakephp/datasource/ModelAwareTrait.php
@@ -0,0 +1,241 @@
+
+     */
+    protected $_modelFactories = [];
+
+    /**
+     * The model type to use.
+     *
+     * @var string
+     */
+    protected $_modelType = 'Table';
+
+    /**
+     * Set the modelClass property based on conventions.
+     *
+     * If the property is already set it will not be overwritten
+     *
+     * @param string $name Class name.
+     * @return void
+     */
+    protected function _setModelClass(string $name): void
+    {
+        if ($this->modelClass === null) {
+            $this->modelClass = $name;
+        }
+    }
+
+    /**
+     * Fetch or construct a model and set it to a property on this object.
+     *
+     * Uses a modelFactory based on `$modelType` to fetch and construct a `RepositoryInterface`
+     * and set it as a property on the current object. The default `modelType`
+     * can be defined with `setModelType()`.
+     *
+     * If a repository provider does not return an object a MissingModelException will
+     * be thrown.
+     *
+     * @param string|null $modelClass Name of model class to load. Defaults to $this->modelClass.
+     *  The name can be an alias like `'Post'` or FQCN like `App\Model\Table\PostsTable::class`.
+     * @param string|null $modelType The type of repository to load. Defaults to the getModelType() value.
+     * @return \Cake\Datasource\RepositoryInterface The model instance created.
+     * @throws \Cake\Datasource\Exception\MissingModelException If the model class cannot be found.
+     * @throws \UnexpectedValueException If $modelClass argument is not provided
+     *   and ModelAwareTrait::$modelClass property value is empty.
+     * @deprecated 4.3.0 Prefer `LocatorAwareTrait::fetchTable()` or `ModelAwareTrait::fetchModel()` instead.
+     */
+    public function loadModel(?string $modelClass = null, ?string $modelType = null): RepositoryInterface
+    {
+        $modelClass = $modelClass ?? $this->modelClass;
+        if (empty($modelClass)) {
+            throw new UnexpectedValueException('Default modelClass is empty');
+        }
+        $modelType = $modelType ?? $this->getModelType();
+
+        $options = [];
+        if (strpos($modelClass, '\\') === false) {
+            [, $alias] = pluginSplit($modelClass, true);
+        } else {
+            $options['className'] = $modelClass;
+            /** @psalm-suppress PossiblyFalseOperand */
+            $alias = substr(
+                $modelClass,
+                strrpos($modelClass, '\\') + 1,
+                -strlen($modelType)
+            );
+            $modelClass = $alias;
+        }
+        if (!property_exists($this, $alias)) {
+            deprecationWarning(
+                '4.5.0 - Dynamic properties will be removed in PHP 8.2. ' .
+                "Add `public \${$alias} = null;` to your class definition or use `#[AllowDynamicProperties]` attribute."
+            );
+        }
+
+        if (isset($this->{$alias})) {
+            return $this->{$alias};
+        }
+
+        $factory = $this->_modelFactories[$modelType] ?? FactoryLocator::get($modelType);
+        if ($factory instanceof LocatorInterface) {
+            $this->{$alias} = $factory->get($modelClass, $options);
+        } else {
+            $this->{$alias} = $factory($modelClass, $options);
+        }
+
+        if (!$this->{$alias}) {
+            throw new MissingModelException([$modelClass, $modelType]);
+        }
+
+        return $this->{$alias};
+    }
+
+    /**
+     * Fetch or construct a model instance from a locator.
+     *
+     * Uses a modelFactory based on `$modelType` to fetch and construct a `RepositoryInterface`
+     * and return it. The default `modelType` can be defined with `setModelType()`.
+     *
+     * Unlike `loadModel()` this method will *not* set an object property.
+     *
+     * If a repository provider does not return an object a MissingModelException will
+     * be thrown.
+     *
+     * @param string|null $modelClass Name of model class to load. Defaults to $this->modelClass.
+     *  The name can be an alias like `'Post'` or FQCN like `App\Model\Table\PostsTable::class`.
+     * @param string|null $modelType The type of repository to load. Defaults to the getModelType() value.
+     * @return \Cake\Datasource\RepositoryInterface The model instance created.
+     * @throws \Cake\Datasource\Exception\MissingModelException If the model class cannot be found.
+     * @throws \UnexpectedValueException If $modelClass argument is not provided
+     *   and ModelAwareTrait::$modelClass property value is empty.
+     */
+    public function fetchModel(?string $modelClass = null, ?string $modelType = null): RepositoryInterface
+    {
+        $modelClass = $modelClass ?? $this->modelClass;
+        if (empty($modelClass)) {
+            throw new UnexpectedValueException('Default modelClass is empty');
+        }
+        $modelType = $modelType ?? $this->getModelType();
+
+        $options = [];
+        if (strpos($modelClass, '\\') === false) {
+            [, $alias] = pluginSplit($modelClass, true);
+        } else {
+            $options['className'] = $modelClass;
+            /** @psalm-suppress PossiblyFalseOperand */
+            $alias = substr(
+                $modelClass,
+                strrpos($modelClass, '\\') + 1,
+                -strlen($modelType)
+            );
+            $modelClass = $alias;
+        }
+
+        $factory = $this->_modelFactories[$modelType] ?? FactoryLocator::get($modelType);
+        if ($factory instanceof LocatorInterface) {
+            $instance = $factory->get($modelClass, $options);
+        } else {
+            $instance = $factory($modelClass, $options);
+        }
+        if ($instance) {
+            return $instance;
+        }
+
+        throw new MissingModelException([$modelClass, $modelType]);
+    }
+
+    /**
+     * Override a existing callable to generate repositories of a given type.
+     *
+     * @param string $type The name of the repository type the factory function is for.
+     * @param \Cake\Datasource\Locator\LocatorInterface|callable $factory The factory function used to create instances.
+     * @return void
+     */
+    public function modelFactory(string $type, $factory): void
+    {
+        if (!$factory instanceof LocatorInterface && !is_callable($factory)) {
+            throw new InvalidArgumentException(sprintf(
+                '`$factory` must be an instance of Cake\Datasource\Locator\LocatorInterface or a callable.'
+                . ' Got type `%s` instead.',
+                getTypeName($factory)
+            ));
+        }
+
+        $this->_modelFactories[$type] = $factory;
+    }
+
+    /**
+     * Get the model type to be used by this class
+     *
+     * @return string
+     */
+    public function getModelType(): string
+    {
+        return $this->_modelType;
+    }
+
+    /**
+     * Set the model type to be used by this class
+     *
+     * @param string $modelType The model type
+     * @return $this
+     */
+    public function setModelType(string $modelType)
+    {
+        $this->_modelType = $modelType;
+
+        return $this;
+    }
+}
diff --git a/vendor/cakephp/datasource/Paginator.php b/vendor/cakephp/datasource/Paginator.php
new file mode 100755
index 0000000..926b231
--- /dev/null
+++ b/vendor/cakephp/datasource/Paginator.php
@@ -0,0 +1,10 @@
+
+     */
+    protected $_defaultConfig = [
+        'page' => 1,
+        'limit' => 20,
+        'maxLimit' => 100,
+        'allowedParameters' => ['limit', 'sort', 'page', 'direction'],
+        'sortableFields' => null,
+        'finder' => 'all',
+    ];
+
+    /**
+     * Paging params after pagination operation is done.
+     *
+     * @var array
+     */
+    protected $_pagingParams = [];
+
+    /**
+     * Handles automatic pagination of model records.
+     *
+     * ### Configuring pagination
+     *
+     * When calling `paginate()` you can use the $settings parameter to pass in
+     * pagination settings. These settings are used to build the queries made
+     * and control other pagination settings.
+     *
+     * If your settings contain a key with the current table's alias. The data
+     * inside that key will be used. Otherwise, the top level configuration will
+     * be used.
+     *
+     * ```
+     *  $settings = [
+     *    'limit' => 20,
+     *    'maxLimit' => 100
+     *  ];
+     *  $results = $paginator->paginate($table, $settings);
+     * ```
+     *
+     * The above settings will be used to paginate any repository. You can configure
+     * repository specific settings by keying the settings with the repository alias.
+     *
+     * ```
+     *  $settings = [
+     *    'Articles' => [
+     *      'limit' => 20,
+     *      'maxLimit' => 100
+     *    ],
+     *    'Comments' => [ ... ]
+     *  ];
+     *  $results = $paginator->paginate($table, $settings);
+     * ```
+     *
+     * This would allow you to have different pagination settings for
+     * `Articles` and `Comments` repositories.
+     *
+     * ### Controlling sort fields
+     *
+     * By default CakePHP will automatically allow sorting on any column on the
+     * repository object being paginated. Often times you will want to allow
+     * sorting on either associated columns or calculated fields. In these cases
+     * you will need to define an allowed list of all the columns you wish to allow
+     * sorting on. You can define the allowed sort fields in the `$settings` parameter:
+     *
+     * ```
+     * $settings = [
+     *   'Articles' => [
+     *     'finder' => 'custom',
+     *     'sortableFields' => ['title', 'author_id', 'comment_count'],
+     *   ]
+     * ];
+     * ```
+     *
+     * Passing an empty array as sortableFields disallows sorting altogether.
+     *
+     * ### Paginating with custom finders
+     *
+     * You can paginate with any find type defined on your table using the
+     * `finder` option.
+     *
+     * ```
+     *  $settings = [
+     *    'Articles' => [
+     *      'finder' => 'popular'
+     *    ]
+     *  ];
+     *  $results = $paginator->paginate($table, $settings);
+     * ```
+     *
+     * Would paginate using the `find('popular')` method.
+     *
+     * You can also pass an already created instance of a query to this method:
+     *
+     * ```
+     * $query = $this->Articles->find('popular')->matching('Tags', function ($q) {
+     *   return $q->where(['name' => 'CakePHP'])
+     * });
+     * $results = $paginator->paginate($query);
+     * ```
+     *
+     * ### Scoping Request parameters
+     *
+     * By using request parameter scopes you can paginate multiple queries in
+     * the same controller action:
+     *
+     * ```
+     * $articles = $paginator->paginate($articlesQuery, ['scope' => 'articles']);
+     * $tags = $paginator->paginate($tagsQuery, ['scope' => 'tags']);
+     * ```
+     *
+     * Each of the above queries will use different query string parameter sets
+     * for pagination data. An example URL paginating both results would be:
+     *
+     * ```
+     * /dashboard?articles[page]=1&tags[page]=2
+     * ```
+     *
+     * @param \Cake\Datasource\RepositoryInterface|\Cake\Datasource\QueryInterface $object The repository or query
+     *   to paginate.
+     * @param array $params Request params
+     * @param array $settings The settings/configuration used for pagination.
+     * @return \Cake\Datasource\ResultSetInterface Query results
+     * @throws \Cake\Datasource\Paging\Exception\PageOutOfBoundsException
+     */
+    public function paginate(object $object, array $params = [], array $settings = []): ResultSetInterface
+    {
+        $query = null;
+        if ($object instanceof QueryInterface) {
+            $query = $object;
+            $object = $query->getRepository();
+            if ($object === null) {
+                throw new CakeException('No repository set for query.');
+            }
+        }
+
+        $data = $this->extractData($object, $params, $settings);
+        $query = $this->getQuery($object, $query, $data);
+
+        $cleanQuery = clone $query;
+        $results = $query->all();
+        $data['numResults'] = count($results);
+        $data['count'] = $this->getCount($cleanQuery, $data);
+
+        $pagingParams = $this->buildParams($data);
+        $alias = $object->getAlias();
+        $this->_pagingParams = [$alias => $pagingParams];
+        if ($pagingParams['requestedPage'] > $pagingParams['page']) {
+            throw new PageOutOfBoundsException([
+                'requestedPage' => $pagingParams['requestedPage'],
+                'pagingParams' => $this->_pagingParams,
+            ]);
+        }
+
+        return $results;
+    }
+
+    /**
+     * Get query for fetching paginated results.
+     *
+     * @param \Cake\Datasource\RepositoryInterface $object Repository instance.
+     * @param \Cake\Datasource\QueryInterface|null $query Query Instance.
+     * @param array $data Pagination data.
+     * @return \Cake\Datasource\QueryInterface
+     */
+    protected function getQuery(RepositoryInterface $object, ?QueryInterface $query, array $data): QueryInterface
+    {
+        $options = $data['options'];
+        unset(
+            $options['scope'],
+            $options['sort'],
+            $options['direction'],
+        );
+
+        if ($query === null) {
+            $query = $object->find($data['finder'], $options);
+        } else {
+            $query->applyOptions($options);
+        }
+
+        return $query;
+    }
+
+    /**
+     * Get total count of records.
+     *
+     * @param \Cake\Datasource\QueryInterface $query Query instance.
+     * @param array $data Pagination data.
+     * @return int|null
+     */
+    protected function getCount(QueryInterface $query, array $data): ?int
+    {
+        return $query->count();
+    }
+
+    /**
+     * Extract pagination data needed
+     *
+     * @param \Cake\Datasource\RepositoryInterface $object The repository object.
+     * @param array $params Request params
+     * @param array $settings The settings/configuration used for pagination.
+     * @return array Array with keys 'defaults', 'options' and 'finder'
+     */
+    protected function extractData(RepositoryInterface $object, array $params, array $settings): array
+    {
+        $alias = $object->getAlias();
+        $defaults = $this->getDefaults($alias, $settings);
+
+        $validSettings = array_merge(
+            array_keys($this->_defaultConfig),
+            ['whitelist', 'sortWhitelist', 'order', 'scope']
+        );
+        $extraSettings = array_diff_key($defaults, array_flip($validSettings));
+        if ($extraSettings) {
+            deprecationWarning(
+                'Passing query options as paginator settings is deprecated.'
+                . ' Use a custom finder through `finder` config instead.'
+                . ' Extra keys found are: ' . implode(',', array_keys($extraSettings))
+            );
+        }
+
+        $options = $this->mergeOptions($params, $defaults);
+        $options = $this->validateSort($object, $options);
+        $options = $this->checkLimit($options);
+
+        $options += ['page' => 1, 'scope' => null];
+        $options['page'] = (int)$options['page'] < 1 ? 1 : (int)$options['page'];
+        [$finder, $options] = $this->_extractFinder($options);
+
+        return compact('defaults', 'options', 'finder');
+    }
+
+    /**
+     * Build pagination params.
+     *
+     * @param array $data Paginator data containing keys 'options',
+     *   'count', 'defaults', 'finder', 'numResults'.
+     * @return array Paging params.
+     */
+    protected function buildParams(array $data): array
+    {
+        $limit = $data['options']['limit'];
+
+        $paging = [
+            'count' => $data['count'],
+            'current' => $data['numResults'],
+            'perPage' => $limit,
+            'page' => $data['options']['page'],
+            'requestedPage' => $data['options']['page'],
+        ];
+
+        $paging = $this->addPageCountParams($paging, $data);
+        $paging = $this->addStartEndParams($paging, $data);
+        $paging = $this->addPrevNextParams($paging, $data);
+        $paging = $this->addSortingParams($paging, $data);
+
+        $paging += [
+            'limit' => $data['defaults']['limit'] != $limit ? $limit : null,
+            'scope' => $data['options']['scope'],
+            'finder' => $data['finder'],
+        ];
+
+        return $paging;
+    }
+
+    /**
+     * Add "page" and "pageCount" params.
+     *
+     * @param array $params Paging params.
+     * @param array $data Paginator data.
+     * @return array Updated params.
+     */
+    protected function addPageCountParams(array $params, array $data): array
+    {
+        $page = $params['page'];
+        $pageCount = 0;
+
+        if ($params['count'] !== null) {
+            $pageCount = max((int)ceil($params['count'] / $params['perPage']), 1);
+            $page = min($page, $pageCount);
+        } elseif ($params['current'] === 0 && $params['requestedPage'] > 1) {
+            $page = 1;
+        }
+
+        $params['page'] = $page;
+        $params['pageCount'] = $pageCount;
+
+        return $params;
+    }
+
+    /**
+     * Add "start" and "end" params.
+     *
+     * @param array $params Paging params.
+     * @param array $data Paginator data.
+     * @return array Updated params.
+     */
+    protected function addStartEndParams(array $params, array $data): array
+    {
+        $start = $end = 0;
+
+        if ($params['current'] > 0) {
+            $start = (($params['page'] - 1) * $params['perPage']) + 1;
+            $end = $start + $params['current'] - 1;
+        }
+
+        $params['start'] = $start;
+        $params['end'] = $end;
+
+        return $params;
+    }
+
+    /**
+     * Add "prevPage" and "nextPage" params.
+     *
+     * @param array $params Paginator params.
+     * @param array $data Paging data.
+     * @return array Updated params.
+     */
+    protected function addPrevNextParams(array $params, array $data): array
+    {
+        $params['prevPage'] = $params['page'] > 1;
+        if ($params['count'] === null) {
+            $params['nextPage'] = true;
+        } else {
+            $params['nextPage'] = $params['count'] > $params['page'] * $params['perPage'];
+        }
+
+        return $params;
+    }
+
+    /**
+     * Add sorting / ordering params.
+     *
+     * @param array $params Paginator params.
+     * @param array $data Paging data.
+     * @return array Updated params.
+     */
+    protected function addSortingParams(array $params, array $data): array
+    {
+        $defaults = $data['defaults'];
+        $order = (array)$data['options']['order'];
+        $sortDefault = $directionDefault = false;
+
+        if (!empty($defaults['order']) && count($defaults['order']) >= 1) {
+            $sortDefault = key($defaults['order']);
+            $directionDefault = current($defaults['order']);
+        }
+
+        $params += [
+            'sort' => $data['options']['sort'],
+            'direction' => isset($data['options']['sort']) && count($order) ? current($order) : null,
+            'sortDefault' => $sortDefault,
+            'directionDefault' => $directionDefault,
+            'completeSort' => $order,
+        ];
+
+        return $params;
+    }
+
+    /**
+     * Extracts the finder name and options out of the provided pagination options.
+     *
+     * @param array $options the pagination options.
+     * @return array An array containing in the first position the finder name
+     *   and in the second the options to be passed to it.
+     */
+    protected function _extractFinder(array $options): array
+    {
+        $type = !empty($options['finder']) ? $options['finder'] : 'all';
+        unset(
+            $options['finder'],
+            $options['maxLimit'],
+            $options['allowedParameters'],
+            $options['whitelist'],
+            $options['sortableFields'],
+            $options['sortWhitelist'],
+        );
+
+        if (is_array($type)) {
+            $options = (array)current($type) + $options;
+            $type = key($type);
+        }
+
+        return [$type, $options];
+    }
+
+    /**
+     * Get paging params after pagination operation.
+     *
+     * @return array
+     */
+    public function getPagingParams(): array
+    {
+        return $this->_pagingParams;
+    }
+
+    /**
+     * Shim method for reading the deprecated whitelist or allowedParameters options
+     *
+     * @return array
+     */
+    protected function getAllowedParameters(): array
+    {
+        $allowed = $this->getConfig('allowedParameters');
+        if (!$allowed) {
+            $allowed = [];
+        }
+        $whitelist = $this->getConfig('whitelist');
+        if ($whitelist) {
+            deprecationWarning('The `whitelist` option is deprecated. Use the `allowedParameters` option instead.');
+
+            return array_merge($allowed, $whitelist);
+        }
+
+        return $allowed;
+    }
+
+    /**
+     * Shim method for reading the deprecated sortWhitelist or sortableFields options.
+     *
+     * @param array $config The configuration data to coalesce and emit warnings on.
+     * @return array|null
+     */
+    protected function getSortableFields(array $config): ?array
+    {
+        $allowed = $config['sortableFields'] ?? null;
+        if ($allowed !== null) {
+            return $allowed;
+        }
+        $deprecated = $config['sortWhitelist'] ?? null;
+        if ($deprecated !== null) {
+            deprecationWarning('The `sortWhitelist` option is deprecated. Use `sortableFields` instead.');
+        }
+
+        return $deprecated;
+    }
+
+    /**
+     * Merges the various options that Paginator uses.
+     * Pulls settings together from the following places:
+     *
+     * - General pagination settings
+     * - Model specific settings.
+     * - Request parameters
+     *
+     * The result of this method is the aggregate of all the option sets
+     * combined together. You can change config value `allowedParameters` to modify
+     * which options/values can be set using request parameters.
+     *
+     * @param array $params Request params.
+     * @param array $settings The settings to merge with the request data.
+     * @return array Array of merged options.
+     */
+    public function mergeOptions(array $params, array $settings): array
+    {
+        if (!empty($settings['scope'])) {
+            $scope = $settings['scope'];
+            $params = !empty($params[$scope]) ? (array)$params[$scope] : [];
+        }
+
+        $allowed = $this->getAllowedParameters();
+        $params = array_intersect_key($params, array_flip($allowed));
+
+        return array_merge($settings, $params);
+    }
+
+    /**
+     * Get the settings for a $model. If there are no settings for a specific
+     * repository, the general settings will be used.
+     *
+     * @param string $alias Model name to get settings for.
+     * @param array $settings The settings which is used for combining.
+     * @return array An array of pagination settings for a model,
+     *   or the general settings.
+     */
+    public function getDefaults(string $alias, array $settings): array
+    {
+        if (isset($settings[$alias])) {
+            $settings = $settings[$alias];
+        }
+
+        $defaults = $this->getConfig();
+        $defaults['whitelist'] = $defaults['allowedParameters'] = $this->getAllowedParameters();
+
+        $maxLimit = $settings['maxLimit'] ?? $defaults['maxLimit'];
+        $limit = $settings['limit'] ?? $defaults['limit'];
+
+        if ($limit > $maxLimit) {
+            $limit = $maxLimit;
+        }
+
+        $settings['maxLimit'] = $maxLimit;
+        $settings['limit'] = $limit;
+
+        return $settings + $defaults;
+    }
+
+    /**
+     * Validate that the desired sorting can be performed on the $object.
+     *
+     * Only fields or virtualFields can be sorted on. The direction param will
+     * also be sanitized. Lastly sort + direction keys will be converted into
+     * the model friendly order key.
+     *
+     * You can use the allowedParameters option to control which columns/fields are
+     * available for sorting via URL parameters. This helps prevent users from ordering large
+     * result sets on un-indexed values.
+     *
+     * If you need to sort on associated columns or synthetic properties you
+     * will need to use the `sortableFields` option.
+     *
+     * Any columns listed in the allowed sort fields will be implicitly trusted.
+     * You can use this to sort on synthetic columns, or columns added in custom
+     * find operations that may not exist in the schema.
+     *
+     * The default order options provided to paginate() will be merged with the user's
+     * requested sorting field/direction.
+     *
+     * @param \Cake\Datasource\RepositoryInterface $object Repository object.
+     * @param array $options The pagination options being used for this request.
+     * @return array An array of options with sort + direction removed and
+     *   replaced with order if possible.
+     */
+    public function validateSort(RepositoryInterface $object, array $options): array
+    {
+        if (isset($options['sort'])) {
+            $direction = null;
+            if (isset($options['direction'])) {
+                $direction = strtolower($options['direction']);
+            }
+            if (!in_array($direction, ['asc', 'desc'], true)) {
+                $direction = 'asc';
+            }
+
+            $order = isset($options['order']) && is_array($options['order']) ? $options['order'] : [];
+            if ($order && $options['sort'] && strpos($options['sort'], '.') === false) {
+                $order = $this->_removeAliases($order, $object->getAlias());
+            }
+
+            $options['order'] = [$options['sort'] => $direction] + $order;
+        } else {
+            $options['sort'] = null;
+        }
+        unset($options['direction']);
+
+        if (empty($options['order'])) {
+            $options['order'] = [];
+        }
+        if (!is_array($options['order'])) {
+            return $options;
+        }
+
+        $sortAllowed = false;
+        $allowed = $this->getSortableFields($options);
+        if ($allowed !== null) {
+            $options['sortableFields'] = $options['sortWhitelist'] = $allowed;
+
+            $field = key($options['order']);
+            $sortAllowed = in_array($field, $allowed, true);
+            if (!$sortAllowed) {
+                $options['order'] = [];
+                $options['sort'] = null;
+
+                return $options;
+            }
+        }
+
+        if (
+            $options['sort'] === null
+            && count($options['order']) >= 1
+            && !is_numeric(key($options['order']))
+        ) {
+            $options['sort'] = key($options['order']);
+        }
+
+        $options['order'] = $this->_prefix($object, $options['order'], $sortAllowed);
+
+        return $options;
+    }
+
+    /**
+     * Remove alias if needed.
+     *
+     * @param array $fields Current fields
+     * @param string $model Current model alias
+     * @return array $fields Unaliased fields where applicable
+     */
+    protected function _removeAliases(array $fields, string $model): array
+    {
+        $result = [];
+        foreach ($fields as $field => $sort) {
+            if (is_int($field)) {
+                throw new CakeException(sprintf(
+                    'The `order` config must be an associative array. Found invalid value with numeric key: `%s`',
+                    $sort
+                ));
+            }
+
+            if (strpos($field, '.') === false) {
+                $result[$field] = $sort;
+                continue;
+            }
+
+            [$alias, $currentField] = explode('.', $field);
+
+            if ($alias === $model) {
+                $result[$currentField] = $sort;
+                continue;
+            }
+
+            $result[$field] = $sort;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Prefixes the field with the table alias if possible.
+     *
+     * @param \Cake\Datasource\RepositoryInterface $object Repository object.
+     * @param array $order Order array.
+     * @param bool $allowed Whether the field was allowed.
+     * @return array Final order array.
+     */
+    protected function _prefix(RepositoryInterface $object, array $order, bool $allowed = false): array
+    {
+        $tableAlias = $object->getAlias();
+        $tableOrder = [];
+        foreach ($order as $key => $value) {
+            if (is_numeric($key)) {
+                $tableOrder[] = $value;
+                continue;
+            }
+            $field = $key;
+            $alias = $tableAlias;
+
+            if (strpos($key, '.') !== false) {
+                [$alias, $field] = explode('.', $key);
+            }
+            $correctAlias = ($tableAlias === $alias);
+
+            if ($correctAlias && $allowed) {
+                // Disambiguate fields in schema. As id is quite common.
+                if ($object->hasField($field)) {
+                    $field = $alias . '.' . $field;
+                }
+                $tableOrder[$field] = $value;
+            } elseif ($correctAlias && $object->hasField($field)) {
+                $tableOrder[$tableAlias . '.' . $field] = $value;
+            } elseif (!$correctAlias && $allowed) {
+                $tableOrder[$alias . '.' . $field] = $value;
+            }
+        }
+
+        return $tableOrder;
+    }
+
+    /**
+     * Check the limit parameter and ensure it's within the maxLimit bounds.
+     *
+     * @param array $options An array of options with a limit key to be checked.
+     * @return array An array of options for pagination.
+     */
+    public function checkLimit(array $options): array
+    {
+        $options['limit'] = (int)$options['limit'];
+        if ($options['limit'] < 1) {
+            $options['limit'] = 1;
+        }
+        $options['limit'] = max(min($options['limit'], $options['maxLimit']), 1);
+
+        return $options;
+    }
+}
+
+// phpcs:disable
+class_alias(
+    'Cake\Datasource\Paging\NumericPaginator',
+    'Cake\Datasource\Paginator'
+);
+// phpcs:enable
diff --git a/vendor/cakephp/datasource/Paging/PaginatorInterface.php b/vendor/cakephp/datasource/Paging/PaginatorInterface.php
new file mode 100755
index 0000000..4d30597
--- /dev/null
+++ b/vendor/cakephp/datasource/Paging/PaginatorInterface.php
@@ -0,0 +1,50 @@
+_key = $key;
+
+        if (!is_string($config) && !($config instanceof CacheInterface)) {
+            throw new RuntimeException('Cache configs must be strings or \Psr\SimpleCache\CacheInterface instances.');
+        }
+        $this->_config = $config;
+    }
+
+    /**
+     * Load the cached results from the cache or run the query.
+     *
+     * @param object $query The query the cache read is for.
+     * @return mixed|null Either the cached results or null.
+     */
+    public function fetch(object $query)
+    {
+        $key = $this->_resolveKey($query);
+        $storage = $this->_resolveCacher();
+        $result = $storage->get($key);
+        if (empty($result)) {
+            return null;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Store the result set into the cache.
+     *
+     * @param object $query The query the cache read is for.
+     * @param \Traversable $results The result set to store.
+     * @return bool True if the data was successfully cached, false on failure
+     */
+    public function store(object $query, Traversable $results): bool
+    {
+        $key = $this->_resolveKey($query);
+        $storage = $this->_resolveCacher();
+
+        return $storage->set($key, $results);
+    }
+
+    /**
+     * Get/generate the cache key.
+     *
+     * @param object $query The query to generate a key for.
+     * @return string
+     * @throws \RuntimeException
+     */
+    protected function _resolveKey(object $query): string
+    {
+        if (is_string($this->_key)) {
+            return $this->_key;
+        }
+        $func = $this->_key;
+        $key = $func($query);
+        if (!is_string($key)) {
+            $msg = sprintf('Cache key functions must return a string. Got %s.', var_export($key, true));
+            throw new RuntimeException($msg);
+        }
+
+        return $key;
+    }
+
+    /**
+     * Get the cache engine.
+     *
+     * @return \Psr\SimpleCache\CacheInterface
+     */
+    protected function _resolveCacher()
+    {
+        if (is_string($this->_config)) {
+            return Cache::pool($this->_config);
+        }
+
+        return $this->_config;
+    }
+}
diff --git a/vendor/cakephp/datasource/QueryInterface.php b/vendor/cakephp/datasource/QueryInterface.php
new file mode 100755
index 0000000..47fede0
--- /dev/null
+++ b/vendor/cakephp/datasource/QueryInterface.php
@@ -0,0 +1,407 @@
+ value array representing a single aliased field
+     * that can be passed directly to the select() method.
+     * The key will contain the alias and the value the actual field name.
+     *
+     * If the field is already aliased, then it will not be changed.
+     * If no $alias is passed, the default table for this query will be used.
+     *
+     * @param string $field The field to alias
+     * @param string|null $alias the alias used to prefix the field
+     * @return array
+     */
+    public function aliasField(string $field, ?string $alias = null): array;
+
+    /**
+     * Runs `aliasField()` for each field in the provided list and returns
+     * the result under a single array.
+     *
+     * @param array $fields The fields to alias
+     * @param string|null $defaultAlias The default alias
+     * @return array
+     */
+    public function aliasFields(array $fields, ?string $defaultAlias = null): array;
+
+    /**
+     * Fetch the results for this query.
+     *
+     * Will return either the results set through setResult(), or execute this query
+     * and return the ResultSetDecorator object ready for streaming of results.
+     *
+     * ResultSetDecorator is a traversable object that implements the methods found
+     * on Cake\Collection\Collection.
+     *
+     * @return \Cake\Datasource\ResultSetInterface
+     */
+    public function all(): ResultSetInterface;
+
+    /**
+     * Populates or adds parts to current query clauses using an array.
+     * This is handy for passing all query clauses at once. The option array accepts:
+     *
+     * - fields: Maps to the select method
+     * - conditions: Maps to the where method
+     * - limit: Maps to the limit method
+     * - order: Maps to the order method
+     * - offset: Maps to the offset method
+     * - group: Maps to the group method
+     * - having: Maps to the having method
+     * - contain: Maps to the contain options for eager loading
+     * - join: Maps to the join method
+     * - page: Maps to the page method
+     *
+     * ### Example:
+     *
+     * ```
+     * $query->applyOptions([
+     *   'fields' => ['id', 'name'],
+     *   'conditions' => [
+     *     'created >=' => '2013-01-01'
+     *   ],
+     *   'limit' => 10
+     * ]);
+     * ```
+     *
+     * Is equivalent to:
+     *
+     * ```
+     *  $query
+     *  ->select(['id', 'name'])
+     *  ->where(['created >=' => '2013-01-01'])
+     *  ->limit(10)
+     * ```
+     *
+     * @param array $options list of query clauses to apply new parts to.
+     * @return $this
+     */
+    public function applyOptions(array $options);
+
+    /**
+     * Apply custom finds to against an existing query object.
+     *
+     * Allows custom find methods to be combined and applied to each other.
+     *
+     * ```
+     * $repository->find('all')->find('recent');
+     * ```
+     *
+     * The above is an example of stacking multiple finder methods onto
+     * a single query.
+     *
+     * @param string $finder The finder method to use.
+     * @param array $options The options for the finder.
+     * @return static Returns a modified query.
+     */
+    public function find(string $finder, array $options = []);
+
+    /**
+     * Returns the first result out of executing this query, if the query has not been
+     * executed before, it will set the limit clause to 1 for performance reasons.
+     *
+     * ### Example:
+     *
+     * ```
+     * $singleUser = $query->select(['id', 'username'])->first();
+     * ```
+     *
+     * @return \Cake\Datasource\EntityInterface|array|null the first result from the ResultSet
+     */
+    public function first();
+
+    /**
+     * Returns the total amount of results for the query.
+     *
+     * @return int
+     */
+    public function count(): int;
+
+    /**
+     * Sets the number of records that should be retrieved from database,
+     * accepts an integer or an expression object that evaluates to an integer.
+     * In some databases, this operation might not be supported or will require
+     * the query to be transformed in order to limit the result set size.
+     *
+     * ### Examples
+     *
+     * ```
+     * $query->limit(10) // generates LIMIT 10
+     * $query->limit($query->newExpr()->add(['1 + 1'])); // LIMIT (1 + 1)
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|int|null $limit number of records to be returned
+     * @return $this
+     */
+    public function limit($limit);
+
+    /**
+     * Sets the number of records that should be skipped from the original result set
+     * This is commonly used for paginating large results. Accepts an integer or an
+     * expression object that evaluates to an integer.
+     *
+     * In some databases, this operation might not be supported or will require
+     * the query to be transformed in order to limit the result set size.
+     *
+     * ### Examples
+     *
+     * ```
+     *  $query->offset(10) // generates OFFSET 10
+     *  $query->offset($query->newExpr()->add(['1 + 1'])); // OFFSET (1 + 1)
+     * ```
+     *
+     * @param \Cake\Database\ExpressionInterface|int|null $offset number of records to be skipped
+     * @return $this
+     */
+    public function offset($offset);
+
+    /**
+     * Adds a single or multiple fields to be used in the ORDER clause for this query.
+     * Fields can be passed as an array of strings, array of expression
+     * objects, a single expression or a single string.
+     *
+     * If an array is passed, keys will be used as the field itself and the value will
+     * represent the order in which such field should be ordered. When called multiple
+     * times with the same fields as key, the last order definition will prevail over
+     * the others.
+     *
+     * By default this function will append any passed argument to the list of fields
+     * to be selected, unless the second argument is set to true.
+     *
+     * ### Examples:
+     *
+     * ```
+     * $query->order(['title' => 'DESC', 'author_id' => 'ASC']);
+     * ```
+     *
+     * Produces:
+     *
+     * `ORDER BY title DESC, author_id ASC`
+     *
+     * ```
+     * $query
+     *     ->order(['title' => $query->newExpr('DESC NULLS FIRST')])
+     *     ->order('author_id');
+     * ```
+     *
+     * Will generate:
+     *
+     * `ORDER BY title DESC NULLS FIRST, author_id`
+     *
+     * ```
+     * $expression = $query->newExpr()->add(['id % 2 = 0']);
+     * $query->order($expression)->order(['title' => 'ASC']);
+     * ```
+     *
+     * Will become:
+     *
+     * `ORDER BY (id %2 = 0), title ASC`
+     *
+     * If you need to set complex expressions as order conditions, you
+     * should use `orderAsc()` or `orderDesc()`.
+     *
+     * @param \Cake\Database\ExpressionInterface|\Closure|array|string $fields fields to be added to the list
+     * @param bool $overwrite whether to reset order with field list or not
+     * @return $this
+     */
+    public function order($fields, $overwrite = false);
+
+    /**
+     * Set the page of results you want.
+     *
+     * This method provides an easier to use interface to set the limit + offset
+     * in the record set you want as results. If empty the limit will default to
+     * the existing limit clause, and if that too is empty, then `25` will be used.
+     *
+     * Pages must start at 1.
+     *
+     * @param int $num The page number you want.
+     * @param int|null $limit The number of rows you want in the page. If null
+     *  the current limit clause will be used.
+     * @return $this
+     * @throws \InvalidArgumentException If page number < 1.
+     */
+    public function page(int $num, ?int $limit = null);
+
+    /**
+     * Returns an array representation of the results after executing the query.
+     *
+     * @return array
+     */
+    public function toArray(): array;
+
+    /**
+     * Set the default Table object that will be used by this query
+     * and form the `FROM` clause.
+     *
+     * @param \Cake\Datasource\RepositoryInterface $repository The default repository object to use
+     * @return $this
+     * @deprecated
+     */
+    public function repository(RepositoryInterface $repository);
+
+    /**
+     * Returns the default repository object that will be used by this query,
+     * that is, the repository that will appear in the from clause.
+     *
+     * @return \Cake\Datasource\RepositoryInterface|null $repository The default repository object to use
+     */
+    public function getRepository(): ?RepositoryInterface;
+
+    /**
+     * Adds a condition or set of conditions to be used in the WHERE clause for this
+     * query. Conditions can be expressed as an array of fields as keys with
+     * comparison operators in it, the values for the array will be used for comparing
+     * the field to such literal. Finally, conditions can be expressed as a single
+     * string or an array of strings.
+     *
+     * When using arrays, each entry will be joined to the rest of the conditions using
+     * an AND operator. Consecutive calls to this function will also join the new
+     * conditions specified using the AND operator. Additionally, values can be
+     * expressed using expression objects which can include other query objects.
+     *
+     * Any conditions created with this methods can be used with any SELECT, UPDATE
+     * and DELETE type of queries.
+     *
+     * ### Conditions using operators:
+     *
+     * ```
+     *  $query->where([
+     *      'posted >=' => new DateTime('3 days ago'),
+     *      'title LIKE' => 'Hello W%',
+     *      'author_id' => 1,
+     *  ], ['posted' => 'datetime']);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE posted >= 2012-01-27 AND title LIKE 'Hello W%' AND author_id = 1`
+     *
+     * Second parameter is used to specify what type is expected for each passed
+     * key. Valid types can be used from the mapped with Database\Type class.
+     *
+     * ### Nesting conditions with conjunctions:
+     *
+     * ```
+     *  $query->where([
+     *      'author_id !=' => 1,
+     *      'OR' => ['published' => true, 'posted <' => new DateTime('now')],
+     *      'NOT' => ['title' => 'Hello']
+     *  ], ['published' => boolean, 'posted' => 'datetime']
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE author_id = 1 AND (published = 1 OR posted < '2012-02-01') AND NOT (title = 'Hello')`
+     *
+     * You can nest conditions using conjunctions as much as you like. Sometimes, you
+     * may want to define 2 different options for the same key, in that case, you can
+     * wrap each condition inside a new array:
+     *
+     * `$query->where(['OR' => [['published' => false], ['published' => true]])`
+     *
+     * Keep in mind that every time you call where() with the third param set to false
+     * (default), it will join the passed conditions to the previous stored list using
+     * the AND operator. Also, using the same array key twice in consecutive calls to
+     * this method will not override the previous value.
+     *
+     * ### Using expressions objects:
+     *
+     * ```
+     *  $exp = $query->newExpr()->add(['id !=' => 100, 'author_id' != 1])->tieWith('OR');
+     *  $query->where(['published' => true], ['published' => 'boolean'])->where($exp);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE (id != 100 OR author_id != 1) AND published = 1`
+     *
+     * Other Query objects that be used as conditions for any field.
+     *
+     * ### Adding conditions in multiple steps:
+     *
+     * You can use callable functions to construct complex expressions, functions
+     * receive as first argument a new QueryExpression object and this query instance
+     * as second argument. Functions must return an expression object, that will be
+     * added the list of conditions for the query using the AND operator.
+     *
+     * ```
+     *  $query
+     *  ->where(['title !=' => 'Hello World'])
+     *  ->where(function ($exp, $query) {
+     *      $or = $exp->or(['id' => 1]);
+     *      $and = $exp->and(['id >' => 2, 'id <' => 10]);
+     *  return $or->add($and);
+     *  });
+     * ```
+     *
+     * * The previous example produces:
+     *
+     * `WHERE title != 'Hello World' AND (id = 1 OR (id > 2 AND id < 10))`
+     *
+     * ### Conditions as strings:
+     *
+     * ```
+     *  $query->where(['articles.author_id = authors.id', 'modified IS NULL']);
+     * ```
+     *
+     * The previous example produces:
+     *
+     * `WHERE articles.author_id = authors.id AND modified IS NULL`
+     *
+     * Please note that when using the array notation or the expression objects, all
+     * values will be correctly quoted and transformed to the correspondent database
+     * data type automatically for you, thus securing your application from SQL injections.
+     * If you use string conditions make sure that your values are correctly quoted.
+     * The safest thing you can do is to never use string conditions.
+     *
+     * @param \Closure|array|string|null $conditions The conditions to filter on.
+     * @param array $types Associative array of type names used to bind values to query
+     * @param bool $overwrite whether to reset conditions with passed list or not
+     * @return $this
+     */
+    public function where($conditions = null, array $types = [], bool $overwrite = false);
+}
diff --git a/vendor/cakephp/datasource/QueryTrait.php b/vendor/cakephp/datasource/QueryTrait.php
new file mode 100755
index 0000000..1552561
--- /dev/null
+++ b/vendor/cakephp/datasource/QueryTrait.php
@@ -0,0 +1,1465 @@
+
+     */
+    protected $_formatters = [];
+
+    /**
+     * A query cacher instance if this query has caching enabled.
+     *
+     * @var \Cake\Datasource\QueryCacher|null
+     */
+    protected $_cache;
+
+    /**
+     * Holds any custom options passed using applyOptions that could not be processed
+     * by any method in this class.
+     *
+     * @var array
+     */
+    protected $_options = [];
+
+    /**
+     * Whether the query is standalone or the product of an eager load operation.
+     *
+     * @var bool
+     */
+    protected $_eagerLoaded = false;
+
+    /**
+     * Set the default Table object that will be used by this query
+     * and form the `FROM` clause.
+     *
+     * @param \Cake\Datasource\RepositoryInterface|\Cake\ORM\Table $repository The default table object to use
+     * @return $this
+     * @deprecated 4.5.0 Use `setRepository()` instead.
+     */
+    public function repository(RepositoryInterface $repository)
+    {
+        deprecationWarning('`repository() method is deprecated. Use `setRepository()` instead.');
+
+        return $this->setRepository($repository);
+    }
+
+    /**
+     * Set the default Table object that will be used by this query
+     * and form the `FROM` clause.
+     *
+     * @param \Cake\Datasource\RepositoryInterface|\Cake\ORM\Table $repository The default table object to use
+     * @return $this
+     */
+    public function setRepository(RepositoryInterface $repository)
+    {
+        $this->_repository = $repository;
+
+        return $this;
+    }
+
+    /**
+     * Returns the default table object that will be used by this query,
+     * that is, the table that will appear in the from clause.
+     *
+     * @return \Cake\Datasource\RepositoryInterface
+     */
+    public function getRepository(): RepositoryInterface
+    {
+        return $this->_repository;
+    }
+
+    /**
+     * Set the result set for a query.
+     *
+     * Setting the resultset of a query will make execute() a no-op. Instead
+     * of executing the SQL query and fetching results, the ResultSet provided to this
+     * method will be returned.
+     *
+     * This method is most useful when combined with results stored in a persistent cache.
+     *
+     * @param iterable $results The results this query should return.
+     * @return $this
+     */
+    public function setResult(iterable $results)
+    {
+        $this->_results = $results;
+
+        return $this;
+    }
+
+    /**
+     * Executes this query and returns a results iterator. This function is required
+     * for implementing the IteratorAggregate interface and allows the query to be
+     * iterated without having to call execute() manually, thus making it look like
+     * a result set instead of the query itself.
+     *
+     * @return \Cake\Datasource\ResultSetInterface
+     * @psalm-suppress ImplementedReturnTypeMismatch
+     */
+    #[\ReturnTypeWillChange]
+    public function getIterator()
+    {
+        return $this->all();
+    }
+
+    /**
+     * Enable result caching for this query.
+     *
+     * If a query has caching enabled, it will do the following when executed:
+     *
+     * - Check the cache for $key. If there are results no SQL will be executed.
+     *   Instead the cached results will be returned.
+     * - When the cached data is stale/missing the result set will be cached as the query
+     *   is executed.
+     *
+     * ### Usage
+     *
+     * ```
+     * // Simple string key + config
+     * $query->cache('my_key', 'db_results');
+     *
+     * // Function to generate key.
+     * $query->cache(function ($q) {
+     *   $key = serialize($q->clause('select'));
+     *   $key .= serialize($q->clause('where'));
+     *   return md5($key);
+     * });
+     *
+     * // Using a pre-built cache engine.
+     * $query->cache('my_key', $engine);
+     *
+     * // Disable caching
+     * $query->cache(false);
+     * ```
+     *
+     * @param \Closure|string|false $key Either the cache key or a function to generate the cache key.
+     *   When using a function, this query instance will be supplied as an argument.
+     * @param \Psr\SimpleCache\CacheInterface|string $config Either the name of the cache config to use, or
+     *   a cache engine instance.
+     * @return $this
+     */
+    public function cache($key, $config = 'default')
+    {
+        if ($key === false) {
+            $this->_cache = null;
+
+            return $this;
+        }
+        $this->_cache = new QueryCacher($key, $config);
+
+        return $this;
+    }
+
+    /**
+     * Returns the current configured query `_eagerLoaded` value
+     *
+     * @return bool
+     */
+    public function isEagerLoaded(): bool
+    {
+        return $this->_eagerLoaded;
+    }
+
+    /**
+     * Sets the query instance to be an eager loaded query. If no argument is
+     * passed, the current configured query `_eagerLoaded` value is returned.
+     *
+     * @param bool $value Whether to eager load.
+     * @return $this
+     */
+    public function eagerLoaded(bool $value)
+    {
+        $this->_eagerLoaded = $value;
+
+        return $this;
+    }
+
+    /**
+     * Returns a key => value array representing a single aliased field
+     * that can be passed directly to the select() method.
+     * The key will contain the alias and the value the actual field name.
+     *
+     * If the field is already aliased, then it will not be changed.
+     * If no $alias is passed, the default table for this query will be used.
+     *
+     * @param string $field The field to alias
+     * @param string|null $alias the alias used to prefix the field
+     * @return array
+     */
+    public function aliasField(string $field, ?string $alias = null): array
+    {
+        if (strpos($field, '.') === false) {
+            $alias = $alias ?: $this->getRepository()->getAlias();
+            $aliasedField = $alias . '.' . $field;
+        } else {
+            $aliasedField = $field;
+            [$alias, $field] = explode('.', $field);
+        }
+
+        $key = sprintf('%s__%s', $alias, $field);
+
+        return [$key => $aliasedField];
+    }
+
+    /**
+     * Runs `aliasField()` for each field in the provided list and returns
+     * the result under a single array.
+     *
+     * @param array $fields The fields to alias
+     * @param string|null $defaultAlias The default alias
+     * @return array
+     */
+    public function aliasFields(array $fields, ?string $defaultAlias = null): array
+    {
+        $aliased = [];
+        foreach ($fields as $alias => $field) {
+            if (is_numeric($alias) && is_string($field)) {
+                $aliased += $this->aliasField($field, $defaultAlias);
+                continue;
+            }
+            $aliased[$alias] = $field;
+        }
+
+        return $aliased;
+    }
+
+    /**
+     * Fetch the results for this query.
+     *
+     * Will return either the results set through setResult(), or execute this query
+     * and return the ResultSetDecorator object ready for streaming of results.
+     *
+     * ResultSetDecorator is a traversable object that implements the methods found
+     * on Cake\Collection\Collection.
+     *
+     * @return \Cake\Datasource\ResultSetInterface
+     */
+    public function all(): ResultSetInterface
+    {
+        if ($this->_results !== null) {
+            return $this->_results;
+        }
+
+        $results = null;
+        if ($this->_cache) {
+            $results = $this->_cache->fetch($this);
+        }
+        if ($results === null) {
+            $results = $this->_decorateResults($this->_execute());
+            if ($this->_cache) {
+                $this->_cache->store($this, $results);
+            }
+        }
+        $this->_results = $results;
+
+        return $this->_results;
+    }
+
+    /**
+     * Returns an array representation of the results after executing the query.
+     *
+     * @return array
+     */
+    public function toArray(): array
+    {
+        return $this->all()->toArray();
+    }
+
+    /**
+     * Register a new MapReduce routine to be executed on top of the database results
+     * Both the mapper and caller callable should be invokable objects.
+     *
+     * The MapReduce routing will only be run when the query is executed and the first
+     * result is attempted to be fetched.
+     *
+     * If the third argument is set to true, it will erase previous map reducers
+     * and replace it with the arguments passed.
+     *
+     * @param callable|null $mapper The mapper callable.
+     * @param callable|null $reducer The reducing function.
+     * @param bool $overwrite Set to true to overwrite existing map + reduce functions.
+     * @return $this
+     * @see \Cake\Collection\Iterator\MapReduce for details on how to use emit data to the map reducer.
+     */
+    public function mapReduce(?callable $mapper = null, ?callable $reducer = null, bool $overwrite = false)
+    {
+        if ($overwrite) {
+            $this->_mapReduce = [];
+        }
+        if ($mapper === null) {
+            if (!$overwrite) {
+                throw new InvalidArgumentException('$mapper can be null only when $overwrite is true.');
+            }
+
+            return $this;
+        }
+        $this->_mapReduce[] = compact('mapper', 'reducer');
+
+        return $this;
+    }
+
+    /**
+     * Returns the list of previously registered map reduce routines.
+     *
+     * @return array
+     */
+    public function getMapReducers(): array
+    {
+        return $this->_mapReduce;
+    }
+
+    /**
+     * Registers a new formatter callback function that is to be executed when trying
+     * to fetch the results from the database.
+     *
+     * If the second argument is set to true, it will erase previous formatters
+     * and replace them with the passed first argument.
+     *
+     * Callbacks are required to return an iterator object, which will be used as
+     * the return value for this query's result. Formatter functions are applied
+     * after all the `MapReduce` routines for this query have been executed.
+     *
+     * Formatting callbacks will receive two arguments, the first one being an object
+     * implementing `\Cake\Collection\CollectionInterface`, that can be traversed and
+     * modified at will. The second one being the query instance on which the formatter
+     * callback is being applied.
+     *
+     * Usually the query instance received by the formatter callback is the same query
+     * instance on which the callback was attached to, except for in a joined
+     * association, in that case the callback will be invoked on the association source
+     * side query, and it will receive that query instance instead of the one on which
+     * the callback was originally attached to - see the examples below!
+     *
+     * ### Examples:
+     *
+     * Return all results from the table indexed by id:
+     *
+     * ```
+     * $query->select(['id', 'name'])->formatResults(function ($results) {
+     *     return $results->indexBy('id');
+     * });
+     * ```
+     *
+     * Add a new column to the ResultSet:
+     *
+     * ```
+     * $query->select(['name', 'birth_date'])->formatResults(function ($results) {
+     *     return $results->map(function ($row) {
+     *         $row['age'] = $row['birth_date']->diff(new DateTime)->y;
+     *
+     *         return $row;
+     *     });
+     * });
+     * ```
+     *
+     * Add a new column to the results with respect to the query's hydration configuration:
+     *
+     * ```
+     * $query->formatResults(function ($results, $query) {
+     *     return $results->map(function ($row) use ($query) {
+     *         $data = [
+     *             'bar' => 'baz',
+     *         ];
+     *
+     *         if ($query->isHydrationEnabled()) {
+     *             $row['foo'] = new Foo($data)
+     *         } else {
+     *             $row['foo'] = $data;
+     *         }
+     *
+     *         return $row;
+     *     });
+     * });
+     * ```
+     *
+     * Retaining access to the association target query instance of joined associations,
+     * by inheriting the contain callback's query argument:
+     *
+     * ```
+     * // Assuming a `Articles belongsTo Authors` association that uses the join strategy
+     *
+     * $articlesQuery->contain('Authors', function ($authorsQuery) {
+     *     return $authorsQuery->formatResults(function ($results, $query) use ($authorsQuery) {
+     *         // Here `$authorsQuery` will always be the instance
+     *         // where the callback was attached to.
+     *
+     *         // The instance passed to the callback in the second
+     *         // argument (`$query`), will be the one where the
+     *         // callback is actually being applied to, in this
+     *         // example that would be `$articlesQuery`.
+     *
+     *         // ...
+     *
+     *         return $results;
+     *     });
+     * });
+     * ```
+     *
+     * @param callable|null $formatter The formatting callable.
+     * @param int|bool $mode Whether to overwrite, append or prepend the formatter.
+     * @return $this
+     * @throws \InvalidArgumentException
+     */
+    public function formatResults(?callable $formatter = null, $mode = self::APPEND)
+    {
+        if ($mode === self::OVERWRITE) {
+            $this->_formatters = [];
+        }
+        if ($formatter === null) {
+            if ($mode !== self::OVERWRITE) {
+                throw new InvalidArgumentException('$formatter can be null only when $mode is overwrite.');
+            }
+
+            return $this;
+        }
+
+        if ($mode === self::PREPEND) {
+            array_unshift($this->_formatters, $formatter);
+
+            return $this;
+        }
+
+        $this->_formatters[] = $formatter;
+
+        return $this;
+    }
+
+    /**
+     * Returns the list of previously registered format routines.
+     *
+     * @return array
+     */
+    public function getResultFormatters(): array
+    {
+        return $this->_formatters;
+    }
+
+    /**
+     * Returns the first result out of executing this query, if the query has not been
+     * executed before, it will set the limit clause to 1 for performance reasons.
+     *
+     * ### Example:
+     *
+     * ```
+     * $singleUser = $query->select(['id', 'username'])->first();
+     * ```
+     *
+     * @return \Cake\Datasource\EntityInterface|array|null The first result from the ResultSet.
+     */
+    public function first()
+    {
+        if ($this->_dirty) {
+            $this->limit(1);
+        }
+
+        return $this->all()->first();
+    }
+
+    /**
+     * Get the first result from the executing query or raise an exception.
+     *
+     * @throws \Cake\Datasource\Exception\RecordNotFoundException When there is no first record.
+     * @return \Cake\Datasource\EntityInterface|array The first result from the ResultSet.
+     */
+    public function firstOrFail()
+    {
+        $entity = $this->first();
+        if (!$entity) {
+            $table = $this->getRepository();
+            throw new RecordNotFoundException(sprintf(
+                'Record not found in table "%s"',
+                $table->getTable()
+            ));
+        }
+
+        return $entity;
+    }
+
+    /**
+     * Returns an array with the custom options that were applied to this query
+     * and that were not already processed by another method in this class.
+     *
+     * ### Example:
+     *
+     * ```
+     *  $query->applyOptions(['doABarrelRoll' => true, 'fields' => ['id', 'name']);
+     *  $query->getOptions(); // Returns ['doABarrelRoll' => true]
+     * ```
+     *
+     * @see \Cake\Datasource\QueryInterface::applyOptions() to read about the options that will
+     * be processed by this class and not returned by this function
+     * @return array
+     * @see applyOptions()
+     */
+    public function getOptions(): array
+    {
+        return $this->_options;
+    }
+
+    /**
+     * Enables calling methods from the result set as if they were from this class
+     *
+     * @param string $method the method to call
+     * @param array $arguments list of arguments for the method to call
+     * @return mixed
+     * @throws \BadMethodCallException if no such method exists in result set
+     */
+    public function __call(string $method, array $arguments)
+    {
+        $resultSetClass = $this->_decoratorClass();
+        if (in_array($method, get_class_methods($resultSetClass), true)) {
+            deprecationWarning(sprintf(
+                'Calling `%s` methods, such as `%s()`, on queries is deprecated. ' .
+                'You must call `all()` first (for example, `all()->%s()`).',
+                ResultSetInterface::class,
+                $method,
+                $method,
+            ), 2);
+            $results = $this->all();
+
+            return $results->$method(...$arguments);
+        }
+        throw new BadMethodCallException(
+            sprintf('Unknown method "%s"', $method)
+        );
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::each()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function each(callable $callback): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling each() on a Query is deprecated. ' .
+            'Instead call `$query->all()->each(...)` instead.'
+        );
+
+        return $this->all()->each($callback);
+    }
+
+    /**
+     * @param ?callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::filter()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function filter(?callable $callback = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling filter() on a Query is deprecated. ' .
+            'Instead call `$query->all()->filter(...)` instead.'
+        );
+
+        return $this->all()->filter($callback);
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::reject()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function reject(callable $callback): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling reject() on a Query is deprecated. ' .
+            'Instead call `$query->all()->reject(...)` instead.'
+        );
+
+        return $this->all()->reject($callback);
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::every()
+     * @return bool
+     * @deprecated
+     */
+    public function every(callable $callback): bool
+    {
+        deprecationWarning(
+            '4.3.0 - Calling every() on a Query is deprecated. ' .
+            'Instead call `$query->all()->every(...)` instead.'
+        );
+
+        return $this->all()->every($callback);
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::some()
+     * @return bool
+     * @deprecated
+     */
+    public function some(callable $callback): bool
+    {
+        deprecationWarning(
+            '4.3.0 - Calling some() on a Query is deprecated. ' .
+            'Instead call `$query->all()->some(...)` instead.'
+        );
+
+        return $this->all()->some($callback);
+    }
+
+    /**
+     * @param mixed $value The value to check.
+     * @see \Cake\Collection\CollectionInterface::contains()
+     * @return bool
+     * @deprecated
+     */
+    public function contains($value): bool
+    {
+        deprecationWarning(
+            '4.3.0 - Calling contains() on a Query is deprecated. ' .
+            'Instead call `$query->all()->contains(...)` instead.'
+        );
+
+        return $this->all()->contains($value);
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @see \Cake\Collection\CollectionInterface::map()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function map(callable $callback): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling map() on a Query is deprecated. ' .
+            'Instead call `$query->all()->map(...)` instead.'
+        );
+
+        return $this->all()->map($callback);
+    }
+
+    /**
+     * @param callable $callback The callback to apply
+     * @param mixed $initial The initial value
+     * @see \Cake\Collection\CollectionInterface::reduce()
+     * @return mixed
+     * @deprecated
+     */
+    public function reduce(callable $callback, $initial = null)
+    {
+        deprecationWarning(
+            '4.3.0 - Calling reduce() on a Query is deprecated. ' .
+            'Instead call `$query->all()->reduce(...)` instead.'
+        );
+
+        return $this->all()->reduce($callback, $initial);
+    }
+
+    /**
+     * @param callable|string $path The path to extract
+     * @see \Cake\Collection\CollectionInterface::extract()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function extract($path): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling extract() on a Query is deprecated. ' .
+            'Instead call `$query->all()->extract(...)` instead.'
+        );
+
+        return $this->all()->extract($path);
+    }
+
+    /**
+     * @param callable|string $path The path to max
+     * @param int $sort The SORT_ constant to order by.
+     * @see \Cake\Collection\CollectionInterface::max()
+     * @return mixed
+     * @deprecated
+     */
+    public function max($path, int $sort = \SORT_NUMERIC)
+    {
+        deprecationWarning(
+            '4.3.0 - Calling max() on a Query is deprecated. ' .
+            'Instead call `$query->all()->max(...)` instead.'
+        );
+
+        return $this->all()->max($path, $sort);
+    }
+
+    /**
+     * @param callable|string $path The path to max
+     * @param int $sort The SORT_ constant to order by.
+     * @see \Cake\Collection\CollectionInterface::min()
+     * @return mixed
+     * @deprecated
+     */
+    public function min($path, int $sort = \SORT_NUMERIC)
+    {
+        deprecationWarning(
+            '4.3.0 - Calling min() on a Query is deprecated. ' .
+            'Instead call `$query->all()->min(...)` instead.'
+        );
+
+        return $this->all()->min($path, $sort);
+    }
+
+    /**
+     * @param callable|string|null $path the path to average
+     * @see \Cake\Collection\CollectionInterface::avg()
+     * @return float|int|null
+     * @deprecated
+     */
+    public function avg($path = null)
+    {
+        deprecationwarning(
+            '4.3.0 - calling avg() on a query is deprecated. ' .
+            'instead call `$query->all()->avg(...)` instead.'
+        );
+
+        return $this->all()->avg($path);
+    }
+
+    /**
+     * @param callable|string|null $path the path to average
+     * @see \Cake\Collection\CollectionInterface::median()
+     * @return float|int|null
+     * @deprecated
+     */
+    public function median($path = null)
+    {
+        deprecationwarning(
+            '4.3.0 - calling median() on a query is deprecated. ' .
+            'instead call `$query->all()->median(...)` instead.'
+        );
+
+        return $this->all()->median($path);
+    }
+
+    /**
+     * @param callable|string $path the path to average
+     * @param int $order The \SORT_ constant for the direction you want results in.
+     * @param int $sort The \SORT_ method to use.
+     * @see \Cake\Collection\CollectionInterface::sortBy()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function sortBy($path, int $order = SORT_DESC, int $sort = \SORT_NUMERIC): CollectionInterface
+    {
+        deprecationwarning(
+            '4.3.0 - calling sortBy() on a query is deprecated. ' .
+            'instead call `$query->all()->sortBy(...)` instead.'
+        );
+
+        return $this->all()->sortBy($path, $order, $sort);
+    }
+
+    /**
+     * @param callable|string $path The path to group by
+     * @see \Cake\Collection\CollectionInterface::groupBy()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function groupBy($path): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling groupBy() on a Query is deprecated. ' .
+            'Instead call `$query->all()->groupBy(...)` instead.'
+        );
+
+        return $this->all()->groupBy($path);
+    }
+
+    /**
+     * @param string|callable $path The path to extract
+     * @see \Cake\Collection\CollectionInterface::indexBy()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function indexBy($path): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling indexBy() on a Query is deprecated. ' .
+            'Instead call `$query->all()->indexBy(...)` instead.'
+        );
+
+        return $this->all()->indexBy($path);
+    }
+
+    /**
+     * @param string|callable $path The path to count by
+     * @see \Cake\Collection\CollectionInterface::countBy()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function countBy($path): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling countBy() on a Query is deprecated. ' .
+            'Instead call `$query->all()->countBy(...)` instead.'
+        );
+
+        return $this->all()->countBy($path);
+    }
+
+    /**
+     * @param string|callable $path The path to sum
+     * @see \Cake\Collection\CollectionInterface::sumOf()
+     * @return int|float
+     * @deprecated
+     */
+    public function sumOf($path = null)
+    {
+        deprecationWarning(
+            '4.3.0 - Calling sumOf() on a Query is deprecated. ' .
+                'Instead call `$query->all()->sumOf(...)` instead.'
+        );
+
+        return $this->all()->sumOf($path);
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::shuffle()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function shuffle(): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling shuffle() on a Query is deprecated. ' .
+            'Instead call `$query->all()->shuffle(...)` instead.'
+        );
+
+        return $this->all()->shuffle();
+    }
+
+    /**
+     * @param int $length The number of samples to select
+     * @see \Cake\Collection\CollectionInterface::sample()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function sample(int $length = 10): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling sample() on a Query is deprecated. ' .
+            'Instead call `$query->all()->sample(...)` instead.'
+        );
+
+        return $this->all()->sample($length);
+    }
+
+    /**
+     * @param int $length The number of elements to take
+     * @param int $offset The offset of the first element to take.
+     * @see \Cake\Collection\CollectionInterface::take()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function take(int $length = 1, int $offset = 0): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling take() on a Query is deprecated. ' .
+            'Instead call `$query->all()->take(...)` instead.'
+        );
+
+        return $this->all()->take($length, $offset);
+    }
+
+    /**
+     * @param int $length The number of items to take.
+     * @see \Cake\Collection\CollectionInterface::takeLast()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function takeLast(int $length): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling takeLast() on a Query is deprecated. ' .
+            'Instead call `$query->all()->takeLast(...)` instead.'
+        );
+
+        return $this->all()->takeLast($length);
+    }
+
+    /**
+     * @param int $length The number of items to skip
+     * @see \Cake\Collection\CollectionInterface::skip()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function skip(int $length): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling skip() on a Query is deprecated. ' .
+            'Instead call `$query->all()->skip(...)` instead.'
+        );
+
+        return $this->all()->skip($length);
+    }
+
+    /**
+     * @param array $conditions The conditions to use.
+     * @see \Cake\Collection\CollectionInterface::match()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function match(array $conditions): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling match() on a Query is deprecated. ' .
+            'Instead call `$query->all()->match(...)` instead.'
+        );
+
+        return $this->all()->match($conditions);
+    }
+
+    /**
+     * @param array $conditions The conditions to apply
+     * @see \Cake\Collection\CollectionInterface::firstMatch()
+     * @return mixed
+     * @deprecated
+     */
+    public function firstMatch(array $conditions)
+    {
+        deprecationWarning(
+            '4.3.0 - Calling firstMatch() on a Query is deprecated. ' .
+            'Instead call `$query->all()->firstMatch(...)` instead.'
+        );
+
+        return $this->all()->firstMatch($conditions);
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::last()
+     * @deprecated
+     * @return mixed
+     */
+    public function last()
+    {
+        deprecationWarning(
+            '4.3.0 - Calling last() on a Query is deprecated. ' .
+            'Instead call `$query->all()->last(...)` instead.'
+        );
+
+        return $this->all()->last();
+    }
+
+    /**
+     * @param mixed $items The items to append
+     * @see \Cake\Collection\CollectionInterface::append()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function append($items): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling append() on a Query is deprecated. ' .
+            'Instead call `$query->all()->append(...)` instead.'
+        );
+
+        return $this->all()->append($items);
+    }
+
+    /**
+     * @param mixed $item The item to apply
+     * @param mixed $key The key to append with
+     * @see \Cake\Collection\CollectionInterface::appendItem()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function appendItem($item, $key = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling appendItem() on a Query is deprecated. ' .
+            'Instead call `$query->all()->appendItem(...)` instead.'
+        );
+
+        return $this->all()->appendItem($item, $key);
+    }
+
+    /**
+     * @param mixed $items The items to prepend.
+     * @see \Cake\Collection\CollectionInterface::prepend()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function prepend($items): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling prepend() on a Query is deprecated. ' .
+            'Instead call `$query->all()->prepend(...)` instead.'
+        );
+
+        return $this->all()->prepend($items);
+    }
+
+    /**
+     * @param mixed $item The item to prepend
+     * @param mixed $key The key to use.
+     * @see \Cake\Collection\CollectionInterface::prependItem()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function prependItem($item, $key = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling prependItem() on a Query is deprecated. ' .
+            'Instead call `$query->all()->prependItem(...)` instead.'
+        );
+
+        return $this->all()->prependItem($item, $key);
+    }
+
+    /**
+     * @param callable|string $keyPath The path for keys
+     * @param callable|string $valuePath The path for values
+     * @param callable|string|null $groupPath The path for grouping
+     * @see \Cake\Collection\CollectionInterface::combine()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function combine($keyPath, $valuePath, $groupPath = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling combine() on a Query is deprecated. ' .
+            'Instead call `$query->all()->combine(...)` instead.'
+        );
+
+        return $this->all()->combine($keyPath, $valuePath, $groupPath);
+    }
+
+    /**
+     * @param callable|string $idPath The path to ids
+     * @param callable|string $parentPath The path to parents
+     * @param string $nestingKey Key used for nesting children.
+     * @see \Cake\Collection\CollectionInterface::nest()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function nest($idPath, $parentPath, string $nestingKey = 'children'): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling nest() on a Query is deprecated. ' .
+            'Instead call `$query->all()->nest(...)` instead.'
+        );
+
+        return $this->all()->nest($idPath, $parentPath, $nestingKey);
+    }
+
+    /**
+     * @param string $path The path to insert on
+     * @param mixed $values The values to insert.
+     * @see \Cake\Collection\CollectionInterface::insert()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function insert(string $path, $values): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling insert() on a Query is deprecated. ' .
+            'Instead call `$query->all()->insert(...)` instead.'
+        );
+
+        return $this->all()->insert($path, $values);
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::toList()
+     * @return array
+     * @deprecated
+     */
+    public function toList(): array
+    {
+        deprecationWarning(
+            '4.3.0 - Calling toList() on a Query is deprecated. ' .
+            'Instead call `$query->all()->toList(...)` instead.'
+        );
+
+        return $this->all()->toList();
+    }
+
+    /**
+     * @param bool $keepKeys Whether or not keys should be kept
+     * @see \Cake\Collection\CollectionInterface::compile()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function compile(bool $keepKeys = true): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling compile() on a Query is deprecated. ' .
+            'Instead call `$query->all()->compile(...)` instead.'
+        );
+
+        return $this->all()->compile($keepKeys);
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::lazy()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function lazy(): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling lazy() on a Query is deprecated. ' .
+            'Instead call `$query->all()->lazy(...)` instead.'
+        );
+
+        return $this->all()->lazy();
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::buffered()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function buffered(): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling buffered() on a Query is deprecated. ' .
+            'Instead call `$query->all()->buffered(...)` instead.'
+        );
+
+        return $this->all()->buffered();
+    }
+
+    /**
+     * @param string|int $order The order in which to return the elements
+     * @param callable|string $nestingKey The key name under which children are nested
+     * @see \Cake\Collection\CollectionInterface::listNested()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function listNested($order = 'desc', $nestingKey = 'children'): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling listNested() on a Query is deprecated. ' .
+            'Instead call `$query->all()->listNested(...)` instead.'
+        );
+
+        return $this->all()->listNested($order, $nestingKey);
+    }
+
+    /**
+     * @param callable|array $condition the method that will receive each of the elements and
+     *   returns true when the iteration should be stopped.
+     * @see \Cake\Collection\CollectionInterface::stopWhen()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function stopWhen($condition): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling stopWhen() on a Query is deprecated. ' .
+            'Instead call `$query->all()->stopWhen(...)` instead.'
+        );
+
+        return $this->all()->stopWhen($condition);
+    }
+
+    /**
+     * @param callable|null $callback A callable function that will receive each of
+     *  items in the collection.
+     * @see \Cake\Collection\CollectionInterface::unfold()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function unfold(?callable $callback = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling unfold() on a Query is deprecated. ' .
+            'Instead call `$query->all()->unfold(...)` instead.'
+        );
+
+        return $this->all()->unfold($callback);
+    }
+
+    /**
+     * @param callable $callback A callable function that will receive each of
+     *  items in the collection.
+     * @see \Cake\Collection\CollectionInterface::through()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function through(callable $callback): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling through() on a Query is deprecated. ' .
+            'Instead call `$query->all()->through(...)` instead.'
+        );
+
+        return $this->all()->through($callback);
+    }
+
+    /**
+     * @param iterable ...$items The collections to zip.
+     * @see \Cake\Collection\CollectionInterface::zip()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function zip(iterable $items): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling zip() on a Query is deprecated. ' .
+            'Instead call `$query->all()->zip(...)` instead.'
+        );
+
+        return $this->all()->zip($items);
+    }
+
+    /**
+     * @param iterable ...$items The collections to zip.
+     * @param callable $callback The function to use for zipping the elements together.
+     * @see \Cake\Collection\CollectionInterface::zipWith()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function zipWith(iterable $items, $callback): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling zipWith() on a Query is deprecated. ' .
+            'Instead call `$query->all()->zipWith(...)` instead.'
+        );
+
+        return $this->all()->zipWith($items, $callback);
+    }
+
+    /**
+     * @param int $chunkSize The maximum size for each chunk
+     * @see \Cake\Collection\CollectionInterface::chunk()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function chunk(int $chunkSize): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling chunk() on a Query is deprecated. ' .
+            'Instead call `$query->all()->chunk(...)` instead.'
+        );
+
+        return $this->all()->chunk($chunkSize);
+    }
+
+    /**
+     * @param int $chunkSize The maximum size for each chunk
+     * @param bool $keepKeys If the keys of the array should be kept
+     * @see \Cake\Collection\CollectionInterface::chunkWithKeys()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function chunkWithKeys(int $chunkSize, bool $keepKeys = true): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling chunkWithKeys() on a Query is deprecated. ' .
+            'Instead call `$query->all()->chunkWithKeys(...)` instead.'
+        );
+
+        return $this->all()->chunkWithKeys($chunkSize, $keepKeys);
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::isEmpty()
+     * @return bool
+     * @deprecated
+     */
+    public function isEmpty(): bool
+    {
+        deprecationWarning(
+            '4.3.0 - Calling isEmpty() on a Query is deprecated. ' .
+            'Instead call `$query->all()->isEmpty(...)` instead.'
+        );
+
+        return $this->all()->isEmpty();
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::unwrap()
+     * @return \Traversable
+     * @deprecated
+     */
+    public function unwrap(): Traversable
+    {
+        deprecationWarning(
+            '4.3.0 - Calling unwrap() on a Query is deprecated. ' .
+            'Instead call `$query->all()->unwrap(...)` instead.'
+        );
+
+        return $this->all()->unwrap();
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::transpose()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function transpose(): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling transpose() on a Query is deprecated. ' .
+            'Instead call `$query->all()->transpose(...)` instead.'
+        );
+
+        return $this->all()->transpose();
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::count()
+     * @return int
+     * @deprecated
+     */
+    public function count(): int
+    {
+        deprecationWarning(
+            '4.3.0 - Calling count() on a Query is deprecated. ' .
+            'Instead call `$query->all()->count(...)` instead.'
+        );
+
+        return $this->all()->count();
+    }
+
+    /**
+     * @see \Cake\Collection\CollectionInterface::countKeys()
+     * @return int
+     * @deprecated
+     */
+    public function countKeys(): int
+    {
+        deprecationWarning(
+            '4.3.0 - Calling countKeys() on a Query is deprecated. ' .
+            'Instead call `$query->all()->countKeys(...)` instead.'
+        );
+
+        return $this->all()->countKeys();
+    }
+
+    /**
+     * @param callable|null $operation A callable that allows you to customize the product result.
+     * @param callable|null $filter A filtering callback that must return true for a result to be part
+     *   of the final results.
+     * @see \Cake\Collection\CollectionInterface::cartesianProduct()
+     * @return \Cake\Collection\CollectionInterface
+     * @deprecated
+     */
+    public function cartesianProduct(?callable $operation = null, ?callable $filter = null): CollectionInterface
+    {
+        deprecationWarning(
+            '4.3.0 - Calling cartesianProduct() on a Query is deprecated. ' .
+            'Instead call `$query->all()->cartesianProduct(...)` instead.'
+        );
+
+        return $this->all()->cartesianProduct($operation, $filter);
+    }
+
+    /**
+     * Populates or adds parts to current query clauses using an array.
+     * This is handy for passing all query clauses at once.
+     *
+     * @param array $options the options to be applied
+     * @return $this
+     */
+    abstract public function applyOptions(array $options);
+
+    /**
+     * Executes this query and returns a traversable object containing the results
+     *
+     * @return \Cake\Datasource\ResultSetInterface
+     */
+    abstract protected function _execute(): ResultSetInterface;
+
+    /**
+     * Decorates the results iterator with MapReduce routines and formatters
+     *
+     * @param \Traversable $result Original results
+     * @return \Cake\Datasource\ResultSetInterface
+     */
+    protected function _decorateResults(Traversable $result): ResultSetInterface
+    {
+        $decorator = $this->_decoratorClass();
+        foreach ($this->_mapReduce as $functions) {
+            $result = new MapReduce($result, $functions['mapper'], $functions['reducer']);
+        }
+
+        if (!empty($this->_mapReduce)) {
+            $result = new $decorator($result);
+        }
+
+        foreach ($this->_formatters as $formatter) {
+            $result = $formatter($result, $this);
+        }
+
+        if (!empty($this->_formatters) && !($result instanceof $decorator)) {
+            $result = new $decorator($result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the name of the class to be used for decorating results
+     *
+     * @return string
+     * @psalm-return class-string<\Cake\Datasource\ResultSetInterface>
+     */
+    protected function _decoratorClass(): string
+    {
+        return ResultSetDecorator::class;
+    }
+}
diff --git a/vendor/cakephp/datasource/README.md b/vendor/cakephp/datasource/README.md
new file mode 100755
index 0000000..38626ea
--- /dev/null
+++ b/vendor/cakephp/datasource/README.md
@@ -0,0 +1,82 @@
+[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/datasource.svg?style=flat-square)](https://packagist.org/packages/cakephp/datasource)
+[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE.txt)
+
+# CakePHP Datasource Library
+
+This library contains interfaces for implementing Repositories and Entities using any data source,
+a class for managing connections to datasources and traits to help you quickly implement the
+interfaces provided by this package.
+
+## Repositories
+
+A repository is a class capable of interfacing with a data source using operations such as
+`find`, `save` and  `delete` by using intermediate query objects for expressing commands to
+the data store and returning Entities as the single result unit of such system.
+
+In the case of a Relational database, a Repository would be a `Table`, which can be return single
+or multiple `Entity` objects by using a `Query`.
+
+This library exposes the following interfaces for creating a system that implements the
+repository pattern and is compatible with the CakePHP framework:
+
+* `RepositoryInterface` - Describes the methods for a base repository class.
+* `EntityInterface` - Describes the methods for a single result object.
+* `ResultSetInterface` - Represents the idea of a collection of Entities as a result of a query.
+
+Additionally, this package provides a few traits and classes you can use in your own implementations:
+
+* `EntityTrait` - Contains the default implementation for the `EntityInterface`.
+* `QueryTrait` - Exposes the methods for creating a query object capable of returning decoratable collections.
+* `ResultSetDecorator` - Decorates any traversable object, so it complies with `ResultSetInterface`.
+
+
+## Connections
+
+This library contains a couple of utility classes meant to create and manage
+connection objects. Connections are typically used in repositories for
+interfacing with the actual data source system.
+
+The `ConnectionManager` class acts as a registry to access database connections
+your application has. It provides a place that other objects can get references
+to existing connections. Creating connections with the `ConnectionManager` is
+easy:
+
+```php
+use Cake\Datasource\ConnectionManager;
+
+ConnectionManager::config('connection-one', [
+    'className' => 'MyApp\Connections\CustomConnection',
+    'param1' => 'value',
+    'param2' => 'another value'
+]);
+
+ConnectionManager::config('connection-two', [
+    'className' => 'MyApp\Connections\CustomConnection',
+    'param1' => 'different value',
+    'param2' => 'another value'
+]);
+```
+
+When requested, the `ConnectionManager` will instantiate
+`MyApp\Connections\CustomConnection` by passing `param1` and `param2` inside an
+array as the first argument of the constructor.
+
+Once configured connections can be fetched using `ConnectionManager::get()`.
+This method will construct and load a connection if it has not been built
+before, or return the existing known connection:
+
+```php
+use Cake\Datasource\ConnectionManager;
+$conn = ConnectionManager::get('master');
+```
+
+It is also possible to store connection objects by passing the instance directly to the manager:
+
+```php
+use Cake\Datasource\ConnectionManager;
+$conn = ConnectionManager::config('other', $connectionInstance);
+```
+
+## Documentation
+
+Please make sure you check the [official API documentation](https://api.cakephp.org/4.x/namespace-Cake.Datasource.html)
diff --git a/vendor/cakephp/datasource/RepositoryInterface.php b/vendor/cakephp/datasource/RepositoryInterface.php
new file mode 100755
index 0000000..93a0041
--- /dev/null
+++ b/vendor/cakephp/datasource/RepositoryInterface.php
@@ -0,0 +1,252 @@
+ $options An array that will be passed to Query::applyOptions()
+     * @return \Cake\Datasource\QueryInterface
+     */
+    public function find(string $type = 'all', array $options = []);
+
+    /**
+     * Returns a single record after finding it by its primary key, if no record is
+     * found this method throws an exception.
+     *
+     * ### Example:
+     *
+     * ```
+     * $id = 10;
+     * $article = $articles->get($id);
+     *
+     * $article = $articles->get($id, ['contain' => ['Comments]]);
+     * ```
+     *
+     * @param mixed $primaryKey primary key value to find
+     * @param array $options options accepted by `Table::find()`
+     * @throws \Cake\Datasource\Exception\RecordNotFoundException if the record with such id
+     * could not be found
+     * @return \Cake\Datasource\EntityInterface
+     * @see \Cake\Datasource\RepositoryInterface::find()
+     */
+    public function get($primaryKey, array $options = []): EntityInterface;
+
+    /**
+     * Creates a new Query instance for this repository
+     *
+     * @return \Cake\Datasource\QueryInterface
+     */
+    public function query();
+
+    /**
+     * Update all matching records.
+     *
+     * Sets the $fields to the provided values based on $conditions.
+     * This method will *not* trigger beforeSave/afterSave events. If you need those
+     * first load a collection of records and update them.
+     *
+     * @param \Cake\Database\Expression\QueryExpression|\Closure|array|string $fields A hash of field => new value.
+     * @param mixed $conditions Conditions to be used, accepts anything Query::where()
+     * can take.
+     * @return int Count Returns the affected rows.
+     */
+    public function updateAll($fields, $conditions): int;
+
+    /**
+     * Deletes all records matching the provided conditions.
+     *
+     * This method will *not* trigger beforeDelete/afterDelete events. If you
+     * need those first load a collection of records and delete them.
+     *
+     * This method will *not* execute on associations' `cascade` attribute. You should
+     * use database foreign keys + ON CASCADE rules if you need cascading deletes combined
+     * with this method.
+     *
+     * @param mixed $conditions Conditions to be used, accepts anything Query::where()
+     * can take.
+     * @return int Returns the number of affected rows.
+     * @see \Cake\Datasource\RepositoryInterface::delete()
+     */
+    public function deleteAll($conditions): int;
+
+    /**
+     * Returns true if there is any record in this repository matching the specified
+     * conditions.
+     *
+     * @param array $conditions list of conditions to pass to the query
+     * @return bool
+     */
+    public function exists($conditions): bool;
+
+    /**
+     * Persists an entity based on the fields that are marked as dirty and
+     * returns the same entity after a successful save or false in case
+     * of any error.
+     *
+     * @param \Cake\Datasource\EntityInterface $entity the entity to be saved
+     * @param \ArrayAccess|array $options The options to use when saving.
+     * @return \Cake\Datasource\EntityInterface|false
+     */
+    public function save(EntityInterface $entity, $options = []);
+
+    /**
+     * Delete a single entity.
+     *
+     * Deletes an entity and possibly related associations from the database
+     * based on the 'dependent' option used when defining the association.
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to remove.
+     * @param \ArrayAccess|array $options The options for the delete.
+     * @return bool success
+     */
+    public function delete(EntityInterface $entity, $options = []): bool;
+
+    /**
+     * This creates a new entity object.
+     *
+     * Careful: This does not trigger any field validation.
+     * This entity can be persisted without validation error as empty record.
+     * Always patch in required fields before saving.
+     *
+     * @return \Cake\Datasource\EntityInterface
+     */
+    public function newEmptyEntity(): EntityInterface;
+
+    /**
+     * Create a new entity + associated entities from an array.
+     *
+     * This is most useful when hydrating request data back into entities.
+     * For example, in your controller code:
+     *
+     * ```
+     * $article = $this->Articles->newEntity($this->request->getData());
+     * ```
+     *
+     * The hydrated entity will correctly do an insert/update based
+     * on the primary key data existing in the database when the entity
+     * is saved. Until the entity is saved, it will be a detached record.
+     *
+     * @param array $data The data to build an entity with.
+     * @param array $options A list of options for the object hydration.
+     * @return \Cake\Datasource\EntityInterface
+     */
+    public function newEntity(array $data, array $options = []): EntityInterface;
+
+    /**
+     * Create a list of entities + associated entities from an array.
+     *
+     * This is most useful when hydrating request data back into entities.
+     * For example, in your controller code:
+     *
+     * ```
+     * $articles = $this->Articles->newEntities($this->request->getData());
+     * ```
+     *
+     * The hydrated entities can then be iterated and saved.
+     *
+     * @param array $data The data to build an entity with.
+     * @param array $options A list of options for the objects hydration.
+     * @return array<\Cake\Datasource\EntityInterface> An array of hydrated records.
+     */
+    public function newEntities(array $data, array $options = []): array;
+
+    /**
+     * Merges the passed `$data` into `$entity` respecting the accessible
+     * fields configured on the entity. Returns the same entity after being
+     * altered.
+     *
+     * This is most useful when editing an existing entity using request data:
+     *
+     * ```
+     * $article = $this->Articles->patchEntity($article, $this->request->getData());
+     * ```
+     *
+     * @param \Cake\Datasource\EntityInterface $entity the entity that will get the
+     * data merged in
+     * @param array $data key value list of fields to be merged into the entity
+     * @param array $options A list of options for the object hydration.
+     * @return \Cake\Datasource\EntityInterface
+     */
+    public function patchEntity(EntityInterface $entity, array $data, array $options = []): EntityInterface;
+
+    /**
+     * Merges each of the elements passed in `$data` into the entities
+     * found in `$entities` respecting the accessible fields configured on the entities.
+     * Merging is done by matching the primary key in each of the elements in `$data`
+     * and `$entities`.
+     *
+     * This is most useful when editing a list of existing entities using request data:
+     *
+     * ```
+     * $article = $this->Articles->patchEntities($articles, $this->request->getData());
+     * ```
+     *
+     * @param iterable<\Cake\Datasource\EntityInterface> $entities the entities that will get the
+     * data merged in
+     * @param array $data list of arrays to be merged into the entities
+     * @param array $options A list of options for the objects hydration.
+     * @return array<\Cake\Datasource\EntityInterface>
+     */
+    public function patchEntities(iterable $entities, array $data, array $options = []): array;
+}
diff --git a/vendor/cakephp/datasource/ResultSetDecorator.php b/vendor/cakephp/datasource/ResultSetDecorator.php
new file mode 100755
index 0000000..85d98b6
--- /dev/null
+++ b/vendor/cakephp/datasource/ResultSetDecorator.php
@@ -0,0 +1,61 @@
+
+ */
+class ResultSetDecorator extends Collection implements ResultSetInterface
+{
+    /**
+     * Make this object countable.
+     *
+     * Part of the Countable interface. Calling this method
+     * will convert the underlying traversable object into an array and
+     * get the count of the underlying data.
+     *
+     * @return int
+     */
+    public function count(): int
+    {
+        $iterator = $this->getInnerIterator();
+        if ($iterator instanceof Countable) {
+            return $iterator->count();
+        }
+
+        return count($this->toArray());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function __debugInfo(): array
+    {
+        $parentInfo = parent::__debugInfo();
+        $limit = Configure::read('App.ResultSetDebugLimit', 10);
+
+        return array_merge($parentInfo, ['items' => $this->take($limit)->toArray()]);
+    }
+}
diff --git a/vendor/cakephp/datasource/ResultSetInterface.php b/vendor/cakephp/datasource/ResultSetInterface.php
new file mode 100755
index 0000000..c193fac
--- /dev/null
+++ b/vendor/cakephp/datasource/ResultSetInterface.php
@@ -0,0 +1,30 @@
+
+     */
+    protected $options = [];
+
+    /**
+     * Rule callable
+     *
+     * @var callable
+     */
+    protected $rule;
+
+    /**
+     * Constructor
+     *
+     * ### Options
+     *
+     * - `errorField` The field errors should be set onto.
+     * - `message` The error message.
+     *
+     * Individual rules may have additional options that can be
+     * set here. Any options will be passed into the rule as part of the
+     * rule $scope.
+     *
+     * @param callable $rule The rule to be invoked.
+     * @param ?string $name The name of the rule. Used in error messages.
+     * @param array $options The options for the rule. See above.
+     */
+    public function __construct(callable $rule, ?string $name, array $options = [])
+    {
+        $this->rule = $rule;
+        $this->name = $name;
+        $this->options = $options;
+    }
+
+    /**
+     * Set options for the rule invocation.
+     *
+     * Old options will be merged with the new ones.
+     *
+     * @param array $options The options to set.
+     * @return $this
+     */
+    public function setOptions(array $options)
+    {
+        $this->options = $options + $this->options;
+
+        return $this;
+    }
+
+    /**
+     * Set the rule name.
+     *
+     * Only truthy names will be set.
+     *
+     * @param string|null $name The name to set.
+     * @return $this
+     */
+    public function setName(?string $name)
+    {
+        if ($name) {
+            $this->name = $name;
+        }
+
+        return $this;
+    }
+
+    /**
+     * Invoke the rule.
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity the rule
+     *   should apply to.
+     * @param array $scope The rule's scope/options.
+     * @return bool Whether the rule passed.
+     */
+    public function __invoke(EntityInterface $entity, array $scope): bool
+    {
+        $rule = $this->rule;
+        $pass = $rule($entity, $this->options + $scope);
+        if ($pass === true || empty($this->options['errorField'])) {
+            return $pass === true;
+        }
+
+        $message = $this->options['message'] ?? 'invalid';
+        if (is_string($pass)) {
+            $message = $pass;
+        }
+        if ($this->name) {
+            $message = [$this->name => $message];
+        } else {
+            $message = [$message];
+        }
+        $errorField = $this->options['errorField'];
+        $entity->setError($errorField, $message);
+
+        if ($entity instanceof InvalidPropertyInterface && isset($entity->{$errorField})) {
+            $invalidValue = $entity->{$errorField};
+            $entity->setInvalidField($errorField, $invalidValue);
+        }
+
+        /** @phpstan-ignore-next-line */
+        return $pass === true;
+    }
+}
diff --git a/vendor/cakephp/datasource/RulesAwareTrait.php b/vendor/cakephp/datasource/RulesAwareTrait.php
new file mode 100755
index 0000000..5c01614
--- /dev/null
+++ b/vendor/cakephp/datasource/RulesAwareTrait.php
@@ -0,0 +1,120 @@
+rulesChecker();
+        $options = $options ?: new ArrayObject();
+        $options = is_array($options) ? new ArrayObject($options) : $options;
+        $hasEvents = ($this instanceof EventDispatcherInterface);
+
+        if ($hasEvents) {
+            $event = $this->dispatchEvent(
+                'Model.beforeRules',
+                compact('entity', 'options', 'operation')
+            );
+            if ($event->isStopped()) {
+                return $event->getResult();
+            }
+        }
+
+        $result = $rules->check($entity, $operation, $options->getArrayCopy());
+
+        if ($hasEvents) {
+            $event = $this->dispatchEvent(
+                'Model.afterRules',
+                compact('entity', 'options', 'result', 'operation')
+            );
+
+            if ($event->isStopped()) {
+                return $event->getResult();
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the RulesChecker for this instance.
+     *
+     * A RulesChecker object is used to test an entity for validity
+     * on rules that may involve complex logic or data that
+     * needs to be fetched from relevant datasources.
+     *
+     * @see \Cake\Datasource\RulesChecker
+     * @return \Cake\Datasource\RulesChecker
+     */
+    public function rulesChecker(): RulesChecker
+    {
+        if ($this->_rulesChecker !== null) {
+            return $this->_rulesChecker;
+        }
+        /** @psalm-var class-string<\Cake\Datasource\RulesChecker> $class */
+        $class = defined('static::RULES_CLASS') ? static::RULES_CLASS : RulesChecker::class;
+        /** @psalm-suppress ArgumentTypeCoercion */
+        $this->_rulesChecker = $this->buildRules(new $class(['repository' => $this]));
+        $this->dispatchEvent('Model.buildRules', ['rules' => $this->_rulesChecker]);
+
+        return $this->_rulesChecker;
+    }
+
+    /**
+     * Returns a RulesChecker object after modifying the one that was supplied.
+     *
+     * Subclasses should override this method in order to initialize the rules to be applied to
+     * entities saved by this instance.
+     *
+     * @param \Cake\Datasource\RulesChecker $rules The rules object to be modified.
+     * @return \Cake\Datasource\RulesChecker
+     */
+    public function buildRules(RulesChecker $rules): RulesChecker
+    {
+        return $rules;
+    }
+}
diff --git a/vendor/cakephp/datasource/RulesChecker.php b/vendor/cakephp/datasource/RulesChecker.php
new file mode 100755
index 0000000..c523eba
--- /dev/null
+++ b/vendor/cakephp/datasource/RulesChecker.php
@@ -0,0 +1,330 @@
+
+     */
+    protected $_rules = [];
+
+    /**
+     * The list of rules to check during create operations
+     *
+     * @var array<\Cake\Datasource\RuleInvoker>
+     */
+    protected $_createRules = [];
+
+    /**
+     * The list of rules to check during update operations
+     *
+     * @var array<\Cake\Datasource\RuleInvoker>
+     */
+    protected $_updateRules = [];
+
+    /**
+     * The list of rules to check during delete operations
+     *
+     * @var array<\Cake\Datasource\RuleInvoker>
+     */
+    protected $_deleteRules = [];
+
+    /**
+     * List of options to pass to every callable rule
+     *
+     * @var array
+     */
+    protected $_options = [];
+
+    /**
+     * Whether to use I18n functions for translating default error messages
+     *
+     * @var bool
+     */
+    protected $_useI18n = false;
+
+    /**
+     * Constructor. Takes the options to be passed to all rules.
+     *
+     * @param array $options The options to pass to every rule
+     */
+    public function __construct(array $options = [])
+    {
+        $this->_options = $options;
+        $this->_useI18n = function_exists('\Cake\I18n\__d');
+    }
+
+    /**
+     * Adds a rule that will be applied to the entity both on create and update
+     * operations.
+     *
+     * ### Options
+     *
+     * The options array accept the following special keys:
+     *
+     * - `errorField`: The name of the entity field that will be marked as invalid
+     *    if the rule does not pass.
+     * - `message`: The error message to set to `errorField` if the rule does not pass.
+     *
+     * @param callable $rule A callable function or object that will return whether
+     * the entity is valid or not.
+     * @param array|string|null $name The alias for a rule, or an array of options.
+     * @param array $options List of extra options to pass to the rule callable as
+     * second argument.
+     * @return $this
+     */
+    public function add(callable $rule, $name = null, array $options = [])
+    {
+        $this->_rules[] = $this->_addError($rule, $name, $options);
+
+        return $this;
+    }
+
+    /**
+     * Adds a rule that will be applied to the entity on create operations.
+     *
+     * ### Options
+     *
+     * The options array accept the following special keys:
+     *
+     * - `errorField`: The name of the entity field that will be marked as invalid
+     *    if the rule does not pass.
+     * - `message`: The error message to set to `errorField` if the rule does not pass.
+     *
+     * @param callable $rule A callable function or object that will return whether
+     * the entity is valid or not.
+     * @param array|string|null $name The alias for a rule or an array of options.
+     * @param array $options List of extra options to pass to the rule callable as
+     * second argument.
+     * @return $this
+     */
+    public function addCreate(callable $rule, $name = null, array $options = [])
+    {
+        $this->_createRules[] = $this->_addError($rule, $name, $options);
+
+        return $this;
+    }
+
+    /**
+     * Adds a rule that will be applied to the entity on update operations.
+     *
+     * ### Options
+     *
+     * The options array accept the following special keys:
+     *
+     * - `errorField`: The name of the entity field that will be marked as invalid
+     *    if the rule does not pass.
+     * - `message`: The error message to set to `errorField` if the rule does not pass.
+     *
+     * @param callable $rule A callable function or object that will return whether
+     * the entity is valid or not.
+     * @param array|string|null $name The alias for a rule, or an array of options.
+     * @param array $options List of extra options to pass to the rule callable as
+     * second argument.
+     * @return $this
+     */
+    public function addUpdate(callable $rule, $name = null, array $options = [])
+    {
+        $this->_updateRules[] = $this->_addError($rule, $name, $options);
+
+        return $this;
+    }
+
+    /**
+     * Adds a rule that will be applied to the entity on delete operations.
+     *
+     * ### Options
+     *
+     * The options array accept the following special keys:
+     *
+     * - `errorField`: The name of the entity field that will be marked as invalid
+     *    if the rule does not pass.
+     * - `message`: The error message to set to `errorField` if the rule does not pass.
+     *
+     * @param callable $rule A callable function or object that will return whether
+     * the entity is valid or not.
+     * @param array|string|null $name The alias for a rule, or an array of options.
+     * @param array $options List of extra options to pass to the rule callable as
+     * second argument.
+     * @return $this
+     */
+    public function addDelete(callable $rule, $name = null, array $options = [])
+    {
+        $this->_deleteRules[] = $this->_addError($rule, $name, $options);
+
+        return $this;
+    }
+
+    /**
+     * Runs each of the rules by passing the provided entity and returns true if all
+     * of them pass. The rules to be applied are depended on the $mode parameter which
+     * can only be RulesChecker::CREATE, RulesChecker::UPDATE or RulesChecker::DELETE
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to check for validity.
+     * @param string $mode Either 'create, 'update' or 'delete'.
+     * @param array $options Extra options to pass to checker functions.
+     * @return bool
+     * @throws \InvalidArgumentException if an invalid mode is passed.
+     */
+    public function check(EntityInterface $entity, string $mode, array $options = []): bool
+    {
+        if ($mode === self::CREATE) {
+            return $this->checkCreate($entity, $options);
+        }
+
+        if ($mode === self::UPDATE) {
+            return $this->checkUpdate($entity, $options);
+        }
+
+        if ($mode === self::DELETE) {
+            return $this->checkDelete($entity, $options);
+        }
+
+        throw new InvalidArgumentException('Wrong checking mode: ' . $mode);
+    }
+
+    /**
+     * Runs each of the rules by passing the provided entity and returns true if all
+     * of them pass. The rules selected will be only those specified to be run on 'create'
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to check for validity.
+     * @param array $options Extra options to pass to checker functions.
+     * @return bool
+     */
+    public function checkCreate(EntityInterface $entity, array $options = []): bool
+    {
+        return $this->_checkRules($entity, $options, array_merge($this->_rules, $this->_createRules));
+    }
+
+    /**
+     * Runs each of the rules by passing the provided entity and returns true if all
+     * of them pass. The rules selected will be only those specified to be run on 'update'
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to check for validity.
+     * @param array $options Extra options to pass to checker functions.
+     * @return bool
+     */
+    public function checkUpdate(EntityInterface $entity, array $options = []): bool
+    {
+        return $this->_checkRules($entity, $options, array_merge($this->_rules, $this->_updateRules));
+    }
+
+    /**
+     * Runs each of the rules by passing the provided entity and returns true if all
+     * of them pass. The rules selected will be only those specified to be run on 'delete'
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to check for validity.
+     * @param array $options Extra options to pass to checker functions.
+     * @return bool
+     */
+    public function checkDelete(EntityInterface $entity, array $options = []): bool
+    {
+        return $this->_checkRules($entity, $options, $this->_deleteRules);
+    }
+
+    /**
+     * Used by top level functions checkDelete, checkCreate and checkUpdate, this function
+     * iterates an array containing the rules to be checked and checks them all.
+     *
+     * @param \Cake\Datasource\EntityInterface $entity The entity to check for validity.
+     * @param array $options Extra options to pass to checker functions.
+     * @param array<\Cake\Datasource\RuleInvoker> $rules The list of rules that must be checked.
+     * @return bool
+     */
+    protected function _checkRules(EntityInterface $entity, array $options = [], array $rules = []): bool
+    {
+        $success = true;
+        $options += $this->_options;
+        foreach ($rules as $rule) {
+            $success = $rule($entity, $options) && $success;
+        }
+
+        return $success;
+    }
+
+    /**
+     * Utility method for decorating any callable so that if it returns false, the correct
+     * property in the entity is marked as invalid.
+     *
+     * @param callable|\Cake\Datasource\RuleInvoker $rule The rule to decorate
+     * @param array|string|null $name The alias for a rule or an array of options
+     * @param array $options The options containing the error message and field.
+     * @return \Cake\Datasource\RuleInvoker
+     */
+    protected function _addError(callable $rule, $name = null, array $options = []): RuleInvoker
+    {
+        if (is_array($name)) {
+            $options = $name;
+            $name = null;
+        }
+
+        if (!($rule instanceof RuleInvoker)) {
+            $rule = new RuleInvoker($rule, $name, $options);
+        } else {
+            $rule->setOptions($options)->setName($name);
+        }
+
+        return $rule;
+    }
+}
diff --git a/vendor/cakephp/datasource/SchemaInterface.php b/vendor/cakephp/datasource/SchemaInterface.php
new file mode 100755
index 0000000..08ab8be
--- /dev/null
+++ b/vendor/cakephp/datasource/SchemaInterface.php
@@ -0,0 +1,166 @@
+|string $attrs The attributes for the column or the type name.
+     * @return $this
+     */
+    public function addColumn(string $name, $attrs);
+
+    /**
+     * Get column data in the table.
+     *
+     * @param string $name The column name.
+     * @return array|null Column data or null.
+     */
+    public function getColumn(string $name): ?array;
+
+    /**
+     * Returns true if a column exists in the schema.
+     *
+     * @param string $name Column name.
+     * @return bool
+     */
+    public function hasColumn(string $name): bool;
+
+    /**
+     * Remove a column from the table schema.
+     *
+     * If the column is not defined in the table, no error will be raised.
+     *
+     * @param string $name The name of the column
+     * @return $this
+     */
+    public function removeColumn(string $name);
+
+    /**
+     * Get the column names in the table.
+     *
+     * @return array
+     */
+    public function columns(): array;
+
+    /**
+     * Returns column type or null if a column does not exist.
+     *
+     * @param string $name The column to get the type of.
+     * @return string|null
+     */
+    public function getColumnType(string $name): ?string;
+
+    /**
+     * Sets the type of a column.
+     *
+     * @param string $name The column to set the type of.
+     * @param string $type The type to set the column to.
+     * @return $this
+     */
+    public function setColumnType(string $name, string $type);
+
+    /**
+     * Returns the base type name for the provided column.
+     * This represent the database type a more complex class is
+     * based upon.
+     *
+     * @param string $column The column name to get the base type from
+     * @return string|null The base type name
+     */
+    public function baseColumnType(string $column): ?string;
+
+    /**
+     * Check whether a field is nullable
+     *
+     * Missing columns are nullable.
+     *
+     * @param string $name The column to get the type of.
+     * @return bool Whether the field is nullable.
+     */
+    public function isNullable(string $name): bool;
+
+    /**
+     * Returns an array where the keys are the column names in the schema
+     * and the values the database type they have.
+     *
+     * @return array
+     */
+    public function typeMap(): array;
+
+    /**
+     * Get a hash of columns and their default values.
+     *
+     * @return array
+     */
+    public function defaultValues(): array;
+
+    /**
+     * Sets the options for a table.
+     *
+     * Table options allow you to set platform specific table level options.
+     * For example the engine type in MySQL.
+     *
+     * @param array $options The options to set, or null to read options.
+     * @return $this
+     */
+    public function setOptions(array $options);
+
+    /**
+     * Gets the options for a table.
+     *
+     * Table options allow you to set platform specific table level options.
+     * For example the engine type in MySQL.
+     *
+     * @return array An array of options.
+     */
+    public function getOptions(): array;
+}
diff --git a/vendor/cakephp/datasource/SimplePaginator.php b/vendor/cakephp/datasource/SimplePaginator.php
new file mode 100755
index 0000000..134b0bd
--- /dev/null
+++ b/vendor/cakephp/datasource/SimplePaginator.php
@@ -0,0 +1,10 @@
+=7.4.0",
+        "cakephp/core": "^4.0",
+        "psr/log": "^1.0 || ^2.0",
+        "psr/simple-cache": "^1.0 || ^2.0"
+    },
+    "suggest": {
+        "cakephp/utility": "If you decide to use EntityTrait.",
+        "cakephp/collection": "If you decide to use ResultSetInterface.",
+        "cakephp/cache": "If you decide to use Query caching."
+    },
+    "autoload": {
+        "psr-4": {
+            "Cake\\Datasource\\": "."
+        }
+    }
+}
diff --git a/vendor/cakephp/utility/CookieCryptTrait.php b/vendor/cakephp/utility/CookieCryptTrait.php
new file mode 100755
index 0000000..a57bfc0
--- /dev/null
+++ b/vendor/cakephp/utility/CookieCryptTrait.php
@@ -0,0 +1,192 @@
+
+     */
+    protected $_validCiphers = ['aes'];
+
+    /**
+     * Returns the encryption key to be used.
+     *
+     * @return string
+     */
+    abstract protected function _getCookieEncryptionKey(): string;
+
+    /**
+     * Encrypts $value using public $type method in Security class
+     *
+     * @param array|string $value Value to encrypt
+     * @param string|false $encrypt Encryption mode to use. False
+     *   disabled encryption.
+     * @param string|null $key Used as the security salt if specified.
+     * @return string Encoded values
+     */
+    protected function _encrypt($value, $encrypt, ?string $key = null): string
+    {
+        if (is_array($value)) {
+            $value = $this->_implode($value);
+        }
+        if ($encrypt === false) {
+            return $value;
+        }
+        $this->_checkCipher($encrypt);
+        $prefix = 'Q2FrZQ==.';
+        $cipher = '';
+        if ($key === null) {
+            $key = $this->_getCookieEncryptionKey();
+        }
+        if ($encrypt === 'aes') {
+            $cipher = Security::encrypt($value, $key);
+        }
+
+        return $prefix . base64_encode($cipher);
+    }
+
+    /**
+     * Helper method for validating encryption cipher names.
+     *
+     * @param string $encrypt The cipher name.
+     * @return void
+     * @throws \RuntimeException When an invalid cipher is provided.
+     */
+    protected function _checkCipher(string $encrypt): void
+    {
+        if (!in_array($encrypt, $this->_validCiphers, true)) {
+            $msg = sprintf(
+                'Invalid encryption cipher. Must be one of %s or false.',
+                implode(', ', $this->_validCiphers)
+            );
+            throw new RuntimeException($msg);
+        }
+    }
+
+    /**
+     * Decrypts $value using public $type method in Security class
+     *
+     * @param array|string $values Values to decrypt
+     * @param string|false $mode Encryption mode
+     * @param string|null $key Used as the security salt if specified.
+     * @return array|string Decrypted values
+     */
+    protected function _decrypt($values, $mode, ?string $key = null)
+    {
+        if (is_string($values)) {
+            return $this->_decode($values, $mode, $key);
+        }
+
+        $decrypted = [];
+        foreach ($values as $name => $value) {
+            $decrypted[$name] = $this->_decode($value, $mode, $key);
+        }
+
+        return $decrypted;
+    }
+
+    /**
+     * Decodes and decrypts a single value.
+     *
+     * @param string $value The value to decode & decrypt.
+     * @param string|false $encrypt The encryption cipher to use.
+     * @param string|null $key Used as the security salt if specified.
+     * @return array|string Decoded values.
+     */
+    protected function _decode(string $value, $encrypt, ?string $key)
+    {
+        if (!$encrypt) {
+            return $this->_explode($value);
+        }
+        $this->_checkCipher($encrypt);
+        $prefix = 'Q2FrZQ==.';
+        $prefixLength = strlen($prefix);
+
+        if (strncmp($value, $prefix, $prefixLength) !== 0) {
+            return '';
+        }
+
+        $value = base64_decode(substr($value, $prefixLength), true);
+
+        if ($value === false || $value === '') {
+            return '';
+        }
+
+        if ($key === null) {
+            $key = $this->_getCookieEncryptionKey();
+        }
+        if ($encrypt === 'aes') {
+            $value = Security::decrypt($value, $key);
+        }
+
+        if ($value === null) {
+            return '';
+        }
+
+        return $this->_explode($value);
+    }
+
+    /**
+     * Implode method to keep keys are multidimensional arrays
+     *
+     * @param array $array Map of key and values
+     * @return string A JSON encoded string.
+     */
+    protected function _implode(array $array): string
+    {
+        return json_encode($array);
+    }
+
+    /**
+     * Explode method to return array from string set in CookieComponent::_implode()
+     * Maintains reading backwards compatibility with 1.x CookieComponent::_implode().
+     *
+     * @param string $string A string containing JSON encoded data, or a bare string.
+     * @return array|string Map of key and values
+     */
+    protected function _explode(string $string)
+    {
+        $first = substr($string, 0, 1);
+        if ($first === '{' || $first === '[') {
+            $ret = json_decode($string, true);
+
+            return $ret ?? $string;
+        }
+        $array = [];
+        foreach (explode(',', $string) as $pair) {
+            $key = explode('|', $pair);
+            if (!isset($key[1])) {
+                return $key[0];
+            }
+            $array[$key[0]] = $key[1];
+        }
+
+        return $array;
+    }
+}
diff --git a/vendor/cakephp/utility/Crypto/OpenSsl.php b/vendor/cakephp/utility/Crypto/OpenSsl.php
new file mode 100755
index 0000000..99590d3
--- /dev/null
+++ b/vendor/cakephp/utility/Crypto/OpenSsl.php
@@ -0,0 +1,79 @@
+|string|int|null $path The path being searched for. Either a dot
+     *   separated string, or an array of path segments.
+     * @param mixed $default The return value when the path does not exist
+     * @throws \InvalidArgumentException
+     * @return mixed The value fetched from the array, or null.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::get
+     */
+    public static function get($data, $path, $default = null)
+    {
+        if (!(is_array($data) || $data instanceof ArrayAccess)) {
+            throw new InvalidArgumentException(
+                'Invalid data type, must be an array or \ArrayAccess instance.'
+            );
+        }
+
+        if (empty($data) || $path === null) {
+            return $default;
+        }
+
+        if (is_string($path) || is_numeric($path)) {
+            $parts = explode('.', (string)$path);
+        } else {
+            if (!is_array($path)) {
+                throw new InvalidArgumentException(sprintf(
+                    'Invalid Parameter %s, should be dot separated path or array.',
+                    $path
+                ));
+            }
+
+            $parts = $path;
+        }
+
+        switch (count($parts)) {
+            case 1:
+                return $data[$parts[0]] ?? $default;
+            case 2:
+                return $data[$parts[0]][$parts[1]] ?? $default;
+            case 3:
+                return $data[$parts[0]][$parts[1]][$parts[2]] ?? $default;
+            default:
+                foreach ($parts as $key) {
+                    if ((is_array($data) || $data instanceof ArrayAccess) && isset($data[$key])) {
+                        $data = $data[$key];
+                    } else {
+                        return $default;
+                    }
+                }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Gets the values from an array matching the $path expression.
+     * The path expression is a dot separated expression, that can contain a set
+     * of patterns and expressions:
+     *
+     * - `{n}` Matches any numeric key, or integer.
+     * - `{s}` Matches any string key.
+     * - `{*}` Matches any value.
+     * - `Foo` Matches any key with the exact same value.
+     *
+     * There are a number of attribute operators:
+     *
+     *  - `=`, `!=` Equality.
+     *  - `>`, `<`, `>=`, `<=` Value comparison.
+     *  - `=/.../` Regular expression pattern match.
+     *
+     * Given a set of User array data, from a `$usersTable->find('all')` call:
+     *
+     * - `1.User.name` Get the name of the user at index 1.
+     * - `{n}.User.name` Get the name of every user in the set of users.
+     * - `{n}.User[id].name` Get the name of every user with an id key.
+     * - `{n}.User[id>=2].name` Get the name of every user with an id key greater than or equal to 2.
+     * - `{n}.User[username=/^paul/]` Get User elements with username matching `^paul`.
+     * - `{n}.User[id=1].name` Get the Users name with id matching `1`.
+     *
+     * @param \ArrayAccess|array $data The data to extract from.
+     * @param string $path The path to extract.
+     * @return \ArrayAccess|array An array of the extracted values. Returns an empty array
+     *   if there are no matches.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::extract
+     */
+    public static function extract($data, string $path)
+    {
+        if (!(is_array($data) || $data instanceof ArrayAccess)) {
+            throw new InvalidArgumentException(
+                'Invalid data type, must be an array or \ArrayAccess instance.'
+            );
+        }
+
+        if (empty($path)) {
+            return $data;
+        }
+
+        // Simple paths.
+        if (!preg_match('/[{\[]/', $path)) {
+            $data = static::get($data, $path);
+            if ($data !== null && !(is_array($data) || $data instanceof ArrayAccess)) {
+                return [$data];
+            }
+
+            return $data !== null ? (array)$data : [];
+        }
+
+        if (strpos($path, '[') === false) {
+            $tokens = explode('.', $path);
+        } else {
+            $tokens = Text::tokenize($path, '.', '[', ']');
+        }
+
+        $_key = '__set_item__';
+
+        $context = [$_key => [$data]];
+
+        foreach ($tokens as $token) {
+            $next = [];
+
+            [$token, $conditions] = self::_splitConditions($token);
+
+            foreach ($context[$_key] as $item) {
+                if (is_object($item) && method_exists($item, 'toArray')) {
+                    /** @var \Cake\Datasource\EntityInterface $item */
+                    $item = $item->toArray();
+                }
+                foreach ((array)$item as $k => $v) {
+                    if (static::_matchToken($k, $token)) {
+                        $next[] = $v;
+                    }
+                }
+            }
+
+            // Filter for attributes.
+            if ($conditions) {
+                $filter = [];
+                foreach ($next as $item) {
+                    if (
+                        (
+                            is_array($item) ||
+                            $item instanceof ArrayAccess
+                        ) &&
+                        static::_matches($item, $conditions)
+                    ) {
+                        $filter[] = $item;
+                    }
+                }
+                $next = $filter;
+            }
+            $context = [$_key => $next];
+        }
+
+        return $context[$_key];
+    }
+
+    /**
+     * Split token conditions
+     *
+     * @param string $token the token being splitted.
+     * @return array [token, conditions] with token splitted
+     */
+    protected static function _splitConditions(string $token): array
+    {
+        $conditions = false;
+        $position = strpos($token, '[');
+        if ($position !== false) {
+            $conditions = substr($token, $position);
+            $token = substr($token, 0, $position);
+        }
+
+        return [$token, $conditions];
+    }
+
+    /**
+     * Check a key against a token.
+     *
+     * @param mixed $key The key in the array being searched.
+     * @param string $token The token being matched.
+     * @return bool
+     */
+    protected static function _matchToken($key, string $token): bool
+    {
+        switch ($token) {
+            case '{n}':
+                return is_numeric($key);
+            case '{s}':
+                return is_string($key);
+            case '{*}':
+                return true;
+            default:
+                return is_numeric($token) ? ($key == $token) : $key === $token;
+        }
+    }
+
+    /**
+     * Checks whether $data matches the attribute patterns
+     *
+     * @param \ArrayAccess|array $data Array of data to match.
+     * @param string $selector The patterns to match.
+     * @return bool Fitness of expression.
+     */
+    protected static function _matches($data, string $selector): bool
+    {
+        preg_match_all(
+            '/(\[ (?P[^=>[><]) \s* (?P(?:\/.*?\/ | [^\]]+)) )? \])/x',
+            $selector,
+            $conditions,
+            PREG_SET_ORDER
+        );
+
+        foreach ($conditions as $cond) {
+            $attr = $cond['attr'];
+            $op = $cond['op'] ?? null;
+            $val = $cond['val'] ?? null;
+
+            // Presence test.
+            if (empty($op) && empty($val) && !isset($data[$attr])) {
+                return false;
+            }
+
+            if (is_array($data)) {
+                $attrPresent = array_key_exists($attr, $data);
+            } else {
+                $attrPresent = $data->offsetExists($attr);
+            }
+            // Empty attribute = fail.
+            if (!$attrPresent) {
+                return false;
+            }
+
+            $prop = $data[$attr] ?? '';
+            $isBool = is_bool($prop);
+            if ($isBool && is_numeric($val)) {
+                $prop = $prop ? '1' : '0';
+            } elseif ($isBool) {
+                $prop = $prop ? 'true' : 'false';
+            } elseif (is_numeric($prop)) {
+                $prop = (string)$prop;
+            }
+
+            // Pattern matches and other operators.
+            if ($op === '=' && $val && $val[0] === '/') {
+                if (!preg_match($val, $prop)) {
+                    return false;
+                }
+                // phpcs:disable
+            } elseif (
+                ($op === '=' && $prop != $val) ||
+                ($op === '!=' && $prop == $val) ||
+                ($op === '>' && $prop <= $val) ||
+                ($op === '<' && $prop >= $val) ||
+                ($op === '>=' && $prop < $val) ||
+                ($op === '<=' && $prop > $val)
+                // phpcs:enable
+            ) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Insert $values into an array with the given $path. You can use
+     * `{n}` and `{s}` elements to insert $data multiple times.
+     *
+     * @param array $data The data to insert into.
+     * @param string $path The path to insert at.
+     * @param mixed $values The values to insert.
+     * @return array The data with $values inserted.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::insert
+     */
+    public static function insert(array $data, string $path, $values = null): array
+    {
+        $noTokens = strpos($path, '[') === false;
+        if ($noTokens && strpos($path, '.') === false) {
+            $data[$path] = $values;
+
+            return $data;
+        }
+
+        if ($noTokens) {
+            $tokens = explode('.', $path);
+        } else {
+            $tokens = Text::tokenize($path, '.', '[', ']');
+        }
+
+        if ($noTokens && strpos($path, '{') === false) {
+            return static::_simpleOp('insert', $data, $tokens, $values);
+        }
+
+        $token = array_shift($tokens);
+        $nextPath = implode('.', $tokens);
+
+        [$token, $conditions] = static::_splitConditions($token);
+
+        foreach ($data as $k => $v) {
+            if (static::_matchToken($k, $token)) {
+                if (
+                    !$conditions ||
+                    ((is_array($v) || $v instanceof ArrayAccess) && static::_matches($v, $conditions))
+                ) {
+                    $data[$k] = $nextPath
+                        ? static::insert($v, $nextPath, $values)
+                        : array_merge($v, (array)$values);
+                }
+            }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Perform a simple insert/remove operation.
+     *
+     * @param string $op The operation to do.
+     * @param array $data The data to operate on.
+     * @param array $path The path to work on.
+     * @param mixed $values The values to insert when doing inserts.
+     * @return array data.
+     */
+    protected static function _simpleOp(string $op, array $data, array $path, $values = null): array
+    {
+        $_list = &$data;
+
+        $count = count($path);
+        $last = $count - 1;
+        foreach ($path as $i => $key) {
+            if ($op === 'insert') {
+                if ($i === $last) {
+                    $_list[$key] = $values;
+
+                    return $data;
+                }
+                $_list[$key] = $_list[$key] ?? [];
+                $_list = &$_list[$key];
+                if (!is_array($_list)) {
+                    $_list = [];
+                }
+            } elseif ($op === 'remove') {
+                if ($i === $last) {
+                    if (is_array($_list)) {
+                        unset($_list[$key]);
+                    }
+
+                    return $data;
+                }
+                if (!isset($_list[$key])) {
+                    return $data;
+                }
+                $_list = &$_list[$key];
+            }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Remove data matching $path from the $data array.
+     * You can use `{n}` and `{s}` to remove multiple elements
+     * from $data.
+     *
+     * @param array $data The data to operate on
+     * @param string $path A path expression to use to remove.
+     * @return array The modified array.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::remove
+     */
+    public static function remove(array $data, string $path): array
+    {
+        $noTokens = strpos($path, '[') === false;
+        $noExpansion = strpos($path, '{') === false;
+
+        if ($noExpansion && $noTokens && strpos($path, '.') === false) {
+            unset($data[$path]);
+
+            return $data;
+        }
+
+        $tokens = $noTokens ? explode('.', $path) : Text::tokenize($path, '.', '[', ']');
+
+        if ($noExpansion && $noTokens) {
+            return static::_simpleOp('remove', $data, $tokens);
+        }
+
+        $token = array_shift($tokens);
+        $nextPath = implode('.', $tokens);
+
+        [$token, $conditions] = self::_splitConditions($token);
+
+        foreach ($data as $k => $v) {
+            $match = static::_matchToken($k, $token);
+            if ($match && is_array($v)) {
+                if ($conditions) {
+                    if (static::_matches($v, $conditions)) {
+                        if ($nextPath !== '') {
+                            $data[$k] = static::remove($v, $nextPath);
+                        } else {
+                            unset($data[$k]);
+                        }
+                    }
+                } else {
+                    $data[$k] = static::remove($v, $nextPath);
+                }
+                if (empty($data[$k])) {
+                    unset($data[$k]);
+                }
+            } elseif ($match && $nextPath === '') {
+                unset($data[$k]);
+            }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Creates an associative array using `$keyPath` as the path to build its keys, and optionally
+     * `$valuePath` as path to get the values. If `$valuePath` is not specified, all values will be initialized
+     * to null (useful for Hash::merge). You can optionally group the values by what is obtained when
+     * following the path specified in `$groupPath`.
+     *
+     * @param array $data Array from where to extract keys and values
+     * @param array|string|null $keyPath A dot-separated string.
+     * @param array|string|null $valuePath A dot-separated string.
+     * @param string|null $groupPath A dot-separated string.
+     * @return array Combined array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::combine
+     * @throws \RuntimeException When keys and values count is unequal.
+     */
+    public static function combine(array $data, $keyPath, $valuePath = null, ?string $groupPath = null): array
+    {
+        if (empty($data)) {
+            return [];
+        }
+
+        if (is_array($keyPath)) {
+            $format = array_shift($keyPath);
+            /** @var array $keys */
+            $keys = static::format($data, $keyPath, $format);
+        } elseif ($keyPath === null) {
+            $keys = $keyPath;
+        } else {
+            /** @var array $keys */
+            $keys = static::extract($data, $keyPath);
+        }
+        if ($keyPath !== null && empty($keys)) {
+            return [];
+        }
+
+        $vals = null;
+        if (!empty($valuePath) && is_array($valuePath)) {
+            $format = array_shift($valuePath);
+            /** @var array $vals */
+            $vals = static::format($data, $valuePath, $format);
+        } elseif (!empty($valuePath)) {
+            /** @var array $vals */
+            $vals = static::extract($data, $valuePath);
+        }
+        if (empty($vals)) {
+            $vals = array_fill(0, $keys === null ? count($data) : count($keys), null);
+        }
+
+        if (is_array($keys) && count($keys) !== count($vals)) {
+            throw new RuntimeException(
+                'Hash::combine() needs an equal number of keys + values.'
+            );
+        }
+
+        if ($groupPath !== null) {
+            $group = static::extract($data, $groupPath);
+            if (!empty($group)) {
+                $c = is_array($keys) ? count($keys) : count($vals);
+                $out = [];
+                for ($i = 0; $i < $c; $i++) {
+                    $group[$i] = $group[$i] ?? 0;
+                    $out[$group[$i]] = $out[$group[$i]] ?? [];
+                    if ($keys === null) {
+                        $out[$group[$i]][] = $vals[$i];
+                    } else {
+                        $out[$group[$i]][$keys[$i]] = $vals[$i];
+                    }
+                }
+
+                return $out;
+            }
+        }
+        if (empty($vals)) {
+            return [];
+        }
+
+        return array_combine($keys ?? range(0, count($vals) - 1), $vals);
+    }
+
+    /**
+     * Returns a formatted series of values extracted from `$data`, using
+     * `$format` as the format and `$paths` as the values to extract.
+     *
+     * Usage:
+     *
+     * ```
+     * $result = Hash::format($users, ['{n}.User.id', '{n}.User.name'], '%s : %s');
+     * ```
+     *
+     * The `$format` string can use any format options that `vsprintf()` and `sprintf()` do.
+     *
+     * @param array $data Source array from which to extract the data
+     * @param array $paths An array containing one or more Hash::extract()-style key paths
+     * @param string $format Format string into which values will be inserted, see sprintf()
+     * @return array|null An array of strings extracted from `$path` and formatted with `$format`
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::format
+     * @see sprintf()
+     * @see \Cake\Utility\Hash::extract()
+     */
+    public static function format(array $data, array $paths, string $format): ?array
+    {
+        $extracted = [];
+        $count = count($paths);
+
+        if (!$count) {
+            return null;
+        }
+
+        for ($i = 0; $i < $count; $i++) {
+            $extracted[] = static::extract($data, $paths[$i]);
+        }
+        $out = [];
+        /** @var array $data */
+        $data = $extracted;
+        $count = count($data[0]);
+
+        $countTwo = count($data);
+        for ($j = 0; $j < $count; $j++) {
+            $args = [];
+            for ($i = 0; $i < $countTwo; $i++) {
+                if (array_key_exists($j, $data[$i])) {
+                    $args[] = $data[$i][$j];
+                }
+            }
+            $out[] = vsprintf($format, $args);
+        }
+
+        return $out;
+    }
+
+    /**
+     * Determines if one array contains the exact keys and values of another.
+     *
+     * @param array $data The data to search through.
+     * @param array $needle The values to file in $data
+     * @return bool true If $data contains $needle, false otherwise
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::contains
+     */
+    public static function contains(array $data, array $needle): bool
+    {
+        if (empty($data) || empty($needle)) {
+            return false;
+        }
+        $stack = [];
+
+        while (!empty($needle)) {
+            $key = key($needle);
+            $val = $needle[$key];
+            unset($needle[$key]);
+
+            if (array_key_exists($key, $data) && is_array($val)) {
+                $next = $data[$key];
+                unset($data[$key]);
+
+                if (!empty($val)) {
+                    $stack[] = [$val, $next];
+                }
+            } elseif (!array_key_exists($key, $data) || $data[$key] != $val) {
+                return false;
+            }
+
+            if (empty($needle) && !empty($stack)) {
+                [$needle, $data] = array_pop($stack);
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Test whether a given path exists in $data.
+     * This method uses the same path syntax as Hash::extract()
+     *
+     * Checking for paths that could target more than one element will
+     * make sure that at least one matching element exists.
+     *
+     * @param array $data The data to check.
+     * @param string $path The path to check for.
+     * @return bool Existence of path.
+     * @see \Cake\Utility\Hash::extract()
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::check
+     */
+    public static function check(array $data, string $path): bool
+    {
+        $results = static::extract($data, $path);
+        if (!is_array($results)) {
+            return false;
+        }
+
+        return count($results) > 0;
+    }
+
+    /**
+     * Recursively filters a data set.
+     *
+     * @param array $data Either an array to filter, or value when in callback
+     * @param callable|array $callback A function to filter the data with. Defaults to
+     *   `static::_filter()` Which strips out all non-zero empty values.
+     * @return array Filtered array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::filter
+     */
+    public static function filter(array $data, $callback = [Hash::class, '_filter']): array
+    {
+        foreach ($data as $k => $v) {
+            if (is_array($v)) {
+                $data[$k] = static::filter($v, $callback);
+            }
+        }
+
+        return array_filter($data, $callback);
+    }
+
+    /**
+     * Callback function for filtering.
+     *
+     * @param mixed $var Array to filter.
+     * @return bool
+     */
+    protected static function _filter($var): bool
+    {
+        return $var === 0 || $var === 0.0 || $var === '0' || !empty($var);
+    }
+
+    /**
+     * Collapses a multi-dimensional array into a single dimension, using a delimited array path for
+     * each array element's key, i.e. [['Foo' => ['Bar' => 'Far']]] becomes
+     * ['0.Foo.Bar' => 'Far'].)
+     *
+     * @param array $data Array to flatten
+     * @param string $separator String used to separate array key elements in a path, defaults to '.'
+     * @return array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::flatten
+     */
+    public static function flatten(array $data, string $separator = '.'): array
+    {
+        $result = [];
+        $stack = [];
+        $path = '';
+
+        reset($data);
+        while (!empty($data)) {
+            $key = key($data);
+            $element = $data[$key];
+            unset($data[$key]);
+
+            if (is_array($element) && !empty($element)) {
+                if (!empty($data)) {
+                    $stack[] = [$data, $path];
+                }
+                $data = $element;
+                reset($data);
+                $path .= $key . $separator;
+            } else {
+                $result[$path . $key] = $element;
+            }
+
+            if (empty($data) && !empty($stack)) {
+                [$data, $path] = array_pop($stack);
+                reset($data);
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Expands a flat array to a nested array.
+     *
+     * For example, unflattens an array that was collapsed with `Hash::flatten()`
+     * into a multi-dimensional array. So, `['0.Foo.Bar' => 'Far']` becomes
+     * `[['Foo' => ['Bar' => 'Far']]]`.
+     *
+     * @phpstan-param non-empty-string $separator
+     * @param array $data Flattened array
+     * @param string $separator The delimiter used
+     * @return array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::expand
+     */
+    public static function expand(array $data, string $separator = '.'): array
+    {
+        $hash = [];
+        foreach ($data as $path => $value) {
+            $keys = explode($separator, (string)$path);
+            if (count($keys) === 1) {
+                $hash[$path] = $value;
+                continue;
+            }
+
+            $valueKey = end($keys);
+            $keys = array_slice($keys, 0, -1);
+
+            $keyHash = &$hash;
+            foreach ($keys as $key) {
+                if (!array_key_exists($key, $keyHash)) {
+                    $keyHash[$key] = [];
+                }
+                $keyHash = &$keyHash[$key];
+            }
+            $keyHash[$valueKey] = $value;
+        }
+
+        return $hash;
+    }
+
+    /**
+     * This function can be thought of as a hybrid between PHP's `array_merge` and `array_merge_recursive`.
+     *
+     * The difference between this method and the built-in ones, is that if an array key contains another array, then
+     * Hash::merge() will behave in a recursive fashion (unlike `array_merge`). But it will not act recursively for
+     * keys that contain scalar values (unlike `array_merge_recursive`).
+     *
+     * This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays.
+     *
+     * @param array $data Array to be merged
+     * @param mixed $merge Array to merge with. The argument and all trailing arguments will be array cast when merged
+     * @return array Merged array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::merge
+     */
+    public static function merge(array $data, $merge): array
+    {
+        $args = array_slice(func_get_args(), 1);
+        $return = $data;
+        $stack = [];
+
+        foreach ($args as &$curArg) {
+            $stack[] = [(array)$curArg, &$return];
+        }
+        unset($curArg);
+        static::_merge($stack, $return);
+
+        return $return;
+    }
+
+    /**
+     * Merge helper function to reduce duplicated code between merge() and expand().
+     *
+     * @param array $stack The stack of operations to work with.
+     * @param array $return The return value to operate on.
+     * @return void
+     */
+    protected static function _merge(array $stack, array &$return): void
+    {
+        while (!empty($stack)) {
+            foreach ($stack as $curKey => &$curMerge) {
+                foreach ($curMerge[0] as $key => &$val) {
+                    if (!is_array($curMerge[1])) {
+                        continue;
+                    }
+
+                    if (
+                        !empty($curMerge[1][$key])
+                        && (array)$curMerge[1][$key] === $curMerge[1][$key]
+                        && (array)$val === $val
+                    ) {
+                        // Recurse into the current merge data as it is an array.
+                        $stack[] = [&$val, &$curMerge[1][$key]];
+                    } elseif ((int)$key === $key && isset($curMerge[1][$key])) {
+                        $curMerge[1][] = $val;
+                    } else {
+                        $curMerge[1][$key] = $val;
+                    }
+                }
+                unset($stack[$curKey]);
+            }
+            unset($curMerge);
+        }
+    }
+
+    /**
+     * Checks to see if all the values in the array are numeric
+     *
+     * @param array $data The array to check.
+     * @return bool true if values are numeric, false otherwise
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::numeric
+     */
+    public static function numeric(array $data): bool
+    {
+        if (empty($data)) {
+            return false;
+        }
+
+        return $data === array_filter($data, 'is_numeric');
+    }
+
+    /**
+     * Counts the dimensions of an array.
+     * Only considers the dimension of the first element in the array.
+     *
+     * If you have an un-even or heterogeneous array, consider using Hash::maxDimensions()
+     * to get the dimensions of the array.
+     *
+     * @param array $data Array to count dimensions on
+     * @return int The number of dimensions in $data
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::dimensions
+     */
+    public static function dimensions(array $data): int
+    {
+        if (empty($data)) {
+            return 0;
+        }
+        reset($data);
+        $depth = 1;
+        while ($elem = array_shift($data)) {
+            if (is_array($elem)) {
+                $depth++;
+                $data = $elem;
+            } else {
+                break;
+            }
+        }
+
+        return $depth;
+    }
+
+    /**
+     * Counts the dimensions of *all* array elements. Useful for finding the maximum
+     * number of dimensions in a mixed array.
+     *
+     * @param array $data Array to count dimensions on
+     * @return int The maximum number of dimensions in $data
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::maxDimensions
+     */
+    public static function maxDimensions(array $data): int
+    {
+        $depth = [];
+        if (!empty($data)) {
+            foreach ($data as $value) {
+                if (is_array($value)) {
+                    $depth[] = static::maxDimensions($value) + 1;
+                } else {
+                    $depth[] = 1;
+                }
+            }
+        }
+
+        return empty($depth) ? 0 : max($depth);
+    }
+
+    /**
+     * Map a callback across all elements in a set.
+     * Can be provided a path to only modify slices of the set.
+     *
+     * @param array $data The data to map over, and extract data out of.
+     * @param string $path The path to extract for mapping over.
+     * @param callable $function The function to call on each extracted value.
+     * @return array An array of the modified values.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::map
+     */
+    public static function map(array $data, string $path, callable $function): array
+    {
+        $values = (array)static::extract($data, $path);
+
+        return array_map($function, $values);
+    }
+
+    /**
+     * Reduce a set of extracted values using `$function`.
+     *
+     * @param array $data The data to reduce.
+     * @param string $path The path to extract from $data.
+     * @param callable $function The function to call on each extracted value.
+     * @return mixed The reduced value.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::reduce
+     */
+    public static function reduce(array $data, string $path, callable $function)
+    {
+        $values = (array)static::extract($data, $path);
+
+        return array_reduce($values, $function);
+    }
+
+    /**
+     * Apply a callback to a set of extracted values using `$function`.
+     * The function will get the extracted values as the first argument.
+     *
+     * ### Example
+     *
+     * You can easily count the results of an extract using apply().
+     * For example to count the comments on an Article:
+     *
+     * ```
+     * $count = Hash::apply($data, 'Article.Comment.{n}', 'count');
+     * ```
+     *
+     * You could also use a function like `array_sum` to sum the results.
+     *
+     * ```
+     * $total = Hash::apply($data, '{n}.Item.price', 'array_sum');
+     * ```
+     *
+     * @param array $data The data to reduce.
+     * @param string $path The path to extract from $data.
+     * @param callable $function The function to call on each extracted value.
+     * @return mixed The results of the applied method.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::apply
+     */
+    public static function apply(array $data, string $path, callable $function)
+    {
+        $values = (array)static::extract($data, $path);
+
+        return $function($values);
+    }
+
+    /**
+     * Sorts an array by any value, determined by a Set-compatible path
+     *
+     * ### Sort directions
+     *
+     * - `asc` or \SORT_ASC Sort ascending.
+     * - `desc` or \SORT_DESC Sort descending.
+     *
+     * ### Sort types
+     *
+     * - `regular` For regular sorting (don't change types)
+     * - `numeric` Compare values numerically
+     * - `string` Compare values as strings
+     * - `locale` Compare items as strings, based on the current locale
+     * - `natural` Compare items as strings using "natural ordering" in a human friendly way
+     *   Will sort foo10 below foo2 as an example.
+     *
+     * To do case insensitive sorting, pass the type as an array as follows:
+     *
+     * ```
+     * Hash::sort($data, 'some.attribute', 'asc', ['type' => 'regular', 'ignoreCase' => true]);
+     * ```
+     *
+     * When using the array form, `type` defaults to 'regular'. The `ignoreCase` option
+     * defaults to `false`.
+     *
+     * @param array $data An array of data to sort
+     * @param string $path A Set-compatible path to the array value
+     * @param string|int $dir See directions above. Defaults to 'asc'.
+     * @param array|string $type See direction types above. Defaults to 'regular'.
+     * @return array Sorted array of data
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::sort
+     */
+    public static function sort(array $data, string $path, $dir = 'asc', $type = 'regular'): array
+    {
+        if (empty($data)) {
+            return [];
+        }
+        $originalKeys = array_keys($data);
+        $numeric = is_numeric(implode('', $originalKeys));
+        if ($numeric) {
+            $data = array_values($data);
+        }
+        /** @var array $sortValues */
+        $sortValues = static::extract($data, $path);
+        $dataCount = count($data);
+
+        // Make sortValues match the data length, as some keys could be missing
+        // the sorted value path.
+        $missingData = count($sortValues) < $dataCount;
+        if ($missingData && $numeric) {
+            // Get the path without the leading '{n}.'
+            $itemPath = substr($path, 4);
+            foreach ($data as $key => $value) {
+                $sortValues[$key] = static::get($value, $itemPath);
+            }
+        } elseif ($missingData) {
+            $sortValues = array_pad($sortValues, $dataCount, null);
+        }
+        $result = static::_squash($sortValues);
+        /** @var array $keys */
+        $keys = static::extract($result, '{n}.id');
+        /** @var array $values */
+        $values = static::extract($result, '{n}.value');
+
+        if (is_string($dir)) {
+            $dir = strtolower($dir);
+        }
+        if (!in_array($dir, [\SORT_ASC, \SORT_DESC], true)) {
+            $dir = $dir === 'asc' ? \SORT_ASC : \SORT_DESC;
+        }
+
+        $ignoreCase = false;
+
+        // $type can be overloaded for case insensitive sort
+        if (is_array($type)) {
+            $type += ['ignoreCase' => false, 'type' => 'regular'];
+            $ignoreCase = $type['ignoreCase'];
+            $type = $type['type'];
+        }
+        $type = strtolower($type);
+
+        if ($type === 'numeric') {
+            $type = \SORT_NUMERIC;
+        } elseif ($type === 'string') {
+            $type = \SORT_STRING;
+        } elseif ($type === 'natural') {
+            $type = \SORT_NATURAL;
+        } elseif ($type === 'locale') {
+            $type = \SORT_LOCALE_STRING;
+        } else {
+            $type = \SORT_REGULAR;
+        }
+        if ($ignoreCase) {
+            $values = array_map('mb_strtolower', $values);
+        }
+        array_multisort($values, $dir, $type, $keys, $dir, $type);
+        $sorted = [];
+        $keys = array_unique($keys);
+
+        foreach ($keys as $k) {
+            if ($numeric) {
+                $sorted[] = $data[$k];
+                continue;
+            }
+            if (isset($originalKeys[$k])) {
+                $sorted[$originalKeys[$k]] = $data[$originalKeys[$k]];
+            } else {
+                $sorted[$k] = $data[$k];
+            }
+        }
+
+        return $sorted;
+    }
+
+    /**
+     * Helper method for sort()
+     * Squashes an array to a single hash so it can be sorted.
+     *
+     * @param array $data The data to squash.
+     * @param mixed $key The key for the data.
+     * @return array
+     */
+    protected static function _squash(array $data, $key = null): array
+    {
+        $stack = [];
+        foreach ($data as $k => $r) {
+            $id = $k;
+            if ($key !== null) {
+                $id = $key;
+            }
+            if (is_array($r) && !empty($r)) {
+                $stack = array_merge($stack, static::_squash($r, $id));
+            } else {
+                $stack[] = ['id' => $id, 'value' => $r];
+            }
+        }
+
+        return $stack;
+    }
+
+    /**
+     * Computes the difference between two complex arrays.
+     * This method differs from the built-in array_diff() in that it will preserve keys
+     * and work on multi-dimensional arrays.
+     *
+     * @param array $data First value
+     * @param array $compare Second value
+     * @return array Returns the key => value pairs that are not common in $data and $compare
+     *    The expression for this function is ($data - $compare) + ($compare - ($data - $compare))
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::diff
+     */
+    public static function diff(array $data, array $compare): array
+    {
+        if (empty($data)) {
+            return $compare;
+        }
+        if (empty($compare)) {
+            return $data;
+        }
+        $intersection = array_intersect_key($data, $compare);
+        while (($key = key($intersection)) !== null) {
+            if ($data[$key] == $compare[$key]) {
+                unset($data[$key], $compare[$key]);
+            }
+            next($intersection);
+        }
+
+        return $data + $compare;
+    }
+
+    /**
+     * Merges the difference between $data and $compare onto $data.
+     *
+     * @param array $data The data to append onto.
+     * @param array $compare The data to compare and append onto.
+     * @return array The merged array.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::mergeDiff
+     */
+    public static function mergeDiff(array $data, array $compare): array
+    {
+        if (empty($data) && !empty($compare)) {
+            return $compare;
+        }
+        if (empty($compare)) {
+            return $data;
+        }
+        foreach ($compare as $key => $value) {
+            if (!array_key_exists($key, $data)) {
+                $data[$key] = $value;
+            } elseif (is_array($value) && is_array($data[$key])) {
+                $data[$key] = static::mergeDiff($data[$key], $value);
+            }
+        }
+
+        return $data;
+    }
+
+    /**
+     * Normalizes an array, and converts it to a standard format.
+     *
+     * @param array $data List to normalize
+     * @param bool $assoc If true, $data will be converted to an associative array.
+     * @param mixed $default The default value to use when a top level numeric key is converted to associative form.
+     * @return array
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::normalize
+     */
+    public static function normalize(array $data, bool $assoc = true, $default = null): array
+    {
+        $keys = array_keys($data);
+        $count = count($keys);
+        $numeric = true;
+
+        if (!$assoc) {
+            for ($i = 0; $i < $count; $i++) {
+                if (!is_int($keys[$i])) {
+                    $numeric = false;
+                    break;
+                }
+            }
+        }
+        if (!$numeric || $assoc) {
+            $newList = [];
+            for ($i = 0; $i < $count; $i++) {
+                if (is_int($keys[$i])) {
+                    $newList[$data[$keys[$i]]] = $default;
+                } else {
+                    $newList[$keys[$i]] = $data[$keys[$i]];
+                }
+            }
+            $data = $newList;
+        }
+
+        return $data;
+    }
+
+    /**
+     * Takes in a flat array and returns a nested array
+     *
+     * ### Options:
+     *
+     * - `children` The key name to use in the resultset for children.
+     * - `idPath` The path to a key that identifies each entry. Should be
+     *   compatible with Hash::extract(). Defaults to `{n}.$alias.id`
+     * - `parentPath` The path to a key that identifies the parent of each entry.
+     *   Should be compatible with Hash::extract(). Defaults to `{n}.$alias.parent_id`
+     * - `root` The id of the desired top-most result.
+     *
+     * @param array $data The data to nest.
+     * @param array $options Options are:
+     * @return array of results, nested
+     * @see \Cake\Utility\Hash::extract()
+     * @throws \InvalidArgumentException When providing invalid data.
+     * @link https://book.cakephp.org/4/en/core-libraries/hash.html#Cake\Utility\Hash::nest
+     */
+    public static function nest(array $data, array $options = []): array
+    {
+        if (!$data) {
+            return $data;
+        }
+
+        $alias = key(current($data));
+        $options += [
+            'idPath' => "{n}.$alias.id",
+            'parentPath' => "{n}.$alias.parent_id",
+            'children' => 'children',
+            'root' => null,
+        ];
+
+        $return = $idMap = [];
+        /** @var array $ids */
+        $ids = static::extract($data, $options['idPath']);
+
+        $idKeys = explode('.', $options['idPath']);
+        array_shift($idKeys);
+
+        $parentKeys = explode('.', $options['parentPath']);
+        array_shift($parentKeys);
+
+        foreach ($data as $result) {
+            $result[$options['children']] = [];
+
+            $id = static::get($result, $idKeys);
+            $parentId = static::get($result, $parentKeys);
+
+            if (isset($idMap[$id][$options['children']])) {
+                $idMap[$id] = array_merge($result, $idMap[$id]);
+            } else {
+                $idMap[$id] = array_merge($result, [$options['children'] => []]);
+            }
+            if (!$parentId || !in_array($parentId, $ids)) {
+                $return[] = &$idMap[$id];
+            } else {
+                $idMap[$parentId][$options['children']][] = &$idMap[$id];
+            }
+        }
+
+        if (!$return) {
+            throw new InvalidArgumentException('Invalid data array to nest.');
+        }
+
+        if ($options['root']) {
+            $root = $options['root'];
+        } else {
+            $root = static::get($return[0], $parentKeys);
+        }
+
+        foreach ($return as $i => $result) {
+            $id = static::get($result, $idKeys);
+            $parentId = static::get($result, $parentKeys);
+            if ($id !== $root && $parentId != $root) {
+                unset($return[$i]);
+            }
+        }
+
+        return array_values($return);
+    }
+}
diff --git a/vendor/cakephp/utility/Inflector.php b/vendor/cakephp/utility/Inflector.php
new file mode 100755
index 0000000..8abcd07
--- /dev/null
+++ b/vendor/cakephp/utility/Inflector.php
@@ -0,0 +1,524 @@
+
+     */
+    protected static $_plural = [
+        '/(s)tatus$/i' => '\1tatuses',
+        '/(quiz)$/i' => '\1zes',
+        '/^(ox)$/i' => '\1\2en',
+        '/([m|l])ouse$/i' => '\1ice',
+        '/(matr|vert)(ix|ex)$/i' => '\1ices',
+        '/(x|ch|ss|sh)$/i' => '\1es',
+        '/([^aeiouy]|qu)y$/i' => '\1ies',
+        '/(hive)$/i' => '\1s',
+        '/(chef)$/i' => '\1s',
+        '/(?:([^f])fe|([lre])f)$/i' => '\1\2ves',
+        '/sis$/i' => 'ses',
+        '/([ti])um$/i' => '\1a',
+        '/(p)erson$/i' => '\1eople',
+        '/(? '\1en',
+        '/(c)hild$/i' => '\1hildren',
+        '/(buffal|tomat)o$/i' => '\1\2oes',
+        '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin)us$/i' => '\1i',
+        '/us$/i' => 'uses',
+        '/(alias)$/i' => '\1es',
+        '/(ax|cris|test)is$/i' => '\1es',
+        '/s$/' => 's',
+        '/^$/' => '',
+        '/$/' => 's',
+    ];
+
+    /**
+     * Singular inflector rules
+     *
+     * @var array
+     */
+    protected static $_singular = [
+        '/(s)tatuses$/i' => '\1\2tatus',
+        '/^(.*)(menu)s$/i' => '\1\2',
+        '/(quiz)zes$/i' => '\\1',
+        '/(matr)ices$/i' => '\1ix',
+        '/(vert|ind)ices$/i' => '\1ex',
+        '/^(ox)en/i' => '\1',
+        '/(alias|lens)(es)*$/i' => '\1',
+        '/(alumn|bacill|cact|foc|fung|nucle|radi|stimul|syllab|termin|viri?)i$/i' => '\1us',
+        '/([ftw]ax)es/i' => '\1',
+        '/(cris|ax|test)es$/i' => '\1is',
+        '/(shoe)s$/i' => '\1',
+        '/(o)es$/i' => '\1',
+        '/ouses$/' => 'ouse',
+        '/([^a])uses$/' => '\1us',
+        '/([m|l])ice$/i' => '\1ouse',
+        '/(x|ch|ss|sh)es$/i' => '\1',
+        '/(m)ovies$/i' => '\1\2ovie',
+        '/(s)eries$/i' => '\1\2eries',
+        '/(s)pecies$/i' => '\1\2pecies',
+        '/([^aeiouy]|qu)ies$/i' => '\1y',
+        '/(tive)s$/i' => '\1',
+        '/(hive)s$/i' => '\1',
+        '/(drive)s$/i' => '\1',
+        '/([le])ves$/i' => '\1f',
+        '/([^rfoa])ves$/i' => '\1fe',
+        '/(^analy)ses$/i' => '\1sis',
+        '/(analy|diagno|^ba|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => '\1\2sis',
+        '/([ti])a$/i' => '\1um',
+        '/(p)eople$/i' => '\1\2erson',
+        '/(m)en$/i' => '\1an',
+        '/(c)hildren$/i' => '\1\2hild',
+        '/(n)ews$/i' => '\1\2ews',
+        '/eaus$/' => 'eau',
+        '/^(.*us)$/' => '\\1',
+        '/s$/i' => '',
+    ];
+
+    /**
+     * Irregular rules
+     *
+     * @var array
+     */
+    protected static $_irregular = [
+        'atlas' => 'atlases',
+        'beef' => 'beefs',
+        'brief' => 'briefs',
+        'brother' => 'brothers',
+        'cafe' => 'cafes',
+        'child' => 'children',
+        'cookie' => 'cookies',
+        'corpus' => 'corpuses',
+        'cow' => 'cows',
+        'criterion' => 'criteria',
+        'ganglion' => 'ganglions',
+        'genie' => 'genies',
+        'genus' => 'genera',
+        'graffito' => 'graffiti',
+        'hoof' => 'hoofs',
+        'loaf' => 'loaves',
+        'man' => 'men',
+        'money' => 'monies',
+        'mongoose' => 'mongooses',
+        'move' => 'moves',
+        'mythos' => 'mythoi',
+        'niche' => 'niches',
+        'numen' => 'numina',
+        'occiput' => 'occiputs',
+        'octopus' => 'octopuses',
+        'opus' => 'opuses',
+        'ox' => 'oxen',
+        'penis' => 'penises',
+        'person' => 'people',
+        'sex' => 'sexes',
+        'soliloquy' => 'soliloquies',
+        'testis' => 'testes',
+        'trilby' => 'trilbys',
+        'turf' => 'turfs',
+        'potato' => 'potatoes',
+        'hero' => 'heroes',
+        'tooth' => 'teeth',
+        'goose' => 'geese',
+        'foot' => 'feet',
+        'foe' => 'foes',
+        'sieve' => 'sieves',
+        'cache' => 'caches',
+    ];
+
+    /**
+     * Words that should not be inflected
+     *
+     * @var array
+     */
+    protected static $_uninflected = [
+        '.*[nrlm]ese', '.*data', '.*deer', '.*fish', '.*measles', '.*ois',
+        '.*pox', '.*sheep', 'people', 'feedback', 'stadia', '.*?media',
+        'chassis', 'clippers', 'debris', 'diabetes', 'equipment', 'gallows',
+        'graffiti', 'headquarters', 'information', 'innings', 'news', 'nexus',
+        'pokemon', 'proceedings', 'research', 'sea[- ]bass', 'series', 'species', 'weather',
+    ];
+
+    /**
+     * Method cache array.
+     *
+     * @var array
+     */
+    protected static $_cache = [];
+
+    /**
+     * The initial state of Inflector so reset() works.
+     *
+     * @var array
+     */
+    protected static $_initialState = [];
+
+    /**
+     * Cache inflected values, and return if already available
+     *
+     * @param string $type Inflection type
+     * @param string $key Original value
+     * @param string|false $value Inflected value
+     * @return string|false Inflected value on cache hit or false on cache miss.
+     */
+    protected static function _cache(string $type, string $key, $value = false)
+    {
+        $key = '_' . $key;
+        $type = '_' . $type;
+        if ($value !== false) {
+            static::$_cache[$type][$key] = $value;
+
+            return $value;
+        }
+        if (!isset(static::$_cache[$type][$key])) {
+            return false;
+        }
+
+        return static::$_cache[$type][$key];
+    }
+
+    /**
+     * Clears Inflectors inflected value caches. And resets the inflection
+     * rules to the initial values.
+     *
+     * @return void
+     */
+    public static function reset(): void
+    {
+        if (empty(static::$_initialState)) {
+            static::$_initialState = get_class_vars(self::class);
+
+            return;
+        }
+        foreach (static::$_initialState as $key => $val) {
+            if ($key !== '_initialState') {
+                static::${$key} = $val;
+            }
+        }
+    }
+
+    /**
+     * Adds custom inflection $rules, of either 'plural', 'singular',
+     * 'uninflected' or 'irregular' $type.
+     *
+     * ### Usage:
+     *
+     * ```
+     * Inflector::rules('plural', ['/^(inflect)or$/i' => '\1ables']);
+     * Inflector::rules('irregular', ['red' => 'redlings']);
+     * Inflector::rules('uninflected', ['dontinflectme']);
+     * ```
+     *
+     * @param string $type The type of inflection, either 'plural', 'singular',
+     *    or 'uninflected'.
+     * @param array $rules Array of rules to be added.
+     * @param bool $reset If true, will unset default inflections for all
+     *        new rules that are being defined in $rules.
+     * @return void
+     */
+    public static function rules(string $type, array $rules, bool $reset = false): void
+    {
+        $var = '_' . $type;
+
+        if ($reset) {
+            static::${$var} = $rules;
+        } elseif ($type === 'uninflected') {
+            static::$_uninflected = array_merge(
+                $rules,
+                static::$_uninflected
+            );
+        } else {
+            static::${$var} = $rules + static::${$var};
+        }
+
+        static::$_cache = [];
+    }
+
+    /**
+     * Return $word in plural form.
+     *
+     * @param string $word Word in singular
+     * @return string Word in plural
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-plural-singular-forms
+     */
+    public static function pluralize(string $word): string
+    {
+        if (isset(static::$_cache['pluralize'][$word])) {
+            return static::$_cache['pluralize'][$word];
+        }
+
+        if (!isset(static::$_cache['irregular']['pluralize'])) {
+            $words = array_keys(static::$_irregular);
+            static::$_cache['irregular']['pluralize'] = '/(.*?(?:\\b|_))(' . implode('|', $words) . ')$/i';
+
+            $upperWords = array_map('ucfirst', $words);
+            static::$_cache['irregular']['upperPluralize'] = '/(.*?(?:\\b|[a-z]))(' . implode('|', $upperWords) . ')$/';
+        }
+
+        if (
+            preg_match(static::$_cache['irregular']['pluralize'], $word, $regs) ||
+            preg_match(static::$_cache['irregular']['upperPluralize'], $word, $regs)
+        ) {
+            static::$_cache['pluralize'][$word] = $regs[1] . substr($regs[2], 0, 1) .
+                substr(static::$_irregular[strtolower($regs[2])], 1);
+
+            return static::$_cache['pluralize'][$word];
+        }
+
+        if (!isset(static::$_cache['uninflected'])) {
+            static::$_cache['uninflected'] = '/^(' . implode('|', static::$_uninflected) . ')$/i';
+        }
+
+        if (preg_match(static::$_cache['uninflected'], $word, $regs)) {
+            static::$_cache['pluralize'][$word] = $word;
+
+            return $word;
+        }
+
+        foreach (static::$_plural as $rule => $replacement) {
+            if (preg_match($rule, $word)) {
+                static::$_cache['pluralize'][$word] = preg_replace($rule, $replacement, $word);
+
+                return static::$_cache['pluralize'][$word];
+            }
+        }
+
+        return $word;
+    }
+
+    /**
+     * Return $word in singular form.
+     *
+     * @param string $word Word in plural
+     * @return string Word in singular
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-plural-singular-forms
+     */
+    public static function singularize(string $word): string
+    {
+        if (isset(static::$_cache['singularize'][$word])) {
+            return static::$_cache['singularize'][$word];
+        }
+
+        if (!isset(static::$_cache['irregular']['singular'])) {
+            $wordList = array_values(static::$_irregular);
+            static::$_cache['irregular']['singular'] = '/(.*?(?:\\b|_))(' . implode('|', $wordList) . ')$/i';
+
+            $upperWordList = array_map('ucfirst', $wordList);
+            static::$_cache['irregular']['singularUpper'] = '/(.*?(?:\\b|[a-z]))(' .
+                implode('|', $upperWordList) .
+                ')$/';
+        }
+
+        if (
+            preg_match(static::$_cache['irregular']['singular'], $word, $regs) ||
+            preg_match(static::$_cache['irregular']['singularUpper'], $word, $regs)
+        ) {
+            $suffix = array_search(strtolower($regs[2]), static::$_irregular, true);
+            $suffix = $suffix ? substr($suffix, 1) : '';
+            static::$_cache['singularize'][$word] = $regs[1] . substr($regs[2], 0, 1) . $suffix;
+
+            return static::$_cache['singularize'][$word];
+        }
+
+        if (!isset(static::$_cache['uninflected'])) {
+            static::$_cache['uninflected'] = '/^(' . implode('|', static::$_uninflected) . ')$/i';
+        }
+
+        if (preg_match(static::$_cache['uninflected'], $word, $regs)) {
+            static::$_cache['pluralize'][$word] = $word;
+
+            return $word;
+        }
+
+        foreach (static::$_singular as $rule => $replacement) {
+            if (preg_match($rule, $word)) {
+                static::$_cache['singularize'][$word] = preg_replace($rule, $replacement, $word);
+
+                return static::$_cache['singularize'][$word];
+            }
+        }
+        static::$_cache['singularize'][$word] = $word;
+
+        return $word;
+    }
+
+    /**
+     * Returns the input lower_case_delimited_string as a CamelCasedString.
+     *
+     * @param string $string String to camelize
+     * @param string $delimiter the delimiter in the input string
+     * @return string CamelizedStringLikeThis.
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-camelcase-and-under-scored-forms
+     */
+    public static function camelize(string $string, string $delimiter = '_'): string
+    {
+        $cacheKey = __FUNCTION__ . $delimiter;
+
+        $result = static::_cache($cacheKey, $string);
+
+        if ($result === false) {
+            $result = str_replace(' ', '', static::humanize($string, $delimiter));
+            static::_cache($cacheKey, $string, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns the input CamelCasedString as an underscored_string.
+     *
+     * Also replaces dashes with underscores
+     *
+     * @param string $string CamelCasedString to be "underscorized"
+     * @return string underscore_version of the input string
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-camelcase-and-under-scored-forms
+     */
+    public static function underscore(string $string): string
+    {
+        return static::delimit(str_replace('-', '_', $string), '_');
+    }
+
+    /**
+     * Returns the input CamelCasedString as an dashed-string.
+     *
+     * Also replaces underscores with dashes
+     *
+     * @param string $string The string to dasherize.
+     * @return string Dashed version of the input string
+     */
+    public static function dasherize(string $string): string
+    {
+        return static::delimit(str_replace('_', '-', $string), '-');
+    }
+
+    /**
+     * Returns the input lower_case_delimited_string as 'A Human Readable String'.
+     * (Underscores are replaced by spaces and capitalized following words.)
+     *
+     * @param string $string String to be humanized
+     * @param string $delimiter the character to replace with a space
+     * @return string Human-readable string
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-human-readable-forms
+     */
+    public static function humanize(string $string, string $delimiter = '_'): string
+    {
+        $cacheKey = __FUNCTION__ . $delimiter;
+
+        $result = static::_cache($cacheKey, $string);
+
+        if ($result === false) {
+            $result = explode(' ', str_replace($delimiter, ' ', $string));
+            foreach ($result as &$word) {
+                $word = mb_strtoupper(mb_substr($word, 0, 1)) . mb_substr($word, 1);
+            }
+            $result = implode(' ', $result);
+            static::_cache($cacheKey, $string, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Expects a CamelCasedInputString, and produces a lower_case_delimited_string
+     *
+     * @param string $string String to delimit
+     * @param string $delimiter the character to use as a delimiter
+     * @return string delimited string
+     */
+    public static function delimit(string $string, string $delimiter = '_'): string
+    {
+        $cacheKey = __FUNCTION__ . $delimiter;
+
+        $result = static::_cache($cacheKey, $string);
+
+        if ($result === false) {
+            $result = mb_strtolower(preg_replace('/(?<=\\w)([A-Z])/', $delimiter . '\\1', $string));
+            static::_cache($cacheKey, $string, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns corresponding table name for given model $className. ("people" for the class name "Person").
+     *
+     * @param string $className Name of class to get database table name for
+     * @return string Name of the database table for given class
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-table-and-class-name-forms
+     */
+    public static function tableize(string $className): string
+    {
+        $result = static::_cache(__FUNCTION__, $className);
+
+        if ($result === false) {
+            $result = static::pluralize(static::underscore($className));
+            static::_cache(__FUNCTION__, $className, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns a singular, CamelCase inflection for given database table. ("Person" for the table name "people")
+     *
+     * @param string $tableName Name of database table to get class name for
+     * @return string Class name
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-table-and-class-name-forms
+     */
+    public static function classify(string $tableName): string
+    {
+        $result = static::_cache(__FUNCTION__, $tableName);
+
+        if ($result === false) {
+            $result = static::camelize(static::singularize($tableName));
+            static::_cache(__FUNCTION__, $tableName, $result);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns camelBacked version of an underscored string.
+     *
+     * @param string $string String to convert.
+     * @return string in variable form
+     * @link https://book.cakephp.org/4/en/core-libraries/inflector.html#creating-variable-names
+     */
+    public static function variable(string $string): string
+    {
+        $result = static::_cache(__FUNCTION__, $string);
+
+        if ($result === false) {
+            $camelized = static::camelize(static::underscore($string));
+            $replace = strtolower(substr($camelized, 0, 1));
+            $result = $replace . substr($camelized, 1);
+            static::_cache(__FUNCTION__, $string, $result);
+        }
+
+        return $result;
+    }
+}
diff --git a/vendor/cakephp/utility/LICENSE.txt b/vendor/cakephp/utility/LICENSE.txt
new file mode 100755
index 0000000..b938c9e
--- /dev/null
+++ b/vendor/cakephp/utility/LICENSE.txt
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+CakePHP(tm) : The Rapid Development PHP Framework (https://cakephp.org)
+Copyright (c) 2005-2020, Cake Software Foundation, Inc. (https://cakefoundation.org)
+
+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.
diff --git a/vendor/cakephp/utility/MergeVariablesTrait.php b/vendor/cakephp/utility/MergeVariablesTrait.php
new file mode 100755
index 0000000..39bafb8
--- /dev/null
+++ b/vendor/cakephp/utility/MergeVariablesTrait.php
@@ -0,0 +1,118 @@
+ $properties An array of properties and the merge strategy for them.
+     * @param array $options The options to use when merging properties.
+     * @return void
+     */
+    protected function _mergeVars(array $properties, array $options = []): void
+    {
+        $class = static::class;
+        $parents = [];
+        while (true) {
+            $parent = get_parent_class($class);
+            if (!$parent) {
+                break;
+            }
+            $parents[] = $parent;
+            $class = $parent;
+        }
+        foreach ($properties as $property) {
+            if (!property_exists($this, $property)) {
+                continue;
+            }
+            $thisValue = $this->{$property};
+            if ($thisValue === null || $thisValue === false) {
+                continue;
+            }
+            $this->_mergeProperty($property, $parents, $options);
+        }
+    }
+
+    /**
+     * Merge a single property with the values declared in all parent classes.
+     *
+     * @param string $property The name of the property being merged.
+     * @param array $parentClasses An array of classes you want to merge with.
+     * @param array $options Options for merging the property, see _mergeVars()
+     * @return void
+     */
+    protected function _mergeProperty(string $property, array $parentClasses, array $options): void
+    {
+        $thisValue = $this->{$property};
+        $isAssoc = false;
+        if (
+            isset($options['associative']) &&
+            in_array($property, (array)$options['associative'], true)
+        ) {
+            $isAssoc = true;
+        }
+
+        if ($isAssoc) {
+            $thisValue = Hash::normalize($thisValue);
+        }
+        foreach ($parentClasses as $class) {
+            $parentProperties = get_class_vars($class);
+            if (empty($parentProperties[$property])) {
+                continue;
+            }
+            $parentProperty = $parentProperties[$property];
+            if (!is_array($parentProperty)) {
+                continue;
+            }
+            $thisValue = $this->_mergePropertyData($thisValue, $parentProperty, $isAssoc);
+        }
+        $this->{$property} = $thisValue;
+    }
+
+    /**
+     * Merge each of the keys in a property together.
+     *
+     * @param array $current The current merged value.
+     * @param array $parent The parent class' value.
+     * @param bool $isAssoc Whether the merging should be done in associative mode.
+     * @return array The updated value.
+     */
+    protected function _mergePropertyData(array $current, array $parent, bool $isAssoc)
+    {
+        if (!$isAssoc) {
+            return array_merge($parent, $current);
+        }
+        $parent = Hash::normalize($parent);
+        foreach ($parent as $key => $value) {
+            if (!isset($current[$key])) {
+                $current[$key] = $value;
+            }
+        }
+
+        return $current;
+    }
+}
diff --git a/vendor/cakephp/utility/README.md b/vendor/cakephp/utility/README.md
new file mode 100755
index 0000000..45601b8
--- /dev/null
+++ b/vendor/cakephp/utility/README.md
@@ -0,0 +1,91 @@
+[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/utility.svg?style=flat-square)](https://packagist.org/packages/cakephp/utility)
+[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE.txt)
+
+# CakePHP Utility Classes
+
+This library provides a range of utility classes that are used throughout the CakePHP framework
+
+## What's in the toolbox?
+
+### Hash
+
+A ``Hash`` (as in PHP arrays) class, capable of extracting data using an intuitive DSL:
+
+```php
+$things = [
+    ['name' => 'Mark', 'age' => 15],
+    ['name' => 'Susan', 'age' => 30],
+    ['name' => 'Lucy', 'age' => 25]
+];
+
+$bigPeople = Hash::extract($things, '{n}[age>21].name');
+
+// $bigPeople will contain ['Susan', 'Lucy']
+```
+
+Check the [official Hash class documentation](https://book.cakephp.org/4/en/core-libraries/hash.html)
+
+### Inflector
+
+The Inflector class takes a string and can manipulate it to handle word variations
+such as pluralizations or camelizing.
+
+```php
+echo Inflector::pluralize('Apple'); // echoes Apples
+
+echo Inflector::singularize('People'); // echoes Person
+```
+
+Check the [official Inflector class documentation](https://book.cakephp.org/4/en/core-libraries/inflector.html)
+
+### Text
+
+The Text class includes convenience methods for creating and manipulating strings.
+
+```php
+Text::insert(
+    'My name is :name and I am :age years old.',
+    ['name' => 'Bob', 'age' => '65']
+);
+// Returns: "My name is Bob and I am 65 years old."
+
+$text = 'This is the song that never ends.';
+$result = Text::wrap($text, 22);
+
+// Returns
+This is the song
+that never ends.
+```
+
+Check the [official Text class documentation](https://book.cakephp.org/4/en/core-libraries/text.html)
+
+### Security
+
+The security library handles basic security measures such as providing methods for hashing and encrypting data.
+
+```php
+$key = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
+$result = Security::encrypt($value, $key);
+
+Security::decrypt($result, $key);
+```
+
+Check the [official Security class documentation](https://book.cakephp.org/4/en/core-libraries/security.html)
+
+### Xml
+
+The Xml class allows you to easily transform arrays into SimpleXMLElement or DOMDocument objects
+and back into arrays again
+
+```php
+$data = [
+    'post' => [
+        'id' => 1,
+        'title' => 'Best post',
+        'body' => ' ... '
+    ]
+];
+$xml = Xml::build($data);
+```
+
+Check the [official Xml class documentation](https://book.cakephp.org/4/en/core-libraries/xml.html)
diff --git a/vendor/cakephp/utility/Security.php b/vendor/cakephp/utility/Security.php
new file mode 100755
index 0000000..a46d322
--- /dev/null
+++ b/vendor/cakephp/utility/Security.php
@@ -0,0 +1,309 @@
+encrypt($plain, $key);
+        $hmac = hash_hmac('sha256', $ciphertext, $key);
+
+        return $hmac . $ciphertext;
+    }
+
+    /**
+     * Check the encryption key for proper length.
+     *
+     * @param string $key Key to check.
+     * @param string $method The method the key is being checked for.
+     * @return void
+     * @throws \InvalidArgumentException When key length is not 256 bit/32 bytes
+     */
+    protected static function _checkKey(string $key, string $method): void
+    {
+        if (mb_strlen($key, '8bit') < 32) {
+            throw new InvalidArgumentException(
+                sprintf('Invalid key for %s, key must be at least 256 bits (32 bytes) long.', $method)
+            );
+        }
+    }
+
+    /**
+     * Decrypt a value using AES-256.
+     *
+     * @param string $cipher The ciphertext to decrypt.
+     * @param string $key The 256 bit/32 byte key to use as a cipher key.
+     * @param string|null $hmacSalt The salt to use for the HMAC process.
+     *   Leave null to use value of Security::getSalt().
+     * @return string|null Decrypted data. Any trailing null bytes will be removed.
+     * @throws \InvalidArgumentException On invalid data or key.
+     */
+    public static function decrypt(string $cipher, string $key, ?string $hmacSalt = null): ?string
+    {
+        self::_checkKey($key, 'decrypt()');
+        if (empty($cipher)) {
+            throw new InvalidArgumentException('The data to decrypt cannot be empty.');
+        }
+        if ($hmacSalt === null) {
+            $hmacSalt = static::getSalt();
+        }
+
+        // Generate the encryption and hmac key.
+        $key = mb_substr(hash('sha256', $key . $hmacSalt), 0, 32, '8bit');
+
+        // Split out hmac for comparison
+        $macSize = 64;
+        $hmac = mb_substr($cipher, 0, $macSize, '8bit');
+        $cipher = mb_substr($cipher, $macSize, null, '8bit');
+
+        $compareHmac = hash_hmac('sha256', $cipher, $key);
+        if (!static::constantEquals($hmac, $compareHmac)) {
+            return null;
+        }
+
+        $crypto = static::engine();
+
+        return $crypto->decrypt($cipher, $key);
+    }
+
+    /**
+     * A timing attack resistant comparison that prefers native PHP implementations.
+     *
+     * @param mixed $original The original value.
+     * @param mixed $compare The comparison value.
+     * @return bool
+     * @since 3.6.2
+     */
+    public static function constantEquals($original, $compare): bool
+    {
+        return is_string($original) && is_string($compare) && hash_equals($original, $compare);
+    }
+
+    /**
+     * Gets the HMAC salt to be used for encryption/decryption
+     * routines.
+     *
+     * @return string The currently configured salt
+     */
+    public static function getSalt(): string
+    {
+        if (static::$_salt === null) {
+            throw new RuntimeException(
+                'Salt not set. Use Security::setSalt() to set one, ideally in `config/bootstrap.php`.'
+            );
+        }
+
+        return static::$_salt;
+    }
+
+    /**
+     * Sets the HMAC salt to be used for encryption/decryption
+     * routines.
+     *
+     * @param string $salt The salt to use for encryption routines.
+     * @return void
+     */
+    public static function setSalt(string $salt): void
+    {
+        static::$_salt = $salt;
+    }
+}
diff --git a/vendor/cakephp/utility/Text.php b/vendor/cakephp/utility/Text.php
new file mode 100755
index 0000000..7116b0d
--- /dev/null
+++ b/vendor/cakephp/utility/Text.php
@@ -0,0 +1,1180 @@
+
+     */
+    protected static $_defaultHtmlNoCount = [
+        'style',
+        'script',
+    ];
+
+    /**
+     * Generate a random UUID version 4
+     *
+     * Warning: This method should not be used as a random seed for any cryptographic operations.
+     * Instead, you should use `Security::randomBytes()` or `Security::randomString()` instead.
+     *
+     * It should also not be used to create identifiers that have security implications, such as
+     * 'unguessable' URL identifiers. Instead, you should use {@link \Cake\Utility\Security::randomBytes()}` for that.
+     *
+     * @see https://www.ietf.org/rfc/rfc4122.txt
+     * @return string RFC 4122 UUID
+     * @copyright Matt Farina MIT License https://github.com/lootils/uuid/blob/master/LICENSE
+     */
+    public static function uuid(): string
+    {
+        return sprintf(
+            '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
+            // 32 bits for "time_low"
+            random_int(0, 65535),
+            random_int(0, 65535),
+            // 16 bits for "time_mid"
+            random_int(0, 65535),
+            // 12 bits before the 0100 of (version) 4 for "time_hi_and_version"
+            random_int(0, 4095) | 0x4000,
+            // 16 bits, 8 bits for "clk_seq_hi_res",
+            // 8 bits for "clk_seq_low",
+            // two most significant bits holds zero and one for variant DCE1.1
+            random_int(0, 0x3fff) | 0x8000,
+            // 48 bits for "node"
+            random_int(0, 65535),
+            random_int(0, 65535),
+            random_int(0, 65535)
+        );
+    }
+
+    /**
+     * Tokenizes a string using $separator, ignoring any instance of $separator that appears between
+     * $leftBound and $rightBound.
+     *
+     * @param string $data The data to tokenize.
+     * @param string $separator The token to split the data on.
+     * @param string $leftBound The left boundary to ignore separators in.
+     * @param string $rightBound The right boundary to ignore separators in.
+     * @return array Array of tokens in $data.
+     */
+    public static function tokenize(
+        string $data,
+        string $separator = ',',
+        string $leftBound = '(',
+        string $rightBound = ')'
+    ): array {
+        if (empty($data)) {
+            return [];
+        }
+
+        $depth = 0;
+        $offset = 0;
+        $buffer = '';
+        $results = [];
+        $length = mb_strlen($data);
+        $open = false;
+
+        while ($offset <= $length) {
+            $tmpOffset = -1;
+            $offsets = [
+                mb_strpos($data, $separator, $offset),
+                mb_strpos($data, $leftBound, $offset),
+                mb_strpos($data, $rightBound, $offset),
+            ];
+            for ($i = 0; $i < 3; $i++) {
+                if ($offsets[$i] !== false && ($offsets[$i] < $tmpOffset || $tmpOffset === -1)) {
+                    $tmpOffset = $offsets[$i];
+                }
+            }
+            if ($tmpOffset !== -1) {
+                $buffer .= mb_substr($data, $offset, $tmpOffset - $offset);
+                $char = mb_substr($data, $tmpOffset, 1);
+                if (!$depth && $char === $separator) {
+                    $results[] = $buffer;
+                    $buffer = '';
+                } else {
+                    $buffer .= $char;
+                }
+                if ($leftBound !== $rightBound) {
+                    if ($char === $leftBound) {
+                        $depth++;
+                    }
+                    if ($char === $rightBound) {
+                        $depth--;
+                    }
+                } else {
+                    if ($char === $leftBound) {
+                        if (!$open) {
+                            $depth++;
+                            $open = true;
+                        } else {
+                            $depth--;
+                            $open = false;
+                        }
+                    }
+                }
+                $tmpOffset += 1;
+                $offset = $tmpOffset;
+            } else {
+                $results[] = $buffer . mb_substr($data, $offset);
+                $offset = $length + 1;
+            }
+        }
+        if (empty($results) && !empty($buffer)) {
+            $results[] = $buffer;
+        }
+
+        if (!empty($results)) {
+            return array_map('trim', $results);
+        }
+
+        return [];
+    }
+
+    /**
+     * Replaces variable placeholders inside a $str with any given $data. Each key in the $data array
+     * corresponds to a variable placeholder name in $str.
+     * Example:
+     * ```
+     * Text::insert(':name is :age years old.', ['name' => 'Bob', 'age' => '65']);
+     * ```
+     * Returns: Bob is 65 years old.
+     *
+     * Available $options are:
+     *
+     * - before: The character or string in front of the name of the variable placeholder (Defaults to `:`)
+     * - after: The character or string after the name of the variable placeholder (Defaults to null)
+     * - escape: The character or string used to escape the before character / string (Defaults to `\`)
+     * - format: A regex to use for matching variable placeholders. Default is: `/(? val array where each key stands for a placeholder variable name
+     *     to be replaced with val
+     * @param array $options An array of options, see description above
+     * @return string
+     */
+    public static function insert(string $str, array $data, array $options = []): string
+    {
+        $defaults = [
+            'before' => ':', 'after' => '', 'escape' => '\\', 'format' => null, 'clean' => false,
+        ];
+        $options += $defaults;
+        if (empty($data)) {
+            return $options['clean'] ? static::cleanInsert($str, $options) : $str;
+        }
+
+        if (strpos($str, '?') !== false && is_numeric(key($data))) {
+            deprecationWarning(
+                'Using Text::insert() with `?` placeholders is deprecated. ' .
+                'Use sprintf() with `%s` placeholders instead.'
+            );
+
+            $offset = 0;
+            while (($pos = strpos($str, '?', $offset)) !== false) {
+                $val = array_shift($data);
+                $offset = $pos + strlen($val);
+                $str = substr_replace($str, $val, $pos, 1);
+            }
+
+            return $options['clean'] ? static::cleanInsert($str, $options) : $str;
+        }
+
+        $format = $options['format'];
+        if ($format === null) {
+            $format = sprintf(
+                '/(? $tempData */
+        $tempData = array_combine($dataKeys, $hashKeys);
+        krsort($tempData);
+
+        foreach ($tempData as $key => $hashVal) {
+            $key = sprintf($format, preg_quote($key, '/'));
+            $str = preg_replace($key, $hashVal, $str);
+        }
+        /** @var array $dataReplacements */
+        $dataReplacements = array_combine($hashKeys, array_values($data));
+        foreach ($dataReplacements as $tmpHash => $tmpValue) {
+            $tmpValue = is_array($tmpValue) ? '' : (string)$tmpValue;
+            $str = str_replace($tmpHash, $tmpValue, $str);
+        }
+
+        if (!isset($options['format']) && isset($options['before'])) {
+            $str = str_replace($options['escape'] . $options['before'], $options['before'], $str);
+        }
+
+        return $options['clean'] ? static::cleanInsert($str, $options) : $str;
+    }
+
+    /**
+     * Cleans up a Text::insert() formatted string with given $options depending on the 'clean' key in
+     * $options. The default method used is text but html is also available. The goal of this function
+     * is to replace all whitespace and unneeded markup around placeholders that did not get replaced
+     * by Text::insert().
+     *
+     * @param string $str String to clean.
+     * @param array $options Options list.
+     * @return string
+     * @see \Cake\Utility\Text::insert()
+     */
+    public static function cleanInsert(string $str, array $options): string
+    {
+        $clean = $options['clean'];
+        if (!$clean) {
+            return $str;
+        }
+        if ($clean === true) {
+            $clean = ['method' => 'text'];
+        }
+        if (!is_array($clean)) {
+            $clean = ['method' => $options['clean']];
+        }
+        switch ($clean['method']) {
+            case 'html':
+                $clean += [
+                    'word' => '[\w,.]+',
+                    'andText' => true,
+                    'replacement' => '',
+                ];
+                $kleenex = sprintf(
+                    '/[\s]*[a-z]+=(")(%s%s%s[\s]*)+\\1/i',
+                    preg_quote($options['before'], '/'),
+                    $clean['word'],
+                    preg_quote($options['after'], '/')
+                );
+                $str = preg_replace($kleenex, $clean['replacement'], $str);
+                if ($clean['andText']) {
+                    $options['clean'] = ['method' => 'text'];
+                    $str = static::cleanInsert($str, $options);
+                }
+                break;
+            case 'text':
+                $clean += [
+                    'word' => '[\w,.]+',
+                    'gap' => '[\s]*(?:(?:and|or)[\s]*)?',
+                    'replacement' => '',
+                ];
+
+                $kleenex = sprintf(
+                    '/(%s%s%s%s|%s%s%s%s)/',
+                    preg_quote($options['before'], '/'),
+                    $clean['word'],
+                    preg_quote($options['after'], '/'),
+                    $clean['gap'],
+                    $clean['gap'],
+                    preg_quote($options['before'], '/'),
+                    $clean['word'],
+                    preg_quote($options['after'], '/')
+                );
+                $str = preg_replace($kleenex, $clean['replacement'], $str);
+                break;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Wraps text to a specific width, can optionally wrap at word breaks.
+     *
+     * ### Options
+     *
+     * - `width` The width to wrap to. Defaults to 72.
+     * - `wordWrap` Only wrap on words breaks (spaces) Defaults to true.
+     * - `indent` String to indent with. Defaults to null.
+     * - `indentAt` 0 based index to start indenting at. Defaults to 0.
+     *
+     * @param string $text The text to format.
+     * @param array|int $options Array of options to use, or an integer to wrap the text to.
+     * @return string Formatted text.
+     */
+    public static function wrap(string $text, $options = []): string
+    {
+        if (is_numeric($options)) {
+            $options = ['width' => $options];
+        }
+        $options += ['width' => 72, 'wordWrap' => true, 'indent' => null, 'indentAt' => 0];
+        if ($options['wordWrap']) {
+            $wrapped = self::wordWrap($text, $options['width'], "\n");
+        } else {
+            $wrapped = trim(chunk_split($text, $options['width'] - 1, "\n"));
+        }
+        if (!empty($options['indent'])) {
+            $chunks = explode("\n", $wrapped);
+            for ($i = $options['indentAt'], $len = count($chunks); $i < $len; $i++) {
+                $chunks[$i] = $options['indent'] . $chunks[$i];
+            }
+            $wrapped = implode("\n", $chunks);
+        }
+
+        return $wrapped;
+    }
+
+    /**
+     * Wraps a complete block of text to a specific width, can optionally wrap
+     * at word breaks.
+     *
+     * ### Options
+     *
+     * - `width` The width to wrap to. Defaults to 72.
+     * - `wordWrap` Only wrap on words breaks (spaces) Defaults to true.
+     * - `indent` String to indent with. Defaults to null.
+     * - `indentAt` 0 based index to start indenting at. Defaults to 0.
+     *
+     * @param string $text The text to format.
+     * @param array|int $options Array of options to use, or an integer to wrap the text to.
+     * @return string Formatted text.
+     */
+    public static function wrapBlock(string $text, $options = []): string
+    {
+        if (is_numeric($options)) {
+            $options = ['width' => $options];
+        }
+        $options += ['width' => 72, 'wordWrap' => true, 'indent' => null, 'indentAt' => 0];
+
+        $wrapped = self::wrap($text, $options);
+
+        if (!empty($options['indent'])) {
+            $indentationLength = mb_strlen($options['indent']);
+            $chunks = explode("\n", $wrapped);
+            $count = count($chunks);
+            if ($count < 2) {
+                return $wrapped;
+            }
+            $toRewrap = '';
+            for ($i = $options['indentAt']; $i < $count; $i++) {
+                $toRewrap .= mb_substr($chunks[$i], $indentationLength) . ' ';
+                unset($chunks[$i]);
+            }
+            $options['width'] -= $indentationLength;
+            $options['indentAt'] = 0;
+            $rewrapped = self::wrap($toRewrap, $options);
+            $newChunks = explode("\n", $rewrapped);
+
+            $chunks = array_merge($chunks, $newChunks);
+            $wrapped = implode("\n", $chunks);
+        }
+
+        return $wrapped;
+    }
+
+    /**
+     * Unicode and newline aware version of wordwrap.
+     *
+     * @phpstan-param non-empty-string $break
+     * @param string $text The text to format.
+     * @param int $width The width to wrap to. Defaults to 72.
+     * @param string $break The line is broken using the optional break parameter. Defaults to '\n'.
+     * @param bool $cut If the cut is set to true, the string is always wrapped at the specified width.
+     * @return string Formatted text.
+     */
+    public static function wordWrap(string $text, int $width = 72, string $break = "\n", bool $cut = false): string
+    {
+        $paragraphs = explode($break, $text);
+        foreach ($paragraphs as &$paragraph) {
+            $paragraph = static::_wordWrap($paragraph, $width, $break, $cut);
+        }
+
+        return implode($break, $paragraphs);
+    }
+
+    /**
+     * Unicode aware version of wordwrap as helper method.
+     *
+     * @param string $text The text to format.
+     * @param int $width The width to wrap to. Defaults to 72.
+     * @param string $break The line is broken using the optional break parameter. Defaults to '\n'.
+     * @param bool $cut If the cut is set to true, the string is always wrapped at the specified width.
+     * @return string Formatted text.
+     */
+    protected static function _wordWrap(string $text, int $width = 72, string $break = "\n", bool $cut = false): string
+    {
+        $parts = [];
+        if ($cut) {
+            while (mb_strlen($text) > 0) {
+                $part = mb_substr($text, 0, $width);
+                $parts[] = trim($part);
+                $text = trim(mb_substr($text, mb_strlen($part)));
+            }
+
+            return implode($break, $parts);
+        }
+
+        while (mb_strlen($text) > 0) {
+            if ($width >= mb_strlen($text)) {
+                $parts[] = trim($text);
+                break;
+            }
+
+            $part = mb_substr($text, 0, $width);
+            $nextChar = mb_substr($text, $width, 1);
+            if ($nextChar !== ' ') {
+                $breakAt = mb_strrpos($part, ' ');
+                if ($breakAt === false) {
+                    $breakAt = mb_strpos($text, ' ', $width);
+                }
+                if ($breakAt === false) {
+                    $parts[] = trim($text);
+                    break;
+                }
+                $part = mb_substr($text, 0, $breakAt);
+            }
+
+            $part = trim($part);
+            $parts[] = $part;
+            $text = trim(mb_substr($text, mb_strlen($part)));
+        }
+
+        return implode($break, $parts);
+    }
+
+    /**
+     * Highlights a given phrase in a text. You can specify any expression in highlighter that
+     * may include the \1 expression to include the $phrase found.
+     *
+     * ### Options:
+     *
+     * - `format` The piece of HTML with that the phrase will be highlighted
+     * - `html` If true, will ignore any HTML tags, ensuring that only the correct text is highlighted
+     * - `regex` A custom regex rule that is used to match words, default is '|$tag|iu'
+     * - `limit` A limit, optional, defaults to -1 (none)
+     *
+     * @param string $text Text to search the phrase in.
+     * @param array|string $phrase The phrase or phrases that will be searched.
+     * @param array $options An array of HTML attributes and options.
+     * @return string The highlighted text
+     * @link https://book.cakephp.org/4/en/core-libraries/text.html#highlighting-substrings
+     */
+    public static function highlight(string $text, $phrase, array $options = []): string
+    {
+        if (empty($phrase)) {
+            return $text;
+        }
+
+        $defaults = [
+            'format' => '\1',
+            'html' => false,
+            'regex' => '|%s|iu',
+            'limit' => -1,
+        ];
+        $options += $defaults;
+
+        if (is_array($phrase)) {
+            $replace = [];
+            $with = [];
+
+            foreach ($phrase as $key => $segment) {
+                $segment = '(' . preg_quote($segment, '|') . ')';
+                if ($options['html']) {
+                    $segment = "(?![^<]+>)$segment(?![^<]+>)";
+                }
+
+                $with[] = is_array($options['format']) ? $options['format'][$key] : $options['format'];
+                $replace[] = sprintf($options['regex'], $segment);
+            }
+
+            return preg_replace($replace, $with, $text, $options['limit']);
+        }
+
+        $phrase = '(' . preg_quote($phrase, '|') . ')';
+        if ($options['html']) {
+            $phrase = "(?![^<]+>)$phrase(?![^<]+>)";
+        }
+
+        return preg_replace(
+            sprintf($options['regex'], $phrase),
+            $options['format'],
+            $text,
+            $options['limit']
+        );
+    }
+
+    /**
+     * Truncates text starting from the end.
+     *
+     * Cuts a string to the length of $length and replaces the first characters
+     * with the ellipsis if the text is longer than length.
+     *
+     * ### Options:
+     *
+     * - `ellipsis` Will be used as beginning and prepended to the trimmed string
+     * - `exact` If false, $text will not be cut mid-word
+     *
+     * @param string $text String to truncate.
+     * @param int $length Length of returned string, including ellipsis.
+     * @param array $options An array of options.
+     * @return string Trimmed string.
+     */
+    public static function tail(string $text, int $length = 100, array $options = []): string
+    {
+        $default = [
+            'ellipsis' => '...', 'exact' => true,
+        ];
+        $options += $default;
+        $ellipsis = $options['ellipsis'];
+
+        if (mb_strlen($text) <= $length) {
+            return $text;
+        }
+
+        $truncate = mb_substr($text, mb_strlen($text) - $length + mb_strlen($ellipsis));
+        if (!$options['exact']) {
+            $spacepos = mb_strpos($truncate, ' ');
+            $truncate = $spacepos === false ? '' : trim(mb_substr($truncate, $spacepos));
+        }
+
+        return $ellipsis . $truncate;
+    }
+
+    /**
+     * Truncates text.
+     *
+     * Cuts a string to the length of $length and replaces the last characters
+     * with the ellipsis if the text is longer than length.
+     *
+     * ### Options:
+     *
+     * - `ellipsis` Will be used as ending and appended to the trimmed string
+     * - `exact` If false, $text will not be cut mid-word
+     * - `html` If true, HTML tags would be handled correctly
+     * - `trimWidth` If true, $text will be truncated with the width
+     *
+     * @param string $text String to truncate.
+     * @param int $length Length of returned string, including ellipsis.
+     * @param array $options An array of HTML attributes and options.
+     * @return string Trimmed string.
+     * @link https://book.cakephp.org/4/en/core-libraries/text.html#truncating-text
+     */
+    public static function truncate(string $text, int $length = 100, array $options = []): string
+    {
+        $default = [
+            'ellipsis' => '...', 'exact' => true, 'html' => false, 'trimWidth' => false,
+        ];
+        if (!empty($options['html']) && strtolower((string)mb_internal_encoding()) === 'utf-8') {
+            $default['ellipsis'] = "\xe2\x80\xa6";
+        }
+        $options += $default;
+
+        $prefix = '';
+        $suffix = $options['ellipsis'];
+
+        if ($options['html']) {
+            $ellipsisLength = self::_strlen(strip_tags($options['ellipsis']), $options);
+
+            $truncateLength = 0;
+            $totalLength = 0;
+            $openTags = [];
+            $truncate = '';
+
+            preg_match_all('/(<\/?([\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
+            foreach ($tags as $tag) {
+                $contentLength = 0;
+                if (!in_array($tag[2], static::$_defaultHtmlNoCount, true)) {
+                    $contentLength = self::_strlen($tag[3], $options);
+                }
+
+                if ($truncate === '') {
+                    if (
+                        !preg_match(
+                            '/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/i',
+                            $tag[2]
+                        )
+                    ) {
+                        if (preg_match('/<[\w]+[^>]*>/', $tag[0])) {
+                            array_unshift($openTags, $tag[2]);
+                        } elseif (preg_match('/<\/([\w]+)[^>]*>/', $tag[0], $closeTag)) {
+                            $pos = array_search($closeTag[1], $openTags, true);
+                            if ($pos !== false) {
+                                array_splice($openTags, $pos, 1);
+                            }
+                        }
+                    }
+
+                    $prefix .= $tag[1];
+
+                    if ($totalLength + $contentLength + $ellipsisLength > $length) {
+                        $truncate = $tag[3];
+                        $truncateLength = $length - $totalLength;
+                    } else {
+                        $prefix .= $tag[3];
+                    }
+                }
+
+                $totalLength += $contentLength;
+                if ($totalLength > $length) {
+                    break;
+                }
+            }
+
+            if ($totalLength <= $length) {
+                return $text;
+            }
+
+            $text = $truncate;
+            $length = $truncateLength;
+
+            foreach ($openTags as $tag) {
+                $suffix .= '';
+            }
+        } else {
+            if (self::_strlen($text, $options) <= $length) {
+                return $text;
+            }
+            $ellipsisLength = self::_strlen($options['ellipsis'], $options);
+        }
+
+        $result = self::_substr($text, 0, $length - $ellipsisLength, $options);
+
+        if (!$options['exact']) {
+            if (self::_substr($text, $length - $ellipsisLength, 1, $options) !== ' ') {
+                $result = self::_removeLastWord($result);
+            }
+
+            // If result is empty, then we don't need to count ellipsis in the cut.
+            if ($result === '') {
+                $result = self::_substr($text, 0, $length, $options);
+            }
+        }
+
+        return $prefix . $result . $suffix;
+    }
+
+    /**
+     * Truncate text with specified width.
+     *
+     * @param string $text String to truncate.
+     * @param int $length Length of returned string, including ellipsis.
+     * @param array $options An array of HTML attributes and options.
+     * @return string Trimmed string.
+     * @see \Cake\Utility\Text::truncate()
+     */
+    public static function truncateByWidth(string $text, int $length = 100, array $options = []): string
+    {
+        return static::truncate($text, $length, ['trimWidth' => true] + $options);
+    }
+
+    /**
+     * Get string length.
+     *
+     * ### Options:
+     *
+     * - `html` If true, HTML entities will be handled as decoded characters.
+     * - `trimWidth` If true, the width will return.
+     *
+     * @param string $text The string being checked for length
+     * @param array $options An array of options.
+     * @return int
+     */
+    protected static function _strlen(string $text, array $options): int
+    {
+        if (empty($options['trimWidth'])) {
+            $strlen = 'mb_strlen';
+        } else {
+            $strlen = 'mb_strwidth';
+        }
+
+        if (empty($options['html'])) {
+            return $strlen($text);
+        }
+
+        $pattern = '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i';
+        $replace = preg_replace_callback(
+            $pattern,
+            function ($match) use ($strlen) {
+                $utf8 = html_entity_decode($match[0], ENT_HTML5 | ENT_QUOTES, 'UTF-8');
+
+                return str_repeat(' ', $strlen($utf8, 'UTF-8'));
+            },
+            $text
+        );
+
+        return $strlen($replace);
+    }
+
+    /**
+     * Return part of a string.
+     *
+     * ### Options:
+     *
+     * - `html` If true, HTML entities will be handled as decoded characters.
+     * - `trimWidth` If true, will be truncated with specified width.
+     *
+     * @param string $text The input string.
+     * @param int $start The position to begin extracting.
+     * @param int|null $length The desired length.
+     * @param array $options An array of options.
+     * @return string
+     */
+    protected static function _substr(string $text, int $start, ?int $length, array $options): string
+    {
+        if (empty($options['trimWidth'])) {
+            $substr = 'mb_substr';
+        } else {
+            $substr = 'mb_strimwidth';
+        }
+
+        $maxPosition = self::_strlen($text, ['trimWidth' => false] + $options);
+        if ($start < 0) {
+            $start += $maxPosition;
+            if ($start < 0) {
+                $start = 0;
+            }
+        }
+        if ($start >= $maxPosition) {
+            return '';
+        }
+
+        if ($length === null) {
+            $length = self::_strlen($text, $options);
+        }
+
+        if ($length < 0) {
+            $text = self::_substr($text, $start, null, $options);
+            $start = 0;
+            $length += self::_strlen($text, $options);
+        }
+
+        if ($length <= 0) {
+            return '';
+        }
+
+        if (empty($options['html'])) {
+            return (string)$substr($text, $start, $length);
+        }
+
+        $totalOffset = 0;
+        $totalLength = 0;
+        $result = '';
+
+        $pattern = '/(&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};)/i';
+        $parts = preg_split($pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+        foreach ($parts as $part) {
+            $offset = 0;
+
+            if ($totalOffset < $start) {
+                $len = self::_strlen($part, ['trimWidth' => false] + $options);
+                if ($totalOffset + $len <= $start) {
+                    $totalOffset += $len;
+                    continue;
+                }
+
+                $offset = $start - $totalOffset;
+                $totalOffset = $start;
+            }
+
+            $len = self::_strlen($part, $options);
+            if ($offset !== 0 || $totalLength + $len > $length) {
+                if (
+                    strpos($part, '&') === 0
+                    && preg_match($pattern, $part)
+                    && $part !== html_entity_decode($part, ENT_HTML5 | ENT_QUOTES, 'UTF-8')
+                ) {
+                    // Entities cannot be passed substr.
+                    continue;
+                }
+
+                $part = $substr($part, $offset, $length - $totalLength);
+                $len = self::_strlen($part, $options);
+            }
+
+            $result .= $part;
+            $totalLength += $len;
+            if ($totalLength >= $length) {
+                break;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Removes the last word from the input text.
+     *
+     * @param string $text The input text
+     * @return string
+     */
+    protected static function _removeLastWord(string $text): string
+    {
+        $spacepos = mb_strrpos($text, ' ');
+
+        if ($spacepos !== false) {
+            $lastWord = mb_substr($text, $spacepos);
+
+            // Some languages are written without word separation.
+            // We recognize a string as a word if it doesn't contain any full-width characters.
+            if (mb_strwidth($lastWord) === mb_strlen($lastWord)) {
+                $text = mb_substr($text, 0, $spacepos);
+            }
+
+            return $text;
+        }
+
+        return '';
+    }
+
+    /**
+     * Extracts an excerpt from the text surrounding the phrase with a number of characters on each side
+     * determined by radius.
+     *
+     * @param string $text String to search the phrase in
+     * @param string $phrase Phrase that will be searched for
+     * @param int $radius The amount of characters that will be returned on each side of the founded phrase
+     * @param string $ellipsis Ending that will be appended
+     * @return string Modified string
+     * @link https://book.cakephp.org/4/en/core-libraries/text.html#extracting-an-excerpt
+     */
+    public static function excerpt(string $text, string $phrase, int $radius = 100, string $ellipsis = '...'): string
+    {
+        if (empty($text) || empty($phrase)) {
+            return static::truncate($text, $radius * 2, ['ellipsis' => $ellipsis]);
+        }
+
+        $append = $prepend = $ellipsis;
+
+        $phraseLen = mb_strlen($phrase);
+        $textLen = mb_strlen($text);
+
+        $pos = mb_stripos($text, $phrase);
+        if ($pos === false) {
+            return mb_substr($text, 0, $radius) . $ellipsis;
+        }
+
+        $startPos = $pos - $radius;
+        if ($startPos <= 0) {
+            $startPos = 0;
+            $prepend = '';
+        }
+
+        $endPos = $pos + $phraseLen + $radius;
+        if ($endPos >= $textLen) {
+            $endPos = $textLen;
+            $append = '';
+        }
+
+        $excerpt = mb_substr($text, $startPos, $endPos - $startPos);
+
+        return $prepend . $excerpt . $append;
+    }
+
+    /**
+     * Creates a comma separated list where the last two items are joined with 'and', forming natural language.
+     *
+     * @param array $list The list to be joined.
+     * @param string|null $and The word used to join the last and second last items together with. Defaults to 'and'.
+     * @param string $separator The separator used to join all the other items together. Defaults to ', '.
+     * @return string The glued together string.
+     * @link https://book.cakephp.org/4/en/core-libraries/text.html#converting-an-array-to-sentence-form
+     */
+    public static function toList(array $list, ?string $and = null, string $separator = ', '): string
+    {
+        if ($and === null) {
+            $and = __d('cake', 'and');
+        }
+        if (count($list) > 1) {
+            return implode($separator, array_slice($list, 0, -1)) . ' ' . $and . ' ' . array_pop($list);
+        }
+
+        return (string)array_pop($list);
+    }
+
+    /**
+     * Check if the string contain multibyte characters
+     *
+     * @param string $string value to test
+     * @return bool
+     */
+    public static function isMultibyte(string $string): bool
+    {
+        $length = strlen($string);
+
+        for ($i = 0; $i < $length; $i++) {
+            $value = ord($string[$i]);
+            if ($value > 128) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Converts a multibyte character string
+     * to the decimal value of the character
+     *
+     * @param string $string String to convert.
+     * @return array
+     */
+    public static function utf8(string $string): array
+    {
+        $map = [];
+
+        $values = [];
+        $find = 1;
+        $length = strlen($string);
+
+        for ($i = 0; $i < $length; $i++) {
+            $value = ord($string[$i]);
+
+            if ($value < 128) {
+                $map[] = $value;
+            } else {
+                if (empty($values)) {
+                    $find = $value < 224 ? 2 : 3;
+                }
+                $values[] = $value;
+
+                if (count($values) === $find) {
+                    if ($find === 3) {
+                        $map[] = (($values[0] % 16) * 4096) + (($values[1] % 64) * 64) + ($values[2] % 64);
+                    } else {
+                        $map[] = (($values[0] % 32) * 64) + ($values[1] % 64);
+                    }
+                    $values = [];
+                    $find = 1;
+                }
+            }
+        }
+
+        return $map;
+    }
+
+    /**
+     * Converts the decimal value of a multibyte character string
+     * to a string
+     *
+     * @param array $array Array
+     * @return string
+     */
+    public static function ascii(array $array): string
+    {
+        $ascii = '';
+
+        foreach ($array as $utf8) {
+            if ($utf8 < 128) {
+                $ascii .= chr($utf8);
+            } elseif ($utf8 < 2048) {
+                $ascii .= chr(192 + (($utf8 - ($utf8 % 64)) / 64));
+                $ascii .= chr(128 + ($utf8 % 64));
+            } else {
+                $ascii .= chr(224 + (($utf8 - ($utf8 % 4096)) / 4096));
+                $ascii .= chr(128 + ((($utf8 % 4096) - ($utf8 % 64)) / 64));
+                $ascii .= chr(128 + ($utf8 % 64));
+            }
+        }
+
+        return $ascii;
+    }
+
+    /**
+     * Converts filesize from human readable string to bytes
+     *
+     * @param string $size Size in human readable string like '5MB', '5M', '500B', '50kb' etc.
+     * @param mixed $default Value to be returned when invalid size was used, for example 'Unknown type'
+     * @return mixed Number of bytes as integer on success, `$default` on failure if not false
+     * @throws \InvalidArgumentException On invalid Unit type.
+     * @link https://book.cakephp.org/4/en/core-libraries/text.html#Cake\Utility\Text::parseFileSize
+     */
+    public static function parseFileSize(string $size, $default = false)
+    {
+        if (ctype_digit($size)) {
+            return (int)$size;
+        }
+        $size = strtoupper($size);
+
+        $l = -2;
+        $i = array_search(substr($size, -2), ['KB', 'MB', 'GB', 'TB', 'PB'], true);
+        if ($i === false) {
+            $l = -1;
+            $i = array_search(substr($size, -1), ['K', 'M', 'G', 'T', 'P'], true);
+        }
+        if ($i !== false) {
+            $size = (float)substr($size, 0, $l);
+
+            return (int)($size * pow(1024, $i + 1));
+        }
+
+        if (substr($size, -1) === 'B' && ctype_digit(substr($size, 0, -1))) {
+            $size = substr($size, 0, -1);
+
+            return (int)$size;
+        }
+
+        if ($default !== false) {
+            return $default;
+        }
+        throw new InvalidArgumentException('No unit type.');
+    }
+
+    /**
+     * Get the default transliterator.
+     *
+     * @return \Transliterator|null Either a Transliterator instance, or `null`
+     *   in case no transliterator has been set yet.
+     */
+    public static function getTransliterator(): ?Transliterator
+    {
+        return static::$_defaultTransliterator;
+    }
+
+    /**
+     * Set the default transliterator.
+     *
+     * @param \Transliterator $transliterator A `Transliterator` instance.
+     * @return void
+     */
+    public static function setTransliterator(Transliterator $transliterator): void
+    {
+        static::$_defaultTransliterator = $transliterator;
+    }
+
+    /**
+     * Get default transliterator identifier string.
+     *
+     * @return string Transliterator identifier.
+     */
+    public static function getTransliteratorId(): string
+    {
+        return static::$_defaultTransliteratorId;
+    }
+
+    /**
+     * Set default transliterator identifier string.
+     *
+     * @param string $transliteratorId Transliterator identifier.
+     * @return void
+     */
+    public static function setTransliteratorId(string $transliteratorId): void
+    {
+        $transliterator = transliterator_create($transliteratorId);
+        if ($transliterator === null) {
+            throw new CakeException('Unable to create transliterator for id: ' . $transliteratorId);
+        }
+
+        static::setTransliterator($transliterator);
+        static::$_defaultTransliteratorId = $transliteratorId;
+    }
+
+    /**
+     * Transliterate string.
+     *
+     * @param string $string String to transliterate.
+     * @param \Transliterator|string|null $transliterator Either a Transliterator
+     *   instance, or a transliterator identifier string. If `null`, the default
+     *   transliterator (identifier) set via `setTransliteratorId()` or
+     *   `setTransliterator()` will be used.
+     * @return string
+     * @see https://secure.php.net/manual/en/transliterator.transliterate.php
+     */
+    public static function transliterate(string $string, $transliterator = null): string
+    {
+        if (empty($transliterator)) {
+            $transliterator = static::$_defaultTransliterator ?: static::$_defaultTransliteratorId;
+        }
+
+        $return = transliterator_transliterate($transliterator, $string);
+        if ($return === false) {
+            throw new CakeException(sprintf('Unable to transliterate string: %s', $string));
+        }
+
+        return $return;
+    }
+
+    /**
+     * Returns a string with all spaces converted to dashes (by default),
+     * characters transliterated to ASCII characters, and non word characters removed.
+     *
+     * ### Options:
+     *
+     * - `replacement`: Replacement string. Default '-'.
+     * - `transliteratorId`: A valid transliterator id string.
+     *   If `null` (default) the transliterator (identifier) set via
+     *   `setTransliteratorId()` or `setTransliterator()` will be used.
+     *   If `false` no transliteration will be done, only non words will be removed.
+     * - `preserve`: Specific non-word character to preserve. Default `null`.
+     *   For e.g. this option can be set to '.' to generate clean file names.
+     *
+     * @param string $string the string you want to slug
+     * @param array|string $options If string it will be use as replacement character
+     *   or an array of options.
+     * @return string
+     * @see setTransliterator()
+     * @see setTransliteratorId()
+     */
+    public static function slug(string $string, $options = []): string
+    {
+        if (is_string($options)) {
+            $options = ['replacement' => $options];
+        }
+        $options += [
+            'replacement' => '-',
+            'transliteratorId' => null,
+            'preserve' => null,
+        ];
+
+        if ($options['transliteratorId'] !== false) {
+            $string = static::transliterate($string, $options['transliteratorId']);
+        }
+
+        $regex = '^\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}';
+        if ($options['preserve']) {
+            $regex .= preg_quote($options['preserve'], '/');
+        }
+        $quotedReplacement = preg_quote((string)$options['replacement'], '/');
+        $map = [
+            '/[' . $regex . ']/mu' => $options['replacement'],
+            sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
+        ];
+        if (is_string($options['replacement']) && $options['replacement'] !== '') {
+            $map[sprintf('/[%s]+/mu', $quotedReplacement)] = $options['replacement'];
+        }
+
+        return preg_replace(array_keys($map), $map, $string);
+    }
+}
diff --git a/vendor/cakephp/utility/Xml.php b/vendor/cakephp/utility/Xml.php
new file mode 100755
index 0000000..53ddfbd
--- /dev/null
+++ b/vendor/cakephp/utility/Xml.php
@@ -0,0 +1,502 @@
+text');
+     * ```
+     *
+     * Building XML from string (output DOMDocument):
+     *
+     * ```
+     * $xml = Xml::build('text', ['return' => 'domdocument']);
+     * ```
+     *
+     * Building XML from a file path:
+     *
+     * ```
+     * $xml = Xml::build('/path/to/an/xml/file.xml', ['readFile' => true]);
+     * ```
+     *
+     * Building XML from a remote URL:
+     *
+     * ```
+     * use Cake\Http\Client;
+     *
+     * $http = new Client();
+     * $response = $http->get('http://example.com/example.xml');
+     * $xml = Xml::build($response->body());
+     * ```
+     *
+     * Building from an array:
+     *
+     * ```
+     *  $value = [
+     *      'tags' => [
+     *          'tag' => [
+     *              [
+     *                  'id' => '1',
+     *                  'name' => 'defect'
+     *              ],
+     *              [
+     *                  'id' => '2',
+     *                  'name' => 'enhancement'
+     *              ]
+     *          ]
+     *      ]
+     *  ];
+     * $xml = Xml::build($value);
+     * ```
+     *
+     * When building XML from an array ensure that there is only one top level element.
+     *
+     * ### Options
+     *
+     * - `return` Can be 'simplexml' to return object of SimpleXMLElement or 'domdocument' to return DOMDocument.
+     * - `loadEntities` Defaults to false. Set to true to enable loading of ` $options The options to use
+     * @return \SimpleXMLElement|\DOMDocument SimpleXMLElement or DOMDocument
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    public static function build($input, array $options = [])
+    {
+        $defaults = [
+            'return' => 'simplexml',
+            'loadEntities' => false,
+            'readFile' => false,
+            'parseHuge' => false,
+        ];
+        $options += $defaults;
+
+        if (is_array($input) || is_object($input)) {
+            return static::fromArray($input, $options);
+        }
+
+        if ($options['readFile'] && file_exists($input)) {
+            return static::_loadXml(file_get_contents($input), $options);
+        }
+
+        if (!is_string($input)) {
+            $type = gettype($input);
+            throw new XmlException("Invalid input. {$type} cannot be parsed as XML.");
+        }
+
+        if (strpos($input, '<') !== false) {
+            return static::_loadXml($input, $options);
+        }
+
+        throw new XmlException('XML cannot be read.');
+    }
+
+    /**
+     * Parse the input data and create either a SimpleXmlElement object or a DOMDocument.
+     *
+     * @param string $input The input to load.
+     * @param array $options The options to use. See Xml::build()
+     * @return \SimpleXMLElement|\DOMDocument
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    protected static function _loadXml(string $input, array $options)
+    {
+        return static::load(
+            $input,
+            $options,
+            function ($input, $options, $flags) {
+                if ($options['return'] === 'simplexml' || $options['return'] === 'simplexmlelement') {
+                    $flags |= LIBXML_NOCDATA;
+                    $xml = new SimpleXMLElement($input, $flags);
+                } else {
+                    $xml = new DOMDocument();
+                    $xml->loadXML($input, $flags);
+                }
+
+                return $xml;
+            }
+        );
+    }
+
+    /**
+     * Parse the input html string and create either a SimpleXmlElement object or a DOMDocument.
+     *
+     * @param string $input The input html string to load.
+     * @param array $options The options to use. See Xml::build()
+     * @return \SimpleXMLElement|\DOMDocument
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    public static function loadHtml(string $input, array $options = [])
+    {
+        $defaults = [
+            'return' => 'simplexml',
+            'loadEntities' => false,
+        ];
+        $options += $defaults;
+
+        return static::load(
+            $input,
+            $options,
+            function ($input, $options, $flags) {
+                $xml = new DOMDocument();
+                $xml->loadHTML($input, $flags);
+
+                if ($options['return'] === 'simplexml' || $options['return'] === 'simplexmlelement') {
+                    $xml = simplexml_import_dom($xml);
+                }
+
+                return $xml;
+            }
+        );
+    }
+
+    /**
+     * Parse the input data and create either a SimpleXmlElement object or a DOMDocument.
+     *
+     * @param string $input The input to load.
+     * @param array $options The options to use. See Xml::build()
+     * @param \Closure $callable Closure that should return SimpleXMLElement or DOMDocument instance.
+     * @return \SimpleXMLElement|\DOMDocument
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    protected static function load(string $input, array $options, Closure $callable)
+    {
+        $flags = 0;
+        if (!empty($options['parseHuge'])) {
+            $flags |= LIBXML_PARSEHUGE;
+        }
+
+        $internalErrors = libxml_use_internal_errors(true);
+        if (LIBXML_VERSION < 20900 && !$options['loadEntities']) {
+            $previousDisabledEntityLoader = libxml_disable_entity_loader(true);
+        } elseif ($options['loadEntities']) {
+            $flags |= LIBXML_NOENT;
+        }
+
+        try {
+            return $callable($input, $options, $flags);
+        } catch (Exception $e) {
+            throw new XmlException('Xml cannot be read. ' . $e->getMessage(), null, $e);
+        } finally {
+            if (isset($previousDisabledEntityLoader)) {
+                libxml_disable_entity_loader($previousDisabledEntityLoader);
+            }
+            libxml_use_internal_errors($internalErrors);
+        }
+    }
+
+    /**
+     * Transform an array into a SimpleXMLElement
+     *
+     * ### Options
+     *
+     * - `format` If create children ('tags') or attributes ('attributes').
+     * - `pretty` Returns formatted Xml when set to `true`. Defaults to `false`
+     * - `version` Version of XML document. Default is 1.0.
+     * - `encoding` Encoding of XML document. If null remove from XML header.
+     *    Defaults to the application's encoding
+     * - `return` If return object of SimpleXMLElement ('simplexml')
+     *   or DOMDocument ('domdocument'). Default is SimpleXMLElement.
+     *
+     * Using the following data:
+     *
+     * ```
+     * $value = [
+     *    'root' => [
+     *        'tag' => [
+     *            'id' => 1,
+     *            'value' => 'defect',
+     *            '@' => 'description'
+     *         ]
+     *     ]
+     * ];
+     * ```
+     *
+     * Calling `Xml::fromArray($value, 'tags');` Will generate:
+     *
+     * `1defectdescription`
+     *
+     * And calling `Xml::fromArray($value, 'attributes');` Will generate:
+     *
+     * `description`
+     *
+     * @param object|array $input Array with data or a collection instance.
+     * @param array $options The options to use.
+     * @return \SimpleXMLElement|\DOMDocument SimpleXMLElement or DOMDocument
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    public static function fromArray($input, array $options = [])
+    {
+        if (is_object($input) && method_exists($input, 'toArray') && is_callable([$input, 'toArray'])) {
+            $input = $input->toArray();
+        }
+        if (!is_array($input) || count($input) !== 1) {
+            throw new XmlException('Invalid input.');
+        }
+        $key = key($input);
+        if (is_int($key)) {
+            throw new XmlException('The key of input must be alphanumeric');
+        }
+
+        $defaults = [
+            'format' => 'tags',
+            'version' => '1.0',
+            'encoding' => mb_internal_encoding(),
+            'return' => 'simplexml',
+            'pretty' => false,
+        ];
+        $options += $defaults;
+
+        $dom = new DOMDocument($options['version'], $options['encoding']);
+        if ($options['pretty']) {
+            $dom->formatOutput = true;
+        }
+        self::_fromArray($dom, $dom, $input, $options['format']);
+
+        $options['return'] = strtolower($options['return']);
+        if ($options['return'] === 'simplexml' || $options['return'] === 'simplexmlelement') {
+            return new SimpleXMLElement($dom->saveXML());
+        }
+
+        return $dom;
+    }
+
+    /**
+     * Recursive method to create children from array
+     *
+     * @param \DOMDocument $dom Handler to DOMDocument
+     * @param \DOMDocument|\DOMElement $node Handler to DOMElement (child)
+     * @param array $data Array of data to append to the $node.
+     * @param string $format Either 'attributes' or 'tags'. This determines where nested keys go.
+     * @return void
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    protected static function _fromArray(DOMDocument $dom, $node, &$data, $format): void
+    {
+        if (empty($data) || !is_array($data)) {
+            return;
+        }
+        foreach ($data as $key => $value) {
+            if (is_string($key)) {
+                if (is_object($value) && method_exists($value, 'toArray') && is_callable([$value, 'toArray'])) {
+                    $value = $value->toArray();
+                }
+
+                if (!is_array($value)) {
+                    if (is_bool($value)) {
+                        $value = (int)$value;
+                    } elseif ($value === null) {
+                        $value = '';
+                    }
+                    $isNamespace = strpos($key, 'xmlns:');
+                    if ($isNamespace !== false) {
+                        /** @psalm-suppress PossiblyUndefinedMethod */
+                        $node->setAttributeNS('http://www.w3.org/2000/xmlns/', $key, (string)$value);
+                        continue;
+                    }
+                    if ($key[0] !== '@' && $format === 'tags') {
+                        if (!is_numeric($value)) {
+                            // Escape special characters
+                            // https://www.w3.org/TR/REC-xml/#syntax
+                            // https://bugs.php.net/bug.php?id=36795
+                            $child = $dom->createElement($key, '');
+                            $child->appendChild(new DOMText((string)$value));
+                        } else {
+                            $child = $dom->createElement($key, (string)$value);
+                        }
+                        $node->appendChild($child);
+                    } else {
+                        if ($key[0] === '@') {
+                            $key = substr($key, 1);
+                        }
+                        $attribute = $dom->createAttribute($key);
+                        $attribute->appendChild($dom->createTextNode((string)$value));
+                        $node->appendChild($attribute);
+                    }
+                } else {
+                    if ($key[0] === '@') {
+                        throw new XmlException('Invalid array');
+                    }
+                    if (is_numeric(implode('', array_keys($value)))) {
+// List
+                        foreach ($value as $item) {
+                            $itemData = compact('dom', 'node', 'key', 'format');
+                            $itemData['value'] = $item;
+                            static::_createChild($itemData);
+                        }
+                    } else {
+// Struct
+                        static::_createChild(compact('dom', 'node', 'key', 'value', 'format'));
+                    }
+                }
+            } else {
+                throw new XmlException('Invalid array');
+            }
+        }
+    }
+
+    /**
+     * Helper to _fromArray(). It will create children of arrays
+     *
+     * @param array $data Array with information to create children
+     * @return void
+     */
+    protected static function _createChild(array $data): void
+    {
+        $data += [
+            'dom' => null,
+            'node' => null,
+            'key' => null,
+            'value' => null,
+            'format' => null,
+        ];
+
+        $value = $data['value'];
+        $dom = $data['dom'];
+        $key = $data['key'];
+        $format = $data['format'];
+        $node = $data['node'];
+
+        $childNS = $childValue = null;
+        if (is_object($value) && method_exists($value, 'toArray') && is_callable([$value, 'toArray'])) {
+            $value = $value->toArray();
+        }
+        if (is_array($value)) {
+            if (isset($value['@'])) {
+                $childValue = (string)$value['@'];
+                unset($value['@']);
+            }
+            if (isset($value['xmlns:'])) {
+                $childNS = $value['xmlns:'];
+                unset($value['xmlns:']);
+            }
+        } elseif (!empty($value) || $value === 0 || $value === '0') {
+            $childValue = (string)$value;
+        }
+
+        $child = $dom->createElement($key);
+        if ($childValue !== null) {
+            $child->appendChild($dom->createTextNode($childValue));
+        }
+        if ($childNS) {
+            $child->setAttribute('xmlns', $childNS);
+        }
+
+        static::_fromArray($dom, $child, $value, $format);
+        $node->appendChild($child);
+    }
+
+    /**
+     * Returns this XML structure as an array.
+     *
+     * @param \SimpleXMLElement|\DOMDocument|\DOMNode $obj SimpleXMLElement, DOMDocument or DOMNode instance
+     * @return array Array representation of the XML structure.
+     * @throws \Cake\Utility\Exception\XmlException
+     */
+    public static function toArray($obj): array
+    {
+        if ($obj instanceof DOMNode) {
+            $obj = simplexml_import_dom($obj);
+        }
+        if (!($obj instanceof SimpleXMLElement)) {
+            throw new XmlException('The input is not instance of SimpleXMLElement, DOMDocument or DOMNode.');
+        }
+        $result = [];
+        $namespaces = array_merge(['' => ''], $obj->getNamespaces(true));
+        static::_toArray($obj, $result, '', array_keys($namespaces));
+
+        return $result;
+    }
+
+    /**
+     * Recursive method to toArray
+     *
+     * @param \SimpleXMLElement $xml SimpleXMLElement object
+     * @param array $parentData Parent array with data
+     * @param string $ns Namespace of current child
+     * @param array $namespaces List of namespaces in XML
+     * @return void
+     */
+    protected static function _toArray(SimpleXMLElement $xml, array &$parentData, string $ns, array $namespaces): void
+    {
+        $data = [];
+
+        foreach ($namespaces as $namespace) {
+            /**
+             * @psalm-suppress PossiblyNullIterator
+             * @var string $key
+             */
+            foreach ($xml->attributes($namespace, true) as $key => $value) {
+                if (!empty($namespace)) {
+                    $key = $namespace . ':' . $key;
+                }
+                $data['@' . $key] = (string)$value;
+            }
+
+            foreach ($xml->children($namespace, true) as $child) {
+                static::_toArray($child, $data, $namespace, $namespaces);
+            }
+        }
+
+        $asString = trim((string)$xml);
+        if (empty($data)) {
+            $data = $asString;
+        } elseif ($asString !== '') {
+            $data['@'] = $asString;
+        }
+
+        if (!empty($ns)) {
+            $ns .= ':';
+        }
+        $name = $ns . $xml->getName();
+        if (isset($parentData[$name])) {
+            if (!is_array($parentData[$name]) || !isset($parentData[$name][0])) {
+                $parentData[$name] = [$parentData[$name]];
+            }
+            $parentData[$name][] = $data;
+        } else {
+            $parentData[$name] = $data;
+        }
+    }
+}
diff --git a/vendor/cakephp/utility/bootstrap.php b/vendor/cakephp/utility/bootstrap.php
new file mode 100755
index 0000000..d335b75
--- /dev/null
+++ b/vendor/cakephp/utility/bootstrap.php
@@ -0,0 +1,21 @@
+=7.4.0",
+        "cakephp/core": "^4.0"
+    },
+    "suggest": {
+        "ext-intl": "To use Text::transliterate() or Text::slug()",
+        "lib-ICU": "To use Text::transliterate() or Text::slug()"
+    },
+    "autoload": {
+        "psr-4": {
+            "Cake\\Utility\\": "."
+        },
+        "files": [
+            "bootstrap.php"
+        ]
+    }
+}
diff --git a/vendor/carbonphp/carbon-doctrine-types/LICENSE b/vendor/carbonphp/carbon-doctrine-types/LICENSE
new file mode 100755
index 0000000..2ee1671
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Carbon
+
+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.
diff --git a/vendor/carbonphp/carbon-doctrine-types/README.md b/vendor/carbonphp/carbon-doctrine-types/README.md
new file mode 100755
index 0000000..5a18121
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/README.md
@@ -0,0 +1,14 @@
+# carbonphp/carbon-doctrine-types
+
+Types to use Carbon in Doctrine
+
+## Documentation
+
+[Check how to use in the official Carbon documentation](https://carbon.nesbot.com/symfony/)
+
+This package is an externalization of [src/Carbon/Doctrine](https://github.com/briannesbitt/Carbon/tree/2.71.0/src/Carbon/Doctrine)
+from `nestbot/carbon` package.
+
+Externalization allows to better deal with different versions of dbal. With
+version 4.0 of dbal, it no longer sustainable to be compatible with all version
+using a single code.
diff --git a/vendor/carbonphp/carbon-doctrine-types/composer.json b/vendor/carbonphp/carbon-doctrine-types/composer.json
new file mode 100755
index 0000000..abf45c5
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/composer.json
@@ -0,0 +1,36 @@
+{
+    "name": "carbonphp/carbon-doctrine-types",
+    "description": "Types to use Carbon in Doctrine",
+    "type": "library",
+    "keywords": [
+        "date",
+        "time",
+        "DateTime",
+        "Carbon",
+        "Doctrine"
+    ],
+    "require": {
+        "php": "^8.1"
+    },
+    "require-dev": {
+        "doctrine/dbal": "^4.0.0",
+        "nesbot/carbon": "^2.71.0 || ^3.0.0",
+        "phpunit/phpunit": "^10.3"
+    },
+    "conflict": {
+        "doctrine/dbal": "<4.0.0 || >=5.0.0"
+    },
+    "license": "MIT",
+    "autoload": {
+        "psr-4": {
+            "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+        }
+    },
+    "authors": [
+        {
+            "name": "KyleKatarn",
+            "email": "kylekatarnls@gmail.com"
+        }
+    ],
+    "minimum-stability": "dev"
+}
diff --git a/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php
new file mode 100755
index 0000000..a63a9b8
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php
@@ -0,0 +1,16 @@
+
+     */
+    protected function getCarbonClassName(): string
+    {
+        return Carbon::class;
+    }
+
+    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
+    {
+        $precision = min(
+            $fieldDeclaration['precision'] ?? DateTimeDefaultPrecision::get(),
+            $this->getMaximumPrecision($platform),
+        );
+
+        $type = parent::getSQLDeclaration($fieldDeclaration, $platform);
+
+        if (!$precision) {
+            return $type;
+        }
+
+        if (str_contains($type, '(')) {
+            return preg_replace('/\(\d+\)/', "($precision)", $type);
+        }
+
+        [$before, $after] = explode(' ', "$type ");
+
+        return trim("$before($precision) $after");
+    }
+
+    /**
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
+    {
+        if ($value === null) {
+            return $value;
+        }
+
+        if ($value instanceof DateTimeInterface) {
+            return $value->format('Y-m-d H:i:s.u');
+        }
+
+        throw InvalidType::new(
+            $value,
+            static::class,
+            ['null', 'DateTime', 'Carbon']
+        );
+    }
+
+    private function doConvertToPHPValue(mixed $value)
+    {
+        $class = $this->getCarbonClassName();
+
+        if ($value === null || is_a($value, $class)) {
+            return $value;
+        }
+
+        if ($value instanceof DateTimeInterface) {
+            return $class::instance($value);
+        }
+
+        $date = null;
+        $error = null;
+
+        try {
+            $date = $class::parse($value);
+        } catch (Exception $exception) {
+            $error = $exception;
+        }
+
+        if (!$date) {
+            throw ValueNotConvertible::new(
+                $value,
+                static::class,
+                'Y-m-d H:i:s.u or any format supported by '.$class.'::parse()',
+                $error
+            );
+        }
+
+        return $date;
+    }
+
+    private function getMaximumPrecision(AbstractPlatform $platform): int
+    {
+        if ($platform instanceof DB2Platform) {
+            return 12;
+        }
+
+        if ($platform instanceof OraclePlatform) {
+            return 9;
+        }
+
+        if ($platform instanceof SQLServerPlatform || $platform instanceof SQLitePlatform) {
+            return 3;
+        }
+
+        return 6;
+    }
+}
diff --git a/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php
new file mode 100755
index 0000000..cd9896f
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php
@@ -0,0 +1,30 @@
+ */
+    use CarbonTypeConverter;
+
+    /**
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?CarbonImmutable
+    {
+        return $this->doConvertToPHPValue($value);
+    }
+
+    /**
+     * @return class-string
+     */
+    protected function getCarbonClassName(): string
+    {
+        return CarbonImmutable::class;
+    }
+}
diff --git a/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php
new file mode 100755
index 0000000..89e4b79
--- /dev/null
+++ b/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php
@@ -0,0 +1,24 @@
+ */
+    use CarbonTypeConverter;
+
+    /**
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Carbon
+    {
+        return $this->doConvertToPHPValue($value);
+    }
+}
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
new file mode 100755
index 0000000..7824d8f
--- /dev/null
+++ b/vendor/composer/ClassLoader.php
@@ -0,0 +1,579 @@
+
+ *     Jordi Boggiano 
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ *     $loader = new \Composer\Autoload\ClassLoader();
+ *
+ *     // register classes with namespaces
+ *     $loader->add('Symfony\Component', __DIR__.'/component');
+ *     $loader->add('Symfony',           __DIR__.'/framework');
+ *
+ *     // activate the autoloader
+ *     $loader->register();
+ *
+ *     // to enable searching the include path (eg. for PEAR packages)
+ *     $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier 
+ * @author Jordi Boggiano 
+ * @see    https://www.php-fig.org/psr/psr-0/
+ * @see    https://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+    /** @var \Closure(string):void */
+    private static $includeFile;
+
+    /** @var string|null */
+    private $vendorDir;
+
+    // PSR-4
+    /**
+     * @var array>
+     */
+    private $prefixLengthsPsr4 = array();
+    /**
+     * @var array>
+     */
+    private $prefixDirsPsr4 = array();
+    /**
+     * @var list
+     */
+    private $fallbackDirsPsr4 = array();
+
+    // PSR-0
+    /**
+     * List of PSR-0 prefixes
+     *
+     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
+     *
+     * @var array>>
+     */
+    private $prefixesPsr0 = array();
+    /**
+     * @var list
+     */
+    private $fallbackDirsPsr0 = array();
+
+    /** @var bool */
+    private $useIncludePath = false;
+
+    /**
+     * @var array
+     */
+    private $classMap = array();
+
+    /** @var bool */
+    private $classMapAuthoritative = false;
+
+    /**
+     * @var array
+     */
+    private $missingClasses = array();
+
+    /** @var string|null */
+    private $apcuPrefix;
+
+    /**
+     * @var array
+     */
+    private static $registeredLoaders = array();
+
+    /**
+     * @param string|null $vendorDir
+     */
+    public function __construct($vendorDir = null)
+    {
+        $this->vendorDir = $vendorDir;
+        self::initializeIncludeClosure();
+    }
+
+    /**
+     * @return array>
+     */
+    public function getPrefixes()
+    {
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
+        }
+
+        return array();
+    }
+
+    /**
+     * @return array>
+     */
+    public function getPrefixesPsr4()
+    {
+        return $this->prefixDirsPsr4;
+    }
+
+    /**
+     * @return list
+     */
+    public function getFallbackDirs()
+    {
+        return $this->fallbackDirsPsr0;
+    }
+
+    /**
+     * @return list
+     */
+    public function getFallbackDirsPsr4()
+    {
+        return $this->fallbackDirsPsr4;
+    }
+
+    /**
+     * @return array Array of classname => path
+     */
+    public function getClassMap()
+    {
+        return $this->classMap;
+    }
+
+    /**
+     * @param array $classMap Class to filename map
+     *
+     * @return void
+     */
+    public function addClassMap(array $classMap)
+    {
+        if ($this->classMap) {
+            $this->classMap = array_merge($this->classMap, $classMap);
+        } else {
+            $this->classMap = $classMap;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix, either
+     * appending or prepending to the ones previously set for this prefix.
+     *
+     * @param string              $prefix  The prefix
+     * @param list|string $paths   The PSR-0 root directories
+     * @param bool                $prepend Whether to prepend the directories
+     *
+     * @return void
+     */
+    public function add($prefix, $paths, $prepend = false)
+    {
+        $paths = (array) $paths;
+        if (!$prefix) {
+            if ($prepend) {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $paths,
+                    $this->fallbackDirsPsr0
+                );
+            } else {
+                $this->fallbackDirsPsr0 = array_merge(
+                    $this->fallbackDirsPsr0,
+                    $paths
+                );
+            }
+
+            return;
+        }
+
+        $first = $prefix[0];
+        if (!isset($this->prefixesPsr0[$first][$prefix])) {
+            $this->prefixesPsr0[$first][$prefix] = $paths;
+
+            return;
+        }
+        if ($prepend) {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $paths,
+                $this->prefixesPsr0[$first][$prefix]
+            );
+        } else {
+            $this->prefixesPsr0[$first][$prefix] = array_merge(
+                $this->prefixesPsr0[$first][$prefix],
+                $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace, either
+     * appending or prepending to the ones previously set for this namespace.
+     *
+     * @param string              $prefix  The prefix/namespace, with trailing '\\'
+     * @param list|string $paths   The PSR-4 base directories
+     * @param bool                $prepend Whether to prepend the directories
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @return void
+     */
+    public function addPsr4($prefix, $paths, $prepend = false)
+    {
+        $paths = (array) $paths;
+        if (!$prefix) {
+            // Register directories for the root namespace.
+            if ($prepend) {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $paths,
+                    $this->fallbackDirsPsr4
+                );
+            } else {
+                $this->fallbackDirsPsr4 = array_merge(
+                    $this->fallbackDirsPsr4,
+                    $paths
+                );
+            }
+        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+            // Register directories for a new namespace.
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = $paths;
+        } elseif ($prepend) {
+            // Prepend directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $paths,
+                $this->prefixDirsPsr4[$prefix]
+            );
+        } else {
+            // Append directories for an already registered namespace.
+            $this->prefixDirsPsr4[$prefix] = array_merge(
+                $this->prefixDirsPsr4[$prefix],
+                $paths
+            );
+        }
+    }
+
+    /**
+     * Registers a set of PSR-0 directories for a given prefix,
+     * replacing any others previously set for this prefix.
+     *
+     * @param string              $prefix The prefix
+     * @param list|string $paths  The PSR-0 base directories
+     *
+     * @return void
+     */
+    public function set($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr0 = (array) $paths;
+        } else {
+            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Registers a set of PSR-4 directories for a given namespace,
+     * replacing any others previously set for this namespace.
+     *
+     * @param string              $prefix The prefix/namespace, with trailing '\\'
+     * @param list|string $paths  The PSR-4 base directories
+     *
+     * @throws \InvalidArgumentException
+     *
+     * @return void
+     */
+    public function setPsr4($prefix, $paths)
+    {
+        if (!$prefix) {
+            $this->fallbackDirsPsr4 = (array) $paths;
+        } else {
+            $length = strlen($prefix);
+            if ('\\' !== $prefix[$length - 1]) {
+                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+            }
+            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+            $this->prefixDirsPsr4[$prefix] = (array) $paths;
+        }
+    }
+
+    /**
+     * Turns on searching the include path for class files.
+     *
+     * @param bool $useIncludePath
+     *
+     * @return void
+     */
+    public function setUseIncludePath($useIncludePath)
+    {
+        $this->useIncludePath = $useIncludePath;
+    }
+
+    /**
+     * Can be used to check if the autoloader uses the include path to check
+     * for classes.
+     *
+     * @return bool
+     */
+    public function getUseIncludePath()
+    {
+        return $this->useIncludePath;
+    }
+
+    /**
+     * Turns off searching the prefix and fallback directories for classes
+     * that have not been registered with the class map.
+     *
+     * @param bool $classMapAuthoritative
+     *
+     * @return void
+     */
+    public function setClassMapAuthoritative($classMapAuthoritative)
+    {
+        $this->classMapAuthoritative = $classMapAuthoritative;
+    }
+
+    /**
+     * Should class lookup fail if not found in the current class map?
+     *
+     * @return bool
+     */
+    public function isClassMapAuthoritative()
+    {
+        return $this->classMapAuthoritative;
+    }
+
+    /**
+     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+     *
+     * @param string|null $apcuPrefix
+     *
+     * @return void
+     */
+    public function setApcuPrefix($apcuPrefix)
+    {
+        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+    }
+
+    /**
+     * The APCu prefix in use, or null if APCu caching is not enabled.
+     *
+     * @return string|null
+     */
+    public function getApcuPrefix()
+    {
+        return $this->apcuPrefix;
+    }
+
+    /**
+     * Registers this instance as an autoloader.
+     *
+     * @param bool $prepend Whether to prepend the autoloader or not
+     *
+     * @return void
+     */
+    public function register($prepend = false)
+    {
+        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+        if (null === $this->vendorDir) {
+            return;
+        }
+
+        if ($prepend) {
+            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+        } else {
+            unset(self::$registeredLoaders[$this->vendorDir]);
+            self::$registeredLoaders[$this->vendorDir] = $this;
+        }
+    }
+
+    /**
+     * Unregisters this instance as an autoloader.
+     *
+     * @return void
+     */
+    public function unregister()
+    {
+        spl_autoload_unregister(array($this, 'loadClass'));
+
+        if (null !== $this->vendorDir) {
+            unset(self::$registeredLoaders[$this->vendorDir]);
+        }
+    }
+
+    /**
+     * Loads the given class or interface.
+     *
+     * @param  string    $class The name of the class
+     * @return true|null True if loaded, null otherwise
+     */
+    public function loadClass($class)
+    {
+        if ($file = $this->findFile($class)) {
+            $includeFile = self::$includeFile;
+            $includeFile($file);
+
+            return true;
+        }
+
+        return null;
+    }
+
+    /**
+     * Finds the path to the file where the class is defined.
+     *
+     * @param string $class The name of the class
+     *
+     * @return string|false The path if found, false otherwise
+     */
+    public function findFile($class)
+    {
+        // class map lookup
+        if (isset($this->classMap[$class])) {
+            return $this->classMap[$class];
+        }
+        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+            return false;
+        }
+        if (null !== $this->apcuPrefix) {
+            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+            if ($hit) {
+                return $file;
+            }
+        }
+
+        $file = $this->findFileWithExtension($class, '.php');
+
+        // Search for Hack files if we are running on HHVM
+        if (false === $file && defined('HHVM_VERSION')) {
+            $file = $this->findFileWithExtension($class, '.hh');
+        }
+
+        if (null !== $this->apcuPrefix) {
+            apcu_add($this->apcuPrefix.$class, $file);
+        }
+
+        if (false === $file) {
+            // Remember that this class does not exist.
+            $this->missingClasses[$class] = true;
+        }
+
+        return $file;
+    }
+
+    /**
+     * Returns the currently registered loaders keyed by their corresponding vendor directories.
+     *
+     * @return array
+     */
+    public static function getRegisteredLoaders()
+    {
+        return self::$registeredLoaders;
+    }
+
+    /**
+     * @param  string       $class
+     * @param  string       $ext
+     * @return string|false
+     */
+    private function findFileWithExtension($class, $ext)
+    {
+        // PSR-4 lookup
+        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+        $first = $class[0];
+        if (isset($this->prefixLengthsPsr4[$first])) {
+            $subPath = $class;
+            while (false !== $lastPos = strrpos($subPath, '\\')) {
+                $subPath = substr($subPath, 0, $lastPos);
+                $search = $subPath . '\\';
+                if (isset($this->prefixDirsPsr4[$search])) {
+                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
+                        if (file_exists($file = $dir . $pathEnd)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-4 fallback dirs
+        foreach ($this->fallbackDirsPsr4 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 lookup
+        if (false !== $pos = strrpos($class, '\\')) {
+            // namespaced class name
+            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+        } else {
+            // PEAR-like class name
+            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+        }
+
+        if (isset($this->prefixesPsr0[$first])) {
+            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+                if (0 === strpos($class, $prefix)) {
+                    foreach ($dirs as $dir) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                            return $file;
+                        }
+                    }
+                }
+            }
+        }
+
+        // PSR-0 fallback dirs
+        foreach ($this->fallbackDirsPsr0 as $dir) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                return $file;
+            }
+        }
+
+        // PSR-0 include paths.
+        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+            return $file;
+        }
+
+        return false;
+    }
+
+    /**
+     * @return void
+     */
+    private static function initializeIncludeClosure()
+    {
+        if (self::$includeFile !== null) {
+            return;
+        }
+
+        /**
+         * Scope isolated include.
+         *
+         * Prevents access to $this/self from included files.
+         *
+         * @param  string $file
+         * @return void
+         */
+        self::$includeFile = \Closure::bind(static function($file) {
+            include $file;
+        }, null, null);
+    }
+}
diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php
new file mode 100755
index 0000000..51e734a
--- /dev/null
+++ b/vendor/composer/InstalledVersions.php
@@ -0,0 +1,359 @@
+
+ *     Jordi Boggiano 
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+/**
+ * This class is copied in every Composer installed project and available to all
+ *
+ * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
+ *
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ *
+ * @final
+ */
+class InstalledVersions
+{
+    /**
+     * @var mixed[]|null
+     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null
+     */
+    private static $installed;
+
+    /**
+     * @var bool|null
+     */
+    private static $canGetVendors;
+
+    /**
+     * @var array[]
+     * @psalm-var array}>
+     */
+    private static $installedByVendor = array();
+
+    /**
+     * Returns a list of all package names which are present, either by being installed, replaced or provided
+     *
+     * @return string[]
+     * @psalm-return list
+     */
+    public static function getInstalledPackages()
+    {
+        $packages = array();
+        foreach (self::getInstalled() as $installed) {
+            $packages[] = array_keys($installed['versions']);
+        }
+
+        if (1 === \count($packages)) {
+            return $packages[0];
+        }
+
+        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+    }
+
+    /**
+     * Returns a list of all package names with a specific type e.g. 'library'
+     *
+     * @param  string   $type
+     * @return string[]
+     * @psalm-return list
+     */
+    public static function getInstalledPackagesByType($type)
+    {
+        $packagesByType = array();
+
+        foreach (self::getInstalled() as $installed) {
+            foreach ($installed['versions'] as $name => $package) {
+                if (isset($package['type']) && $package['type'] === $type) {
+                    $packagesByType[] = $name;
+                }
+            }
+        }
+
+        return $packagesByType;
+    }
+
+    /**
+     * Checks whether the given package is installed
+     *
+     * This also returns true if the package name is provided or replaced by another package
+     *
+     * @param  string $packageName
+     * @param  bool   $includeDevRequirements
+     * @return bool
+     */
+    public static function isInstalled($packageName, $includeDevRequirements = true)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (isset($installed['versions'][$packageName])) {
+                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks whether the given package satisfies a version constraint
+     *
+     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
+     *
+     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
+     *
+     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
+     * @param  string        $packageName
+     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+     * @return bool
+     */
+    public static function satisfies(VersionParser $parser, $packageName, $constraint)
+    {
+        $constraint = $parser->parseConstraints((string) $constraint);
+        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+        return $provided->matches($constraint);
+    }
+
+    /**
+     * Returns a version constraint representing all the range(s) which are installed for a given package
+     *
+     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
+     * whether a given version of a package is installed, and not just whether it exists
+     *
+     * @param  string $packageName
+     * @return string Version constraint usable with composer/semver
+     */
+    public static function getVersionRanges($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            $ranges = array();
+            if (isset($installed['versions'][$packageName]['pretty_version'])) {
+                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
+            }
+            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+            }
+            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+            }
+            if (array_key_exists('provided', $installed['versions'][$packageName])) {
+                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+            }
+
+            return implode(' || ', $ranges);
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+     */
+    public static function getVersion($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['version'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['version'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+     */
+    public static function getPrettyVersion($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['pretty_version'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
+     */
+    public static function getReference($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            if (!isset($installed['versions'][$packageName]['reference'])) {
+                return null;
+            }
+
+            return $installed['versions'][$packageName]['reference'];
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @param  string      $packageName
+     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
+     */
+    public static function getInstallPath($packageName)
+    {
+        foreach (self::getInstalled() as $installed) {
+            if (!isset($installed['versions'][$packageName])) {
+                continue;
+            }
+
+            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
+        }
+
+        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+    }
+
+    /**
+     * @return array
+     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
+     */
+    public static function getRootPackage()
+    {
+        $installed = self::getInstalled();
+
+        return $installed[0]['root'];
+    }
+
+    /**
+     * Returns the raw installed.php data for custom implementations
+     *
+     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
+     * @return array[]
+     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}
+     */
+    public static function getRawData()
+    {
+        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
+
+        if (null === self::$installed) {
+            // only require the installed.php file if this file is loaded from its dumped location,
+            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+            if (substr(__DIR__, -8, 1) !== 'C') {
+                self::$installed = include __DIR__ . '/installed.php';
+            } else {
+                self::$installed = array();
+            }
+        }
+
+        return self::$installed;
+    }
+
+    /**
+     * Returns the raw data of all installed.php which are currently loaded for custom implementations
+     *
+     * @return array[]
+     * @psalm-return list}>
+     */
+    public static function getAllRawData()
+    {
+        return self::getInstalled();
+    }
+
+    /**
+     * Lets you reload the static array from another file
+     *
+     * This is only useful for complex integrations in which a project needs to use
+     * this class but then also needs to execute another project's autoloader in process,
+     * and wants to ensure both projects have access to their version of installed.php.
+     *
+     * A typical case would be PHPUnit, where it would need to make sure it reads all
+     * the data it needs from this class, then call reload() with
+     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
+     * the project in which it runs can then also use this class safely, without
+     * interference between PHPUnit's dependencies and the project's dependencies.
+     *
+     * @param  array[] $data A vendor/composer/installed.php data set
+     * @return void
+     *
+     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data
+     */
+    public static function reload($data)
+    {
+        self::$installed = $data;
+        self::$installedByVendor = array();
+    }
+
+    /**
+     * @return array[]
+     * @psalm-return list}>
+     */
+    private static function getInstalled()
+    {
+        if (null === self::$canGetVendors) {
+            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+        }
+
+        $installed = array();
+
+        if (self::$canGetVendors) {
+            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+                if (isset(self::$installedByVendor[$vendorDir])) {
+                    $installed[] = self::$installedByVendor[$vendorDir];
+                } elseif (is_file($vendorDir.'/composer/installed.php')) {
+                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
+                    $required = require $vendorDir.'/composer/installed.php';
+                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
+                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+                        self::$installed = $installed[count($installed) - 1];
+                    }
+                }
+            }
+        }
+
+        if (null === self::$installed) {
+            // only require the installed.php file if this file is loaded from its dumped location,
+            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+            if (substr(__DIR__, -8, 1) !== 'C') {
+                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */
+                $required = require __DIR__ . '/installed.php';
+                self::$installed = $required;
+            } else {
+                self::$installed = array();
+            }
+        }
+
+        if (self::$installed !== array()) {
+            $installed[] = self::$installed;
+        }
+
+        return $installed;
+    }
+}
diff --git a/vendor/composer/LICENSE b/vendor/composer/LICENSE
new file mode 100755
index 0000000..f27399a
--- /dev/null
+++ b/vendor/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+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.
+
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
new file mode 100755
index 0000000..351cc2f
--- /dev/null
+++ b/vendor/composer/autoload_classmap.php
@@ -0,0 +1,17 @@
+ $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
+    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
+    'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
+    'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
+    'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
+    'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
+    'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
+    'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
+);
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
new file mode 100755
index 0000000..c6a7e96
--- /dev/null
+++ b/vendor/composer/autoload_files.php
@@ -0,0 +1,29 @@
+ $vendorDir . '/symfony/deprecation-contracts/function.php',
+    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
+    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+    'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
+    '72142d7b40a3a0b14e91825290b5ad82' => $vendorDir . '/cakephp/core/functions.php',
+    'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
+    '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
+    'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
+    '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
+    '60799491728b879e74601d83e38b2cad' => $vendorDir . '/illuminate/collections/helpers.php',
+    'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
+    'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',
+    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',
+    '948ad5488880985ff1c06721a4e447fe' => $vendorDir . '/cakephp/utility/bootstrap.php',
+    '72579e7bd17821bb1321b87411366eae' => $vendorDir . '/illuminate/support/helpers.php',
+    'b33e3d135e5d9e47d845c576147bda89' => $vendorDir . '/php-di/php-di/src/functions.php',
+    '89efb1254ef2d1c5d80096acd12c4098' => $vendorDir . '/twig/twig/src/Resources/core.php',
+    'ffecb95d45175fd40f75be8a23b34f90' => $vendorDir . '/twig/twig/src/Resources/debug.php',
+    'c7baa00073ee9c61edf148c51917cfb4' => $vendorDir . '/twig/twig/src/Resources/escaper.php',
+    'f844ccf1d25df8663951193c3fc307c8' => $vendorDir . '/twig/twig/src/Resources/string_loader.php',
+);
diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php
new file mode 100755
index 0000000..15a2ff3
--- /dev/null
+++ b/vendor/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+ array($vendorDir . '/voku/portable-ascii/src/voku'),
+    'eftec\\bladeonehtml\\' => array($vendorDir . '/eftec/bladeonehtml/lib'),
+    'eftec\\bladeone\\' => array($vendorDir . '/eftec/bladeone/lib'),
+    'eftec\\' => array($vendorDir . '/eftec/messagecontainer/lib'),
+    'Twig\\' => array($vendorDir . '/twig/twig/src'),
+    'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
+    'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
+    'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
+    'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'),
+    'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'),
+    'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'),
+    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
+    'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'),
+    'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
+    'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
+    'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
+    'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
+    'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
+    'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'),
+    'Symfony\\Component\\Mime\\' => array($vendorDir . '/symfony/mime'),
+    'Symfony\\Component\\Mailer\\' => array($vendorDir . '/symfony/mailer'),
+    'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
+    'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
+    'Symfony\\Component\\Dotenv\\' => array($vendorDir . '/symfony/dotenv', $vendorDir . '/symfony/dotenv'),
+    'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'),
+    'Symfony\\Component\\Config\\' => array($vendorDir . '/symfony/config'),
+    'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'),
+    'ReCaptcha\\' => array($vendorDir . '/google/recaptcha/src/ReCaptcha'),
+    'Rakit\\Validation\\' => array($vendorDir . '/rakit/validation/src'),
+    'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
+    'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
+    'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
+    'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
+    'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
+    'Psr\\Clock\\' => array($vendorDir . '/psr/clock/src'),
+    'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
+    'Predis\\' => array($vendorDir . '/predis/predis/src'),
+    'Phinx\\' => array($vendorDir . '/robmorgan/phinx/src/Phinx'),
+    'Pecee\\' => array($vendorDir . '/pecee/simple-router/src/Pecee'),
+    'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
+    'PHPAuth\\' => array($vendorDir . '/phpauth/phpauth/sources'),
+    'Nyholm\\Psr7\\' => array($vendorDir . '/nyholm/psr7/src'),
+    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
+    'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'),
+    'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'),
+    'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'),
+    'Invoker\\' => array($vendorDir . '/php-di/invoker/src'),
+    'Intervention\\Image\\' => array($vendorDir . '/intervention/image/src/Intervention/Image'),
+    'Illuminate\\Support\\' => array($vendorDir . '/illuminate/collections', $vendorDir . '/illuminate/macroable', $vendorDir . '/illuminate/support'),
+    'Illuminate\\Database\\' => array($vendorDir . '/illuminate/database'),
+    'Illuminate\\Contracts\\' => array($vendorDir . '/illuminate/contracts'),
+    'Illuminate\\Container\\' => array($vendorDir . '/illuminate/container'),
+    'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
+    'Faker\\' => array($vendorDir . '/fakerphp/faker/src/Faker'),
+    'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/src'),
+    'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'),
+    'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'),
+    'Delight\\Http\\' => array($vendorDir . '/delight-im/http/src'),
+    'Delight\\Db\\' => array($vendorDir . '/delight-im/db/src'),
+    'Delight\\Cookie\\' => array($vendorDir . '/delight-im/cookie/src'),
+    'Delight\\Base64\\' => array($vendorDir . '/delight-im/base64/src'),
+    'Delight\\Auth\\' => array($vendorDir . '/delight-im/auth/src'),
+    'Defuse\\Crypto\\' => array($vendorDir . '/defuse/php-encryption/src'),
+    'DI\\' => array($vendorDir . '/php-di/php-di/src'),
+    'Carbon\\Doctrine\\' => array($vendorDir . '/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine'),
+    'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'),
+    'Cake\\Utility\\' => array($vendorDir . '/cakephp/utility'),
+    'Cake\\Datasource\\' => array($vendorDir . '/cakephp/datasource'),
+    'Cake\\Database\\' => array($vendorDir . '/cakephp/database'),
+    'Cake\\Core\\' => array($vendorDir . '/cakephp/core'),
+    'App\\' => array($baseDir . '/app'),
+);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
new file mode 100755
index 0000000..e89df0f
--- /dev/null
+++ b/vendor/composer/autoload_real.php
@@ -0,0 +1,50 @@
+register(true);
+
+        $filesToLoad = \Composer\Autoload\ComposerStaticInit0876d25916e480a8717545006f936800::$files;
+        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
+            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+                require $file;
+            }
+        }, null, null);
+        foreach ($filesToLoad as $fileIdentifier => $file) {
+            $requireFile($fileIdentifier, $file);
+        }
+
+        return $loader;
+    }
+}
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
new file mode 100755
index 0000000..2546fc4
--- /dev/null
+++ b/vendor/composer/autoload_static.php
@@ -0,0 +1,465 @@
+ __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
+        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
+        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+        'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
+        '72142d7b40a3a0b14e91825290b5ad82' => __DIR__ . '/..' . '/cakephp/core/functions.php',
+        'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
+        '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
+        'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php',
+        '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
+        '60799491728b879e74601d83e38b2cad' => __DIR__ . '/..' . '/illuminate/collections/helpers.php',
+        'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
+        'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',
+        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
+        '948ad5488880985ff1c06721a4e447fe' => __DIR__ . '/..' . '/cakephp/utility/bootstrap.php',
+        '72579e7bd17821bb1321b87411366eae' => __DIR__ . '/..' . '/illuminate/support/helpers.php',
+        'b33e3d135e5d9e47d845c576147bda89' => __DIR__ . '/..' . '/php-di/php-di/src/functions.php',
+        '89efb1254ef2d1c5d80096acd12c4098' => __DIR__ . '/..' . '/twig/twig/src/Resources/core.php',
+        'ffecb95d45175fd40f75be8a23b34f90' => __DIR__ . '/..' . '/twig/twig/src/Resources/debug.php',
+        'c7baa00073ee9c61edf148c51917cfb4' => __DIR__ . '/..' . '/twig/twig/src/Resources/escaper.php',
+        'f844ccf1d25df8663951193c3fc307c8' => __DIR__ . '/..' . '/twig/twig/src/Resources/string_loader.php',
+    );
+
+    public static $prefixLengthsPsr4 = array (
+        'v' => 
+        array (
+            'voku\\' => 5,
+        ),
+        'e' => 
+        array (
+            'eftec\\bladeonehtml\\' => 19,
+            'eftec\\bladeone\\' => 15,
+            'eftec\\' => 6,
+        ),
+        'T' => 
+        array (
+            'Twig\\' => 5,
+        ),
+        'S' => 
+        array (
+            'Symfony\\Polyfill\\Php80\\' => 23,
+            'Symfony\\Polyfill\\Php73\\' => 23,
+            'Symfony\\Polyfill\\Mbstring\\' => 26,
+            'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33,
+            'Symfony\\Polyfill\\Intl\\Idn\\' => 26,
+            'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31,
+            'Symfony\\Polyfill\\Ctype\\' => 23,
+            'Symfony\\Contracts\\Translation\\' => 30,
+            'Symfony\\Contracts\\Service\\' => 26,
+            'Symfony\\Contracts\\EventDispatcher\\' => 34,
+            'Symfony\\Contracts\\Cache\\' => 24,
+            'Symfony\\Component\\VarExporter\\' => 30,
+            'Symfony\\Component\\Translation\\' => 30,
+            'Symfony\\Component\\String\\' => 25,
+            'Symfony\\Component\\Mime\\' => 23,
+            'Symfony\\Component\\Mailer\\' => 25,
+            'Symfony\\Component\\Filesystem\\' => 29,
+            'Symfony\\Component\\EventDispatcher\\' => 34,
+            'Symfony\\Component\\Dotenv\\' => 25,
+            'Symfony\\Component\\Console\\' => 26,
+            'Symfony\\Component\\Config\\' => 25,
+            'Symfony\\Component\\Cache\\' => 24,
+        ),
+        'R' => 
+        array (
+            'ReCaptcha\\' => 10,
+            'Rakit\\Validation\\' => 17,
+        ),
+        'P' => 
+        array (
+            'Psr\\SimpleCache\\' => 16,
+            'Psr\\Log\\' => 8,
+            'Psr\\Http\\Message\\' => 17,
+            'Psr\\EventDispatcher\\' => 20,
+            'Psr\\Container\\' => 14,
+            'Psr\\Clock\\' => 10,
+            'Psr\\Cache\\' => 10,
+            'Predis\\' => 7,
+            'Phinx\\' => 6,
+            'Pecee\\' => 6,
+            'PHPMailer\\PHPMailer\\' => 20,
+            'PHPAuth\\' => 8,
+        ),
+        'N' => 
+        array (
+            'Nyholm\\Psr7\\' => 12,
+        ),
+        'M' => 
+        array (
+            'Monolog\\' => 8,
+        ),
+        'L' => 
+        array (
+            'League\\MimeTypeDetection\\' => 25,
+            'League\\Flysystem\\' => 17,
+            'Laravel\\SerializableClosure\\' => 28,
+        ),
+        'I' => 
+        array (
+            'Invoker\\' => 8,
+            'Intervention\\Image\\' => 19,
+            'Illuminate\\Support\\' => 19,
+            'Illuminate\\Database\\' => 20,
+            'Illuminate\\Contracts\\' => 21,
+            'Illuminate\\Container\\' => 21,
+        ),
+        'G' => 
+        array (
+            'GuzzleHttp\\Psr7\\' => 16,
+        ),
+        'F' => 
+        array (
+            'Faker\\' => 6,
+        ),
+        'E' => 
+        array (
+            'Egulias\\EmailValidator\\' => 23,
+        ),
+        'D' => 
+        array (
+            'Doctrine\\Inflector\\' => 19,
+            'Doctrine\\Common\\Lexer\\' => 22,
+            'Delight\\Http\\' => 13,
+            'Delight\\Db\\' => 11,
+            'Delight\\Cookie\\' => 15,
+            'Delight\\Base64\\' => 15,
+            'Delight\\Auth\\' => 13,
+            'Defuse\\Crypto\\' => 14,
+            'DI\\' => 3,
+        ),
+        'C' => 
+        array (
+            'Carbon\\Doctrine\\' => 16,
+            'Carbon\\' => 7,
+            'Cake\\Utility\\' => 13,
+            'Cake\\Datasource\\' => 16,
+            'Cake\\Database\\' => 14,
+            'Cake\\Core\\' => 10,
+        ),
+        'A' => 
+        array (
+            'App\\' => 4,
+        ),
+    );
+
+    public static $prefixDirsPsr4 = array (
+        'voku\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/voku/portable-ascii/src/voku',
+        ),
+        'eftec\\bladeonehtml\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/eftec/bladeonehtml/lib',
+        ),
+        'eftec\\bladeone\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/eftec/bladeone/lib',
+        ),
+        'eftec\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/eftec/messagecontainer/lib',
+        ),
+        'Twig\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/twig/twig/src',
+        ),
+        'Symfony\\Polyfill\\Php80\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
+        ),
+        'Symfony\\Polyfill\\Php73\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-php73',
+        ),
+        'Symfony\\Polyfill\\Mbstring\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
+        ),
+        'Symfony\\Polyfill\\Intl\\Normalizer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer',
+        ),
+        'Symfony\\Polyfill\\Intl\\Idn\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn',
+        ),
+        'Symfony\\Polyfill\\Intl\\Grapheme\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme',
+        ),
+        'Symfony\\Polyfill\\Ctype\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
+        ),
+        'Symfony\\Contracts\\Translation\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/translation-contracts',
+        ),
+        'Symfony\\Contracts\\Service\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/service-contracts',
+        ),
+        'Symfony\\Contracts\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts',
+        ),
+        'Symfony\\Contracts\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/cache-contracts',
+        ),
+        'Symfony\\Component\\VarExporter\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/var-exporter',
+        ),
+        'Symfony\\Component\\Translation\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/translation',
+        ),
+        'Symfony\\Component\\String\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/string',
+        ),
+        'Symfony\\Component\\Mime\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/mime',
+        ),
+        'Symfony\\Component\\Mailer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/mailer',
+        ),
+        'Symfony\\Component\\Filesystem\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/filesystem',
+        ),
+        'Symfony\\Component\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
+        ),
+        'Symfony\\Component\\Dotenv\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/dotenv',
+            1 => __DIR__ . '/..' . '/symfony/dotenv',
+        ),
+        'Symfony\\Component\\Console\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/console',
+        ),
+        'Symfony\\Component\\Config\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/config',
+        ),
+        'Symfony\\Component\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/symfony/cache',
+        ),
+        'ReCaptcha\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/google/recaptcha/src/ReCaptcha',
+        ),
+        'Rakit\\Validation\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/rakit/validation/src',
+        ),
+        'Psr\\SimpleCache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/simple-cache/src',
+        ),
+        'Psr\\Log\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/log/src',
+        ),
+        'Psr\\Http\\Message\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/http-factory/src',
+            1 => __DIR__ . '/..' . '/psr/http-message/src',
+        ),
+        'Psr\\EventDispatcher\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/event-dispatcher/src',
+        ),
+        'Psr\\Container\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/container/src',
+        ),
+        'Psr\\Clock\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/clock/src',
+        ),
+        'Psr\\Cache\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/psr/cache/src',
+        ),
+        'Predis\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/predis/predis/src',
+        ),
+        'Phinx\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/robmorgan/phinx/src/Phinx',
+        ),
+        'Pecee\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/pecee/simple-router/src/Pecee',
+        ),
+        'PHPMailer\\PHPMailer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',
+        ),
+        'PHPAuth\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/phpauth/phpauth/sources',
+        ),
+        'Nyholm\\Psr7\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/nyholm/psr7/src',
+        ),
+        'Monolog\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
+        ),
+        'League\\MimeTypeDetection\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/league/mime-type-detection/src',
+        ),
+        'League\\Flysystem\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/league/flysystem/src',
+        ),
+        'Laravel\\SerializableClosure\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/laravel/serializable-closure/src',
+        ),
+        'Invoker\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/php-di/invoker/src',
+        ),
+        'Intervention\\Image\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/intervention/image/src/Intervention/Image',
+        ),
+        'Illuminate\\Support\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/illuminate/collections',
+            1 => __DIR__ . '/..' . '/illuminate/macroable',
+            2 => __DIR__ . '/..' . '/illuminate/support',
+        ),
+        'Illuminate\\Database\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/illuminate/database',
+        ),
+        'Illuminate\\Contracts\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/illuminate/contracts',
+        ),
+        'Illuminate\\Container\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/illuminate/container',
+        ),
+        'GuzzleHttp\\Psr7\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
+        ),
+        'Faker\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/fakerphp/faker/src/Faker',
+        ),
+        'Egulias\\EmailValidator\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/egulias/email-validator/src',
+        ),
+        'Doctrine\\Inflector\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector',
+        ),
+        'Doctrine\\Common\\Lexer\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/doctrine/lexer/src',
+        ),
+        'Delight\\Http\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/delight-im/http/src',
+        ),
+        'Delight\\Db\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/delight-im/db/src',
+        ),
+        'Delight\\Cookie\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/delight-im/cookie/src',
+        ),
+        'Delight\\Base64\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/delight-im/base64/src',
+        ),
+        'Delight\\Auth\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/delight-im/auth/src',
+        ),
+        'Defuse\\Crypto\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/defuse/php-encryption/src',
+        ),
+        'DI\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/php-di/php-di/src',
+        ),
+        'Carbon\\Doctrine\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine',
+        ),
+        'Carbon\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon',
+        ),
+        'Cake\\Utility\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/cakephp/utility',
+        ),
+        'Cake\\Datasource\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/cakephp/datasource',
+        ),
+        'Cake\\Database\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/cakephp/database',
+        ),
+        'Cake\\Core\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/cakephp/core',
+        ),
+        'App\\' => 
+        array (
+            0 => __DIR__ . '/../..' . '/app',
+        ),
+    );
+
+    public static $classMap = array (
+        'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
+        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
+        'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
+        'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php',
+        'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
+        'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
+        'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
+        'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
+    );
+
+    public static function getInitializer(ClassLoader $loader)
+    {
+        return \Closure::bind(function () use ($loader) {
+            $loader->prefixLengthsPsr4 = ComposerStaticInit0876d25916e480a8717545006f936800::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit0876d25916e480a8717545006f936800::$prefixDirsPsr4;
+            $loader->classMap = ComposerStaticInit0876d25916e480a8717545006f936800::$classMap;
+
+        }, null, ClassLoader::class);
+    }
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100755
index 0000000..9375334
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,5394 @@
+{
+    "packages": [
+        {
+            "name": "cakephp/core",
+            "version": "4.5.9",
+            "version_normalized": "4.5.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/core.git",
+                "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/core/zipball/c2f4dff110d41e475d1041f2abe236f1c62d0cd0",
+                "reference": "c2f4dff110d41e475d1041f2abe236f1c62d0cd0",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/utility": "^4.0",
+                "php": ">=7.4.0"
+            },
+            "provide": {
+                "psr/container-implementation": "^1.0 || ^2.0"
+            },
+            "suggest": {
+                "cakephp/cache": "To use Configure::store() and restore().",
+                "cakephp/event": "To use PluginApplicationInterface or plugin applications.",
+                "league/container": "To use Container and ServiceProvider classes"
+            },
+            "time": "2023-10-21T13:30:46+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "functions.php"
+                ],
+                "psr-4": {
+                    "Cake\\Core\\": "."
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/core/graphs/contributors"
+                }
+            ],
+            "description": "CakePHP Framework Core classes",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "cakephp",
+                "core",
+                "framework"
+            ],
+            "support": {
+                "forum": "https://stackoverflow.com/tags/cakephp",
+                "irc": "irc://irc.freenode.org/cakephp",
+                "issues": "https://github.com/cakephp/cakephp/issues",
+                "source": "https://github.com/cakephp/core"
+            },
+            "install-path": "../cakephp/core"
+        },
+        {
+            "name": "cakephp/database",
+            "version": "4.5.9",
+            "version_normalized": "4.5.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/database.git",
+                "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/database/zipball/317739cc32060ef19b6c19c87ac6b64848d78e27",
+                "reference": "317739cc32060ef19b6c19c87ac6b64848d78e27",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/core": "^4.0",
+                "cakephp/datasource": "^4.0",
+                "php": ">=7.4.0"
+            },
+            "suggest": {
+                "cakephp/i18n": "If you are using locale-aware datetime formats or Chronos types.",
+                "cakephp/log": "If you want to use query logging without providing a logger yourself."
+            },
+            "time": "2023-12-07T12:23:54+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Database\\": "."
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/database/graphs/contributors"
+                }
+            ],
+            "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "abstraction",
+                "cakephp",
+                "database",
+                "database abstraction",
+                "pdo"
+            ],
+            "support": {
+                "forum": "https://stackoverflow.com/tags/cakephp",
+                "irc": "irc://irc.freenode.org/cakephp",
+                "issues": "https://github.com/cakephp/cakephp/issues",
+                "source": "https://github.com/cakephp/database"
+            },
+            "install-path": "../cakephp/database"
+        },
+        {
+            "name": "cakephp/datasource",
+            "version": "4.5.9",
+            "version_normalized": "4.5.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/datasource.git",
+                "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/datasource/zipball/073bb5f3b082b87c20309c1b25b1ac2a238d97b3",
+                "reference": "073bb5f3b082b87c20309c1b25b1ac2a238d97b3",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/core": "^4.0",
+                "php": ">=7.4.0",
+                "psr/log": "^1.0 || ^2.0",
+                "psr/simple-cache": "^1.0 || ^2.0"
+            },
+            "suggest": {
+                "cakephp/cache": "If you decide to use Query caching.",
+                "cakephp/collection": "If you decide to use ResultSetInterface.",
+                "cakephp/utility": "If you decide to use EntityTrait."
+            },
+            "time": "2024-11-19T19:41:00+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Cake\\Datasource\\": "."
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/datasource/graphs/contributors"
+                }
+            ],
+            "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "cakephp",
+                "connection management",
+                "datasource",
+                "entity",
+                "query"
+            ],
+            "support": {
+                "forum": "https://stackoverflow.com/tags/cakephp",
+                "irc": "irc://irc.freenode.org/cakephp",
+                "issues": "https://github.com/cakephp/cakephp/issues",
+                "source": "https://github.com/cakephp/datasource"
+            },
+            "install-path": "../cakephp/datasource"
+        },
+        {
+            "name": "cakephp/utility",
+            "version": "4.5.9",
+            "version_normalized": "4.5.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/utility.git",
+                "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/utility/zipball/708929115e5b400e1b5b76d8120ca2e51e2de199",
+                "reference": "708929115e5b400e1b5b76d8120ca2e51e2de199",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/core": "^4.0",
+                "php": ">=7.4.0"
+            },
+            "suggest": {
+                "ext-intl": "To use Text::transliterate() or Text::slug()",
+                "lib-ICU": "To use Text::transliterate() or Text::slug()"
+            },
+            "time": "2024-06-23T00:11:14+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Cake\\Utility\\": "."
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/utility/graphs/contributors"
+                }
+            ],
+            "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security",
+            "homepage": "https://cakephp.org",
+            "keywords": [
+                "cakephp",
+                "hash",
+                "inflector",
+                "security",
+                "string",
+                "utility"
+            ],
+            "support": {
+                "forum": "https://stackoverflow.com/tags/cakephp",
+                "irc": "irc://irc.freenode.org/cakephp",
+                "issues": "https://github.com/cakephp/cakephp/issues",
+                "source": "https://github.com/cakephp/utility"
+            },
+            "install-path": "../cakephp/utility"
+        },
+        {
+            "name": "carbonphp/carbon-doctrine-types",
+            "version": "3.2.0",
+            "version_normalized": "3.2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+                "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+                "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "conflict": {
+                "doctrine/dbal": "<4.0.0 || >=5.0.0"
+            },
+            "require-dev": {
+                "doctrine/dbal": "^4.0.0",
+                "nesbot/carbon": "^2.71.0 || ^3.0.0",
+                "phpunit/phpunit": "^10.3"
+            },
+            "time": "2024-02-09T16:56:22+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "KyleKatarn",
+                    "email": "kylekatarnls@gmail.com"
+                }
+            ],
+            "description": "Types to use Carbon in Doctrine",
+            "keywords": [
+                "carbon",
+                "date",
+                "datetime",
+                "doctrine",
+                "time"
+            ],
+            "support": {
+                "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+                "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/kylekatarnls",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/Carbon",
+                    "type": "open_collective"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../carbonphp/carbon-doctrine-types"
+        },
+        {
+            "name": "defuse/php-encryption",
+            "version": "v2.4.0",
+            "version_normalized": "2.4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/defuse/php-encryption.git",
+                "reference": "f53396c2d34225064647a05ca76c1da9d99e5828"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/defuse/php-encryption/zipball/f53396c2d34225064647a05ca76c1da9d99e5828",
+                "reference": "f53396c2d34225064647a05ca76c1da9d99e5828",
+                "shasum": ""
+            },
+            "require": {
+                "ext-openssl": "*",
+                "paragonie/random_compat": ">= 2",
+                "php": ">=5.6.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^5|^6|^7|^8|^9|^10",
+                "yoast/phpunit-polyfills": "^2.0.0"
+            },
+            "time": "2023-06-19T06:10:36+00:00",
+            "bin": [
+                "bin/generate-defuse-key"
+            ],
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Defuse\\Crypto\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Hornby",
+                    "email": "taylor@defuse.ca",
+                    "homepage": "https://defuse.ca/"
+                },
+                {
+                    "name": "Scott Arciszewski",
+                    "email": "info@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "Secure PHP Encryption Library",
+            "keywords": [
+                "aes",
+                "authenticated encryption",
+                "cipher",
+                "crypto",
+                "cryptography",
+                "encrypt",
+                "encryption",
+                "openssl",
+                "security",
+                "symmetric key cryptography"
+            ],
+            "support": {
+                "issues": "https://github.com/defuse/php-encryption/issues",
+                "source": "https://github.com/defuse/php-encryption/tree/v2.4.0"
+            },
+            "install-path": "../defuse/php-encryption"
+        },
+        {
+            "name": "delight-im/auth",
+            "version": "v8.3.0",
+            "version_normalized": "8.3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/delight-im/PHP-Auth.git",
+                "reference": "7bce546defa2bec75485d4bf1d68b72cf311c489"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/delight-im/PHP-Auth/zipball/7bce546defa2bec75485d4bf1d68b72cf311c489",
+                "reference": "7bce546defa2bec75485d4bf1d68b72cf311c489",
+                "shasum": ""
+            },
+            "require": {
+                "delight-im/base64": "^1.0",
+                "delight-im/cookie": "^3.1",
+                "delight-im/db": "^1.3",
+                "ext-openssl": "*",
+                "php": ">=5.6.0"
+            },
+            "time": "2021-04-21T14:39:10+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Delight\\Auth\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Authentication for PHP. Simple, lightweight and secure.",
+            "homepage": "https://github.com/delight-im/PHP-Auth",
+            "keywords": [
+                "Authentication",
+                "auth",
+                "login",
+                "security"
+            ],
+            "support": {
+                "issues": "https://github.com/delight-im/PHP-Auth/issues",
+                "source": "https://github.com/delight-im/PHP-Auth/tree/v8.3.0"
+            },
+            "install-path": "../delight-im/auth"
+        },
+        {
+            "name": "delight-im/base64",
+            "version": "v1.0.0",
+            "version_normalized": "1.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/delight-im/PHP-Base64.git",
+                "reference": "687b2a49f663e162030a8d27b32838bbe7f91c78"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/delight-im/PHP-Base64/zipball/687b2a49f663e162030a8d27b32838bbe7f91c78",
+                "reference": "687b2a49f663e162030a8d27b32838bbe7f91c78",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "time": "2017-07-24T18:59:51+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Delight\\Base64\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Simple and convenient Base64 encoding and decoding for PHP",
+            "homepage": "https://github.com/delight-im/PHP-Base64",
+            "keywords": [
+                "URL-safe",
+                "base-64",
+                "base64",
+                "decode",
+                "decoding",
+                "encode",
+                "encoding",
+                "url"
+            ],
+            "support": {
+                "issues": "https://github.com/delight-im/PHP-Base64/issues",
+                "source": "https://github.com/delight-im/PHP-Base64/tree/master"
+            },
+            "install-path": "../delight-im/base64"
+        },
+        {
+            "name": "delight-im/cookie",
+            "version": "v3.4.0",
+            "version_normalized": "3.4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/delight-im/PHP-Cookie.git",
+                "reference": "67065d34272377d63bab0bd58f984f9b228c803f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/delight-im/PHP-Cookie/zipball/67065d34272377d63bab0bd58f984f9b228c803f",
+                "reference": "67065d34272377d63bab0bd58f984f9b228c803f",
+                "shasum": ""
+            },
+            "require": {
+                "delight-im/http": "^2.0",
+                "php": ">=5.4.0"
+            },
+            "time": "2020-04-16T11:01:26+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Delight\\Cookie\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Modern cookie management for PHP",
+            "homepage": "https://github.com/delight-im/PHP-Cookie",
+            "keywords": [
+                "cookie",
+                "cookies",
+                "csrf",
+                "http",
+                "same-site",
+                "samesite",
+                "xss"
+            ],
+            "support": {
+                "issues": "https://github.com/delight-im/PHP-Cookie/issues",
+                "source": "https://github.com/delight-im/PHP-Cookie/tree/v3.4.0"
+            },
+            "install-path": "../delight-im/cookie"
+        },
+        {
+            "name": "delight-im/db",
+            "version": "v1.3.1",
+            "version_normalized": "1.3.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/delight-im/PHP-DB.git",
+                "reference": "7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/delight-im/PHP-DB/zipball/7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c",
+                "reference": "7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c",
+                "shasum": ""
+            },
+            "require": {
+                "ext-pdo": "*",
+                "php": ">=5.6.0"
+            },
+            "time": "2020-02-21T10:46:03+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Delight\\Db\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Safe and convenient SQL database access in a driver-agnostic way",
+            "homepage": "https://github.com/delight-im/PHP-DB",
+            "keywords": [
+                "database",
+                "mysql",
+                "pdo",
+                "pgsql",
+                "postgresql",
+                "sql",
+                "sqlite"
+            ],
+            "support": {
+                "issues": "https://github.com/delight-im/PHP-DB/issues",
+                "source": "https://github.com/delight-im/PHP-DB/tree/v1.3.1"
+            },
+            "install-path": "../delight-im/db"
+        },
+        {
+            "name": "delight-im/http",
+            "version": "v2.1.0",
+            "version_normalized": "2.1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/delight-im/PHP-HTTP.git",
+                "reference": "a5c2c4eae1dd3207f797984e8f64f2d71ed889dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/delight-im/PHP-HTTP/zipball/a5c2c4eae1dd3207f797984e8f64f2d71ed889dd",
+                "reference": "a5c2c4eae1dd3207f797984e8f64f2d71ed889dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "time": "2021-10-12T18:52:29+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Delight\\Http\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Hypertext Transfer Protocol (HTTP) utilities for PHP",
+            "homepage": "https://github.com/delight-im/PHP-HTTP",
+            "keywords": [
+                "headers",
+                "http",
+                "https"
+            ],
+            "support": {
+                "issues": "https://github.com/delight-im/PHP-HTTP/issues",
+                "source": "https://github.com/delight-im/PHP-HTTP/tree/v2.1.0"
+            },
+            "install-path": "../delight-im/http"
+        },
+        {
+            "name": "doctrine/inflector",
+            "version": "2.0.10",
+            "version_normalized": "2.0.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/inflector.git",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^11.0",
+                "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 || ^5.4"
+            },
+            "time": "2024-02-18T20:23:39+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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.10"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../doctrine/inflector"
+        },
+        {
+            "name": "doctrine/lexer",
+            "version": "3.0.1",
+            "version_normalized": "3.0.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/lexer.git",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^10.5",
+                "psalm/plugin-phpunit": "^0.18.3",
+                "vimeo/psalm": "^5.21"
+            },
+            "time": "2024-02-05T11:56:58+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Common\\Lexer\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Guilherme Blanco",
+                    "email": "guilhermeblanco@gmail.com"
+                },
+                {
+                    "name": "Roman Borschel",
+                    "email": "roman@code-factory.org"
+                },
+                {
+                    "name": "Johannes Schmitt",
+                    "email": "schmittjoh@gmail.com"
+                }
+            ],
+            "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+            "homepage": "https://www.doctrine-project.org/projects/lexer.html",
+            "keywords": [
+                "annotations",
+                "docblock",
+                "lexer",
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/lexer/issues",
+                "source": "https://github.com/doctrine/lexer/tree/3.0.1"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../doctrine/lexer"
+        },
+        {
+            "name": "eftec/bladeone",
+            "version": "4.18",
+            "version_normalized": "4.18.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/EFTEC/BladeOne.git",
+                "reference": "fb51dcd21ba6c998b96d26ac5babfca1bd05acdf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/EFTEC/BladeOne/zipball/fb51dcd21ba6c998b96d26ac5babfca1bd05acdf",
+                "reference": "fb51dcd21ba6c998b96d26ac5babfca1bd05acdf",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5.23"
+            },
+            "suggest": {
+                "eftec/bladeonehtml": "Extension to create forms",
+                "ext-mbstring": "This extension is used if it's active"
+            },
+            "time": "2025-02-22T00:12:47+00:00",
+            "bin": [
+                "lib/bladeonecli"
+            ],
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "eftec\\bladeone\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jorge Patricio Castro Castillo",
+                    "email": "jcastro@eftec.cl"
+                }
+            ],
+            "description": "The standalone version Blade Template Engine from Laravel in a single php file",
+            "homepage": "https://github.com/EFTEC/BladeOne",
+            "keywords": [
+                "blade",
+                "php",
+                "template",
+                "templating",
+                "view"
+            ],
+            "support": {
+                "issues": "https://github.com/EFTEC/BladeOne/issues",
+                "source": "https://github.com/EFTEC/BladeOne/tree/4.18"
+            },
+            "install-path": "../eftec/bladeone"
+        },
+        {
+            "name": "eftec/bladeonehtml",
+            "version": "2.5",
+            "version_normalized": "2.5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/EFTEC/BladeOneHtml.git",
+                "reference": "4f0169f756a98f73b9df988eeb3f865261041a3c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/EFTEC/BladeOneHtml/zipball/4f0169f756a98f73b9df988eeb3f865261041a3c",
+                "reference": "4f0169f756a98f73b9df988eeb3f865261041a3c",
+                "shasum": ""
+            },
+            "require": {
+                "eftec/bladeone": "^4.12",
+                "eftec/messagecontainer": "^2.8",
+                "ext-json": "*",
+                "php": ">=7.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5.11"
+            },
+            "time": "2024-12-31T11:19:16+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "eftec\\bladeonehtml\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jorge Patricio Castro Castillo",
+                    "email": "jcastro@eftec.cl"
+                }
+            ],
+            "description": "The standalone version Blade Template Engine from Laravel in a single php file",
+            "homepage": "https://github.com/EFTEC/BladeOneHtml",
+            "keywords": [
+                "blade",
+                "php",
+                "template",
+                "templating",
+                "view"
+            ],
+            "support": {
+                "issues": "https://github.com/EFTEC/BladeOneHtml/issues",
+                "source": "https://github.com/EFTEC/BladeOneHtml/tree/2.5"
+            },
+            "install-path": "../eftec/bladeonehtml"
+        },
+        {
+            "name": "eftec/messagecontainer",
+            "version": "2.9",
+            "version_normalized": "2.9.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/EFTEC/MessageContainer.git",
+                "reference": "de7f0bacee59deae7e9376c9a2432e824bcf15d5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/EFTEC/MessageContainer/zipball/de7f0bacee59deae7e9376c9a2432e824bcf15d5",
+                "reference": "de7f0bacee59deae7e9376c9a2432e824bcf15d5",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "php": ">=7.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.5"
+            },
+            "time": "2024-03-02T16:26:06+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "eftec\\": "lib/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Jorge Castro",
+                    "email": "jcastro@eftec.cl"
+                }
+            ],
+            "description": "MessageContainer is a simple a minimalist message-system where messages (strings) could be stored in a tree-like structure",
+            "homepage": "https://github.com/EFTEC/MessageContainer",
+            "support": {
+                "issues": "https://github.com/EFTEC/MessageContainer/issues",
+                "source": "https://github.com/EFTEC/MessageContainer/tree/2.9"
+            },
+            "install-path": "../eftec/messagecontainer"
+        },
+        {
+            "name": "egulias/email-validator",
+            "version": "4.0.3",
+            "version_normalized": "4.0.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/egulias/EmailValidator.git",
+                "reference": "b115554301161fa21467629f1e1391c1936de517"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517",
+                "reference": "b115554301161fa21467629f1e1391c1936de517",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/lexer": "^2.0 || ^3.0",
+                "php": ">=8.1",
+                "symfony/polyfill-intl-idn": "^1.26"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^10.2",
+                "vimeo/psalm": "^5.12"
+            },
+            "suggest": {
+                "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+            },
+            "time": "2024-12-27T00:36:43+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/egulias",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../egulias/email-validator"
+        },
+        {
+            "name": "fakerphp/faker",
+            "version": "v1.24.1",
+            "version_normalized": "1.24.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/FakerPHP/Faker.git",
+                "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+                "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.4 || ^8.0",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/deprecation-contracts": "^2.2 || ^3.0"
+            },
+            "conflict": {
+                "fzaninotto/faker": "*"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.4.1",
+                "doctrine/persistence": "^1.3 || ^2.0",
+                "ext-intl": "*",
+                "phpunit/phpunit": "^9.5.26",
+                "symfony/phpunit-bridge": "^5.4.16"
+            },
+            "suggest": {
+                "doctrine/orm": "Required to use Faker\\ORM\\Doctrine",
+                "ext-curl": "Required by Faker\\Provider\\Image to download images.",
+                "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.",
+                "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.",
+                "ext-mbstring": "Required for multibyte Unicode string functionality."
+            },
+            "time": "2024-11-21T13:46:39+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Faker\\": "src/Faker/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "François Zaninotto"
+                }
+            ],
+            "description": "Faker is a PHP library that generates fake data for you.",
+            "keywords": [
+                "data",
+                "faker",
+                "fixtures"
+            ],
+            "support": {
+                "issues": "https://github.com/FakerPHP/Faker/issues",
+                "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1"
+            },
+            "install-path": "../fakerphp/faker"
+        },
+        {
+            "name": "google/recaptcha",
+            "version": "1.3.0",
+            "version_normalized": "1.3.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/google/recaptcha.git",
+                "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/google/recaptcha/zipball/d59a801e98a4e9174814a6d71bbc268dff1202df",
+                "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.14",
+                "php-coveralls/php-coveralls": "^2.5",
+                "phpunit/phpunit": "^10"
+            },
+            "time": "2023-02-18T17:41:46+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.3.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "ReCaptcha\\": "src/ReCaptcha"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.",
+            "homepage": "https://www.google.com/recaptcha/",
+            "keywords": [
+                "Abuse",
+                "captcha",
+                "recaptcha",
+                "spam"
+            ],
+            "support": {
+                "forum": "https://groups.google.com/forum/#!forum/recaptcha",
+                "issues": "https://github.com/google/recaptcha/issues",
+                "source": "https://github.com/google/recaptcha"
+            },
+            "install-path": "../google/recaptcha"
+        },
+        {
+            "name": "guzzlehttp/psr7",
+            "version": "2.7.0",
+            "version_normalized": "2.7.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/guzzle/psr7.git",
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+                "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2.5 || ^8.0",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.1 || ^2.0",
+                "ralouphie/getallheaders": "^3.0"
+            },
+            "provide": {
+                "psr/http-factory-implementation": "1.0",
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "bamarni/composer-bin-plugin": "^1.8.2",
+                "http-interop/http-factory-tests": "0.9.0",
+                "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+            },
+            "suggest": {
+                "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+            },
+            "time": "2024-07-18T11:15:46+00:00",
+            "type": "library",
+            "extra": {
+                "bamarni-bin": {
+                    "bin-links": true,
+                    "forward-command": false
+                }
+            },
+            "installation-source": "dist",
+            "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.7.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/GrahamCampbell",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/Nyholm",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../guzzlehttp/psr7"
+        },
+        {
+            "name": "illuminate/collections",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/collections.git",
+                "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/collections/zipball/705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
+                "reference": "705a4e1ef93cd492c45b9b3e7911cccc990a07f4",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/contracts": "^8.0",
+                "illuminate/macroable": "^8.0",
+                "php": "^7.3|^8.0"
+            },
+            "suggest": {
+                "symfony/var-dumper": "Required to use the dump method (^5.4)."
+            },
+            "time": "2022-06-23T15:29:49+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "helpers.php"
+                ],
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Collections package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/collections"
+        },
+        {
+            "name": "illuminate/container",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/container.git",
+                "reference": "14062628d05f75047c5a1360b9350028427d568e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/container/zipball/14062628d05f75047c5a1360b9350028427d568e",
+                "reference": "14062628d05f75047c5a1360b9350028427d568e",
+                "shasum": ""
+            },
+            "require": {
+                "illuminate/contracts": "^8.0",
+                "php": "^7.3|^8.0",
+                "psr/container": "^1.0"
+            },
+            "provide": {
+                "psr/container-implementation": "1.0"
+            },
+            "time": "2022-02-02T21:03:35+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Container\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Container package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/container"
+        },
+        {
+            "name": "illuminate/contracts",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/contracts.git",
+                "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/contracts/zipball/5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
+                "reference": "5e0fd287a1b22a6b346a9f7cd484d8cf0234585d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^8.0",
+                "psr/container": "^1.0",
+                "psr/simple-cache": "^1.0"
+            },
+            "time": "2022-01-13T14:47:47+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Contracts\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Contracts package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/contracts"
+        },
+        {
+            "name": "illuminate/database",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/database.git",
+                "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/database/zipball/1a5b0e4e6913415464fa2aab554a38b9e6fa44b1",
+                "reference": "1a5b0e4e6913415464fa2aab554a38b9e6fa44b1",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "illuminate/collections": "^8.0",
+                "illuminate/container": "^8.0",
+                "illuminate/contracts": "^8.0",
+                "illuminate/macroable": "^8.0",
+                "illuminate/support": "^8.0",
+                "php": "^7.3|^8.0",
+                "symfony/console": "^5.4"
+            },
+            "suggest": {
+                "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).",
+                "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).",
+                "illuminate/console": "Required to use the database commands (^8.0).",
+                "illuminate/events": "Required to use the observers with Eloquent (^8.0).",
+                "illuminate/filesystem": "Required to use the migrations (^8.0).",
+                "illuminate/pagination": "Required to paginate the result set (^8.0).",
+                "symfony/finder": "Required to use Eloquent model factories (^5.4)."
+            },
+            "time": "2022-08-31T16:16:06+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Database\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Database package.",
+            "homepage": "https://laravel.com",
+            "keywords": [
+                "database",
+                "laravel",
+                "orm",
+                "sql"
+            ],
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/database"
+        },
+        {
+            "name": "illuminate/macroable",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/macroable.git",
+                "reference": "aed81891a6e046fdee72edd497f822190f61c162"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/macroable/zipball/aed81891a6e046fdee72edd497f822190f61c162",
+                "reference": "aed81891a6e046fdee72edd497f822190f61c162",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.3|^8.0"
+            },
+            "time": "2021-11-16T13:57:03+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Macroable package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/macroable"
+        },
+        {
+            "name": "illuminate/support",
+            "version": "v8.83.27",
+            "version_normalized": "8.83.27.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/illuminate/support.git",
+                "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/illuminate/support/zipball/1c79242468d3bbd9a0f7477df34f9647dde2a09b",
+                "reference": "1c79242468d3bbd9a0f7477df34f9647dde2a09b",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/inflector": "^1.4|^2.0",
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "illuminate/collections": "^8.0",
+                "illuminate/contracts": "^8.0",
+                "illuminate/macroable": "^8.0",
+                "nesbot/carbon": "^2.53.1",
+                "php": "^7.3|^8.0",
+                "voku/portable-ascii": "^1.6.1"
+            },
+            "conflict": {
+                "tightenco/collect": "<5.5.33"
+            },
+            "suggest": {
+                "illuminate/filesystem": "Required to use the composer class (^8.0).",
+                "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^1.3|^2.0.2).",
+                "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).",
+                "symfony/process": "Required to use the composer class (^5.4).",
+                "symfony/var-dumper": "Required to use the dd function (^5.4).",
+                "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
+            },
+            "time": "2022-09-21T21:30:03+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "8.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "helpers.php"
+                ],
+                "psr-4": {
+                    "Illuminate\\Support\\": ""
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Taylor Otwell",
+                    "email": "taylor@laravel.com"
+                }
+            ],
+            "description": "The Illuminate Support package.",
+            "homepage": "https://laravel.com",
+            "support": {
+                "issues": "https://github.com/laravel/framework/issues",
+                "source": "https://github.com/laravel/framework"
+            },
+            "install-path": "../illuminate/support"
+        },
+        {
+            "name": "intervention/image",
+            "version": "2.7.2",
+            "version_normalized": "2.7.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Intervention/image.git",
+                "reference": "04be355f8d6734c826045d02a1079ad658322dad"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad",
+                "reference": "04be355f8d6734c826045d02a1079ad658322dad",
+                "shasum": ""
+            },
+            "require": {
+                "ext-fileinfo": "*",
+                "guzzlehttp/psr7": "~1.1 || ^2.0",
+                "php": ">=5.4.0"
+            },
+            "require-dev": {
+                "mockery/mockery": "~0.9.2",
+                "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15"
+            },
+            "suggest": {
+                "ext-gd": "to use GD library based image processing.",
+                "ext-imagick": "to use Imagick based image processing.",
+                "intervention/imagecache": "Caching extension for the Intervention Image library"
+            },
+            "time": "2022-05-21T17:30:32+00:00",
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "aliases": {
+                        "Image": "Intervention\\Image\\Facades\\Image"
+                    },
+                    "providers": [
+                        "Intervention\\Image\\ImageServiceProvider"
+                    ]
+                },
+                "branch-alias": {
+                    "dev-master": "2.4-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Intervention\\Image\\": "src/Intervention/Image"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Oliver Vogel",
+                    "email": "oliver@intervention.io",
+                    "homepage": "https://intervention.io/"
+                }
+            ],
+            "description": "Image handling and manipulation library with support for Laravel integration",
+            "homepage": "http://image.intervention.io/",
+            "keywords": [
+                "gd",
+                "image",
+                "imagick",
+                "laravel",
+                "thumbnail",
+                "watermark"
+            ],
+            "support": {
+                "issues": "https://github.com/Intervention/image/issues",
+                "source": "https://github.com/Intervention/image/tree/2.7.2"
+            },
+            "funding": [
+                {
+                    "url": "https://paypal.me/interventionio",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/Intervention",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../intervention/image"
+        },
+        {
+            "name": "laravel/serializable-closure",
+            "version": "v2.0.3",
+            "version_normalized": "2.0.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/laravel/serializable-closure.git",
+                "reference": "f379c13663245f7aa4512a7869f62eb14095f23f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f",
+                "reference": "f379c13663245f7aa4512a7869f62eb14095f23f",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "illuminate/support": "^10.0|^11.0|^12.0",
+                "nesbot/carbon": "^2.67|^3.0",
+                "pestphp/pest": "^2.36|^3.0",
+                "phpstan/phpstan": "^2.0",
+                "symfony/var-dumper": "^6.2.0|^7.0.0"
+            },
+            "time": "2025-02-11T15:03:05+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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"
+            },
+            "install-path": "../laravel/serializable-closure"
+        },
+        {
+            "name": "league/flysystem",
+            "version": "1.1.10",
+            "version_normalized": "1.1.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/flysystem.git",
+                "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1",
+                "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1",
+                "shasum": ""
+            },
+            "require": {
+                "ext-fileinfo": "*",
+                "league/mime-type-detection": "^1.3",
+                "php": "^7.2.5 || ^8.0"
+            },
+            "conflict": {
+                "league/flysystem-sftp": "<1.0.6"
+            },
+            "require-dev": {
+                "phpspec/prophecy": "^1.11.1",
+                "phpunit/phpunit": "^8.5.8"
+            },
+            "suggest": {
+                "ext-ftp": "Allows you to use FTP server storage",
+                "ext-openssl": "Allows you to use FTPS server storage",
+                "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+                "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+                "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+                "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+                "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+                "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+                "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+                "league/flysystem-webdav": "Allows you to use WebDAV storage",
+                "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+                "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+                "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+            },
+            "time": "2022-10-04T09:16:37+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.1-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "League\\Flysystem\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frenky.net"
+                }
+            ],
+            "description": "Filesystem abstraction: Many filesystems, one API.",
+            "keywords": [
+                "Cloud Files",
+                "WebDAV",
+                "abstraction",
+                "aws",
+                "cloud",
+                "copy.com",
+                "dropbox",
+                "file systems",
+                "files",
+                "filesystem",
+                "filesystems",
+                "ftp",
+                "rackspace",
+                "remote",
+                "s3",
+                "sftp",
+                "storage"
+            ],
+            "support": {
+                "issues": "https://github.com/thephpleague/flysystem/issues",
+                "source": "https://github.com/thephpleague/flysystem/tree/1.1.10"
+            },
+            "funding": [
+                {
+                    "url": "https://offset.earth/frankdejonge",
+                    "type": "other"
+                }
+            ],
+            "install-path": "../league/flysystem"
+        },
+        {
+            "name": "league/mime-type-detection",
+            "version": "1.16.0",
+            "version_normalized": "1.16.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/thephpleague/mime-type-detection.git",
+                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9",
+                "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9",
+                "shasum": ""
+            },
+            "require": {
+                "ext-fileinfo": "*",
+                "php": "^7.4 || ^8.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3.2",
+                "phpstan/phpstan": "^0.12.68",
+                "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
+            },
+            "time": "2024-09-21T08:32:55+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "League\\MimeTypeDetection\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Frank de Jonge",
+                    "email": "info@frankdejonge.nl"
+                }
+            ],
+            "description": "Mime-type detection for Flysystem",
+            "support": {
+                "issues": "https://github.com/thephpleague/mime-type-detection/issues",
+                "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/frankdejonge",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/league/flysystem",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../league/mime-type-detection"
+        },
+        {
+            "name": "monolog/monolog",
+            "version": "2.10.0",
+            "version_normalized": "2.10.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Seldaek/monolog.git",
+                "reference": "5cf826f2991858b54d5c3809bee745560a1042a7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/5cf826f2991858b54d5c3809bee745560a1042a7",
+                "reference": "5cf826f2991858b54d5c3809bee745560a1042a7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2",
+                "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0"
+            },
+            "require-dev": {
+                "aws/aws-sdk-php": "^2.4.9 || ^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",
+                "guzzlehttp/psr7": "^2.2",
+                "mongodb/mongodb": "^1.8",
+                "php-amqplib/php-amqplib": "~2.4 || ^3",
+                "phpspec/prophecy": "^1.15",
+                "phpstan/phpstan": "^1.10",
+                "phpunit/phpunit": "^8.5.38 || ^9.6.19",
+                "predis/predis": "^1.1 || ^2.0",
+                "rollbar/rollbar": "^1.3 || ^2 || ^3",
+                "ruflin/elastica": "^7",
+                "swiftmailer/swiftmailer": "^5.3|^6.0",
+                "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"
+            },
+            "time": "2024-11-12T12:43:37+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "2.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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/2.10.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/Seldaek",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/monolog/monolog",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../monolog/monolog"
+        },
+        {
+            "name": "nesbot/carbon",
+            "version": "2.73.0",
+            "version_normalized": "2.73.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/CarbonPHP/carbon.git",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075",
+                "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075",
+                "shasum": ""
+            },
+            "require": {
+                "carbonphp/carbon-doctrine-types": "*",
+                "ext-json": "*",
+                "php": "^7.1.8 || ^8.0",
+                "psr/clock": "^1.0",
+                "symfony/polyfill-mbstring": "^1.0",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
+            },
+            "provide": {
+                "psr/clock-implementation": "1.0"
+            },
+            "require-dev": {
+                "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+                "doctrine/orm": "^2.7 || ^3.0",
+                "friendsofphp/php-cs-fixer": "^3.0",
+                "kylekatarnls/multi-tester": "^2.0",
+                "ondrejmirtes/better-reflection": "<6",
+                "phpmd/phpmd": "^2.9",
+                "phpstan/extension-installer": "^1.0",
+                "phpstan/phpstan": "^0.12.99 || ^1.7.14",
+                "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20",
+                "squizlabs/php_codesniffer": "^3.4"
+            },
+            "time": "2025-01-08T20:10:23+00:00",
+            "bin": [
+                "bin/carbon"
+            ],
+            "type": "library",
+            "extra": {
+                "laravel": {
+                    "providers": [
+                        "Carbon\\Laravel\\ServiceProvider"
+                    ]
+                },
+                "phpstan": {
+                    "includes": [
+                        "extension.neon"
+                    ]
+                },
+                "branch-alias": {
+                    "dev-2.x": "2.x-dev",
+                    "dev-master": "3.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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"
+                }
+            ],
+            "install-path": "../nesbot/carbon"
+        },
+        {
+            "name": "nyholm/psr7",
+            "version": "1.8.2",
+            "version_normalized": "1.8.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Nyholm/psr7.git",
+                "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+                "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2",
+                "psr/http-factory": "^1.0",
+                "psr/http-message": "^1.1 || ^2.0"
+            },
+            "provide": {
+                "php-http/message-factory-implementation": "1.0",
+                "psr/http-factory-implementation": "1.0",
+                "psr/http-message-implementation": "1.0"
+            },
+            "require-dev": {
+                "http-interop/http-factory-tests": "^0.9",
+                "php-http/message-factory": "^1.0",
+                "php-http/psr7-integration-tests": "^1.0",
+                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
+                "symfony/error-handler": "^4.4"
+            },
+            "time": "2024-09-09T07:06:30+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.8-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Nyholm\\Psr7\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Tobias Nyholm",
+                    "email": "tobias.nyholm@gmail.com"
+                },
+                {
+                    "name": "Martijn van der Ven",
+                    "email": "martijn@vanderven.se"
+                }
+            ],
+            "description": "A fast PHP7 implementation of PSR-7",
+            "homepage": "https://tnyholm.se",
+            "keywords": [
+                "psr-17",
+                "psr-7"
+            ],
+            "support": {
+                "issues": "https://github.com/Nyholm/psr7/issues",
+                "source": "https://github.com/Nyholm/psr7/tree/1.8.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/Zegnat",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/nyholm",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../nyholm/psr7"
+        },
+        {
+            "name": "paragonie/random_compat",
+            "version": "v9.99.100",
+            "version_normalized": "9.99.100.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paragonie/random_compat.git",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">= 7"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "4.*|5.*",
+                "vimeo/psalm": "^1"
+            },
+            "suggest": {
+                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+            },
+            "time": "2020-10-15T08:29:30+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Paragon Initiative Enterprises",
+                    "email": "security@paragonie.com",
+                    "homepage": "https://paragonie.com"
+                }
+            ],
+            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+            "keywords": [
+                "csprng",
+                "polyfill",
+                "pseudorandom",
+                "random"
+            ],
+            "support": {
+                "email": "info@paragonie.com",
+                "issues": "https://github.com/paragonie/random_compat/issues",
+                "source": "https://github.com/paragonie/random_compat"
+            },
+            "install-path": "../paragonie/random_compat"
+        },
+        {
+            "name": "pecee/simple-router",
+            "version": "5.4.1.7",
+            "version_normalized": "5.4.1.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/skipperbent/simple-php-router.git",
+                "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/skipperbent/simple-php-router/zipball/a2843d5b1e037f8b61cc99f27eab52a28bf41dfd",
+                "reference": "a2843d5b1e037f8b61cc99f27eab52a28bf41dfd",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "php": ">=7.4"
+            },
+            "require-dev": {
+                "mockery/mockery": "^1",
+                "phpstan/phpstan": "^1",
+                "phpstan/phpstan-deprecation-rules": "^1",
+                "phpstan/phpstan-phpunit": "^1",
+                "phpstan/phpstan-strict-rules": "^1",
+                "phpunit/phpunit": "^8"
+            },
+            "time": "2023-12-11T21:48:25+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Pecee\\": "src/Pecee/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Simon Sessingø",
+                    "email": "simon.sessingoe@gmail.com"
+                }
+            ],
+            "description": "Simple, fast PHP router that is easy to get integrated and in almost any project. Heavily inspired by the Laravel router.",
+            "keywords": [
+                "framework",
+                "input-handler",
+                "laravel",
+                "pecee",
+                "php",
+                "request-handler",
+                "route",
+                "router",
+                "routing",
+                "routing-engine",
+                "simple-php-router",
+                "url-handling"
+            ],
+            "support": {
+                "issues": "https://github.com/skipperbent/simple-php-router/issues",
+                "source": "https://github.com/skipperbent/simple-php-router/issues"
+            },
+            "install-path": "../pecee/simple-router"
+        },
+        {
+            "name": "php-di/invoker",
+            "version": "2.3.6",
+            "version_normalized": "2.3.6.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-DI/Invoker.git",
+                "reference": "59f15608528d8a8838d69b422a919fd6b16aa576"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576",
+                "reference": "59f15608528d8a8838d69b422a919fd6b16aa576",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "psr/container": "^1.0|^2.0"
+            },
+            "require-dev": {
+                "athletic/athletic": "~0.1.8",
+                "mnapoli/hard-mode": "~0.3.0",
+                "phpunit/phpunit": "^9.0"
+            },
+            "time": "2025-01-17T12:49:27+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Invoker\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Generic and extensible callable invoker",
+            "homepage": "https://github.com/PHP-DI/Invoker",
+            "keywords": [
+                "callable",
+                "dependency",
+                "dependency-injection",
+                "injection",
+                "invoke",
+                "invoker"
+            ],
+            "support": {
+                "issues": "https://github.com/PHP-DI/Invoker/issues",
+                "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../php-di/invoker"
+        },
+        {
+            "name": "php-di/php-di",
+            "version": "7.0.9",
+            "version_normalized": "7.0.9.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHP-DI/PHP-DI.git",
+                "reference": "d8480267f5cf239650debba704f3ecd15b638cde"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/d8480267f5cf239650debba704f3ecd15b638cde",
+                "reference": "d8480267f5cf239650debba704f3ecd15b638cde",
+                "shasum": ""
+            },
+            "require": {
+                "laravel/serializable-closure": "^1.0 || ^2.0",
+                "php": ">=8.0",
+                "php-di/invoker": "^2.0",
+                "psr/container": "^1.1 || ^2.0"
+            },
+            "provide": {
+                "psr/container-implementation": "^1.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "^3",
+                "friendsofphp/proxy-manager-lts": "^1",
+                "mnapoli/phpunit-easymock": "^1.3",
+                "phpunit/phpunit": "^9.6",
+                "vimeo/psalm": "^5|^6"
+            },
+            "suggest": {
+                "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)"
+            },
+            "time": "2025-02-28T12:46:35+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "src/functions.php"
+                ],
+                "psr-4": {
+                    "DI\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "The dependency injection container for humans",
+            "homepage": "https://php-di.org/",
+            "keywords": [
+                "PSR-11",
+                "container",
+                "container-interop",
+                "dependency injection",
+                "di",
+                "ioc",
+                "psr11"
+            ],
+            "support": {
+                "issues": "https://github.com/PHP-DI/PHP-DI/issues",
+                "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.9"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/mnapoli",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../php-di/php-di"
+        },
+        {
+            "name": "phpauth/phpauth",
+            "version": "1.5.0",
+            "version_normalized": "1.5.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPAuth/PHPAuth.git",
+                "reference": "f77d23bd4a0c8099b23c47b305b810f42a6067d6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPAuth/PHPAuth/zipball/f77d23bd4a0c8099b23c47b305b810f42a6067d6",
+                "reference": "f77d23bd4a0c8099b23c47b305b810f42a6067d6",
+                "shasum": ""
+            },
+            "require": {
+                "ext-json": "*",
+                "ext-mbstring": "*",
+                "ext-pdo": "*",
+                "google/recaptcha": "^1.2",
+                "php": ">=7.2.0",
+                "phpmailer/phpmailer": "^6.0"
+            },
+            "require-dev": {
+                "phpauth/phpauth.email-validator": "^0.1.1",
+                "phpauth/phpauth.l10n": "^0.1.0",
+                "phpunit/phpunit": "6.*"
+            },
+            "suggest": {
+                "bjeavons/zxcvbn-php": "^1.0",
+                "ganlvtech/kcaptcha": "^1.0",
+                "phpauth/phpauth.email-validator": "^0.1.1",
+                "phpauth/phpauth.l10n": "^0.1.0"
+            },
+            "time": "2023-06-28T17:41:59+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "PHPAuth\\": "sources/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "A secure user authentication class for PHP websites, using a powerful password hashing system and attack blocking to keep your website and users secure.",
+            "homepage": "https://phpauth.github.io/PHPAuth/",
+            "keywords": [
+                "Authentication",
+                "class",
+                "secure"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPAuth/PHPAuth/issues",
+                "source": "https://github.com/PHPAuth/PHPAuth/tree/1.5.0"
+            },
+            "install-path": "../phpauth/phpauth"
+        },
+        {
+            "name": "phpmailer/phpmailer",
+            "version": "v6.9.3",
+            "version_normalized": "6.9.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPMailer/PHPMailer.git",
+                "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/2f5c94fe7493efc213f643c23b1b1c249d40f47e",
+                "reference": "2f5c94fe7493efc213f643c23b1b1c249d40f47e",
+                "shasum": ""
+            },
+            "require": {
+                "ext-ctype": "*",
+                "ext-filter": "*",
+                "ext-hash": "*",
+                "php": ">=5.5.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+                "doctrine/annotations": "^1.2.6 || ^1.13.3",
+                "php-parallel-lint/php-console-highlighter": "^1.0.0",
+                "php-parallel-lint/php-parallel-lint": "^1.3.2",
+                "phpcompatibility/php-compatibility": "^9.3.5",
+                "roave/security-advisories": "dev-latest",
+                "squizlabs/php_codesniffer": "^3.7.2",
+                "yoast/phpunit-polyfills": "^1.0.4"
+            },
+            "suggest": {
+                "decomplexity/SendOauth2": "Adapter for using XOAUTH2 authentication",
+                "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses",
+                "ext-openssl": "Needed for secure SMTP sending and DKIM signing",
+                "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication",
+                "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
+                "league/oauth2-google": "Needed for Google XOAUTH2 authentication",
+                "psr/log": "For optional PSR-3 debug logging",
+                "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)",
+                "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication"
+            },
+            "time": "2024-11-24T18:04:13+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "PHPMailer\\PHPMailer\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-2.1-only"
+            ],
+            "authors": [
+                {
+                    "name": "Marcus Bointon",
+                    "email": "phpmailer@synchromedia.co.uk"
+                },
+                {
+                    "name": "Jim Jagielski",
+                    "email": "jimjag@gmail.com"
+                },
+                {
+                    "name": "Andy Prevost",
+                    "email": "codeworxtech@users.sourceforge.net"
+                },
+                {
+                    "name": "Brent R. Matzelle"
+                }
+            ],
+            "description": "PHPMailer is a full-featured email creation and transfer class for PHP",
+            "support": {
+                "issues": "https://github.com/PHPMailer/PHPMailer/issues",
+                "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.9.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/Synchro",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../phpmailer/phpmailer"
+        },
+        {
+            "name": "predis/predis",
+            "version": "v1.1.10",
+            "version_normalized": "1.1.10.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/predis/predis.git",
+                "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/predis/predis/zipball/a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
+                "reference": "a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.9"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.8"
+            },
+            "suggest": {
+                "ext-curl": "Allows access to Webdis when paired with phpiredis",
+                "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol"
+            },
+            "time": "2022-01-05T17:46:08+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Predis\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Daniele Alessandri",
+                    "email": "suppakilla@gmail.com",
+                    "homepage": "http://clorophilla.net",
+                    "role": "Creator & Maintainer"
+                },
+                {
+                    "name": "Till Krüss",
+                    "homepage": "https://till.im",
+                    "role": "Maintainer"
+                }
+            ],
+            "description": "Flexible and feature-complete Redis client for PHP and HHVM",
+            "homepage": "http://github.com/predis/predis",
+            "keywords": [
+                "nosql",
+                "predis",
+                "redis"
+            ],
+            "support": {
+                "issues": "https://github.com/predis/predis/issues",
+                "source": "https://github.com/predis/predis/tree/v1.1.10"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sponsors/tillkruss",
+                    "type": "github"
+                }
+            ],
+            "install-path": "../predis/predis"
+        },
+        {
+            "name": "psr/cache",
+            "version": "2.0.0",
+            "version_normalized": "2.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/cache.git",
+                "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/cache/zipball/213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
+                "reference": "213f9dbc5b9bfbc4f8db86d2838dc968752ce13b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "time": "2021-02-03T23:23:37+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Cache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for caching libraries",
+            "keywords": [
+                "cache",
+                "psr",
+                "psr-6"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/cache/tree/2.0.0"
+            },
+            "install-path": "../psr/cache"
+        },
+        {
+            "name": "psr/clock",
+            "version": "1.0.0",
+            "version_normalized": "1.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/clock.git",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.0 || ^8.0"
+            },
+            "time": "2022-11-25T14:36:26+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Clock\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for reading the clock.",
+            "homepage": "https://github.com/php-fig/clock",
+            "keywords": [
+                "clock",
+                "now",
+                "psr",
+                "psr-20",
+                "time"
+            ],
+            "support": {
+                "issues": "https://github.com/php-fig/clock/issues",
+                "source": "https://github.com/php-fig/clock/tree/1.0.0"
+            },
+            "install-path": "../psr/clock"
+        },
+        {
+            "name": "psr/container",
+            "version": "1.1.2",
+            "version_normalized": "1.1.2.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/container.git",
+                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+                "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.4.0"
+            },
+            "time": "2021-11-05T16:50:12+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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/1.1.2"
+            },
+            "install-path": "../psr/container"
+        },
+        {
+            "name": "psr/event-dispatcher",
+            "version": "1.0.0",
+            "version_normalized": "1.0.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"
+            },
+            "time": "2019-01-08T18:20:26+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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"
+            },
+            "install-path": "../psr/event-dispatcher"
+        },
+        {
+            "name": "psr/http-factory",
+            "version": "1.1.0",
+            "version_normalized": "1.1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-factory.git",
+                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+                "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1",
+                "psr/http-message": "^1.0 || ^2.0"
+            },
+            "time": "2024-04-15T12:06:14+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+            "keywords": [
+                "factory",
+                "http",
+                "message",
+                "psr",
+                "psr-17",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-factory"
+            },
+            "install-path": "../psr/http-factory"
+        },
+        {
+            "name": "psr/http-message",
+            "version": "2.0",
+            "version_normalized": "2.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/http-message.git",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "time": "2023-04-04T09:54:51+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "installation-source": "source",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\Http\\Message\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "https://www.php-fig.org/"
+                }
+            ],
+            "description": "Common interface for HTTP messages",
+            "homepage": "https://github.com/php-fig/http-message",
+            "keywords": [
+                "http",
+                "http-message",
+                "psr",
+                "psr-7",
+                "request",
+                "response"
+            ],
+            "support": {
+                "source": "https://github.com/php-fig/http-message/tree/2.0"
+            },
+            "install-path": "../psr/http-message"
+        },
+        {
+            "name": "psr/log",
+            "version": "2.0.0",
+            "version_normalized": "2.0.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/log.git",
+                "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376",
+                "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.0.0"
+            },
+            "time": "2021-07-14T16:41:46+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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/2.0.0"
+            },
+            "install-path": "../psr/log"
+        },
+        {
+            "name": "psr/simple-cache",
+            "version": "1.0.1",
+            "version_normalized": "1.0.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/php-fig/simple-cache.git",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.0"
+            },
+            "time": "2017-10-23T01:57:42+00:00",
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Psr\\SimpleCache\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "PHP-FIG",
+                    "homepage": "http://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/master"
+            },
+            "install-path": "../psr/simple-cache"
+        },
+        {
+            "name": "rakit/validation",
+            "version": "v1.4.0",
+            "version_normalized": "1.4.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/rakit/validation.git",
+                "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/rakit/validation/zipball/ff003a35cdf5030a5f2482299f4c93f344a35b29",
+                "reference": "ff003a35cdf5030a5f2482299f4c93f344a35b29",
+                "shasum": ""
+            },
+            "require": {
+                "ext-mbstring": "*",
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "php-coveralls/php-coveralls": "^2.2",
+                "phpunit/phpunit": "^6.5",
+                "squizlabs/php_codesniffer": "^3"
+            },
+            "time": "2020-08-27T05:07:01+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Rakit\\Validation\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Muhammad Syifa",
+                    "email": "emsifa@gmail.com"
+                }
+            ],
+            "description": "PHP Laravel like standalone validation library",
+            "support": {
+                "issues": "https://github.com/rakit/validation/issues",
+                "source": "https://github.com/rakit/validation/tree/v1.4.0"
+            },
+            "install-path": "../rakit/validation"
+        },
+        {
+            "name": "ralouphie/getallheaders",
+            "version": "3.0.3",
+            "version_normalized": "3.0.3.0",
+            "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"
+            },
+            "time": "2019-03-08T08:55:37+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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"
+            },
+            "install-path": "../ralouphie/getallheaders"
+        },
+        {
+            "name": "robmorgan/phinx",
+            "version": "0.12.13",
+            "version_normalized": "0.12.13.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/cakephp/phinx.git",
+                "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/cakephp/phinx/zipball/6eb0f295e140ed2804d93396755f0ce9ada4ec07",
+                "reference": "6eb0f295e140ed2804d93396755f0ce9ada4ec07",
+                "shasum": ""
+            },
+            "require": {
+                "cakephp/database": "^4.0",
+                "php": ">=7.2",
+                "psr/container": "^1.0 || ^2.0",
+                "symfony/config": "^3.4|^4.0|^5.0|^6.0",
+                "symfony/console": "^3.4|^4.0|^5.0|^6.0"
+            },
+            "require-dev": {
+                "cakephp/cakephp-codesniffer": "^4.0",
+                "ext-json": "*",
+                "ext-pdo": "*",
+                "phpunit/phpunit": "^8.5|^9.3",
+                "sebastian/comparator": ">=1.2.3",
+                "symfony/yaml": "^3.4|^4.0|^5.0"
+            },
+            "suggest": {
+                "ext-json": "Install if using JSON configuration format",
+                "ext-pdo": "PDO extension is needed",
+                "symfony/yaml": "Install if using YAML configuration format"
+            },
+            "time": "2022-10-03T04:57:40+00:00",
+            "bin": [
+                "bin/phinx"
+            ],
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Phinx\\": "src/Phinx/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Rob Morgan",
+                    "email": "robbym@gmail.com",
+                    "homepage": "https://robmorgan.id.au",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Woody Gilk",
+                    "email": "woody.gilk@gmail.com",
+                    "homepage": "https://shadowhand.me",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Richard Quadling",
+                    "email": "rquadling@gmail.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "CakePHP Community",
+                    "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+            "homepage": "https://phinx.org",
+            "keywords": [
+                "database",
+                "database migrations",
+                "db",
+                "migrations",
+                "phinx"
+            ],
+            "support": {
+                "issues": "https://github.com/cakephp/phinx/issues",
+                "source": "https://github.com/cakephp/phinx/tree/0.12.13"
+            },
+            "install-path": "../robmorgan/phinx"
+        },
+        {
+            "name": "symfony/cache",
+            "version": "v5.4.46",
+            "version_normalized": "5.4.46.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/cache.git",
+                "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/cache/zipball/0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
+                "reference": "0fe08ee32cec2748fbfea10c52d3ee02049e0f6b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/cache": "^1.0|^2.0",
+                "psr/log": "^1.1|^2|^3",
+                "symfony/cache-contracts": "^1.1.7|^2",
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/polyfill-php73": "^1.9",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/service-contracts": "^1.1|^2|^3",
+                "symfony/var-exporter": "^4.4|^5.0|^6.0"
+            },
+            "conflict": {
+                "doctrine/dbal": "<2.13.1",
+                "symfony/dependency-injection": "<4.4",
+                "symfony/http-kernel": "<4.4",
+                "symfony/var-dumper": "<4.4"
+            },
+            "provide": {
+                "psr/cache-implementation": "1.0|2.0",
+                "psr/simple-cache-implementation": "1.0|2.0",
+                "symfony/cache-implementation": "1.0|2.0"
+            },
+            "require-dev": {
+                "cache/integration-tests": "dev-master",
+                "doctrine/cache": "^1.6|^2.0",
+                "doctrine/dbal": "^2.13.1|^3|^4",
+                "predis/predis": "^1.1|^2.0",
+                "psr/simple-cache": "^1.0|^2.0",
+                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/filesystem": "^4.4|^5.0|^6.0",
+                "symfony/http-kernel": "^4.4|^5.0|^6.0",
+                "symfony/messenger": "^4.4|^5.0|^6.0",
+                "symfony/var-dumper": "^4.4|^5.0|^6.0"
+            },
+            "time": "2024-11-04T11:43:55+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Cache\\": ""
+                },
+                "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 extended PSR-6, PSR-16 (and tags) implementations",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "caching",
+                "psr6"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/cache/tree/v5.4.46"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/cache"
+        },
+        {
+            "name": "symfony/cache-contracts",
+            "version": "v2.5.4",
+            "version_normalized": "2.5.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/cache-contracts.git",
+                "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/517c3a3619dadfa6952c4651767fcadffb4df65e",
+                "reference": "517c3a3619dadfa6952c4651767fcadffb4df65e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "psr/cache": "^1.0|^2.0|^3.0"
+            },
+            "suggest": {
+                "symfony/cache-implementation": ""
+            },
+            "time": "2024-09-25T14:11:13+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "2.5-dev"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Contracts\\Cache\\": ""
+                }
+            },
+            "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 caching",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "abstractions",
+                "contracts",
+                "decoupling",
+                "interfaces",
+                "interoperability",
+                "standards"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/cache-contracts/tree/v2.5.4"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/cache-contracts"
+        },
+        {
+            "name": "symfony/config",
+            "version": "v6.4.14",
+            "version_normalized": "6.4.14.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/config.git",
+                "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef",
+                "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/filesystem": "^5.4|^6.0|^7.0",
+                "symfony/polyfill-ctype": "~1.8"
+            },
+            "conflict": {
+                "symfony/finder": "<5.4",
+                "symfony/service-contracts": "<2.5"
+            },
+            "require-dev": {
+                "symfony/event-dispatcher": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/messenger": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
+            },
+            "time": "2024-11-04T11:33:53+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Config\\": ""
+                },
+                "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 you find, load, combine, autofill and validate configuration values of any kind",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/config/tree/v6.4.14"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/config"
+        },
+        {
+            "name": "symfony/console",
+            "version": "v5.4.47",
+            "version_normalized": "5.4.47.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/console.git",
+                "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+                "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2.5",
+                "symfony/deprecation-contracts": "^2.1|^3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/polyfill-php73": "^1.9",
+                "symfony/polyfill-php80": "^1.16",
+                "symfony/service-contracts": "^1.1|^2|^3",
+                "symfony/string": "^5.1|^6.0"
+            },
+            "conflict": {
+                "psr/log": ">=3",
+                "symfony/dependency-injection": "<4.4",
+                "symfony/dotenv": "<5.1",
+                "symfony/event-dispatcher": "<4.4",
+                "symfony/lock": "<4.4",
+                "symfony/process": "<4.4"
+            },
+            "provide": {
+                "psr/log-implementation": "1.0|2.0"
+            },
+            "require-dev": {
+                "psr/log": "^1|^2",
+                "symfony/config": "^4.4|^5.0|^6.0",
+                "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+                "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
+                "symfony/lock": "^4.4|^5.0|^6.0",
+                "symfony/process": "^4.4|^5.0|^6.0",
+                "symfony/var-dumper": "^4.4|^5.0|^6.0"
+            },
+            "suggest": {
+                "psr/log": "For using the console logger",
+                "symfony/event-dispatcher": "",
+                "symfony/lock": "",
+                "symfony/process": ""
+            },
+            "time": "2024-11-06T11:30:55+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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/v5.4.47"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/console"
+        },
+        {
+            "name": "symfony/deprecation-contracts",
+            "version": "v3.5.1",
+            "version_normalized": "3.5.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/deprecation-contracts.git",
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+                "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "time": "2024-09-25T14:20:29+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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.5.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"
+                }
+            ],
+            "install-path": "../symfony/deprecation-contracts"
+        },
+        {
+            "name": "symfony/dotenv",
+            "version": "v6.4.16",
+            "version_normalized": "6.4.16.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/dotenv.git",
+                "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
+                "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "conflict": {
+                "symfony/console": "<5.4",
+                "symfony/process": "<5.4"
+            },
+            "require-dev": {
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/process": "^5.4|^6.0|^7.0"
+            },
+            "time": "2024-11-27T11:08:19+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Dotenv\\": ""
+                },
+                "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": "Registers environment variables from a .env file",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "dotenv",
+                "env",
+                "environment"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/dotenv/tree/v6.4.16"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/dotenv"
+        },
+        {
+            "name": "symfony/event-dispatcher",
+            "version": "v7.2.0",
+            "version_normalized": "7.2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher.git",
+                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1",
+                "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "symfony/event-dispatcher-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "symfony/dependency-injection": "<6.4",
+                "symfony/service-contracts": "<2.5"
+            },
+            "provide": {
+                "psr/event-dispatcher-implementation": "1.0",
+                "symfony/event-dispatcher-implementation": "2.0|3.0"
+            },
+            "require-dev": {
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/error-handler": "^6.4|^7.0",
+                "symfony/expression-language": "^6.4|^7.0",
+                "symfony/http-foundation": "^6.4|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/stopwatch": "^6.4|^7.0"
+            },
+            "time": "2024-09-25T14:21:43+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\EventDispatcher\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.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"
+                }
+            ],
+            "install-path": "../symfony/event-dispatcher"
+        },
+        {
+            "name": "symfony/event-dispatcher-contracts",
+            "version": "v3.5.1",
+            "version_normalized": "3.5.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f",
+                "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/event-dispatcher": "^1"
+            },
+            "time": "2024-09-25T14:20:29+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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.5.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"
+                }
+            ],
+            "install-path": "../symfony/event-dispatcher-contracts"
+        },
+        {
+            "name": "symfony/filesystem",
+            "version": "v7.2.0",
+            "version_normalized": "7.2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/filesystem.git",
+                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
+                "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "symfony/polyfill-ctype": "~1.8",
+                "symfony/polyfill-mbstring": "~1.8"
+            },
+            "require-dev": {
+                "symfony/process": "^6.4|^7.0"
+            },
+            "time": "2024-10-25T15:15:23+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\Filesystem\\": ""
+                },
+                "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 basic utilities for the filesystem",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/filesystem/tree/v7.2.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"
+                }
+            ],
+            "install-path": "../symfony/filesystem"
+        },
+        {
+            "name": "symfony/mailer",
+            "version": "v7.2.3",
+            "version_normalized": "7.2.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/mailer.git",
+                "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3",
+                "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3",
+                "shasum": ""
+            },
+            "require": {
+                "egulias/email-validator": "^2.1.10|^3|^4",
+                "php": ">=8.2",
+                "psr/event-dispatcher": "^1",
+                "psr/log": "^1|^2|^3",
+                "symfony/event-dispatcher": "^6.4|^7.0",
+                "symfony/mime": "^7.2",
+                "symfony/service-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<6.4",
+                "symfony/messenger": "<6.4",
+                "symfony/mime": "<6.4",
+                "symfony/twig-bridge": "<6.4"
+            },
+            "require-dev": {
+                "symfony/console": "^6.4|^7.0",
+                "symfony/http-client": "^6.4|^7.0",
+                "symfony/messenger": "^6.4|^7.0",
+                "symfony/twig-bridge": "^6.4|^7.0"
+            },
+            "time": "2025-01-27T11:08:17+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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/v7.2.3"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/mailer"
+        },
+        {
+            "name": "symfony/mime",
+            "version": "v7.2.4",
+            "version_normalized": "7.2.4.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/mime.git",
+                "reference": "87ca22046b78c3feaff04b337f33b38510fd686b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b",
+                "reference": "87ca22046b78c3feaff04b337f33b38510fd686b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.2",
+                "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": "<6.4",
+                "symfony/serializer": "<6.4.3|>7.0,<7.0.3"
+            },
+            "require-dev": {
+                "egulias/email-validator": "^2.1.10|^3.1|^4",
+                "league/html-to-markdown": "^5.0",
+                "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
+                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/process": "^6.4|^7.0",
+                "symfony/property-access": "^6.4|^7.0",
+                "symfony/property-info": "^6.4|^7.0",
+                "symfony/serializer": "^6.4.3|^7.0.3"
+            },
+            "time": "2025-02-19T08:51:20+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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/v7.2.4"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/mime"
+        },
+        {
+            "name": "symfony/polyfill-ctype",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-ctype.git",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "provide": {
+                "ext-ctype": "*"
+            },
+            "suggest": {
+                "ext-ctype": "For best performance"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-ctype"
+        },
+        {
+            "name": "symfony/polyfill-intl-grapheme",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-intl-grapheme"
+        },
+        {
+            "name": "symfony/polyfill-intl-idn",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-idn.git",
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2",
+                "symfony/polyfill-intl-normalizer": "^1.10"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-intl-idn"
+        },
+        {
+            "name": "symfony/polyfill-intl-normalizer",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+                "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "suggest": {
+                "ext-intl": "For best performance"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-intl-normalizer"
+        },
+        {
+            "name": "symfony/polyfill-mbstring",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-mbstring.git",
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+                "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "provide": {
+                "ext-mbstring": "*"
+            },
+            "suggest": {
+                "ext-mbstring": "For best performance"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-mbstring"
+        },
+        {
+            "name": "symfony/polyfill-php73",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php73.git",
+                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+                "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "bootstrap.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Polyfill\\Php73\\": ""
+                },
+                "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 7.3+ features to lower PHP versions",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "compatibility",
+                "polyfill",
+                "portable",
+                "shim"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-php73"
+        },
+        {
+            "name": "symfony/polyfill-php80",
+            "version": "v1.31.0",
+            "version_normalized": "1.31.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/polyfill-php80.git",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.2"
+            },
+            "time": "2024-09-09T11:45:10+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/polyfill",
+                    "name": "symfony/polyfill"
+                }
+            },
+            "installation-source": "dist",
+            "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.31.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"
+                }
+            ],
+            "install-path": "../symfony/polyfill-php80"
+        },
+        {
+            "name": "symfony/service-contracts",
+            "version": "v3.5.1",
+            "version_normalized": "3.5.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/service-contracts.git",
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+                "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "psr/container": "^1.1|^2.0",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "conflict": {
+                "ext-psr": "<1.1|>=2"
+            },
+            "time": "2024-09-25T14:20:29+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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.5.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"
+                }
+            ],
+            "install-path": "../symfony/service-contracts"
+        },
+        {
+            "name": "symfony/string",
+            "version": "v6.4.15",
+            "version_normalized": "6.4.15.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/string.git",
+                "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
+                "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f",
+                "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.5"
+            },
+            "require-dev": {
+                "symfony/error-handler": "^5.4|^6.0|^7.0",
+                "symfony/http-client": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^6.2|^7.0",
+                "symfony/translation-contracts": "^2.5|^3.0",
+                "symfony/var-exporter": "^5.4|^6.0|^7.0"
+            },
+            "time": "2024-11-13T13:31:12+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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.4.15"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/string"
+        },
+        {
+            "name": "symfony/translation",
+            "version": "v6.4.19",
+            "version_normalized": "6.4.19.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation.git",
+                "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e",
+                "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-mbstring": "~1.0",
+                "symfony/translation-contracts": "^2.5|^3.0"
+            },
+            "conflict": {
+                "symfony/config": "<5.4",
+                "symfony/console": "<5.4",
+                "symfony/dependency-injection": "<5.4",
+                "symfony/http-client-contracts": "<2.5",
+                "symfony/http-kernel": "<5.4",
+                "symfony/service-contracts": "<2.5",
+                "symfony/twig-bundle": "<5.4",
+                "symfony/yaml": "<5.4"
+            },
+            "provide": {
+                "symfony/translation-implementation": "2.3|3.0"
+            },
+            "require-dev": {
+                "nikic/php-parser": "^4.18|^5.0",
+                "psr/log": "^1|^2|^3",
+                "symfony/config": "^5.4|^6.0|^7.0",
+                "symfony/console": "^5.4|^6.0|^7.0",
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/finder": "^5.4|^6.0|^7.0",
+                "symfony/http-client-contracts": "^2.5|^3.0",
+                "symfony/http-kernel": "^5.4|^6.0|^7.0",
+                "symfony/intl": "^5.4|^6.0|^7.0",
+                "symfony/polyfill-intl-icu": "^1.21",
+                "symfony/routing": "^5.4|^6.0|^7.0",
+                "symfony/service-contracts": "^2.5|^3",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
+            },
+            "time": "2025-02-13T10:18:43+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "Resources/functions.php"
+                ],
+                "psr-4": {
+                    "Symfony\\Component\\Translation\\": ""
+                },
+                "exclude-from-classmap": [
+                    "/Tests/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com"
+                },
+                {
+                    "name": "Symfony Community",
+                    "homepage": "https://symfony.com/contributors"
+                }
+            ],
+            "description": "Provides tools to internationalize your application",
+            "homepage": "https://symfony.com",
+            "support": {
+                "source": "https://github.com/symfony/translation/tree/v6.4.19"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/translation"
+        },
+        {
+            "name": "symfony/translation-contracts",
+            "version": "v3.5.1",
+            "version_normalized": "3.5.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/translation-contracts.git",
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c",
+                "reference": "4667ff3bd513750603a09c8dedbea942487fb07c",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1"
+            },
+            "time": "2024-09-25T14:20:29+00:00",
+            "type": "library",
+            "extra": {
+                "thanks": {
+                    "url": "https://github.com/symfony/contracts",
+                    "name": "symfony/contracts"
+                },
+                "branch-alias": {
+                    "dev-main": "3.5-dev"
+                }
+            },
+            "installation-source": "dist",
+            "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.5.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"
+                }
+            ],
+            "install-path": "../symfony/translation-contracts"
+        },
+        {
+            "name": "symfony/var-exporter",
+            "version": "v6.4.19",
+            "version_normalized": "6.4.19.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/symfony/var-exporter.git",
+                "reference": "be6e71b0c257884c1107313de5d247741cfea172"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172",
+                "reference": "be6e71b0c257884c1107313de5d247741cfea172",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1",
+                "symfony/deprecation-contracts": "^2.5|^3"
+            },
+            "require-dev": {
+                "symfony/property-access": "^6.4|^7.0",
+                "symfony/serializer": "^6.4|^7.0",
+                "symfony/var-dumper": "^5.4|^6.0|^7.0"
+            },
+            "time": "2025-02-13T09:33:32+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Symfony\\Component\\VarExporter\\": ""
+                },
+                "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": "Allows exporting any serializable PHP data structure to plain PHP code",
+            "homepage": "https://symfony.com",
+            "keywords": [
+                "clone",
+                "construct",
+                "export",
+                "hydrate",
+                "instantiate",
+                "lazy-loading",
+                "proxy",
+                "serialize"
+            ],
+            "support": {
+                "source": "https://github.com/symfony/var-exporter/tree/v6.4.19"
+            },
+            "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"
+                }
+            ],
+            "install-path": "../symfony/var-exporter"
+        },
+        {
+            "name": "twig/twig",
+            "version": "v3.20.0",
+            "version_normalized": "3.20.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/twigphp/Twig.git",
+                "reference": "3468920399451a384bef53cf7996965f7cd40183"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183",
+                "reference": "3468920399451a384bef53cf7996965f7cd40183",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=8.1.0",
+                "symfony/deprecation-contracts": "^2.5|^3",
+                "symfony/polyfill-ctype": "^1.8",
+                "symfony/polyfill-mbstring": "^1.3"
+            },
+            "require-dev": {
+                "phpstan/phpstan": "^2.0",
+                "psr/container": "^1.0|^2.0",
+                "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
+            },
+            "time": "2025-02-13T08:34:43+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "files": [
+                    "src/Resources/core.php",
+                    "src/Resources/debug.php",
+                    "src/Resources/escaper.php",
+                    "src/Resources/string_loader.php"
+                ],
+                "psr-4": {
+                    "Twig\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Fabien Potencier",
+                    "email": "fabien@symfony.com",
+                    "homepage": "http://fabien.potencier.org",
+                    "role": "Lead Developer"
+                },
+                {
+                    "name": "Twig Team",
+                    "role": "Contributors"
+                },
+                {
+                    "name": "Armin Ronacher",
+                    "email": "armin.ronacher@active-4.com",
+                    "role": "Project Founder"
+                }
+            ],
+            "description": "Twig, the flexible, fast, and secure template language for PHP",
+            "homepage": "https://twig.symfony.com",
+            "keywords": [
+                "templating"
+            ],
+            "support": {
+                "issues": "https://github.com/twigphp/Twig/issues",
+                "source": "https://github.com/twigphp/Twig/tree/v3.20.0"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/fabpot",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+                    "type": "tidelift"
+                }
+            ],
+            "install-path": "../twig/twig"
+        },
+        {
+            "name": "voku/portable-ascii",
+            "version": "1.6.1",
+            "version_normalized": "1.6.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/voku/portable-ascii.git",
+                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a",
+                "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a",
+                "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"
+            },
+            "time": "2022-01-24T18:55:24+00:00",
+            "type": "library",
+            "installation-source": "dist",
+            "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/1.6.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"
+                }
+            ],
+            "install-path": "../voku/portable-ascii"
+        }
+    ],
+    "dev": true,
+    "dev-package-names": []
+}
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
new file mode 100755
index 0000000..92f2aab
--- /dev/null
+++ b/vendor/composer/installed.php
@@ -0,0 +1,782 @@
+ array(
+        'name' => 'sysmvc/sysmvc',
+        'pretty_version' => '1.0.0',
+        'version' => '1.0.0.0',
+        'reference' => null,
+        'type' => 'library',
+        'install_path' => __DIR__ . '/../../',
+        'aliases' => array(),
+        'dev' => true,
+    ),
+    'versions' => array(
+        'cakephp/core' => array(
+            'pretty_version' => '4.5.9',
+            'version' => '4.5.9.0',
+            'reference' => 'c2f4dff110d41e475d1041f2abe236f1c62d0cd0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../cakephp/core',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'cakephp/database' => array(
+            'pretty_version' => '4.5.9',
+            'version' => '4.5.9.0',
+            'reference' => '317739cc32060ef19b6c19c87ac6b64848d78e27',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../cakephp/database',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'cakephp/datasource' => array(
+            'pretty_version' => '4.5.9',
+            'version' => '4.5.9.0',
+            'reference' => '073bb5f3b082b87c20309c1b25b1ac2a238d97b3',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../cakephp/datasource',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'cakephp/utility' => array(
+            'pretty_version' => '4.5.9',
+            'version' => '4.5.9.0',
+            'reference' => '708929115e5b400e1b5b76d8120ca2e51e2de199',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../cakephp/utility',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'carbonphp/carbon-doctrine-types' => array(
+            'pretty_version' => '3.2.0',
+            'version' => '3.2.0.0',
+            'reference' => '18ba5ddfec8976260ead6e866180bd5d2f71aa1d',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../carbonphp/carbon-doctrine-types',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'defuse/php-encryption' => array(
+            'pretty_version' => 'v2.4.0',
+            'version' => '2.4.0.0',
+            'reference' => 'f53396c2d34225064647a05ca76c1da9d99e5828',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../defuse/php-encryption',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'delight-im/auth' => array(
+            'pretty_version' => 'v8.3.0',
+            'version' => '8.3.0.0',
+            'reference' => '7bce546defa2bec75485d4bf1d68b72cf311c489',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../delight-im/auth',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'delight-im/base64' => array(
+            'pretty_version' => 'v1.0.0',
+            'version' => '1.0.0.0',
+            'reference' => '687b2a49f663e162030a8d27b32838bbe7f91c78',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../delight-im/base64',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'delight-im/cookie' => array(
+            'pretty_version' => 'v3.4.0',
+            'version' => '3.4.0.0',
+            'reference' => '67065d34272377d63bab0bd58f984f9b228c803f',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../delight-im/cookie',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'delight-im/db' => array(
+            'pretty_version' => 'v1.3.1',
+            'version' => '1.3.1.0',
+            'reference' => '7d6f4c7a7e8ba6a297bfc30d65702479fd0b5f7c',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../delight-im/db',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'delight-im/http' => array(
+            'pretty_version' => 'v2.1.0',
+            'version' => '2.1.0.0',
+            'reference' => 'a5c2c4eae1dd3207f797984e8f64f2d71ed889dd',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../delight-im/http',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'doctrine/inflector' => array(
+            'pretty_version' => '2.0.10',
+            'version' => '2.0.10.0',
+            'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../doctrine/inflector',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'doctrine/lexer' => array(
+            'pretty_version' => '3.0.1',
+            'version' => '3.0.1.0',
+            'reference' => '31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../doctrine/lexer',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'eftec/bladeone' => array(
+            'pretty_version' => '4.18',
+            'version' => '4.18.0.0',
+            'reference' => 'fb51dcd21ba6c998b96d26ac5babfca1bd05acdf',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../eftec/bladeone',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'eftec/bladeonehtml' => array(
+            'pretty_version' => '2.5',
+            'version' => '2.5.0.0',
+            'reference' => '4f0169f756a98f73b9df988eeb3f865261041a3c',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../eftec/bladeonehtml',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'eftec/messagecontainer' => array(
+            'pretty_version' => '2.9',
+            'version' => '2.9.0.0',
+            'reference' => 'de7f0bacee59deae7e9376c9a2432e824bcf15d5',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../eftec/messagecontainer',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'egulias/email-validator' => array(
+            'pretty_version' => '4.0.3',
+            'version' => '4.0.3.0',
+            'reference' => 'b115554301161fa21467629f1e1391c1936de517',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../egulias/email-validator',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'fakerphp/faker' => array(
+            'pretty_version' => 'v1.24.1',
+            'version' => '1.24.1.0',
+            'reference' => 'e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../fakerphp/faker',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'google/recaptcha' => array(
+            'pretty_version' => '1.3.0',
+            'version' => '1.3.0.0',
+            'reference' => 'd59a801e98a4e9174814a6d71bbc268dff1202df',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../google/recaptcha',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'guzzlehttp/psr7' => array(
+            'pretty_version' => '2.7.0',
+            'version' => '2.7.0.0',
+            'reference' => 'a70f5c95fb43bc83f07c9c948baa0dc1829bf201',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../guzzlehttp/psr7',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/collections' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => '705a4e1ef93cd492c45b9b3e7911cccc990a07f4',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/collections',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/container' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => '14062628d05f75047c5a1360b9350028427d568e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/container',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/contracts' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => '5e0fd287a1b22a6b346a9f7cd484d8cf0234585d',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/database' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => '1a5b0e4e6913415464fa2aab554a38b9e6fa44b1',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/database',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/macroable' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => 'aed81891a6e046fdee72edd497f822190f61c162',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/macroable',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'illuminate/support' => array(
+            'pretty_version' => 'v8.83.27',
+            'version' => '8.83.27.0',
+            'reference' => '1c79242468d3bbd9a0f7477df34f9647dde2a09b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../illuminate/support',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'intervention/image' => array(
+            'pretty_version' => '2.7.2',
+            'version' => '2.7.2.0',
+            'reference' => '04be355f8d6734c826045d02a1079ad658322dad',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../intervention/image',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'laravel/serializable-closure' => array(
+            'pretty_version' => 'v2.0.3',
+            'version' => '2.0.3.0',
+            'reference' => 'f379c13663245f7aa4512a7869f62eb14095f23f',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../laravel/serializable-closure',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'league/flysystem' => array(
+            'pretty_version' => '1.1.10',
+            'version' => '1.1.10.0',
+            'reference' => '3239285c825c152bcc315fe0e87d6b55f5972ed1',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../league/flysystem',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'league/mime-type-detection' => array(
+            'pretty_version' => '1.16.0',
+            'version' => '1.16.0.0',
+            'reference' => '2d6702ff215bf922936ccc1ad31007edc76451b9',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../league/mime-type-detection',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'monolog/monolog' => array(
+            'pretty_version' => '2.10.0',
+            'version' => '2.10.0.0',
+            'reference' => '5cf826f2991858b54d5c3809bee745560a1042a7',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../monolog/monolog',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'nesbot/carbon' => array(
+            'pretty_version' => '2.73.0',
+            'version' => '2.73.0.0',
+            'reference' => '9228ce90e1035ff2f0db84b40ec2e023ed802075',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../nesbot/carbon',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'nyholm/psr7' => array(
+            'pretty_version' => '1.8.2',
+            'version' => '1.8.2.0',
+            'reference' => 'a71f2b11690f4b24d099d6b16690a90ae14fc6f3',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../nyholm/psr7',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'paragonie/random_compat' => array(
+            'pretty_version' => 'v9.99.100',
+            'version' => '9.99.100.0',
+            'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../paragonie/random_compat',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'pecee/simple-router' => array(
+            'pretty_version' => '5.4.1.7',
+            'version' => '5.4.1.7',
+            'reference' => 'a2843d5b1e037f8b61cc99f27eab52a28bf41dfd',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../pecee/simple-router',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'php-di/invoker' => array(
+            'pretty_version' => '2.3.6',
+            'version' => '2.3.6.0',
+            'reference' => '59f15608528d8a8838d69b422a919fd6b16aa576',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../php-di/invoker',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'php-di/php-di' => array(
+            'pretty_version' => '7.0.9',
+            'version' => '7.0.9.0',
+            'reference' => 'd8480267f5cf239650debba704f3ecd15b638cde',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../php-di/php-di',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'php-http/message-factory-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'phpauth/phpauth' => array(
+            'pretty_version' => '1.5.0',
+            'version' => '1.5.0.0',
+            'reference' => 'f77d23bd4a0c8099b23c47b305b810f42a6067d6',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpauth/phpauth',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'phpmailer/phpmailer' => array(
+            'pretty_version' => 'v6.9.3',
+            'version' => '6.9.3.0',
+            'reference' => '2f5c94fe7493efc213f643c23b1b1c249d40f47e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../phpmailer/phpmailer',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'predis/predis' => array(
+            'pretty_version' => 'v1.1.10',
+            'version' => '1.1.10.0',
+            'reference' => 'a2fb02d738bedadcffdbb07efa3a5e7bd57f8d6e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../predis/predis',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/cache' => array(
+            'pretty_version' => '2.0.0',
+            'version' => '2.0.0.0',
+            'reference' => '213f9dbc5b9bfbc4f8db86d2838dc968752ce13b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
+        'psr/clock' => array(
+            'pretty_version' => '1.0.0',
+            'version' => '1.0.0.0',
+            'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/clock',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/clock-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/container' => array(
+            'pretty_version' => '1.1.2',
+            'version' => '1.1.2.0',
+            'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/container',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/container-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '^1.0 || ^2.0',
+                1 => '1.0',
+                2 => '^1.0',
+            ),
+        ),
+        'psr/event-dispatcher' => array(
+            'pretty_version' => '1.0.0',
+            'version' => '1.0.0.0',
+            'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/event-dispatcher',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/event-dispatcher-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/http-factory' => array(
+            'pretty_version' => '1.1.0',
+            'version' => '1.1.0.0',
+            'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/http-factory',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/http-factory-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/http-message' => array(
+            'pretty_version' => '2.0',
+            'version' => '2.0.0.0',
+            'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/http-message',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/http-message-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0',
+            ),
+        ),
+        'psr/log' => array(
+            'pretty_version' => '2.0.0',
+            'version' => '2.0.0.0',
+            'reference' => 'ef29f6d262798707a9edd554e2b82517ef3a9376',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/log',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/log-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0.0 || 2.0.0 || 3.0.0',
+                1 => '1.0|2.0',
+            ),
+        ),
+        'psr/simple-cache' => array(
+            'pretty_version' => '1.0.1',
+            'version' => '1.0.1.0',
+            'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../psr/simple-cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'psr/simple-cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
+        'rakit/validation' => array(
+            'pretty_version' => 'v1.4.0',
+            'version' => '1.4.0.0',
+            'reference' => 'ff003a35cdf5030a5f2482299f4c93f344a35b29',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../rakit/validation',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'ralouphie/getallheaders' => array(
+            'pretty_version' => '3.0.3',
+            'version' => '3.0.3.0',
+            'reference' => '120b605dfeb996808c31b6477290a714d356e822',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../ralouphie/getallheaders',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'robmorgan/phinx' => array(
+            'pretty_version' => '0.12.13',
+            'version' => '0.12.13.0',
+            'reference' => '6eb0f295e140ed2804d93396755f0ce9ada4ec07',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../robmorgan/phinx',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache' => array(
+            'pretty_version' => 'v5.4.46',
+            'version' => '5.4.46.0',
+            'reference' => '0fe08ee32cec2748fbfea10c52d3ee02049e0f6b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/cache',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache-contracts' => array(
+            'pretty_version' => 'v2.5.4',
+            'version' => '2.5.4.0',
+            'reference' => '517c3a3619dadfa6952c4651767fcadffb4df65e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/cache-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/cache-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '1.0|2.0',
+            ),
+        ),
+        'symfony/config' => array(
+            'pretty_version' => 'v6.4.14',
+            'version' => '6.4.14.0',
+            'reference' => '4e55e7e4ffddd343671ea972216d4509f46c22ef',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/config',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/console' => array(
+            'pretty_version' => 'v5.4.47',
+            'version' => '5.4.47.0',
+            'reference' => 'c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/console',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/deprecation-contracts' => array(
+            'pretty_version' => 'v3.5.1',
+            'version' => '3.5.1.0',
+            'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/dotenv' => array(
+            'pretty_version' => 'v6.4.16',
+            'version' => '6.4.16.0',
+            'reference' => '1ac5e7e7e862d4d574258daf08bd569ba926e4a5',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/dotenv',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher' => array(
+            'pretty_version' => 'v7.2.0',
+            'version' => '7.2.0.0',
+            'reference' => '910c5db85a5356d0fea57680defec4e99eb9c8c1',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/event-dispatcher',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher-contracts' => array(
+            'pretty_version' => 'v3.5.1',
+            'version' => '3.5.1.0',
+            'reference' => '7642f5e970b672283b7823222ae8ef8bbc160b9f',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/event-dispatcher-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '2.0|3.0',
+            ),
+        ),
+        'symfony/filesystem' => array(
+            'pretty_version' => 'v7.2.0',
+            'version' => '7.2.0.0',
+            'reference' => 'b8dce482de9d7c9fe2891155035a7248ab5c7fdb',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/filesystem',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/mailer' => array(
+            'pretty_version' => 'v7.2.3',
+            'version' => '7.2.3.0',
+            'reference' => 'f3871b182c44997cf039f3b462af4a48fb85f9d3',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/mailer',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/mime' => array(
+            'pretty_version' => 'v7.2.4',
+            'version' => '7.2.4.0',
+            'reference' => '87ca22046b78c3feaff04b337f33b38510fd686b',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/mime',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-ctype' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-intl-grapheme' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => 'b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-intl-idn' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => 'c36586dcf89a12315939e00ec9b4474adcb1d773',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-intl-normalizer' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => '3833d7255cc303546435cb650316bff708a1c75c',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-mbstring' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-php73' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => '0f68c03565dcaaf25a890667542e8bd75fe7e5bb',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-php73',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/polyfill-php80' => array(
+            'pretty_version' => 'v1.31.0',
+            'version' => '1.31.0.0',
+            'reference' => '60328e362d4c2c802a54fcbf04f9d3fb892b4cf8',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/polyfill-php80',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/service-contracts' => array(
+            'pretty_version' => 'v3.5.1',
+            'version' => '3.5.1.0',
+            'reference' => 'e53260aabf78fb3d63f8d79d69ece59f80d5eda0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/service-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/string' => array(
+            'pretty_version' => 'v6.4.15',
+            'version' => '6.4.15.0',
+            'reference' => '73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/string',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/translation' => array(
+            'pretty_version' => 'v6.4.19',
+            'version' => '6.4.19.0',
+            'reference' => '3b9bf9f33997c064885a7bfc126c14b9daa0e00e',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/translation',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/translation-contracts' => array(
+            'pretty_version' => 'v3.5.1',
+            'version' => '3.5.1.0',
+            'reference' => '4667ff3bd513750603a09c8dedbea942487fb07c',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/translation-contracts',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'symfony/translation-implementation' => array(
+            'dev_requirement' => false,
+            'provided' => array(
+                0 => '2.3|3.0',
+            ),
+        ),
+        'symfony/var-exporter' => array(
+            'pretty_version' => 'v6.4.19',
+            'version' => '6.4.19.0',
+            'reference' => 'be6e71b0c257884c1107313de5d247741cfea172',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../symfony/var-exporter',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'sysmvc/sysmvc' => array(
+            'pretty_version' => '1.0.0',
+            'version' => '1.0.0.0',
+            'reference' => null,
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../../',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'twig/twig' => array(
+            'pretty_version' => 'v3.20.0',
+            'version' => '3.20.0.0',
+            'reference' => '3468920399451a384bef53cf7996965f7cd40183',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../twig/twig',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+        'voku/portable-ascii' => array(
+            'pretty_version' => '1.6.1',
+            'version' => '1.6.1.0',
+            'reference' => '87337c91b9dfacee02452244ee14ab3c43bc485a',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../voku/portable-ascii',
+            'aliases' => array(),
+            'dev_requirement' => false,
+        ),
+    ),
+);
diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php
new file mode 100755
index 0000000..d32d90c
--- /dev/null
+++ b/vendor/composer/platform_check.php
@@ -0,0 +1,26 @@
+= 80200)) {
+    $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.';
+}
+
+if ($issues) {
+    if (!headers_sent()) {
+        header('HTTP/1.1 500 Internal Server Error');
+    }
+    if (!ini_get('display_errors')) {
+        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
+        } elseif (!headers_sent()) {
+            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
+        }
+    }
+    trigger_error(
+        'Composer detected issues in your platform: ' . implode(' ', $issues),
+        E_USER_ERROR
+    );
+}
diff --git a/vendor/defuse/php-encryption/LICENSE b/vendor/defuse/php-encryption/LICENSE
new file mode 100755
index 0000000..aaf2fe9
--- /dev/null
+++ b/vendor/defuse/php-encryption/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Taylor Hornby 
+Copyright (c) 2016 Paragon Initiative Enterprises .
+
+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.
diff --git a/vendor/defuse/php-encryption/README.md b/vendor/defuse/php-encryption/README.md
new file mode 100755
index 0000000..1394d31
--- /dev/null
+++ b/vendor/defuse/php-encryption/README.md
@@ -0,0 +1,121 @@
+php-encryption
+===============
+
+![Build Status](https://app.travis-ci.com/defuse/php-encryption.svg?branch=master)
+[![codecov](https://codecov.io/gh/defuse/php-encryption/branch/master/graph/badge.svg)](https://codecov.io/gh/defuse/php-encryption)
+[![Latest Stable Version](https://poser.pugx.org/defuse/php-encryption/v/stable)](https://packagist.org/packages/defuse/php-encryption)
+[![License](https://poser.pugx.org/defuse/php-encryption/license)](https://packagist.org/packages/defuse/php-encryption)
+[![Downloads](https://img.shields.io/packagist/dt/defuse/php-encryption.svg)](https://packagist.org/packages/defuse/php-encryption)
+
+```terminal
+composer require defuse/php-encryption
+```
+
+This is a library for encrypting data with a key or password in PHP. **It
+requires PHP 5.6 or newer and OpenSSL 1.0.1 or newer.** We recommend using a
+version of PHP that [still has security
+support](https://www.php.net/supported-versions.php), which at the time of
+writing means PHP 8.0 or later. Using this library with an unsupported
+version of PHP could lead to security vulnerabilities.
+
+The current version of `php-encryption` is v2.4.0. This library is expected to
+remain stable and supported by its authors with security and bugfixes until at
+least January 1st, 2024.
+
+The library is a joint effort between [Taylor Hornby](https://defuse.ca/) and
+[Scott Arciszewski](https://paragonie.com/blog/author/scott-arcizewski) as well
+as numerous open-source contributors.
+
+What separates this library from other PHP encryption libraries is, firstly,
+that it is secure. The authors used to encounter insecure PHP encryption code on
+a daily basis, so they created this library to bring more security to the
+ecosystem. Secondly, this library is "difficult to misuse." Like
+[libsodium](https://github.com/jedisct1/libsodium), its API is designed to be
+easy to use in a secure way and hard to use in an insecure way.
+
+
+Dependencies
+------------
+
+This library requires no special dependencies except for PHP 5.6 or newer with
+the OpenSSL extensions (version 1.0.1 or later) enabled (this is the default).
+It uses [random\_compat](https://github.com/paragonie/random_compat), which is
+bundled in with this library so that your users will not need to follow any
+special installation steps.
+
+Getting Started
+----------------
+
+Start with the [**Tutorial**](docs/Tutorial.md). You can find instructions for
+obtaining this library's code securely in the [Installing and
+Verifying](docs/InstallingAndVerifying.md) documentation.
+
+After you've read the tutorial and got the code, refer to the formal
+documentation for each of the classes this library provides:
+
+- [Crypto](docs/classes/Crypto.md)
+- [File](docs/classes/File.md)
+- [Key](docs/classes/Key.md)
+- [KeyProtectedByPassword](docs/classes/KeyProtectedByPassword.md)
+
+If you encounter difficulties, see the [FAQ](docs/FAQ.md) answers. The fixes to
+the most commonly-reported problems are explained there.
+
+If you're a cryptographer and want to understand the nitty-gritty details of how
+this library works, look at the [Cryptography Details](docs/CryptoDetails.md)
+documentation.
+
+If you're interested in contributing to this library, see the [Internal
+Developer Documentation](docs/InternalDeveloperDocs.md).
+
+Other Language Support
+----------------------
+
+This library is intended for server-side PHP software that needs to encrypt data at rest.
+If you are building software that needs to encrypt client-side, or building a system that
+requires cross-platform encryption/decryption support, we strongly recommend using
+[libsodium](https://download.libsodium.org/doc/bindings_for_other_languages) instead.
+
+Examples
+---------
+
+If the documentation is not enough for you to understand how to use this
+library, then you can look at an example project that uses this library:
+
+- [encutil](https://github.com/defuse/encutil)
+- [fileencrypt](https://github.com/tsusanka/fileencrypt)
+
+Security Audit Status
+---------------------
+
+This code has not been subjected to a formal, paid, security audit. However, it
+has received lots of review from members of the PHP security community, and the
+authors are experienced with cryptography. In all likelihood, you are safer
+using this library than almost any other encryption library for PHP.
+
+If you use this library as a part of your business and would like to help fund
+a formal audit, please [contact Taylor Hornby](https://defuse.ca/contact.htm).
+
+Public Keys
+------------
+
+The GnuPG public key used to sign current and older releases is available in
+[dist/signingkey.asc](https://github.com/defuse/php-encryption/raw/master/dist/signingkey.asc). Its fingerprint is:
+
+```
+2FA6 1D8D 99B9 2658 6BAC  3D53 385E E055 A129 1538
+```
+
+You can verify it against Taylor Hornby's [contact
+page](https://defuse.ca/contact.htm) and
+[twitter](https://twitter.com/DefuseSec/status/723741424253059074).
+
+Due to the old key expiring, new releases will be signed with a new public key
+available in [dist/signingkey-new.asc](https://github.com/defuse/php-encryption/raw/master/dist/signingkey-new.asc). Its fingerprint is:
+
+```
+6DD6 E677 0281 5846 FC85  25A3 DD2E 507F 7BDB 1669
+```
+
+A signature of this new key by the old key is available in
+[dist/signingkey-new.asc.sig](https://github.com/defuse/php-encryption/raw/master/dist/signingkey-new.asc.sig).
diff --git a/vendor/defuse/php-encryption/bin/generate-defuse-key b/vendor/defuse/php-encryption/bin/generate-defuse-key
new file mode 100755
index 0000000..24e31b5
--- /dev/null
+++ b/vendor/defuse/php-encryption/bin/generate-defuse-key
@@ -0,0 +1,14 @@
+#!/usr/bin/env php
+saveToAsciiSafeString(), "\n";
diff --git a/vendor/defuse/php-encryption/composer.json b/vendor/defuse/php-encryption/composer.json
new file mode 100755
index 0000000..29a1d52
--- /dev/null
+++ b/vendor/defuse/php-encryption/composer.json
@@ -0,0 +1,35 @@
+{
+    "name": "defuse/php-encryption",
+    "description": "Secure PHP Encryption Library",
+    "license": "MIT",
+    "keywords": ["security", "encryption", "AES", "openssl", "cipher", "cryptography", "symmetric key cryptography", "crypto", "encrypt", "authenticated encryption"],
+    "authors": [
+        {
+            "name": "Taylor Hornby",
+            "email": "taylor@defuse.ca",
+            "homepage": "https://defuse.ca/"
+        },
+        {
+            "name": "Scott Arciszewski",
+            "email": "info@paragonie.com",
+            "homepage": "https://paragonie.com"
+        }
+    ],
+    "autoload": {
+        "psr-4": {
+            "Defuse\\Crypto\\": "src"
+        }
+    },
+    "require": {
+        "paragonie/random_compat": ">= 2",
+        "ext-openssl": "*",
+        "php":  ">=5.6.0"
+    },
+    "require-dev": {
+        "yoast/phpunit-polyfills": "^2.0.0",
+        "phpunit/phpunit": "^5|^6|^7|^8|^9|^10"
+    },
+    "bin": [
+        "bin/generate-defuse-key"
+    ]
+}
diff --git a/vendor/defuse/php-encryption/dist/Makefile b/vendor/defuse/php-encryption/dist/Makefile
new file mode 100755
index 0000000..bffe616
--- /dev/null
+++ b/vendor/defuse/php-encryption/dist/Makefile
@@ -0,0 +1,39 @@
+# This builds defuse-crypto.phar. To run this Makefile, `box` and `composer`
+# must be installed and in your $PATH. Run it from inside the dist/ directory.
+
+box := $(shell which box)
+composer := $(shell which composer)
+gitcommit := $(shell git rev-parse HEAD)
+
+.PHONY: all
+all: build-phar
+
+.PHONY: sign-phar
+sign-phar:
+	gpg -u DD2E507F7BDB1669 --armor --output defuse-crypto.phar.sig --detach-sig defuse-crypto.phar
+
+# ensure we run in clean tree. export git tree and run there.
+.PHONY: build-phar
+build-phar:
+	@echo "Creating .phar from revision $(shell git rev-parse HEAD)."
+	rm -rf worktree
+	install -d worktree
+	(cd $(CURDIR)/..; git archive HEAD) | tar -x -C worktree
+	$(MAKE) -f $(CURDIR)/Makefile -C worktree defuse-crypto.phar
+	mv worktree/*.phar .
+	rm -rf worktree
+
+.PHONY: clean
+clean:
+	rm -vf defuse-crypto.phar defuse-crypto.phar.sig
+
+# Inside workdir/:
+
+defuse-crypto.phar: dist/box.json composer.lock
+	cp dist/box.json .
+	php $(box) compile -c box.json -v
+
+composer.lock:
+	$(composer) config autoloader-suffix $(gitcommit)
+	$(composer) install --no-dev
+
diff --git a/vendor/defuse/php-encryption/dist/box.json b/vendor/defuse/php-encryption/dist/box.json
new file mode 100755
index 0000000..3c81e95
--- /dev/null
+++ b/vendor/defuse/php-encryption/dist/box.json
@@ -0,0 +1,22 @@
+{
+    "chmod": "0755",
+    "finder": [
+        {
+            "in": "src",
+            "name": "*.php"
+        },
+        {
+            "in": "vendor/composer",
+            "name": "*.php"
+        },
+        {
+            "in": "vendor/paragonie",
+            "name": "*.php",
+            "exclude": "other"
+        }
+    ],
+    "main": "vendor/autoload.php",
+    "output": "defuse-crypto.phar",
+    "shebang": false,
+    "stub": true
+}
diff --git a/vendor/defuse/php-encryption/dist/phar-testing-autoload.php b/vendor/defuse/php-encryption/dist/phar-testing-autoload.php
new file mode 100755
index 0000000..433395a
--- /dev/null
+++ b/vendor/defuse/php-encryption/dist/phar-testing-autoload.php
@@ -0,0 +1,4 @@
+
diff --git a/vendor/defuse/php-encryption/dist/signingkey-new.asc b/vendor/defuse/php-encryption/dist/signingkey-new.asc
new file mode 100755
index 0000000..7e3a4a1
--- /dev/null
+++ b/vendor/defuse/php-encryption/dist/signingkey-new.asc
@@ -0,0 +1,53 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBF5V4TABEAC4G2BkHDaqbip3gj1oOqKh3V6LQa9QAd/f/hyhmR5hXpciPxf3
+NNHAxzoGAuB51f1YPJTNO59mGKHDuCFfr0pI94HDGoW4WgxqnUyqHBj2+/JhQPqO
+lgDT0QDcfxmUd0wfZl/Ur+8SsaBYvfFWNmPaXHp9m4MMRtw9uZNIW6LlZ24JqmGy
+/YUELUSH7P+uJ4HQEdixaqQ0VgIomRDI+5IwdJMtq4TSNazQm3nNmH9Em37cdi6J
+NDfFRy2QxJDmuqlg8mkpS5TvrrNy/UJwIeXO9PuGaBODr8GAKWvhkpfGlxN+hWMY
+01bOFnuEnOcuXw8BjPAKHqwOuGvinNmQ7lX1Rj3ssd31sTUimop0oNjOTZztpJBR
+m6wO2/YGMjt+eL02NgBBDIsV837PeWuJmymTJDGQuBjZ3JWUfyT3AnkA8OU5vKjs
+pM8AjIiuU7C8zQhUSHDnukTKWpBmMdOXeWNb5Ye6n60wJWzWFGlm+cYalPs+q3H8
+bxHxHEdFT0rUpxB05bc9zsZ3gGkc2NTNW/00a6gvTyX1UsBAeNgvVSHBHQGfow6o
+ZKG+LnVxd+cl97ay6kP29eLypXffbXQ3hMXe9tUNBjAeiok9tssU70Epr9wTh/Fm
+/iEbGc8VhS4TSk3c+3eS16rvlQ51FmAlmG6kAnN/ah+BiM4syPrWcJHIDQARAQAB
+tG1kZWZ1c2UvcGhwLWVuY3J5cHRpb24gbWFpbnRhaW5lcnMgKGRlZnVzZS9waHAt
+ZW5jcnlwdGlvbiByZWxlYXNlIHNpZ25pbmcga2V5KSA8cGhwLWVuY3J5cHRpb25A
+ZGVmdXNlLmludmFsaWQ+iQJUBBMBCAA+FiEEbdbmdwKBWEb8hSWj3S5Qf3vbFmkF
+Al5V4TACGwMFCQlmAYAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3S5Qf3vb
+FmnQ4Q//bHAwDI7CcTlDDktdRCP0YCRtb5zMa6vSqnZLi5aTqzmL1yQCAp1/JTwf
+nlHn5xt60eKwfjIKj7Kj0n8WDFYnlOu30H5fNtFHis0xeS7GkH60tIE/pQUZILlB
+Wcnx/ZPnlxccjtfSbnpelSPdvIoHVRNhh1ZYG/49kuuv8TMbMIi2FBAzGEatPoLN
+f4wntoOKGvl8R2rPc2geapXTz++X+HJkddHCISR61obDRl9P0t9x+0M7gGSVMGfC
+GC4wh3JB6/ha8l+DI+l88/64IKRG+M33bBwLGQ0RIhotHIy442gLJTm6TeoH8iUz
+xCBwPYW+Ta1wZi17PIjHdTkNGBeEj/Hr5tTVV3oxrQVgHCymzasnz9IwcCCMwpKK
+ZOMFl0+PT3TSBKLnUByvOB64YOjxU7t+sRf53Biz3yKzto5VdHGW64OG2vGFy/Xz
+vI5RqU34wjtEHxWfz8y2GBnhD2TzEFCIIWPAX3TDG64NBSEBjhUraOmoVoaYJlP6
+rqxIQo4yhC+f5rnr2ZA48Hnrg0jEdVvN07FegoOnQQPpYBBkOrkTDWChn8oiXMfg
+9bjv19zDOBVXl9EU+P8AhwTHz/pBKmhb97N9nYp/pbmejA+I0Kw1vZo7gaMxL938
+oQkdtWT70ZzcpcZfeKVXoZa/ddAmuxzNknZA8ZnjQ9Qhv7aNX2O5Ag0EXlXhMAEQ
+AM8od4/85i7ZPmM6C1M4n4XcXeKsuZKHLvLLcRHFGkjVdXRSaxpbk2yDJiLnB9hX
+GSJG2gUCT+yrimjQ71bJ4q9K2+mkVHVjdtCrCtoOYEIpMLzsRtqyAWotcVmdv8Zv
+4IIjxfdxpTkj9gZmUfDIe6tbN2iBCAo1HArXq1qSdof3ui8SqdWeinkd7lZMesFm
+dGQaAcHbmEakO5mRzljme8IBs3UY9j/zxEG1JbsHx9ua7CVwJ7lxi2SgSW6nF9k5
+CX5zbrDqlqSJNtDs+KbjCbI2eK+qe4qZWHPiw4bNBn6EWf97/4Os8w7Vrrpyd2eO
+1JENwjlG6WG9mbJdIWWwakZ0CeH5LnJo6dV47KZbbbB6ncavaL+VpfbTCgdOGsCc
+GcYUVl90/v5pPm2owx4Dg9hSfcp8fesQuq4b79NAcjF7meu5wgNdvFlfuXony+UC
+W2wNi0mi9lzLD0n0j0GDzWyd3r7yXmPTL4LhrQu/pIcWIljKI3GUAQZqIYbGAO3G
+7hEFT8rDWg2vKRtMag4iy5FvZFqR+7TwWJAcWnHJBZ95F9NzeYIFhp9a3hxbKXqD
+xEnyGgzAszUycq29BApT4/4rDZQuXuOBd4lJp8tSzctLjvo7D3la+MWD6AlDkYT4
+bGKN9NfRCzYr2Zq3jOByAV3d5hGgyzdJlZSqXAGtbHHdABEBAAGJAjwEGAEIACYW
+IQRt1uZ3AoFYRvyFJaPdLlB/e9sWaQUCXlXhMAIbDAUJCWYBgAAKCRDdLlB/e9sW
+aSGfD/wPeq6lGu8ocHIkO74VPioJRKRXDVLsY02xKP64p0RHUGFTOqqB3A3UV0ue
+tkizoUdfF5xkgJ18gbxXo8lotBq+Ita5hoYAfqJnTnucAPGovREJ+X1HfdK4pJqW
+KNJElBz+fC4chqksiUAuH7IMImmy0/lA+LqZagzkQJU10MvmiFZ6kn+X5Mb4izRl
+vAHo16eI4psApdT8Bs7mwAjgCHxS9Re46uOElB4Bx3iFPd/PEwHWnfr8x9TJZYKW
+fsShG31+vfBRCfGtfKGxiAkp3EEM11lzbbfMcC3lai5iJQ/FmHgoIDeIG2Ebuk4w
+/PYakSrpvkEYoMP31pVHDhzopVeURS2lpvQJ4CvTP5CVQtKrbuygow6GF8N/drCE
+hdEx22pzW02ADS9fgzrlDztIOlOvC9a+epISIaEjfrc9dWhrw6chZEoWIil2MVQR
+Sj0jZ8w/H7P88oHTOcFVel73ZEPg9eRUkqMnIn3DWUuqLI2SX/AtVnhdYHWTiOkq
+knsGofWxUSu3RZR2ZElK9hjNKdVbGDzHGAYeJihieTKIOXpCf6Ix5B32tmFpfmBV
+Q9YP3JLsRTxIMbXsJImand/r6fSjdmTpk2PovYPtE1HTJKaVHeagQdsrWw5LaJv0
+ZWuwJm0y0WJXcAEjwOHhBs0nvq2CXuZi2ZTPtY+DbsSFWhaN7g==
+=Ysgx
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/vendor/defuse/php-encryption/dist/signingkey-new.asc.sig b/vendor/defuse/php-encryption/dist/signingkey-new.asc.sig
new file mode 100755
index 0000000000000000000000000000000000000000..56e1f3a0d8cf0c0387b4eb06fc034b95a8c7c353
GIT binary patch
literal 566
zcmV-60?GY}0y6{v0SEvc79j*LrX7u$xh7a^tUXgWUf@-sDHS*c0$vN@000UJ5IA1o
zRiP;rIO!4(|5tQbjui!J*!qyZSo6G!W2zavNU5a=22-kcA5)A4EQibr8oA`DtTuwH`rZ@PSD=v@r;Djzx?Ww@kN0BVtkj8Ij`j`#jK@YN^w2LErU~_+0
zLV!9Fif+Akxuc(xyi+q
zl>P!TulL1uhr?9Ep*&_^ikxn*v@!9<%|VWUR393zN!mxpnJ)w&U{@Dc^ou80hRFrL
E`21%Ku>b%7

literal 0
HcmV?d00001

diff --git a/vendor/defuse/php-encryption/dist/signingkey.asc b/vendor/defuse/php-encryption/dist/signingkey.asc
new file mode 100755
index 0000000..63b6aa3
--- /dev/null
+++ b/vendor/defuse/php-encryption/dist/signingkey.asc
@@ -0,0 +1,52 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v2
+
+mQINBFarvO4BEACdQBaLt6SUBx1cB5liUu1qo+YwVLh9bxTregQtmEREMdTVqXYt
+e5b79uL4pQp2GlKHcEyRURS+6rIIruM0oh9ZYGTJYPAkCDzJxaU2awZeFbfBvpCm
+iF66/O4ZJI4mlT8dFKmxBJxDhfeOR2UmmhDiEsJK9FxBKUzvo/dWrX2pBzf8Y122
+iIaVraSo+tymaf7vriaIf/NnSKhDw8dtQYGM4NMrxxsPTfbCF8XiboDgTkoD2A+6
+NpOJYxA4Veedsf2TP9YLhljH4m5yYlfjjqBzbBCPWuE6Hhy5Xze9mncgDr7LKenm
+Ctf2NxW6y4O3RCI+9eLlBfFWB+KuGV87/b5daetX7NNLbjID8z2rqEa+d6wu5xA5
+Ta2uiVkAOEovr3XnkayZ9zth+Za7w7Ai0ln0N/LVMkM+Gu4z/pJv6HjmTGDM2wJb
+fs+UOM0TFdg+N81Do67XT2M4o0MeHyUqsIiWpYa2Qf1PNmqTQNJnRk8uZZ9I96Nh
+eCgNuCbhsQiYBMicox+xmuWAlGAfA06y0kCtmqGhiBGArdJlWvUqPqGiZ4Hln9z0
+FJmXDOh0Q/FIPxcDg8mKRRbx+lOP389PLsPpj4b2B/4PEgfpCCOwuKpLotATZxC1
+9JwFk0Y/cvUUkq4a+nAJBNtBbtRJkEesuuUnRq6XexmnE3uUucDcV0XCSwARAQAB
+tCBUYXlsb3IgSG9ybmJ5IDx0YXlsb3JAZGVmdXNlLmNhPokCPQQTAQgAJwUCVqu8
+7gIbAwUJB4TOAAULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRA4XuBVoSkVOJbx
+EACG0F9blPMAsK05EWyNnnS4mw25zPfbaqqEvYbquAeM0nBpRDm7sRn2MNR0AL4g
+7XrtxE/4qYkdEl6f2wFCQeRhZgxE3w22llredzLme11Hic8hn4i7ysdIw0r9dMMR
+kjgR5UcWpv8iU847czyK09PkKW2EaLRbX2qbA7rNU5qCFKeD4Sy4bBTteISeVsHo
+Vr9o1/bRrMhgZ++ts8hYf0LmujIf5cxp+qcdKwCXSnS/gmmXaKRMCPv/Wdlq9bt6
+LX9jZB9lXBdGxcBJeFOsTG+QRDiVjg3d6i3o3TAKV87ALBI4v2ADEYtN8lviHo3/
+SovVKv6zrUsZHxhoGiLTiksNrYsKMmiMxdJCoOazmtUPnZ4UOtT8NdqMPoKvdoRz
+f4rhZ+f5jSVD9OuX2PDmfyq21Rdiym7Vcgr+uTIFJ3ShRHjWb/ytCwoB2FeGY6+G
+AKY58bTQvUIqEJvSov/+TAqZ4BfOuSdTLcHglV1OdUu2SFZvU2gmyVp0l5elGv5t
+FyUlBJUkQT9MtvsdLOR7vQi8QapV+9LWpqwvaj9hyEJz848DQ2sdYTphUytFHv7H
+k58DAtVhTrVjHyeefjiYtMl6vSAgTjy5LWAUpo5TfhdGrAi0Tdd/GD7amHoWoDy8
+EKXKq2xPLo3JOdkWYQUi5NErzEskfsSzpCOgyDJmGetWK7kCDQRWq7zuARAAu7/i
+cm8cjgLhHEX/bgfwOT2hLOLSjjve0O8YFSuJO9XqIHXqmfVOrqWtfG0Mh4bwlfqc
+MAvBfF5NSSPfAE4ftBAQ1e5jEv8hJeqICpq3IHTFX4etBs49NfNkyveQl/amVTu1
++/O5J4CuIcsEf3y0Xuu38n7EB3SfMQCWLcOR1NyZoX3bI+CGRpOVVoFse3ljSWL4
+LhLVl0WiEMXULsussEoN+c6x9KCyAi/jFOrxrTrFC//sZesKj6KucoqKGfwMWrrv
+IeRT9Ga8Wn5MJnQu0aWg+zVVYqTedXZLNLODgQIInFnXO0seBXy15yDok1y5bkx2
+sinKg4+mueYaGUpoUti0hM3J3yaC34i6Cwa8MQoLNw1JIS/oNtKjpMxyV10w8aoc
+PHRK3n7UYp10mJHx7aM+lldSKvVS1NTQmI4vloNLwMp324H5ANDFAlRUz7mysVnu
+DEEvigPSPxs5ZYENu/i7pCQC5qHfhrlBrQwTjhegr0pQPcumy2fO5SGC9l/5B7ev
+bqQSZmDeWWoTvh2w2wl5/RWAsgZKx6rDtkCqYx7sSBY17uorrxP24LP4zhq7NxRV
+nfdsLogbCFNVQ66u7qvq5zFccdFtg9h1HQWdS7wbnKSBGZoo5gl6js7GGtxfGbb0
+oQ9kp6eciF4U92r6POhVgbRe4CfPo50nqgZBddkAEQEAAYkCJQQYAQgADwUCVqu8
+7gIbDAUJB4TOAAAKCRA4XuBVoSkVOFJ8D/9J8IJ4XWUU3FYIaHJ3XeSoxDmTi7d5
+WmNdf1lmwz82MQjG4uw17oCbvQzmj4/a/CM1Ly4v0WwBhUf9aiNErD0ByHASFnuc
+tlQBLVJdk0vRyD0fZakGg64qCA76hiySjMhlGHkQFyP2mDORc2GNu/OqFGm79pXT
+ZUplXxd431E603/agM5xJrweutMMpP1nBFTSEMJvbMNzDVN8I1A1CH4zVmAVxOUk
+sQ5L5rXW+KeXWyiMF24+l2CMnkQ2CxfHpkcpfPJs1Cbt+TIBSSofIqK8QJXrb/2f
+Zpl/ftqW7Xe86rJFrB/Y/77LDWx10rqWEvfCqrBxrMj7ONAQfbKQF/IjAwDN17Wf
+1K74rqKnRu+KHCyNM89s1iDbQC9kzZfzYt4AEOvAH/ZQDMZffzPSbnfkBerExFpa
+93XMuiR66jiBsf9IXIQeydpJD4Ogl2sSUSxFEJxJ/bBSxPxC5w7/BVMA7Am1y8Zo
+3hrpqnX2PBzxG7L0FZ6fYkfR3p8JS7vI6nByBf2IDv8W32wn43olPf+u6uobHLvt
+ttapOjwPAhPDalRuxs9U6WSg06QJkT/0F8TFUPWpsFmKTl+G4Ty7PHWsjeeNHJCL
+7/5RQboFY3k8Jy3/sIofABO6Un9LJivDuu9PxqA0IgvaS6Mja8JdCCk9Nyk4vHB7
+IEgAL/CYqrk38w==
+=lmD7
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/vendor/defuse/php-encryption/docs/CryptoDetails.md b/vendor/defuse/php-encryption/docs/CryptoDetails.md
new file mode 100755
index 0000000..43abd72
--- /dev/null
+++ b/vendor/defuse/php-encryption/docs/CryptoDetails.md
@@ -0,0 +1,64 @@
+Cryptography Details
+=====================
+
+Here is a high-level description of how this library works. Any discrepancy
+between this documentation and the actual implementation will be considered
+a security bug.
+
+Let's start with the following definitions:
+
+- HKDF-SHA256(*k*, *n*, *info*, *s*) is the key derivation function specified in
+  RFC 5869 (using the SHA256 hash function). The parameters are:
+    - *k*: The initial keying material.
+    - *n*: The number of output bytes.
+    - *info*: The info string.
+    - *s*: The salt.
+- AES-256-CTR(*m*, *k*, *iv*) is AES-256 encryption in CTR mode. The parameters
+  are:
+    - *m*: An arbitrary-length (possibly zero-length) message.
+    - *k*: A 32-byte key.
+    - *iv*: A 16-byte initialization vector (nonce).
+- PBKDF2-SHA256(*p*, *s*, *i*, *n*) is the password-based key derivation
+  function defined in RFC 2898 (using the SHA256 hash function). The parameters
+  are:
+    - *p*: The password string.
+    - *s*: The salt string.
+    - *i*: The iteration count.
+    - *n*: The output length in bytes.
+- VERSION is the string `"\xDE\xF5\x02\x00"`.
+- AUTHINFO is the string `"DefusePHP|V2|KeyForAuthentication"`.
+- ENCRINFO is the string `"DefusePHP|V2|KeyForEncryption"`.
+
+To encrypt a message *m* using a 32-byte key *k*, the following steps are taken:
+
+1. Generate a random 32-byte string *salt*.
+2. Derive the 32-byte authentication key *akey* = HKDF-SHA256(*k*, 32, AUTHINFO, *salt*).
+3. Derive the 32-byte encryption key *ekey* = HKDF-SHA256(*k*, 32, ENCRINFO, *salt*).
+4. Generate a random 16-byte initialization vector *iv*.
+5. Compute *c* = AES-256-CTR(*m*, *ekey*, *iv*).
+6. Combine *ctxt* = VERSION || *salt* || *iv* || *c*.
+7. Compute *h* = HMAC-SHA256(*ctxt*, *akey*).
+8. Output *ctxt* || *h*.
+
+Decryption is roughly the reverse process (see the code for details, since the
+security of the decryption routine is highly implementation-dependent).
+
+For encryption using a password *p*, steps 1-3 above are replaced by:
+
+1. Generate a random 32-byte string *salt*.
+2. Compute *k* = PBKDF2-SHA256(SHA256(*p*), *salt*, 100000, 32).
+3. Derive the 32-byte authentication key *akey* = HKDF-SHA256(*k*, 32, AUTHINFO, *salt*)
+4. Derive the 32-byte encryption key *ekey* = HKDF-SHA256(*k*, 32, ENCRINFO, *salt*)
+
+The remainder of the process is the same. Notice the reuse of the same *salt*
+for PBKDF2-SHA256 and HKDF-SHA256. The prehashing of the password in step 2 is
+done to prevent a [DoS attack using long
+passwords](https://github.com/defuse/php-encryption/issues/230).
+
+For `KeyProtectedByPassword`, the serialized key is encrypted according to the
+password encryption defined above. However, the actual password used for
+encryption is the SHA256 hash of the password the user provided. This is done in
+order to provide domain separation between the message encryption in the user's
+application and the internal key encryption done by this library. It fixes
+a [key replacement chosen-protocol
+attack](https://github.com/defuse/php-encryption/issues/240).
diff --git a/vendor/defuse/php-encryption/docs/FAQ.md b/vendor/defuse/php-encryption/docs/FAQ.md
new file mode 100755
index 0000000..9f77392
--- /dev/null
+++ b/vendor/defuse/php-encryption/docs/FAQ.md
@@ -0,0 +1,51 @@
+Frequently Asked Questions
+===========================
+
+How do I use this library to encrypt passwords?
+------------------------------------------------
+
+Passwords should not be encrypted, they should be hashed with a *slow* password
+hashing function that's designed to slow down password guessing attacks. See
+[How to Safely Store Your Users' Passwords in
+2016](https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016).
+
+How do I give it the same key every time instead of a new random key?
+----------------------------------------------------------------------
+
+A `Key` object can be saved to a string by calling its `saveToAsciiSafeString()`
+method. You will have to save that string somewhere safe, and then load it back
+into a `Key` object using `Key`'s `loadFromAsciiSafeString` static method.
+
+Where you store the string depends on your application. For example if you are
+using `KeyProtectedByPassword` to encrypt files with a user's login password,
+then you should not store the `Key` at all. If you are protecting sensitive data
+on a server that may be compromised, then you should store it in a hardware
+security module. When in doubt, consult a security expert.
+
+Why is an EnvironmentIsBrokenException getting thrown?
+-------------------------------------------------------
+
+Either you've encountered a bug in this library, or your system doesn't support
+the use of this library. For example, if your system does not have a secure
+random number generator, this library will refuse to run, by throwing that
+exception, instead of falling back to an insecure random number generator.
+
+Why am I getting a BadFormatException when loading a Key from a string?
+------------------------------------------------------------------------
+
+If you're getting this exception, then the string you're giving to
+`loadFromAsciiSafeString()` is *not* the same as the string you got from
+`saveToAsciiSafeString()`. Perhaps your database column isn't wide enough and
+it's truncating the string as you insert it?
+
+Does encrypting hide the length of the plaintext?
+--------------------------------------------------
+
+Encryption does not, and is not intended to, hide the length of the data being
+encrypted. For example, it is not safe to encrypt a field in which only a small
+number of different-length values are possible (e.g. "male" or "female") since
+it would be possible to tell what the plaintext is by looking at the length of
+the ciphertext. In order to do this safely, it is your responsibility to, before
+encrypting, pad the data out to the length of the longest string that will ever
+be encrypted. This way, all plaintexts are the same length, and no information
+about the plaintext can be gleaned from the length of the ciphertext.
diff --git a/vendor/defuse/php-encryption/docs/InstallingAndVerifying.md b/vendor/defuse/php-encryption/docs/InstallingAndVerifying.md
new file mode 100755
index 0000000..12b5fee
--- /dev/null
+++ b/vendor/defuse/php-encryption/docs/InstallingAndVerifying.md
@@ -0,0 +1,53 @@
+Getting The Code
+=================
+
+There are two ways to use this library in your applications. You can either:
+
+1. Use [Composer](https://getcomposer.org/), or
+2. `require_once` a single `.phar` file in your application.
+
+If you are not using either option (for example, because you're using Git submodules), you may need to write your own autoloader ([example](https://gist.github.com/paragonie-scott/949daee819bb7f19c50e5e103170b400)).
+
+Option 1: Using Composer
+-------------------------
+
+Run this inside the directory of your composer-enabled project:
+
+```sh
+composer require defuse/php-encryption
+```
+
+Unfortunately, composer doesn't provide a way for you to verify that the code
+you're getting was signed by this library's authors. If you want a more secure
+option, use the `.phar` method described below.
+
+Option 2: Including a PHAR
+----------------------------
+
+The `.phar` option lets you include this library into your project simply by
+calling `require_once` on a single file. Download `defuse-crypto.phar` and
+`defuse-crypto.phar.sig` from this project's
+[releases](https://github.com/defuse/php-encryption/releases) page.
+
+You should verify the integrity of the `.phar`. The `defuse-crypto.phar.sig`
+contains the signature of `defuse-crypto.phar`. It is signed with Taylor
+Hornby's PGP key. You can find Taylor's public key in `dist/signingkey.asc`. You
+can verify the public key's fingerprint against the Taylor Hornby's [contact
+page](https://defuse.ca/contact.htm) and
+[twitter](https://twitter.com/DefuseSec/status/723741424253059074).
+
+Once you have verified the signature, it is safe to use the `.phar`. Place it
+somewhere in your file system, e.g. `/var/www/lib/defuse-crypto.phar`, and then
+pass that path to `require_once`.
+
+```php
+ Whenever there is a conflict between security and some other property,
+    > security will be favored. For example, the library has runtime tests,
+    > which make it slower, but will hopefully stop it from encrypting stuff
+    > if the platform it's running on is broken.
+
+- Rule #2: It should be difficult to misuse the library.
+
+    > We assume the developers using this library have no experience with
+    > cryptography. We only assume that they know that the "key" is something
+    > you need to encrypt and decrypt the messages, and that it must be kept
+    > secret. Whenever possible, the library should refuse to encrypt or decrypt
+    > messages when it is not being used correctly.
+
+- Rule #3: The library aims only to be compatible with itself.
+
+    > Other PHP encryption libraries try to support every possible type of
+    > encryption, even the insecure ones (e.g. ECB mode). Because there are so
+    > many options, inexperienced developers must decide whether to use "CBC
+    > mode" or "ECB mode" when both are meaningless terms to them. This
+    > inevitably leads to vulnerabilities.
+
+    > This library will only support one secure mode. A developer using this
+    > library will call "encrypt" and "decrypt" methods without worrying about
+    > how they are implemented.
+
+- Rule #4: The library should require no special installation.
+
+    > Some PHP encryption libraries, like libsodium-php, are not straightforward
+    > to install and cannot packaged with "just download and extract"
+    > applications. This library will always be just a handful of PHP files that
+    > you can copy to your source tree and require().
+
+Publishing Releases
+--------------------
+
+To make a release, you will need to install [composer](https://getcomposer.org/)
+and [box](https://github.com/box-project/box2) on your system. They will need to
+be available in your `$PATH` so that running the commands `composer` and `box`
+in your terminal run them, respectively. You will also need the private key for
+signing (ID: 7B4B2D98) available.
+
+Once you have those tools installed and the key available follow these steps:
+
+**Remember to set the version number in `composer.json`!**
+
+Make a fresh clone of the repository:
+
+```
+git clone 
+```
+
+Check out the branch you want to release:
+
+```
+git checkout 
+```
+
+Check that the version number in composer.json is correct (or not specified so that it gets picked up from the git tag):
+
+```
+cat composer.json
+```
+
+Check that the version number and support lifetime in README.md are correct:
+
+```
+cat README.md
+```
+
+Run the tests:
+
+```
+composer install
+./test.sh
+```
+
+Generate the `.phar`:
+
+```
+cd dist
+make build-phar
+```
+
+Test the `.phar`:
+
+```
+cd ../
+./test.sh dist/phar-testing-autoload.php
+```
+
+Sign the `.phar`:
+
+```
+cd dist
+make sign-phar
+```
+
+Tag the release:
+
+```
+git -c user.signingkey=DD2E507F7BDB1669 tag -s "" -m ""
+```
+
+`` should be in the format `v2.0.0` and `` should look
+like "Release of v2.0.0."
+
+Push the tag to github, then use the
+[releases](https://github.com/defuse/php-encryption/releases) page to draft
+a new release for that tag. Upload the `.phar` and the `.phar.sig` file to be
+included as part of that release.
diff --git a/vendor/defuse/php-encryption/docs/Tutorial.md b/vendor/defuse/php-encryption/docs/Tutorial.md
new file mode 100755
index 0000000..a40cac3
--- /dev/null
+++ b/vendor/defuse/php-encryption/docs/Tutorial.md
@@ -0,0 +1,314 @@
+Tutorial
+=========
+
+Hello! If you're reading this file, it's because you want to add encryption to
+one of your PHP projects. My job, as the person writing this documentation, is
+to help you make sure you're doing the right thing and then show you how to use
+this library to do it. To help me help you, please read the documentation
+*carefully* and *deliberately*.
+
+A Word of Caution
+------------------
+
+Encryption is not magic dust you can sprinkle on a system to make it more
+secure. The way encryption is integrated into a system's design needs to be
+carefully thought out. Sometimes, encryption is the wrong thing to use. Other
+times, encryption needs to be used in a very specific way in order for it to
+work as intended. Even if you are sure of what you are doing, we strongly
+recommend seeking advice from an expert.
+
+The first step is to think about your application's threat model. Ask yourself
+the following questions. Who will want to attack my application, and what will
+they get out of it? Are they trying to steal some information? Trying to alter
+or destroy some information? Or just trying to make the system go down so people
+can't access it? Then ask yourself how encryption can help combat those threats.
+If you're going to add encryption to your application, you should have a very
+clear idea of exactly which kinds of attacks it's helping to secure your
+application against. Once you have your threat model, think about what kinds of
+attacks it *does not* cover, and whether or not you should improve your threat
+model to include those attacks.
+
+**This isn't for storing user login passwords:** The most common use of
+cryptography in web applications is to protect the users' login passwords. If
+you're trying to use this library to "encrypt" your users' passwords, you're in
+the wrong place. Passwords shouldn't be *encrypted*, they should be *hashed*
+with a slow computation-heavy function that makes password guessing attacks more
+expensive. See [How to Safely Store Your Users' Passwords in
+2016](https://paragonie.com/blog/2016/02/how-safely-store-password-in-2016).
+
+**This isn't for encrypting network communication:** Likewise, if you're trying
+to encrypt messages sent between two parties over the Internet, you don't want
+to be using this library. For that, set up a TLS connection between the two
+points, or, if it's a chat app, use the [Signal
+Protocol](https://whispersystems.org/blog/advanced-ratcheting/).
+
+What this library provides is symmetric encryption for "data at rest." This
+means it is not suitable for use in building protocols where "data is in motion"
+(i.e. moving over a network) except in limited set of cases.
+
+Please note that **encryption does not, and is not intended to, hide the
+*length* of the data being encrypted.** For example, it is not safe to encrypt
+a field in which only a small number of different-length values are possible
+(e.g. "male" or "female") since it would be possible to tell what the plaintext
+is by looking at the length of the ciphertext. In order to do this safely, it is
+your responsibility to, before encrypting, pad the data out to the length of the
+longest string that will ever be encrypted. This way, all plaintexts are the
+same length, and no information about the plaintext can be gleaned from the
+length of the ciphertext.
+
+Getting the Code
+-----------------
+
+There are several different ways to obtain this library's code and to add it to
+your project. Even if you've already cloned the code from GitHub, you should
+take steps to verify the cryptographic signatures to make sure the code you got
+was not intercepted and modified by an attacker.
+
+Please head over to the [**Installing and
+Verifying**](InstallingAndVerifying.md) documentation to get the code, and then
+come back here to continue the tutorial.
+
+Using the Library
+------------------
+
+I'm going to assume you know what symmetric encryption is, and the difference
+between symmetric and asymmetric encryption. If you don't, I recommend taking
+[Dan Boneh's Cryptography I course](https://www.coursera.org/learn/crypto/) on
+Coursera.
+
+To give you a quick introduction to the library, I'm going to explain how it
+would be used in two sterotypical scenarios. Hopefully, one of these sterotypes
+is close enough to what you want to do that you'll be able to figure out what
+needs to be different on your own.
+
+### Formal Documentation
+
+While this tutorial should get you up and running fast, it's important to
+understand how this library behaves. Please make sure to read the formal
+documentation of all of the functions you're using, since there are some
+important security warnings there.
+
+The following classes are available for you to use:
+
+- [Crypto](classes/Crypto.md): Encrypting and decrypting strings.
+- [File](classes/File.md): Encrypting and decrypting files.
+- [Key](classes/Key.md): Represents a secret encryption key.
+- [KeyProtectedByPassword](classes/KeyProtectedByPassword.md): Represents
+  a secret encryption key that needs to be "unlocked" by a password before it
+  can be used.
+
+### Scenario #1: Keep data secret from the database administrator
+
+In this scenario, our threat model is as follows. Alice is a server
+administrator responsible for managing a trusted web server. Eve is a database
+administrator responsible for managing a database server. Dave is a web
+developer working on code that will eventually run on the trusted web server.
+
+Let's say Alice and Dave trust each other, and Alice is going to host Dave's
+application on her server. But both Alice and Dave don't trust Eve. They know
+Eve is a good database administrator, but she might have incentive to steal the
+data from the database. They want to keep some of the web application's data
+secret from Eve.
+
+In order to do that, Alice will use the included `generate-defuse-key` script
+which generates a random encryption key and prints it to standard output:
+
+```sh
+$ composer require defuse/php-encryption
+$ vendor/bin/generate-defuse-key
+```
+
+Alice will run this script once and save the output to a configuration file, say
+in `/etc/daveapp-secret-key.txt` and set the file permissions so that only the
+user that the website PHP scripts run as can access it.
+
+Dave will write his code to load the key from the configuration file:
+
+```php
+saveToAsciiSafeString();
+    // ... save $protected_key_encoded into the user's account record
+}
+```
+
+**WARNING:** Because of the way `KeyProtectedByPassword` is implemented, knowing
+`SHA256($password)` is enough to decrypt a `KeyProtectedByPassword`. To be
+secure, your application MUST NOT EVER compute `SHA256($password)` and use or
+store it for any reason. You must also make sure that other libraries your
+application is using don't compute it either.
+
+Then, when the user logs in, Dave's code will load the protected key from the
+user's account record, unlock it to get a `Key` object, and save the `Key`
+object somewhere safe (like temporary memory-backed session storage or
+a cookie). Note that wherever Dave's code saves the key, it must be destroyed
+once the user logs out, or else the attacker might be able to find users' keys
+even if they were never logged in during the attack.
+
+```php
+unlockKey($password);
+$user_key_encoded = $user_key->saveToAsciiSafeString();
+// ... save $user_key_encoded in a cookie
+```
+
+```php
+ 0,
+            'Trying to increment a nonce by a nonpositive amount'
+        );
+
+        Core::ensureTrue(
+            $inc <= PHP_INT_MAX - 255,
+            'Integer overflow may occur'
+        );
+
+        /*
+         * We start at the rightmost byte (big-endian)
+         * So, too, does OpenSSL: http://stackoverflow.com/a/3146214/2224584
+         */
+        for ($i = Core::BLOCK_BYTE_SIZE - 1; $i >= 0; --$i) {
+            $sum = \ord($ctr[$i]) + $inc;
+
+            /* Detect integer overflow and fail. */
+            Core::ensureTrue(\is_int($sum), 'Integer overflow in CTR mode nonce increment');
+
+            $ctr[$i] = \pack('C', $sum & 0xFF);
+            $inc     = $sum >> 8;
+        }
+        return $ctr;
+    }
+
+    /**
+     * Returns a random byte string of the specified length.
+     *
+     * @param int $octets
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     */
+    public static function secureRandom($octets)
+    {
+        if ($octets <= 0) {
+            throw new Ex\CryptoException(
+                'A zero or negative amount of random bytes was requested.'
+            );
+        }
+        self::ensureFunctionExists('random_bytes');
+        try {
+            return \random_bytes(max(1, $octets));
+        } catch (\Exception $ex) {
+            throw new Ex\EnvironmentIsBrokenException(
+                'Your system does not have a secure random number generator.'
+            );
+        }
+    }
+
+    /**
+     * Computes the HKDF key derivation function specified in
+     * http://tools.ietf.org/html/rfc5869.
+     *
+     * @param string $hash   Hash Function
+     * @param string $ikm    Initial Keying Material
+     * @param int    $length How many bytes?
+     * @param string $info   What sort of key are we deriving?
+     * @param string $salt
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @psalm-suppress UndefinedFunction - We're checking if the function exists first.
+     *
+     * @return string
+     */
+    public static function HKDF($hash, $ikm, $length, $info = '', $salt = null)
+    {
+        static $nativeHKDF = null;
+        if ($nativeHKDF === null) {
+            $nativeHKDF = \is_callable('\\hash_hkdf');
+        }
+        if ($nativeHKDF) {
+            if (\is_null($salt)) {
+                $salt = '';
+            }
+            return \hash_hkdf($hash, $ikm, $length, $info, $salt);
+        }
+
+        $digest_length = Core::ourStrlen(\hash_hmac($hash, '', '', true));
+
+        // Sanity-check the desired output length.
+        Core::ensureTrue(
+            !empty($length) && \is_int($length) && $length >= 0 && $length <= 255 * $digest_length,
+            'Bad output length requested of HDKF.'
+        );
+
+        // "if [salt] not provided, is set to a string of HashLen zeroes."
+        if (\is_null($salt)) {
+            $salt = \str_repeat("\x00", $digest_length);
+        }
+
+        // HKDF-Extract:
+        // PRK = HMAC-Hash(salt, IKM)
+        // The salt is the HMAC key.
+        $prk = \hash_hmac($hash, $ikm, $salt, true);
+
+        // HKDF-Expand:
+
+        // This check is useless, but it serves as a reminder to the spec.
+        Core::ensureTrue(Core::ourStrlen($prk) >= $digest_length);
+
+        // T(0) = ''
+        $t          = '';
+        $last_block = '';
+        for ($block_index = 1; Core::ourStrlen($t) < $length; ++$block_index) {
+            // T(i) = HMAC-Hash(PRK, T(i-1) | info | 0x??)
+            $last_block = \hash_hmac(
+                $hash,
+                $last_block . $info . \chr($block_index),
+                $prk,
+                true
+            );
+            // T = T(1) | T(2) | T(3) | ... | T(N)
+            $t .= $last_block;
+        }
+
+        // ORM = first L octets of T
+        /** @var string $orm */
+        $orm = Core::ourSubstr($t, 0, $length);
+        Core::ensureTrue(\is_string($orm));
+        return $orm;
+    }
+
+    /**
+     * Checks if two equal-length strings are the same without leaking
+     * information through side channels.
+     *
+     * @param string $expected
+     * @param string $given
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return bool
+     */
+    public static function hashEquals($expected, $given)
+    {
+        static $native = null;
+        if ($native === null) {
+            $native = \function_exists('hash_equals');
+        }
+        if ($native) {
+            return \hash_equals($expected, $given);
+        }
+
+        // We can't just compare the strings with '==', since it would make
+        // timing attacks possible. We could use the XOR-OR constant-time
+        // comparison algorithm, but that may not be a reliable defense in an
+        // interpreted language. So we use the approach of HMACing both strings
+        // with a random key and comparing the HMACs.
+
+        // We're not attempting to make variable-length string comparison
+        // secure, as that's very difficult. Make sure the strings are the same
+        // length.
+        Core::ensureTrue(Core::ourStrlen($expected) === Core::ourStrlen($given));
+
+        $blind           = Core::secureRandom(32);
+        $message_compare = \hash_hmac(Core::HASH_FUNCTION_NAME, $given, $blind);
+        $correct_compare = \hash_hmac(Core::HASH_FUNCTION_NAME, $expected, $blind);
+        return $correct_compare === $message_compare;
+    }
+    /**
+     * Throws an exception if the constant doesn't exist.
+     *
+     * @param string $name
+     * @return void
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     */
+    public static function ensureConstantExists($name)
+    {
+        Core::ensureTrue(
+            \defined($name),
+            'Constant '.$name.' does not exists'
+        );
+    }
+
+    /**
+     * Throws an exception if the function doesn't exist.
+     *
+     * @param string $name
+     * @return void
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     */
+    public static function ensureFunctionExists($name)
+    {
+        Core::ensureTrue(
+            \function_exists($name),
+            'function '.$name.' does not exists'
+        );
+    }
+
+    /**
+     * Throws an exception if the condition is false.
+     *
+     * @param bool $condition
+     * @param string $message
+     * @return void
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     */
+    public static function ensureTrue($condition, $message = '')
+    {
+        if (!$condition) {
+            throw new Ex\EnvironmentIsBrokenException($message);
+        }
+    }
+
+    /*
+     * We need these strlen() and substr() functions because when
+     * 'mbstring.func_overload' is set in php.ini, the standard strlen() and
+     * substr() are replaced by mb_strlen() and mb_substr().
+     */
+
+    /**
+     * Computes the length of a string in bytes.
+     *
+     * @param string $str
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return int
+     */
+    public static function ourStrlen($str)
+    {
+        static $exists = null;
+        if ($exists === null) {
+            $exists = \extension_loaded('mbstring') && \function_exists('mb_strlen');
+        }
+        if ($exists) {
+            $length = \mb_strlen($str, '8bit');
+            Core::ensureTrue($length !== false);
+            return $length;
+        } else {
+            return \strlen($str);
+        }
+    }
+
+    /**
+     * Behaves roughly like the function substr() in PHP 7 does.
+     *
+     * @param string $str
+     * @param int    $start
+     * @param int    $length
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string|bool
+     */
+    public static function ourSubstr($str, $start, $length = null)
+    {
+        static $exists = null;
+        if ($exists === null) {
+            $exists = \extension_loaded('mbstring') && \function_exists('mb_substr');
+        }
+
+        // This is required to make mb_substr behavior identical to substr.
+        // Without this, mb_substr() would return false, contra to what the
+        // PHP documentation says (it doesn't say it can return false.)
+        $input_len = Core::ourStrlen($str);
+        if ($start === $input_len && !$length) {
+            return '';
+        }
+
+        if ($start > $input_len) {
+            return false;
+        }
+
+        // mb_substr($str, 0, NULL, '8bit') returns an empty string on PHP 5.3,
+        // so we have to find the length ourselves. Also, substr() doesn't
+        // accept null for the length.
+        if (! isset($length)) {
+            if ($start >= 0) {
+                $length = $input_len - $start;
+            } else {
+                $length = -$start;
+            }
+        }
+
+        if ($length < 0) {
+            throw new \InvalidArgumentException(
+                "Negative lengths are not supported with ourSubstr."
+            );
+        }
+
+        if ($exists) {
+            $substr = \mb_substr($str, $start, $length, '8bit');
+            // At this point there are two cases where mb_substr can
+            // legitimately return an empty string. Either $length is 0, or
+            // $start is equal to the length of the string (both mb_substr and
+            // substr return an empty string when this happens). It should never
+            // ever return a string that's longer than $length.
+            if (Core::ourStrlen($substr) > $length || (Core::ourStrlen($substr) === 0 && $length !== 0 && $start !== $input_len)) {
+                throw new Ex\EnvironmentIsBrokenException(
+                    'Your version of PHP has bug #66797. Its implementation of
+                    mb_substr() is incorrect. See the details here:
+                    https://bugs.php.net/bug.php?id=66797'
+                );
+            }
+            return $substr;
+        }
+
+        return \substr($str, $start, $length);
+    }
+
+    /**
+     * Computes the PBKDF2 password-based key derivation function.
+     *
+     * The PBKDF2 function is defined in RFC 2898. Test vectors can be found in
+     * RFC 6070. This implementation of PBKDF2 was originally created by Taylor
+     * Hornby, with improvements from http://www.variations-of-shadow.com/.
+     *
+     * @param string $algorithm  The hash algorithm to use. Recommended: SHA256
+     * @param string $password   The password.
+     * @param string $salt       A salt that is unique to the password.
+     * @param int    $count      Iteration count. Higher is better, but slower. Recommended: At least 1000.
+     * @param int    $key_length The length of the derived key in bytes.
+     * @param bool   $raw_output If true, the key is returned in raw binary format. Hex encoded otherwise.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string A $key_length-byte key derived from the password and salt.
+     */
+    public static function pbkdf2(
+        $algorithm,
+        #[\SensitiveParameter]
+        $password,
+        $salt,
+        $count,
+        $key_length,
+        $raw_output = false
+    )
+    {
+        // Type checks:
+        if (! \is_string($algorithm)) {
+            throw new \InvalidArgumentException(
+                'pbkdf2(): algorithm must be a string'
+            );
+        }
+        if (! \is_string($password)) {
+            throw new \InvalidArgumentException(
+                'pbkdf2(): password must be a string'
+            );
+        }
+        if (! \is_string($salt)) {
+            throw new \InvalidArgumentException(
+                'pbkdf2(): salt must be a string'
+            );
+        }
+        // Coerce strings to integers with no information loss or overflow
+        $count += 0;
+        $key_length += 0;
+
+        $algorithm = \strtolower($algorithm);
+        Core::ensureTrue(
+            \in_array($algorithm, \hash_algos(), true),
+            'Invalid or unsupported hash algorithm.'
+        );
+
+        // Whitelist, or we could end up with people using CRC32.
+        $ok_algorithms = [
+            'sha1', 'sha224', 'sha256', 'sha384', 'sha512',
+            'ripemd160', 'ripemd256', 'ripemd320', 'whirlpool',
+        ];
+        Core::ensureTrue(
+            \in_array($algorithm, $ok_algorithms, true),
+            'Algorithm is not a secure cryptographic hash function.'
+        );
+
+        Core::ensureTrue($count > 0 && $key_length > 0, 'Invalid PBKDF2 parameters.');
+
+        if (\function_exists('hash_pbkdf2')) {
+            // The output length is in NIBBLES (4-bits) if $raw_output is false!
+            if (! $raw_output) {
+                $key_length = $key_length * 2;
+            }
+            return \hash_pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output);
+        }
+
+        $hash_length = Core::ourStrlen(\hash($algorithm, '', true));
+        $block_count = \ceil($key_length / $hash_length);
+
+        $output = '';
+        for ($i = 1; $i <= $block_count; $i++) {
+            // $i encoded as 4 bytes, big endian.
+            $last = $salt . \pack('N', $i);
+            // first iteration
+            $last = $xorsum = \hash_hmac($algorithm, $last, $password, true);
+            // perform the other $count - 1 iterations
+            for ($j = 1; $j < $count; $j++) {
+                /**
+                 * @psalm-suppress InvalidOperand
+                 */
+                $xorsum ^= ($last = \hash_hmac($algorithm, $last, $password, true));
+            }
+            $output .= $xorsum;
+        }
+
+        if ($raw_output) {
+            return (string) Core::ourSubstr($output, 0, $key_length);
+        } else {
+            return Encoding::binToHex((string) Core::ourSubstr($output, 0, $key_length));
+        }
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/Crypto.php b/vendor/defuse/php-encryption/src/Crypto.php
new file mode 100755
index 0000000..f148db4
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/Crypto.php
@@ -0,0 +1,477 @@
+deriveKeys($salt);
+        $ekey = $keys->getEncryptionKey();
+        $akey = $keys->getAuthenticationKey();
+        $iv     = Core::secureRandom(Core::BLOCK_BYTE_SIZE);
+
+        $ciphertext = Core::CURRENT_VERSION . $salt . $iv . self::plainEncrypt($plaintext, $ekey, $iv);
+        $auth       = \hash_hmac(Core::HASH_FUNCTION_NAME, $ciphertext, $akey, true);
+        $ciphertext = $ciphertext . $auth;
+
+        if ($raw_binary) {
+            return $ciphertext;
+        }
+        return Encoding::binToHex($ciphertext);
+    }
+
+    /**
+     * Decrypts a ciphertext to a string with either a key or a password.
+     *
+     * @param string        $ciphertext
+     * @param KeyOrPassword $secret
+     * @param bool          $raw_binary
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @throws Ex\WrongKeyOrModifiedCiphertextException
+     *
+     * @return string
+     */
+    private static function decryptInternal($ciphertext, KeyOrPassword $secret, $raw_binary)
+    {
+        RuntimeTests::runtimeTest();
+
+        if (! $raw_binary) {
+            try {
+                $ciphertext = Encoding::hexToBin($ciphertext);
+            } catch (Ex\BadFormatException $ex) {
+                throw new Ex\WrongKeyOrModifiedCiphertextException(
+                    'Ciphertext has invalid hex encoding.'
+                );
+            }
+        }
+
+        if (Core::ourStrlen($ciphertext) < Core::MINIMUM_CIPHERTEXT_SIZE) {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Ciphertext is too short.'
+            );
+        }
+
+        // Get and check the version header.
+        /** @var string $header */
+        $header = Core::ourSubstr($ciphertext, 0, Core::HEADER_VERSION_SIZE);
+        if ($header !== Core::CURRENT_VERSION) {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Bad version header.'
+            );
+        }
+
+        // Get the salt.
+        /** @var string $salt */
+        $salt = Core::ourSubstr(
+            $ciphertext,
+            Core::HEADER_VERSION_SIZE,
+            Core::SALT_BYTE_SIZE
+        );
+        Core::ensureTrue(\is_string($salt));
+
+        // Get the IV.
+        /** @var string $iv */
+        $iv = Core::ourSubstr(
+            $ciphertext,
+            Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE,
+            Core::BLOCK_BYTE_SIZE
+        );
+        Core::ensureTrue(\is_string($iv));
+
+        // Get the HMAC.
+        /** @var string $hmac */
+        $hmac = Core::ourSubstr(
+            $ciphertext,
+            Core::ourStrlen($ciphertext) - Core::MAC_BYTE_SIZE,
+            Core::MAC_BYTE_SIZE
+        );
+        Core::ensureTrue(\is_string($hmac));
+
+        // Get the actual encrypted ciphertext.
+        /** @var string $encrypted */
+        $encrypted = Core::ourSubstr(
+            $ciphertext,
+            Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE +
+                Core::BLOCK_BYTE_SIZE,
+            Core::ourStrlen($ciphertext) - Core::MAC_BYTE_SIZE - Core::SALT_BYTE_SIZE -
+                Core::BLOCK_BYTE_SIZE - Core::HEADER_VERSION_SIZE
+        );
+        Core::ensureTrue(\is_string($encrypted));
+
+        // Derive the separate encryption and authentication keys from the key
+        // or password, whichever it is.
+        $keys = $secret->deriveKeys($salt);
+
+        if (self::verifyHMAC($hmac, $header . $salt . $iv . $encrypted, $keys->getAuthenticationKey())) {
+            $plaintext = self::plainDecrypt($encrypted, $keys->getEncryptionKey(), $iv, Core::CIPHER_METHOD);
+            return $plaintext;
+        } else {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Integrity check failed.'
+            );
+        }
+    }
+
+    /**
+     * Raw unauthenticated encryption (insecure on its own).
+     *
+     * @param string $plaintext
+     * @param string $key
+     * @param string $iv
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     */
+    protected static function plainEncrypt(
+        $plaintext,
+        #[\SensitiveParameter]
+        $key,
+        #[\SensitiveParameter]
+        $iv
+    )
+    {
+        Core::ensureConstantExists('OPENSSL_RAW_DATA');
+        Core::ensureFunctionExists('openssl_encrypt');
+        /** @var string $ciphertext */
+        $ciphertext = \openssl_encrypt(
+            $plaintext,
+            Core::CIPHER_METHOD,
+            $key,
+            OPENSSL_RAW_DATA,
+            $iv
+        );
+
+        Core::ensureTrue(\is_string($ciphertext), 'openssl_encrypt() failed');
+
+        return $ciphertext;
+    }
+
+    /**
+     * Raw unauthenticated decryption (insecure on its own).
+     *
+     * @param string $ciphertext
+     * @param string $key
+     * @param string $iv
+     * @param string $cipherMethod
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     */
+    protected static function plainDecrypt(
+        $ciphertext,
+        #[\SensitiveParameter]
+        $key,
+        #[\SensitiveParameter]
+        $iv,
+        $cipherMethod
+    )
+    {
+        Core::ensureConstantExists('OPENSSL_RAW_DATA');
+        Core::ensureFunctionExists('openssl_decrypt');
+
+        /** @var string $plaintext */
+        $plaintext = \openssl_decrypt(
+            $ciphertext,
+            $cipherMethod,
+            $key,
+            OPENSSL_RAW_DATA,
+            $iv
+        );
+        Core::ensureTrue(\is_string($plaintext), 'openssl_decrypt() failed.');
+
+        return $plaintext;
+    }
+
+    /**
+     * Verifies an HMAC without leaking information through side-channels.
+     *
+     * @param string $expected_hmac
+     * @param string $message
+     * @param string $key
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return bool
+     */
+    protected static function verifyHMAC(
+        $expected_hmac,
+        $message,
+        #[\SensitiveParameter]
+        $key
+    )
+    {
+        $message_hmac = \hash_hmac(Core::HASH_FUNCTION_NAME, $message, $key, true);
+        return Core::hashEquals($message_hmac, $expected_hmac);
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/DerivedKeys.php b/vendor/defuse/php-encryption/src/DerivedKeys.php
new file mode 100755
index 0000000..86a48e5
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/DerivedKeys.php
@@ -0,0 +1,50 @@
+akey;
+    }
+
+    /**
+     * Returns the encryption key.
+     * @return string
+     */
+    public function getEncryptionKey()
+    {
+        return $this->ekey;
+    }
+
+    /**
+     * Constructor for DerivedKeys.
+     *
+     * @param string $akey
+     * @param string $ekey
+     */
+    public function __construct($akey, $ekey)
+    {
+        $this->akey = $akey;
+        $this->ekey = $ekey;
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/Encoding.php b/vendor/defuse/php-encryption/src/Encoding.php
new file mode 100755
index 0000000..b14044f
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/Encoding.php
@@ -0,0 +1,277 @@
+> 4;
+            $hex .= \pack(
+                'CC',
+                87 + $b + ((($b - 10) >> 8) & ~38),
+                87 + $c + ((($c - 10) >> 8) & ~38)
+            );
+        }
+        return $hex;
+    }
+
+    /**
+     * Converts a hexadecimal string into a byte string without leaking
+     * information through side channels.
+     *
+     * @param string $hex_string
+     *
+     * @throws Ex\BadFormatException
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     * @psalm-suppress TypeDoesNotContainType
+     */
+    public static function hexToBin($hex_string)
+    {
+        $hex_pos = 0;
+        $bin     = '';
+        $hex_len = Core::ourStrlen($hex_string);
+        $state   = 0;
+        $c_acc   = 0;
+
+        while ($hex_pos < $hex_len) {
+            $c        = \ord($hex_string[$hex_pos]);
+            $c_num    = $c ^ 48;
+            $c_num0   = ($c_num - 10) >> 8;
+            $c_alpha  = ($c & ~32) - 55;
+            $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;
+            if (($c_num0 | $c_alpha0) === 0) {
+                throw new Ex\BadFormatException(
+                    'Encoding::hexToBin() input is not a hex string.'
+                );
+            }
+            $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);
+            if ($state === 0) {
+                $c_acc = $c_val * 16;
+            } else {
+                $bin .= \pack('C', $c_acc | $c_val);
+            }
+            $state ^= 1;
+            ++$hex_pos;
+        }
+        return $bin;
+    }
+    
+    /**
+     * Remove trialing whitespace without table look-ups or branches.
+     *
+     * Calling this function may leak the length of the string as well as the
+     * number of trailing whitespace characters through side-channels.
+     *
+     * @param string $string
+     * @return string
+     */
+    public static function trimTrailingWhitespace($string = '')
+    {
+        $length = Core::ourStrlen($string);
+        if ($length < 1) {
+            return '';
+        }
+        do {
+            $prevLength = $length;
+            $last = $length - 1;
+            $chr = \ord($string[$last]);
+
+            /* Null Byte (0x00), a.k.a. \0 */
+            // if ($chr === 0x00) $length -= 1;
+            $sub = (($chr - 1) >> 8 ) & 1;
+            $length -= $sub;
+            $last -= $sub;
+
+            /* Horizontal Tab (0x09) a.k.a. \t */
+            $chr = \ord($string[$last]);
+            // if ($chr === 0x09) $length -= 1;
+            $sub = (((0x08 - $chr) & ($chr - 0x0a)) >> 8) & 1;
+            $length -= $sub;
+            $last -= $sub;
+
+            /* New Line (0x0a), a.k.a. \n */
+            $chr = \ord($string[$last]);
+            // if ($chr === 0x0a) $length -= 1;
+            $sub = (((0x09 - $chr) & ($chr - 0x0b)) >> 8) & 1;
+            $length -= $sub;
+            $last -= $sub;
+
+            /* Carriage Return (0x0D), a.k.a. \r */
+            $chr = \ord($string[$last]);
+            // if ($chr === 0x0d) $length -= 1;
+            $sub = (((0x0c - $chr) & ($chr - 0x0e)) >> 8) & 1;
+            $length -= $sub;
+            $last -= $sub;
+
+            /* Space */
+            $chr = \ord($string[$last]);
+            // if ($chr === 0x20) $length -= 1;
+            $sub = (((0x1f - $chr) & ($chr - 0x21)) >> 8) & 1;
+            $length -= $sub;
+        } while ($prevLength !== $length && $length > 0);
+        return (string) Core::ourSubstr($string, 0, $length);
+    }
+
+    /*
+     * SECURITY NOTE ON APPLYING CHECKSUMS TO SECRETS:
+     *
+     *      The checksum introduces a potential security weakness. For example,
+     *      suppose we apply a checksum to a key, and that an adversary has an
+     *      exploit against the process containing the key, such that they can
+     *      overwrite an arbitrary byte of memory and then cause the checksum to
+     *      be verified and learn the result.
+     *
+     *      In this scenario, the adversary can extract the key one byte at
+     *      a time by overwriting it with their guess of its value and then
+     *      asking if the checksum matches. If it does, their guess was right.
+     *      This kind of attack may be more easy to implement and more reliable
+     *      than a remote code execution attack.
+     *
+     *      This attack also applies to authenticated encryption as a whole, in
+     *      the situation where the adversary can overwrite a byte of the key
+     *      and then cause a valid ciphertext to be decrypted, and then
+     *      determine whether the MAC check passed or failed.
+     *
+     *      By using the full SHA256 hash instead of truncating it, I'm ensuring
+     *      that both ways of going about the attack are equivalently difficult.
+     *      A shorter checksum of say 32 bits might be more useful to the
+     *      adversary as an oracle in case their writes are coarser grained.
+     *
+     *      Because the scenario assumes a serious vulnerability, we don't try
+     *      to prevent attacks of this style.
+     */
+
+    /**
+     * INTERNAL USE ONLY: Applies a version header, applies a checksum, and
+     * then encodes a byte string into a range of printable ASCII characters.
+     *
+     * @param string $header
+     * @param string $bytes
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     */
+    public static function saveBytesToChecksummedAsciiSafeString(
+        $header,
+        #[\SensitiveParameter]
+        $bytes
+    )
+    {
+        // Headers must be a constant length to prevent one type's header from
+        // being a prefix of another type's header, leading to ambiguity.
+        Core::ensureTrue(
+            Core::ourStrlen($header) === self::SERIALIZE_HEADER_BYTES,
+            'Header must be ' . self::SERIALIZE_HEADER_BYTES . ' bytes.'
+        );
+
+        return Encoding::binToHex(
+            $header .
+            $bytes .
+            \hash(
+                self::CHECKSUM_HASH_ALGO,
+                $header . $bytes,
+                true
+            )
+        );
+    }
+
+    /**
+     * INTERNAL USE ONLY: Decodes, verifies the header and checksum, and returns
+     * the encoded byte string.
+     *
+     * @param string $expected_header
+     * @param string $string
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @throws Ex\BadFormatException
+     *
+     * @return string
+     */
+    public static function loadBytesFromChecksummedAsciiSafeString(
+        $expected_header,
+        #[\SensitiveParameter]
+        $string
+    )
+    {
+        // Headers must be a constant length to prevent one type's header from
+        // being a prefix of another type's header, leading to ambiguity.
+        Core::ensureTrue(
+            Core::ourStrlen($expected_header) === self::SERIALIZE_HEADER_BYTES,
+            'Header must be 4 bytes.'
+        );
+
+        /* If you get an exception here when attempting to load from a file, first pass your
+           key to Encoding::trimTrailingWhitespace() to remove newline characters, etc.      */
+        $bytes = Encoding::hexToBin($string);
+
+        /* Make sure we have enough bytes to get the version header and checksum. */
+        if (Core::ourStrlen($bytes) < self::SERIALIZE_HEADER_BYTES + self::CHECKSUM_BYTE_SIZE) {
+            throw new Ex\BadFormatException(
+                'Encoded data is shorter than expected.'
+            );
+        }
+
+        /* Grab the version header. */
+        $actual_header = (string) Core::ourSubstr($bytes, 0, self::SERIALIZE_HEADER_BYTES);
+
+        if ($actual_header !== $expected_header) {
+            throw new Ex\BadFormatException(
+                'Invalid header.'
+            );
+        }
+
+        /* Grab the bytes that are part of the checksum. */
+        $checked_bytes = (string) Core::ourSubstr(
+            $bytes,
+            0,
+            Core::ourStrlen($bytes) - self::CHECKSUM_BYTE_SIZE
+        );
+
+        /* Grab the included checksum. */
+        $checksum_a = (string) Core::ourSubstr(
+            $bytes,
+            Core::ourStrlen($bytes) - self::CHECKSUM_BYTE_SIZE,
+            self::CHECKSUM_BYTE_SIZE
+        );
+
+        /* Re-compute the checksum. */
+        $checksum_b = \hash(self::CHECKSUM_HASH_ALGO, $checked_bytes, true);
+
+        /* Check if the checksum matches. */
+        if (! Core::hashEquals($checksum_a, $checksum_b)) {
+            throw new Ex\BadFormatException(
+                "Data is corrupted, the checksum doesn't match"
+            );
+        }
+
+        return (string) Core::ourSubstr(
+            $bytes,
+            self::SERIALIZE_HEADER_BYTES,
+            Core::ourStrlen($bytes) - self::SERIALIZE_HEADER_BYTES - self::CHECKSUM_BYTE_SIZE
+        );
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/Exception/BadFormatException.php b/vendor/defuse/php-encryption/src/Exception/BadFormatException.php
new file mode 100755
index 0000000..804d9c1
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/Exception/BadFormatException.php
@@ -0,0 +1,7 @@
+deriveKeys($file_salt);
+        $ekey = $keys->getEncryptionKey();
+        $akey = $keys->getAuthenticationKey();
+
+        $ivsize = Core::BLOCK_BYTE_SIZE;
+        $iv     = Core::secureRandom($ivsize);
+
+        /* Initialize a streaming HMAC state. */
+        /** @var mixed $hmac */
+        $hmac = \hash_init(Core::HASH_FUNCTION_NAME, HASH_HMAC, $akey);
+        Core::ensureTrue(
+            \is_resource($hmac) || \is_object($hmac),
+            'Cannot initialize a hash context'
+        );
+
+        /* Write the header, salt, and IV. */
+        self::writeBytes(
+            $outputHandle,
+            Core::CURRENT_VERSION . $file_salt . $iv,
+            Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + $ivsize
+        );
+
+        /* Add the header, salt, and IV to the HMAC. */
+        \hash_update($hmac, Core::CURRENT_VERSION);
+        \hash_update($hmac, $file_salt);
+        \hash_update($hmac, $iv);
+
+        /* $thisIv will be incremented after each call to the encryption. */
+        $thisIv = $iv;
+
+        /* How many blocks do we encrypt at a time? We increment by this value. */
+        /**
+         * @psalm-suppress RedundantCast
+         */
+        $inc = (int) (Core::BUFFER_BYTE_SIZE / Core::BLOCK_BYTE_SIZE);
+
+        /* Loop until we reach the end of the input file. */
+        $at_file_end = false;
+        while (! (\feof($inputHandle) || $at_file_end)) {
+            /* Find out if we can read a full buffer, or only a partial one. */
+            /** @var int */
+            $pos = \ftell($inputHandle);
+            if (!\is_int($pos)) {
+                throw new Ex\IOException(
+                    'Could not get current position in input file during encryption'
+                );
+            }
+            if ($pos + Core::BUFFER_BYTE_SIZE >= $inputSize) {
+                /* We're at the end of the file, so we need to break out of the loop. */
+                $at_file_end = true;
+                $read = self::readBytes(
+                    $inputHandle,
+                    $inputSize - $pos
+                );
+            } else {
+                $read = self::readBytes(
+                    $inputHandle,
+                    Core::BUFFER_BYTE_SIZE
+                );
+            }
+
+            /* Encrypt this buffer. */
+            /** @var string */
+            $encrypted = \openssl_encrypt(
+                $read,
+                Core::CIPHER_METHOD,
+                $ekey,
+                OPENSSL_RAW_DATA,
+                $thisIv
+            );
+
+            Core::ensureTrue(\is_string($encrypted), 'OpenSSL encryption error');
+
+            /* Write this buffer's ciphertext. */
+            self::writeBytes($outputHandle, $encrypted, Core::ourStrlen($encrypted));
+            /* Add this buffer's ciphertext to the HMAC. */
+            \hash_update($hmac, $encrypted);
+
+            /* Increment the counter by the number of blocks in a buffer. */
+            $thisIv = Core::incrementCounter($thisIv, $inc);
+            /* WARNING: Usually, unless the file is a multiple of the buffer
+             * size, $thisIv will contain an incorrect value here on the last
+             * iteration of this loop. */
+        }
+
+        /* Get the HMAC and append it to the ciphertext. */
+        $final_mac = \hash_final($hmac, true);
+        self::writeBytes($outputHandle, $final_mac, Core::MAC_BYTE_SIZE);
+    }
+
+    /**
+     * Decrypts a file-backed resource with either a key or a password.
+     *
+     * @param resource      $inputHandle
+     * @param resource      $outputHandle
+     * @param KeyOrPassword $secret
+     * @return void
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @throws Ex\IOException
+     * @throws Ex\WrongKeyOrModifiedCiphertextException
+     * @psalm-suppress PossiblyInvalidArgument
+     *      Fixes erroneous errors caused by PHP 7.2 switching the return value
+     *      of hash_init from a resource to a HashContext.
+     */
+    public static function decryptResourceInternal($inputHandle, $outputHandle, KeyOrPassword $secret)
+    {
+        if (! \is_resource($inputHandle)) {
+            throw new Ex\IOException(
+                'Input handle must be a resource!'
+            );
+        }
+        if (! \is_resource($outputHandle)) {
+            throw new Ex\IOException(
+                'Output handle must be a resource!'
+            );
+        }
+
+        /* Make sure the file is big enough for all the reads we need to do. */
+        $stat = \fstat($inputHandle);
+        if ($stat['size'] < Core::MINIMUM_CIPHERTEXT_SIZE) {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Input file is too small to have been created by this library.'
+            );
+        }
+
+        /* Check the version header. */
+        $header = self::readBytes($inputHandle, Core::HEADER_VERSION_SIZE);
+        if ($header !== Core::CURRENT_VERSION) {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Bad version header.'
+            );
+        }
+
+        /* Get the salt. */
+        $file_salt = self::readBytes($inputHandle, Core::SALT_BYTE_SIZE);
+
+        /* Get the IV. */
+        $ivsize = Core::BLOCK_BYTE_SIZE;
+        $iv     = self::readBytes($inputHandle, $ivsize);
+
+        /* Derive the authentication and encryption keys. */
+        $keys = $secret->deriveKeys($file_salt);
+        $ekey = $keys->getEncryptionKey();
+        $akey = $keys->getAuthenticationKey();
+
+        /* We'll store the MAC of each buffer-sized chunk as we verify the
+         * actual MAC, so that we can check them again when decrypting. */
+        $macs = [];
+
+        /* $thisIv will be incremented after each call to the decryption. */
+        $thisIv = $iv;
+
+        /* How many blocks do we encrypt at a time? We increment by this value. */
+        /**
+         * @psalm-suppress RedundantCast
+         */
+        $inc = (int) (Core::BUFFER_BYTE_SIZE / Core::BLOCK_BYTE_SIZE);
+
+        /* Get the HMAC. */
+        if (\fseek($inputHandle, (-1 * Core::MAC_BYTE_SIZE), SEEK_END) === -1) {
+            throw new Ex\IOException(
+                'Cannot seek to beginning of MAC within input file'
+            );
+        }
+
+        /* Get the position of the last byte in the actual ciphertext. */
+        /** @var int $cipher_end */
+        $cipher_end = \ftell($inputHandle);
+        if (!\is_int($cipher_end)) {
+            throw new Ex\IOException(
+                'Cannot read input file'
+            );
+        }
+        /* We have the position of the first byte of the HMAC. Go back by one. */
+        --$cipher_end;
+
+        /* Read the HMAC. */
+        /** @var string $stored_mac */
+        $stored_mac = self::readBytes($inputHandle, Core::MAC_BYTE_SIZE);
+
+        /* Initialize a streaming HMAC state. */
+        /** @var mixed $hmac */
+        $hmac = \hash_init(Core::HASH_FUNCTION_NAME, HASH_HMAC, $akey);
+        Core::ensureTrue(\is_resource($hmac) || \is_object($hmac), 'Cannot initialize a hash context');
+
+        /* Reset file pointer to the beginning of the file after the header */
+        if (\fseek($inputHandle, Core::HEADER_VERSION_SIZE, SEEK_SET) === -1) {
+            throw new Ex\IOException(
+                'Cannot read seek within input file'
+            );
+        }
+
+        /* Seek to the start of the actual ciphertext. */
+        if (\fseek($inputHandle, Core::SALT_BYTE_SIZE + $ivsize, SEEK_CUR) === -1) {
+            throw new Ex\IOException(
+                'Cannot seek input file to beginning of ciphertext'
+            );
+        }
+
+        /* PASS #1: Calculating the HMAC. */
+
+        \hash_update($hmac, $header);
+        \hash_update($hmac, $file_salt);
+        \hash_update($hmac, $iv);
+        /** @var mixed $hmac2 */
+        $hmac2 = \hash_copy($hmac);
+
+        $break = false;
+        while (! $break) {
+            /** @var int $pos */
+            $pos = \ftell($inputHandle);
+            if (!\is_int($pos)) {
+                throw new Ex\IOException(
+                    'Could not get current position in input file during decryption'
+                );
+            }
+
+            /* Read the next buffer-sized chunk (or less). */
+            if ($pos + Core::BUFFER_BYTE_SIZE >= $cipher_end) {
+                $break = true;
+                $read  = self::readBytes(
+                    $inputHandle,
+                    $cipher_end - $pos + 1
+                );
+            } else {
+                $read = self::readBytes(
+                    $inputHandle,
+                    Core::BUFFER_BYTE_SIZE
+                );
+            }
+
+            /* Update the HMAC. */
+            \hash_update($hmac, $read);
+
+            /* Remember this buffer-sized chunk's HMAC. */
+            /** @var mixed $chunk_mac */
+            $chunk_mac = \hash_copy($hmac);
+            Core::ensureTrue(\is_resource($chunk_mac) || \is_object($chunk_mac), 'Cannot duplicate a hash context');
+            $macs []= \hash_final($chunk_mac);
+        }
+
+        /* Get the final HMAC, which should match the stored one. */
+        /** @var string $final_mac */
+        $final_mac = \hash_final($hmac, true);
+
+        /* Verify the HMAC. */
+        if (! Core::hashEquals($final_mac, $stored_mac)) {
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                'Integrity check failed.'
+            );
+        }
+
+        /* PASS #2: Decrypt and write output. */
+
+        /* Rewind to the start of the actual ciphertext. */
+        if (\fseek($inputHandle, Core::SALT_BYTE_SIZE + $ivsize + Core::HEADER_VERSION_SIZE, SEEK_SET) === -1) {
+            throw new Ex\IOException(
+                'Could not move the input file pointer during decryption'
+            );
+        }
+
+        $at_file_end = false;
+        while (! $at_file_end) {
+            /** @var int $pos */
+            $pos = \ftell($inputHandle);
+            if (!\is_int($pos)) {
+                throw new Ex\IOException(
+                    'Could not get current position in input file during decryption'
+                );
+            }
+
+            /* Read the next buffer-sized chunk (or less). */
+            if ($pos + Core::BUFFER_BYTE_SIZE >= $cipher_end) {
+                $at_file_end = true;
+                $read   = self::readBytes(
+                    $inputHandle,
+                    $cipher_end - $pos + 1
+                );
+            } else {
+                $read = self::readBytes(
+                    $inputHandle,
+                    Core::BUFFER_BYTE_SIZE
+                );
+            }
+
+            /* Recalculate the MAC (so far) and compare it with the one we
+             * remembered from pass #1 to ensure attackers didn't change the
+             * ciphertext after MAC verification. */
+            \hash_update($hmac2, $read);
+            /** @var mixed $calc_mac */
+            $calc_mac = \hash_copy($hmac2);
+            Core::ensureTrue(\is_resource($calc_mac) || \is_object($calc_mac), 'Cannot duplicate a hash context');
+            $calc = \hash_final($calc_mac);
+
+            if (empty($macs)) {
+                throw new Ex\WrongKeyOrModifiedCiphertextException(
+                    'File was modified after MAC verification'
+                );
+            } elseif (! Core::hashEquals(\array_shift($macs), $calc)) {
+                throw new Ex\WrongKeyOrModifiedCiphertextException(
+                    'File was modified after MAC verification'
+                );
+            }
+
+            /* Decrypt this buffer-sized chunk. */
+            /** @var string $decrypted */
+            $decrypted = \openssl_decrypt(
+                $read,
+                Core::CIPHER_METHOD,
+                $ekey,
+                OPENSSL_RAW_DATA,
+                $thisIv
+            );
+            Core::ensureTrue(\is_string($decrypted), 'OpenSSL decryption error');
+
+            /* Write the plaintext to the output file. */
+            self::writeBytes(
+                $outputHandle,
+                $decrypted,
+                Core::ourStrlen($decrypted)
+            );
+
+            /* Increment the IV by the amount of blocks in a buffer. */
+            /** @var string $thisIv */
+            $thisIv = Core::incrementCounter($thisIv, $inc);
+            /* WARNING: Usually, unless the file is a multiple of the buffer
+             * size, $thisIv will contain an incorrect value here on the last
+             * iteration of this loop. */
+        }
+    }
+
+    /**
+     * Read from a stream; prevent partial reads.
+     *
+     * @param resource $stream
+     * @param int      $num_bytes
+     * @return string
+     *
+     * @throws Ex\IOException
+     * @throws Ex\EnvironmentIsBrokenException
+     */
+    public static function readBytes($stream, $num_bytes)
+    {
+        Core::ensureTrue($num_bytes >= 0, 'Tried to read less than 0 bytes');
+
+        if ($num_bytes === 0) {
+            return '';
+        }
+
+        $buf       = '';
+        $remaining = $num_bytes;
+        while ($remaining > 0 && ! \feof($stream)) {
+            /** @var string $read */
+            $read = \fread($stream, $remaining);
+            if (!\is_string($read)) {
+                throw new Ex\IOException(
+                    'Could not read from the file'
+                );
+            }
+            $buf .= $read;
+            $remaining -= Core::ourStrlen($read);
+        }
+        if (Core::ourStrlen($buf) !== $num_bytes) {
+            throw new Ex\IOException(
+                'Tried to read past the end of the file'
+            );
+        }
+        return $buf;
+    }
+
+    /**
+     * Write to a stream; prevents partial writes.
+     *
+     * @param resource $stream
+     * @param string   $buf
+     * @param int      $num_bytes
+     * @return int
+     *
+     * @throws Ex\IOException
+     */
+    public static function writeBytes($stream, $buf, $num_bytes = null)
+    {
+        $bufSize = Core::ourStrlen($buf);
+        if ($num_bytes === null) {
+            $num_bytes = $bufSize;
+        }
+        if ($num_bytes > $bufSize) {
+            throw new Ex\IOException(
+                'Trying to write more bytes than the buffer contains.'
+            );
+        }
+        if ($num_bytes < 0) {
+            throw new Ex\IOException(
+                'Tried to write less than 0 bytes'
+            );
+        }
+        $remaining = $num_bytes;
+        while ($remaining > 0) {
+            /** @var int $written */
+            $written = \fwrite($stream, $buf, $remaining);
+            if (!\is_int($written)) {
+                throw new Ex\IOException(
+                    'Could not write to the file'
+                );
+            }
+            $buf = (string) Core::ourSubstr($buf, $written, null);
+            $remaining -= $written;
+        }
+        return $num_bytes;
+    }
+
+    /**
+     * Returns the last PHP error's or warning's message string.
+     *
+     * @return string
+     */
+    private static function getLastErrorMessage()
+    {
+        $error = error_get_last();
+        if ($error === null) {
+            return '[no PHP error, or you have a custom error handler set]';
+        } else {
+            return $error['message'];
+        }
+    }
+
+    /**
+     * PHPUnit sets an error handler, which prevents getLastErrorMessage() from working,
+     * because error_get_last does not work when custom handlers are set.
+     *
+     * This is a workaround, which should be a no-op in production deployments, to make
+     * getLastErrorMessage() return the error messages that the PHPUnit tests expect.
+     *
+     * If, in a production deployment, a custom error handler is set, the exception
+     * handling will still work as usual, but the error messages will be confusing.
+     *
+     * @return void
+     */
+    private static function removePHPUnitErrorHandler() {
+        if (defined('PHPUNIT_COMPOSER_INSTALL') || defined('__PHPUNIT_PHAR__')) {
+            set_error_handler(null);
+        }
+    }
+
+    /**
+     * Undoes what removePHPUnitErrorHandler did.
+     *
+     * @return void
+     */
+    private static function restorePHPUnitErrorHandler() {
+        if (defined('PHPUNIT_COMPOSER_INSTALL') || defined('__PHPUNIT_PHAR__')) {
+            restore_error_handler();
+        }
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/Key.php b/vendor/defuse/php-encryption/src/Key.php
new file mode 100755
index 0000000..1767d1f
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/Key.php
@@ -0,0 +1,101 @@
+key_bytes
+        );
+    }
+
+    /**
+     * Gets the raw bytes of the key.
+     *
+     * @return string
+     */
+    public function getRawBytes()
+    {
+        return $this->key_bytes;
+    }
+
+    /**
+     * Constructs a new Key object from a string of raw bytes.
+     *
+     * @param string $bytes
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     */
+    private function __construct(
+        #[\SensitiveParameter]
+        $bytes
+    )
+    {
+        Core::ensureTrue(
+            Core::ourStrlen($bytes) === self::KEY_BYTE_SIZE,
+            'Bad key length.'
+        );
+        $this->key_bytes = $bytes;
+    }
+
+}
diff --git a/vendor/defuse/php-encryption/src/KeyOrPassword.php b/vendor/defuse/php-encryption/src/KeyOrPassword.php
new file mode 100755
index 0000000..3850655
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/KeyOrPassword.php
@@ -0,0 +1,156 @@
+secret_type === self::SECRET_TYPE_KEY) {
+            Core::ensureTrue($this->secret instanceof Key);
+            /**
+             * @psalm-suppress PossiblyInvalidMethodCall
+             */
+            $akey = Core::HKDF(
+                Core::HASH_FUNCTION_NAME,
+                $this->secret->getRawBytes(),
+                Core::KEY_BYTE_SIZE,
+                Core::AUTHENTICATION_INFO_STRING,
+                $salt
+            );
+            /**
+             * @psalm-suppress PossiblyInvalidMethodCall
+             */
+            $ekey = Core::HKDF(
+                Core::HASH_FUNCTION_NAME,
+                $this->secret->getRawBytes(),
+                Core::KEY_BYTE_SIZE,
+                Core::ENCRYPTION_INFO_STRING,
+                $salt
+            );
+            return new DerivedKeys($akey, $ekey);
+        } elseif ($this->secret_type === self::SECRET_TYPE_PASSWORD) {
+            Core::ensureTrue(\is_string($this->secret));
+            /* Our PBKDF2 polyfill is vulnerable to a DoS attack documented in
+             * GitHub issue #230. The fix is to pre-hash the password to ensure
+             * it is short. We do the prehashing here instead of in pbkdf2() so
+             * that pbkdf2() still computes the function as defined by the
+             * standard. */
+
+            /**
+             * @psalm-suppress PossiblyInvalidArgument
+             */
+            $prehash = \hash(Core::HASH_FUNCTION_NAME, $this->secret, true);
+
+            $prekey = Core::pbkdf2(
+                Core::HASH_FUNCTION_NAME,
+                $prehash,
+                $salt,
+                self::PBKDF2_ITERATIONS,
+                Core::KEY_BYTE_SIZE,
+                true
+            );
+            $akey = Core::HKDF(
+                Core::HASH_FUNCTION_NAME,
+                $prekey,
+                Core::KEY_BYTE_SIZE,
+                Core::AUTHENTICATION_INFO_STRING,
+                $salt
+            );
+            /* Note the cryptographic re-use of $salt here. */
+            $ekey = Core::HKDF(
+                Core::HASH_FUNCTION_NAME,
+                $prekey,
+                Core::KEY_BYTE_SIZE,
+                Core::ENCRYPTION_INFO_STRING,
+                $salt
+            );
+            return new DerivedKeys($akey, $ekey);
+        } else {
+            throw new Ex\EnvironmentIsBrokenException('Bad secret type.');
+        }
+    }
+
+    /**
+     * Constructor for KeyOrPassword.
+     *
+     * @param int   $secret_type
+     * @param mixed $secret      (either a Key or a password string)
+     */
+    private function __construct(
+        $secret_type,
+        #[\SensitiveParameter]
+        $secret
+    )
+    {
+        // The constructor is private, so these should never throw.
+        if ($secret_type === self::SECRET_TYPE_KEY) {
+            Core::ensureTrue($secret instanceof Key);
+        } elseif ($secret_type === self::SECRET_TYPE_PASSWORD) {
+            Core::ensureTrue(\is_string($secret));
+        } else {
+            throw new Ex\EnvironmentIsBrokenException('Bad secret type.');
+        }
+        $this->secret_type = $secret_type;
+        $this->secret = $secret;
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php b/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php
new file mode 100755
index 0000000..7d90ed1
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/KeyProtectedByPassword.php
@@ -0,0 +1,159 @@
+saveToAsciiSafeString(),
+            \hash(Core::HASH_FUNCTION_NAME, $password, true),
+            true
+        );
+
+        return new KeyProtectedByPassword($encrypted_key);
+    }
+
+    /**
+     * Loads a KeyProtectedByPassword from its encoded form.
+     *
+     * @param string $saved_key_string
+     *
+     * @throws Ex\BadFormatException
+     *
+     * @return KeyProtectedByPassword
+     */
+    public static function loadFromAsciiSafeString(
+        #[\SensitiveParameter]
+        $saved_key_string
+    )
+    {
+        $encrypted_key = Encoding::loadBytesFromChecksummedAsciiSafeString(
+            self::PASSWORD_KEY_CURRENT_VERSION,
+            $saved_key_string
+        );
+        return new KeyProtectedByPassword($encrypted_key);
+    }
+
+    /**
+     * Encodes the KeyProtectedByPassword into a string of printable ASCII
+     * characters.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     *
+     * @return string
+     */
+    public function saveToAsciiSafeString()
+    {
+        return Encoding::saveBytesToChecksummedAsciiSafeString(
+            self::PASSWORD_KEY_CURRENT_VERSION,
+            $this->encrypted_key
+        );
+    }
+
+    /**
+     * Decrypts the protected key, returning an unprotected Key object that can
+     * be used for encryption and decryption.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @throws Ex\WrongKeyOrModifiedCiphertextException
+     *
+     * @param string $password
+     * @return Key
+     */
+    public function unlockKey(
+        #[\SensitiveParameter]
+        $password
+    )
+    {
+        try {
+            $inner_key_encoded = Crypto::decryptWithPassword(
+                $this->encrypted_key,
+                \hash(Core::HASH_FUNCTION_NAME, $password, true),
+                true
+            );
+            return Key::loadFromAsciiSafeString($inner_key_encoded);
+        } catch (Ex\BadFormatException $ex) {
+            /* This should never happen unless an attacker replaced the
+             * encrypted key ciphertext with some other ciphertext that was
+             * encrypted with the same password. We transform the exception type
+             * here in order to make the API simpler, avoiding the need to
+             * document that this method might throw an Ex\BadFormatException. */
+            throw new Ex\WrongKeyOrModifiedCiphertextException(
+                "The decrypted key was found to be in an invalid format. " .
+                "This very likely indicates it was modified by an attacker."
+            );
+        }
+    }
+
+    /**
+     * Changes the password.
+     *
+     * @param string $current_password
+     * @param string $new_password
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @throws Ex\WrongKeyOrModifiedCiphertextException
+     *
+     * @return KeyProtectedByPassword
+     */
+    public function changePassword(
+        #[\SensitiveParameter]
+        $current_password,
+        #[\SensitiveParameter]
+        $new_password
+    )
+    {
+        $inner_key = $this->unlockKey($current_password);
+        /* The password is hashed as a form of poor-man's domain separation
+         * between this use of encryptWithPassword() and other uses of
+         * encryptWithPassword() that the user may also be using as part of the
+         * same protocol. */
+        $encrypted_key = Crypto::encryptWithPassword(
+            $inner_key->saveToAsciiSafeString(),
+            \hash(Core::HASH_FUNCTION_NAME, $new_password, true),
+            true
+        );
+
+        $this->encrypted_key = $encrypted_key;
+
+        return $this;
+    }
+
+    /**
+     * Constructor for KeyProtectedByPassword.
+     *
+     * @param string $encrypted_key
+     */
+    private function __construct($encrypted_key)
+    {
+        $this->encrypted_key = $encrypted_key;
+    }
+}
diff --git a/vendor/defuse/php-encryption/src/RuntimeTests.php b/vendor/defuse/php-encryption/src/RuntimeTests.php
new file mode 100755
index 0000000..65ce55d
--- /dev/null
+++ b/vendor/defuse/php-encryption/src/RuntimeTests.php
@@ -0,0 +1,228 @@
+getRawBytes()) === Core::KEY_BYTE_SIZE);
+
+            Core::ensureTrue(Core::ENCRYPTION_INFO_STRING !== Core::AUTHENTICATION_INFO_STRING);
+        } catch (Ex\EnvironmentIsBrokenException $ex) {
+            // Do this, otherwise it will stay in the "tests are running" state.
+            $test_state = 3;
+            throw $ex;
+        }
+
+        // Change this to '0' make the tests always re-run (for benchmarking).
+        $test_state = 1;
+    }
+
+    /**
+     * High-level tests of Crypto operations.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @return void
+     */
+    private static function testEncryptDecrypt()
+    {
+        $key  = Key::createNewRandomKey();
+        $data = "EnCrYpT EvErYThInG\x00\x00";
+
+        // Make sure encrypting then decrypting doesn't change the message.
+        $ciphertext = Crypto::encrypt($data, $key, true);
+        try {
+            $decrypted = Crypto::decrypt($ciphertext, $key, true);
+        } catch (Ex\WrongKeyOrModifiedCiphertextException $ex) {
+            // It's important to catch this and change it into a
+            // Ex\EnvironmentIsBrokenException, otherwise a test failure could trick
+            // the user into thinking it's just an invalid ciphertext!
+            throw new Ex\EnvironmentIsBrokenException();
+        }
+        Core::ensureTrue($decrypted === $data);
+
+        // Modifying the ciphertext: Appending a string.
+        try {
+            Crypto::decrypt($ciphertext . 'a', $key, true);
+            throw new Ex\EnvironmentIsBrokenException();
+        } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */
+        }
+
+        // Modifying the ciphertext: Changing an HMAC byte.
+        $indices_to_change = [
+            0, // The header.
+            Core::HEADER_VERSION_SIZE + 1, // the salt
+            Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + 1, // the IV
+            Core::HEADER_VERSION_SIZE + Core::SALT_BYTE_SIZE + Core::BLOCK_BYTE_SIZE + 1, // the ciphertext
+        ];
+
+        foreach ($indices_to_change as $index) {
+            try {
+                $ciphertext[$index] = \chr((\ord($ciphertext[$index]) + 1) % 256);
+                Crypto::decrypt($ciphertext, $key, true);
+                throw new Ex\EnvironmentIsBrokenException();
+            } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */
+            }
+        }
+
+        // Decrypting with the wrong key.
+        $key        = Key::createNewRandomKey();
+        $data       = 'abcdef';
+        $ciphertext = Crypto::encrypt($data, $key, true);
+        $wrong_key  = Key::createNewRandomKey();
+        try {
+            Crypto::decrypt($ciphertext, $wrong_key, true);
+            throw new Ex\EnvironmentIsBrokenException();
+        } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */
+        }
+
+        // Ciphertext too small.
+        $key        = Key::createNewRandomKey();
+        $ciphertext = \str_repeat('A', Core::MINIMUM_CIPHERTEXT_SIZE - 1);
+        try {
+            Crypto::decrypt($ciphertext, $key, true);
+            throw new Ex\EnvironmentIsBrokenException();
+        } catch (Ex\WrongKeyOrModifiedCiphertextException $e) { /* expected */
+        }
+    }
+
+    /**
+     * Test HKDF against test vectors.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @return void
+     */
+    private static function HKDFTestVector()
+    {
+        // HKDF test vectors from RFC 5869
+
+        // Test Case 1
+        $ikm    = \str_repeat("\x0b", 22);
+        $salt   = Encoding::hexToBin('000102030405060708090a0b0c');
+        $info   = Encoding::hexToBin('f0f1f2f3f4f5f6f7f8f9');
+        $length = 42;
+        $okm    = Encoding::hexToBin(
+            '3cb25f25faacd57a90434f64d0362f2a' .
+            '2d2d0a90cf1a5a4c5db02d56ecc4c5bf' .
+            '34007208d5b887185865'
+        );
+        $computed_okm = Core::HKDF('sha256', $ikm, $length, $info, $salt);
+        Core::ensureTrue($computed_okm === $okm);
+
+        // Test Case 7
+        $ikm    = \str_repeat("\x0c", 22);
+        $length = 42;
+        $okm    = Encoding::hexToBin(
+            '2c91117204d745f3500d636a62f64f0a' .
+            'b3bae548aa53d423b0d1f27ebba6f5e5' .
+            '673a081d70cce7acfc48'
+        );
+        $computed_okm = Core::HKDF('sha1', $ikm, $length, '', null);
+        Core::ensureTrue($computed_okm === $okm);
+    }
+
+    /**
+     * Test HMAC against test vectors.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @return void
+     */
+    private static function HMACTestVector()
+    {
+        // HMAC test vector From RFC 4231 (Test Case 1)
+        $key     = \str_repeat("\x0b", 20);
+        $data    = 'Hi There';
+        $correct = 'b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7';
+        Core::ensureTrue(
+            \hash_hmac(Core::HASH_FUNCTION_NAME, $data, $key) === $correct
+        );
+    }
+
+    /**
+     * Test AES against test vectors.
+     *
+     * @throws Ex\EnvironmentIsBrokenException
+     * @return void
+     */
+    private static function AESTestVector()
+    {
+        // AES CTR mode test vector from NIST SP 800-38A
+        $key = Encoding::hexToBin(
+            '603deb1015ca71be2b73aef0857d7781' .
+            '1f352c073b6108d72d9810a30914dff4'
+        );
+        $iv        = Encoding::hexToBin('f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff');
+        $plaintext = Encoding::hexToBin(
+            '6bc1bee22e409f96e93d7e117393172a' .
+            'ae2d8a571e03ac9c9eb76fac45af8e51' .
+            '30c81c46a35ce411e5fbc1191a0a52ef' .
+            'f69f2445df4f9b17ad2b417be66c3710'
+        );
+        $ciphertext = Encoding::hexToBin(
+            '601ec313775789a5b7a7f504bbf3d228' .
+            'f443e3ca4d62b59aca84e990cacaf5c5' .
+            '2b0930daa23de94ce87017ba2d84988d' .
+            'dfc9c58db67aada613c2dd08457941a6'
+        );
+
+        $computed_ciphertext = Crypto::plainEncrypt($plaintext, $key, $iv);
+        Core::ensureTrue($computed_ciphertext === $ciphertext);
+
+        $computed_plaintext = Crypto::plainDecrypt($ciphertext, $key, $iv, Core::CIPHER_METHOD);
+        Core::ensureTrue($computed_plaintext === $plaintext);
+    }
+}
diff --git a/vendor/delight-im/auth/.editorconfig b/vendor/delight-im/auth/.editorconfig
new file mode 100755
index 0000000..8aa5d3b
--- /dev/null
+++ b/vendor/delight-im/auth/.editorconfig
@@ -0,0 +1,13 @@
+# editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = tab
+trim_trailing_whitespace = true
+end_of_line = lf
+insert_final_newline = true
+
+[*.md]
+indent_style = space
+indent_size = 4
diff --git a/vendor/delight-im/auth/.gitignore b/vendor/delight-im/auth/.gitignore
new file mode 100755
index 0000000..61f95bd
--- /dev/null
+++ b/vendor/delight-im/auth/.gitignore
@@ -0,0 +1,6 @@
+# IntelliJ
+.idea/
+
+# Composer
+vendor/
+composer.phar
diff --git a/vendor/delight-im/auth/Database/MySQL.sql b/vendor/delight-im/auth/Database/MySQL.sql
new file mode 100755
index 0000000..80a17c1
--- /dev/null
+++ b/vendor/delight-im/auth/Database/MySQL.sql
@@ -0,0 +1,72 @@
+-- PHP-Auth (https://github.com/delight-im/PHP-Auth)
+-- Copyright (c) delight.im (https://www.delight.im/)
+-- Licensed under the MIT License (https://opensource.org/licenses/MIT)
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8mb4 */;
+
+CREATE TABLE IF NOT EXISTS `users` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `email` varchar(249) COLLATE utf8mb4_unicode_ci NOT NULL,
+  `password` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `username` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
+  `status` tinyint(2) unsigned NOT NULL DEFAULT '0',
+  `verified` tinyint(1) unsigned NOT NULL DEFAULT '0',
+  `resettable` tinyint(1) unsigned NOT NULL DEFAULT '1',
+  `roles_mask` int(10) unsigned NOT NULL DEFAULT '0',
+  `registered` int(10) unsigned NOT NULL,
+  `last_login` int(10) unsigned DEFAULT NULL,
+  `force_logout` mediumint(7) unsigned NOT NULL DEFAULT '0',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `email` (`email`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+CREATE TABLE IF NOT EXISTS `users_confirmations` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `user_id` int(10) unsigned NOT NULL,
+  `email` varchar(249) COLLATE utf8mb4_unicode_ci NOT NULL,
+  `selector` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `token` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `expires` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `selector` (`selector`),
+  KEY `email_expires` (`email`,`expires`),
+  KEY `user_id` (`user_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+CREATE TABLE IF NOT EXISTS `users_remembered` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `user` int(10) unsigned NOT NULL,
+  `selector` varchar(24) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `token` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `expires` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `selector` (`selector`),
+  KEY `user` (`user`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+CREATE TABLE IF NOT EXISTS `users_resets` (
+  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `user` int(10) unsigned NOT NULL,
+  `selector` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `token` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `expires` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `selector` (`selector`),
+  KEY `user_expires` (`user`,`expires`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+CREATE TABLE IF NOT EXISTS `users_throttling` (
+  `bucket` varchar(44) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+  `tokens` float unsigned NOT NULL,
+  `replenished_at` int(10) unsigned NOT NULL,
+  `expires_at` int(10) unsigned NOT NULL,
+  PRIMARY KEY (`bucket`),
+  KEY `expires_at` (`expires_at`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
diff --git a/vendor/delight-im/auth/Database/PostgreSQL.sql b/vendor/delight-im/auth/Database/PostgreSQL.sql
new file mode 100755
index 0000000..46325b3
--- /dev/null
+++ b/vendor/delight-im/auth/Database/PostgreSQL.sql
@@ -0,0 +1,58 @@
+-- PHP-Auth (https://github.com/delight-im/PHP-Auth)
+-- Copyright (c) delight.im (https://www.delight.im/)
+-- Licensed under the MIT License (https://opensource.org/licenses/MIT)
+
+BEGIN;
+
+CREATE TABLE IF NOT EXISTS "users" (
+	"id" SERIAL PRIMARY KEY CHECK ("id" >= 0),
+	"email" VARCHAR(249) UNIQUE NOT NULL,
+	"password" VARCHAR(255) NOT NULL,
+	"username" VARCHAR(100) DEFAULT NULL,
+	"status" SMALLINT NOT NULL DEFAULT '0' CHECK ("status" >= 0),
+	"verified" SMALLINT NOT NULL DEFAULT '0' CHECK ("verified" >= 0),
+	"resettable" SMALLINT NOT NULL DEFAULT '1' CHECK ("resettable" >= 0),
+	"roles_mask" INTEGER NOT NULL DEFAULT '0' CHECK ("roles_mask" >= 0),
+	"registered" INTEGER NOT NULL CHECK ("registered" >= 0),
+	"last_login" INTEGER DEFAULT NULL CHECK ("last_login" >= 0),
+	"force_logout" INTEGER NOT NULL DEFAULT '0' CHECK ("force_logout" >= 0)
+);
+
+CREATE TABLE IF NOT EXISTS "users_confirmations" (
+	"id" SERIAL PRIMARY KEY CHECK ("id" >= 0),
+	"user_id" INTEGER NOT NULL CHECK ("user_id" >= 0),
+	"email" VARCHAR(249) NOT NULL,
+	"selector" VARCHAR(16) UNIQUE NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0)
+);
+CREATE INDEX IF NOT EXISTS "email_expires" ON "users_confirmations" ("email", "expires");
+CREATE INDEX IF NOT EXISTS "user_id" ON "users_confirmations" ("user_id");
+
+CREATE TABLE IF NOT EXISTS "users_remembered" (
+	"id" BIGSERIAL PRIMARY KEY CHECK ("id" >= 0),
+	"user" INTEGER NOT NULL CHECK ("user" >= 0),
+	"selector" VARCHAR(24) UNIQUE NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0)
+);
+CREATE INDEX IF NOT EXISTS "user" ON "users_remembered" ("user");
+
+CREATE TABLE IF NOT EXISTS "users_resets" (
+	"id" BIGSERIAL PRIMARY KEY CHECK ("id" >= 0),
+	"user" INTEGER NOT NULL CHECK ("user" >= 0),
+	"selector" VARCHAR(20) UNIQUE NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0)
+);
+CREATE INDEX IF NOT EXISTS "user_expires" ON "users_resets" ("user", "expires");
+
+CREATE TABLE IF NOT EXISTS "users_throttling" (
+	"bucket" VARCHAR(44) PRIMARY KEY,
+	"tokens" REAL NOT NULL CHECK ("tokens" >= 0),
+	"replenished_at" INTEGER NOT NULL CHECK ("replenished_at" >= 0),
+	"expires_at" INTEGER NOT NULL CHECK ("expires_at" >= 0)
+);
+CREATE INDEX IF NOT EXISTS "expires_at" ON "users_throttling" ("expires_at");
+
+COMMIT;
diff --git a/vendor/delight-im/auth/Database/SQLite.sql b/vendor/delight-im/auth/Database/SQLite.sql
new file mode 100755
index 0000000..f505396
--- /dev/null
+++ b/vendor/delight-im/auth/Database/SQLite.sql
@@ -0,0 +1,60 @@
+-- PHP-Auth (https://github.com/delight-im/PHP-Auth)
+-- Copyright (c) delight.im (https://www.delight.im/)
+-- Licensed under the MIT License (https://opensource.org/licenses/MIT)
+
+PRAGMA foreign_keys = OFF;
+
+CREATE TABLE "users" (
+	"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK ("id" >= 0),
+	"email" VARCHAR(249) NOT NULL,
+	"password" VARCHAR(255) NOT NULL,
+	"username" VARCHAR(100) DEFAULT NULL,
+	"status" INTEGER NOT NULL CHECK ("status" >= 0) DEFAULT "0",
+	"verified" INTEGER NOT NULL CHECK ("verified" >= 0) DEFAULT "0",
+	"resettable" INTEGER NOT NULL CHECK ("resettable" >= 0) DEFAULT "1",
+	"roles_mask" INTEGER NOT NULL CHECK ("roles_mask" >= 0) DEFAULT "0",
+	"registered" INTEGER NOT NULL CHECK ("registered" >= 0),
+	"last_login" INTEGER CHECK ("last_login" >= 0) DEFAULT NULL,
+	"force_logout" INTEGER NOT NULL CHECK ("force_logout" >= 0) DEFAULT "0",
+	CONSTRAINT "email" UNIQUE ("email")
+);
+
+CREATE TABLE "users_confirmations" (
+	"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK ("id" >= 0),
+	"user_id" INTEGER NOT NULL CHECK ("user_id" >= 0),
+	"email" VARCHAR(249) NOT NULL,
+	"selector" VARCHAR(16) NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0),
+	CONSTRAINT "selector" UNIQUE ("selector")
+);
+CREATE INDEX "users_confirmations.email_expires" ON "users_confirmations" ("email", "expires");
+CREATE INDEX "users_confirmations.user_id" ON "users_confirmations" ("user_id");
+
+CREATE TABLE "users_remembered" (
+	"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK ("id" >= 0),
+	"user" INTEGER NOT NULL CHECK ("user" >= 0),
+	"selector" VARCHAR(24) NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0),
+	CONSTRAINT "selector" UNIQUE ("selector")
+);
+CREATE INDEX "users_remembered.user" ON "users_remembered" ("user");
+
+CREATE TABLE "users_resets" (
+	"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL CHECK ("id" >= 0),
+	"user" INTEGER NOT NULL CHECK ("user" >= 0),
+	"selector" VARCHAR(20) NOT NULL,
+	"token" VARCHAR(255) NOT NULL,
+	"expires" INTEGER NOT NULL CHECK ("expires" >= 0),
+	CONSTRAINT "selector" UNIQUE ("selector")
+);
+CREATE INDEX "users_resets.user_expires" ON "users_resets" ("user", "expires");
+
+CREATE TABLE "users_throttling" (
+	"bucket" VARCHAR(44) PRIMARY KEY NOT NULL,
+	"tokens" REAL NOT NULL CHECK ("tokens" >= 0),
+	"replenished_at" INTEGER NOT NULL CHECK ("replenished_at" >= 0),
+	"expires_at" INTEGER NOT NULL CHECK ("expires_at" >= 0)
+);
+CREATE INDEX "users_throttling.expires_at" ON "users_throttling" ("expires_at");
diff --git a/vendor/delight-im/auth/LICENSE b/vendor/delight-im/auth/LICENSE
new file mode 100755
index 0000000..ffa3629
--- /dev/null
+++ b/vendor/delight-im/auth/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) delight.im (https://www.delight.im/)
+
+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.
diff --git a/vendor/delight-im/auth/Migration.md b/vendor/delight-im/auth/Migration.md
new file mode 100755
index 0000000..5e8ca21
--- /dev/null
+++ b/vendor/delight-im/auth/Migration.md
@@ -0,0 +1,220 @@
+# Migration
+
+ * [General](#general)
+ * [From `v7.x.x` to `v8.x.x`](#from-v7xx-to-v8xx)
+ * [From `v6.x.x` to `v7.x.x`](#from-v6xx-to-v7xx)
+ * [From `v5.x.x` to `v6.x.x`](#from-v5xx-to-v6xx)
+ * [From `v4.x.x` to `v5.x.x`](#from-v4xx-to-v5xx)
+ * [From `v3.x.x` to `v4.x.x`](#from-v3xx-to-v4xx)
+ * [From `v2.x.x` to `v3.x.x`](#from-v2xx-to-v3xx)
+ * [From `v1.x.x` to `v2.x.x`](#from-v1xx-to-v2xx)
+
+## General
+
+Update your version of this library using Composer and its `composer update` or `composer require` commands [[?]](https://github.com/delight-im/Knowledge/blob/master/Composer%20(PHP).md#how-do-i-update-libraries-or-modules-within-my-application).
+
+## From `v7.x.x` to `v8.x.x`
+
+ * The database schema has changed.
+
+   * The MySQL database schema has changed. Use the statement below to update your database:
+
+     ```sql
+     ALTER TABLE users
+         ADD COLUMN `force_logout` mediumint(7) unsigned NOT NULL DEFAULT '0' AFTER `last_login`;
+     ```
+
+   * The PostgreSQL database schema has changed. Use the statement below to update your database:
+
+     ```sql
+     ALTER TABLE users
+         ADD COLUMN "force_logout" INTEGER NOT NULL DEFAULT '0' CHECK ("force_logout" >= 0);
+     ```
+
+   * The SQLite database schema has changed. Use the statement below to update your database:
+
+     ```sql
+     ALTER TABLE users
+         ADD COLUMN "force_logout" INTEGER NOT NULL CHECK ("force_logout" >= 0) DEFAULT "0";
+     ```
+
+ * The method `logOutAndDestroySession` has been removed from class `Auth`. Instead, call the two separate methods `logOut` and `destroySession` from class `Auth` one after another for the same effect.
+
+ * If you have been using the return values of the methods `confirmEmail` or `confirmEmailAndSignIn` from class `Auth`, these return values have changed. Instead of only returning the new email address (which has just been verified), both methods now return an array with the old email address (if any) at index zero and the new email address (which has just been verified) at index one.
+
+## From `v6.x.x` to `v7.x.x`
+
+ * The method `logOutButKeepSession` from class `Auth` is now simply called `logOut`. Therefore, the former method `logout` is now called `logOutAndDestroySession`.
+
+ * The second argument of the `Auth` constructor, which was named `$useHttps`, has been removed. If you previously had it set to `true`, make sure to set the value of the `session.cookie_secure` directive to `1` now. You may do so either directly in your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`), via the `\ini_set` method or via the `\session_set_cookie_params` method. Otherwise, make sure that directive is set to `0`.
+
+ * The third argument of the `Auth` constructor, which was named `$allowCookiesScriptAccess`, has been removed. If you previously had it set to `true`, make sure to set the value of the `session.cookie_httponly` directive to `0` now. You may do so either directly in your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`), via the `\ini_set` method or via the `\session_set_cookie_params` method. Otherwise, make sure that directive is set to `1`.
+
+ * Only if *both* of the following two conditions are met:
+
+   * The directive `session.cookie_domain` is set to an empty value. It may have been set directly in your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`), via the `\ini_set` method or via the `\session_set_cookie_params` method. You can check the value of that directive by executing the following statement somewhere in your application:
+
+     ```php
+     \var_dump(\ini_get('session.cookie_domain'));
+     ```
+
+   * Your application is accessed via a registered or registrable *domain name*, either by yourself during development and testing or by your visitors and users in production. That means your application is *not*, or *not only*, accessed via `localhost` or via an IP address.
+
+   Then the domain scope for the [two cookies](README.md#cookies) used by this library has changed. You can handle this change in one of two different ways:
+
+   * Restore the old behavior by placing the following statement as early as possible in your application, and before you create the `Auth` instance:
+
+     ```php
+     \ini_set('session.cookie_domain', \preg_replace('/^www\./', '', $_SERVER['HTTP_HOST']));
+     ```
+
+     You may also evaluate the complete second parameter and put its value directly into your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`).
+
+   * Use the new domain scope for your application. To do so, you only need to [rename the cookies](README.md#renaming-the-librarys-cookies) used by this library in order to prevent conflicts with old cookies that have been created previously. Renaming the cookies is critically important here. We recommend a versioned name such as `session_v1` for the session cookie.
+
+ * Only if *both* of the following two conditions are met:
+
+   * The directive `session.cookie_domain` is set to a value that starts with the `www` subdomain. It may have been set directly in your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`), via the `\ini_set` method or via the `\session_set_cookie_params` method. You can check the value of that directive by executing the following statement somewhere in your application:
+
+     ```php
+     \var_dump(\ini_get('session.cookie_domain'));
+     ```
+
+   * Your application is accessed via a registered or registrable *domain name*, either by yourself during development and testing or by your visitors and users in production. That means your application is *not*, or *not only*, accessed via `localhost` or via an IP address.
+
+   Then the domain scope for [one of the cookies](README.md#cookies) used by this library has changed. To make your application work correctly with the new scope, [rename the cookies](README.md#renaming-the-librarys-cookies) used by this library in order to prevent conflicts with old cookies that have been created previously. Renaming the cookies is critically important here. We recommend a versioned name such as `session_v1` for the session cookie.
+
+ * If the directive `session.cookie_path` is set to an empty value, then the path scope for [one of the cookies](README.md#cookies) used by this library has changed. To make your application work correctly with the new scope, [rename the cookies](README.md#renaming-the-librarys-cookies) used by this library in order to prevent conflicts with old cookies that have been created previously. Renaming the cookies is critically important here. We recommend a versioned name such as `session_v1` for the session cookie.
+
+   The directive may have been set directly in your [PHP configuration](http://php.net/manual/en/configuration.file.php) (`php.ini`), via the `\ini_set` method or via the `\session_set_cookie_params` method. You can check the value of that directive by executing the following statement somewhere in your application:
+
+   ```php
+   \var_dump(\ini_get('session.cookie_path'));
+   ```
+
+## From `v5.x.x` to `v6.x.x`
+
+ * The database schema has changed.
+
+   * The MySQL database schema has changed. Use the statements below to update your database:
+
+     ```sql
+     ALTER TABLE users
+         ADD COLUMN roles_mask INT(10) UNSIGNED NOT NULL DEFAULT 0 AFTER verified,
+         ADD COLUMN resettable TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 AFTER verified;
+
+     ALTER TABLE users_confirmations
+         ADD COLUMN user_id INT(10) UNSIGNED NULL DEFAULT NULL AFTER id;
+
+     UPDATE users_confirmations SET user_id = (
+         SELECT id FROM users WHERE email = users_confirmations.email
+     ) WHERE user_id IS NULL;
+
+     ALTER TABLE users_confirmations
+         CHANGE COLUMN user_id user_id INT(10) UNSIGNED NOT NULL;
+
+     ALTER TABLE users_confirmations
+         ADD INDEX user_id (user_id ASC);
+
+     DROP TABLE users_throttling;
+
+     CREATE TABLE users_throttling (
+         bucket varchar(44) CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL,
+         tokens float unsigned NOT NULL,
+         replenished_at int(10) unsigned NOT NULL,
+         expires_at int(10) unsigned NOT NULL,
+         PRIMARY KEY (bucket),
+         KEY expires_at (expires_at)
+     ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+     ```
+
+   * The SQLite database schema has changed. Use the statements below to update your database:
+
+     ```sql
+     ALTER TABLE users
+         ADD COLUMN "roles_mask" INTEGER NOT NULL CHECK ("roles_mask" >= 0) DEFAULT "0",
+         ADD COLUMN "resettable" INTEGER NOT NULL CHECK ("resettable" >= 0) DEFAULT "1";
+
+     ALTER TABLE users_confirmations
+         ADD COLUMN "user_id" INTEGER CHECK ("user_id" >= 0);
+
+     UPDATE users_confirmations SET user_id = (
+         SELECT id FROM users WHERE email = users_confirmations.email
+     ) WHERE user_id IS NULL;
+
+     CREATE INDEX "users_confirmations.user_id" ON "users_confirmations" ("user_id");
+
+     DROP TABLE users_throttling;
+
+     CREATE TABLE "users_throttling" (
+         "bucket" VARCHAR(44) PRIMARY KEY NOT NULL,
+         "tokens" REAL NOT NULL CHECK ("tokens" >= 0),
+         "replenished_at" INTEGER NOT NULL CHECK ("replenished_at" >= 0),
+         "expires_at" INTEGER NOT NULL CHECK ("expires_at" >= 0)
+     );
+
+     CREATE INDEX "users_throttling.expires_at" ON "users_throttling" ("expires_at");
+     ```
+
+ * The method `setThrottlingOptions` has been removed.
+
+ * The method `changePassword` may now throw an additional `\Delight\Auth\TooManyRequestsException` if too many attempts have been made without the correct old password.
+
+ * The two methods `confirmEmail` and `confirmEmailAndSignIn` may now throw an additional `\Delight\Auth\UserAlreadyExistsException` if an attempt has been made to change the email address to an address that has become occupied in the meantime.
+
+ * The two methods `forgotPassword` and `resetPassword` may now throw an additional `\Delight\Auth\ResetDisabledException` if the user has disabled password resets for their account.
+
+ * The `Base64` class is now an external module and has been moved from the namespace `Delight\Auth` to the namespace `Delight\Base64`. The interface and the return values are not compatible with those from previous versions anymore.
+
+## From `v4.x.x` to `v5.x.x`
+
+ * The MySQL database schema has changed. Use the statement below to update your database:
+
+   ```sql
+   ALTER TABLE `users` ADD COLUMN `status` TINYINT(2) UNSIGNED NOT NULL DEFAULT 0 AFTER `username`;
+   ```
+
+ * The two classes `Auth` and `Base64` are now `final`, i.e. they can't be extended anymore, which has never been a good idea, anyway. If you still need to wrap your own methods around these classes, consider [object composition instead of class inheritance](https://en.wikipedia.org/wiki/Composition_over_inheritance).
+
+## From `v3.x.x` to `v4.x.x`
+
+ * PHP 5.6.0 or higher is now required.
+
+## From `v2.x.x` to `v3.x.x`
+
+ * The license has been changed from the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) to the [MIT License](https://opensource.org/licenses/MIT).
+
+## From `v1.x.x` to `v2.x.x`
+
+ * The MySQL schema has been changed from charset `utf8` to charset `utf8mb4` and from collation `utf8_general_ci` to collation `utf8mb4_unicode_ci`. Use the statements below to update the database schema:
+
+   ```sql
+   ALTER TABLE `users` CHANGE `email` `email` VARCHAR(249) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
+   ALTER TABLE `users_confirmations` CHANGE `email` `email` VARCHAR(249) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
+
+   -- ALTER DATABASE `` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
+
+   ALTER TABLE `users` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+   ALTER TABLE `users_confirmations` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+   ALTER TABLE `users_remembered` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+   ALTER TABLE `users_resets` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+   ALTER TABLE `users_throttling` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+   ALTER TABLE `users` CHANGE `email` `email` VARCHAR(249) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+   ALTER TABLE `users` CHANGE `username` `username` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL;
+
+   ALTER TABLE `users_confirmations` CHANGE `email` `email` VARCHAR(249) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+
+   ALTER TABLE `users_throttling` CHANGE `action_type` `action_type` ENUM('login','register','confirm_email') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;
+
+   REPAIR TABLE users;
+   OPTIMIZE TABLE users;
+   REPAIR TABLE users_confirmations;
+   OPTIMIZE TABLE users_confirmations;
+   REPAIR TABLE users_remembered;
+   OPTIMIZE TABLE users_remembered;
+   REPAIR TABLE users_resets;
+   OPTIMIZE TABLE users_resets;
+   REPAIR TABLE users_throttling;
+   OPTIMIZE TABLE users_throttling;
+   ```
diff --git a/vendor/delight-im/auth/README.md b/vendor/delight-im/auth/README.md
new file mode 100755
index 0000000..8ddd4c3
--- /dev/null
+++ b/vendor/delight-im/auth/README.md
@@ -0,0 +1,1337 @@
+# Auth
+
+**Authentication for PHP. Simple, lightweight and secure.**
+
+Written once, to be used everywhere.
+
+Completely framework-agnostic and database-agnostic.
+
+## Why do I need this?
+
+ * There are [tons](https://www.troyhunt.com/whos-who-of-bad-password-practices/) [of](https://blog.codinghorror.com/password-rules-are-bullshit/) [websites](https://badpasswordpolicies.tumblr.com/) with weak authentication systems. Don’t build such a site.
+ * Re-implementing a new authentication system for every PHP project is *not* a good idea.
+ * Building your own authentication classes piece by piece, and copying it to every project, is *not* recommended, either.
+ * A secure authentication system with an easy-to-use API should be thoroughly designed and planned.
+ * Peer-review for your critical infrastructure is *a must*.
+
+## Requirements
+
+ * PHP 5.6.0+
+   * PDO (PHP Data Objects) extension (`pdo`)
+     * MySQL Native Driver (`mysqlnd`) **or** PostgreSQL driver (`pgsql`) **or** SQLite driver (`sqlite`)
+   * OpenSSL extension (`openssl`)
+ * MySQL 5.5.3+ **or** MariaDB 5.5.23+ **or** PostgreSQL 9.5.10+ **or** SQLite 3.14.1+ **or** [other SQL databases](Database)
+
+## Installation
+
+ 1. Include the library via Composer [[?]](https://github.com/delight-im/Knowledge/blob/master/Composer%20(PHP).md):
+
+    ```
+    $ composer require delight-im/auth
+    ```
+
+ 1. Include the Composer autoloader:
+
+    ```php
+    require __DIR__ . '/vendor/autoload.php';
+    ```
+
+ 1. Set up a database and create the required tables:
+
+    * [MariaDB](Database/MySQL.sql)
+    * [MySQL](Database/MySQL.sql)
+    * [PostgreSQL](Database/PostgreSQL.sql)
+    * [SQLite](Database/SQLite.sql)
+
+## Upgrading
+
+Migrating from an earlier version of this project? See our [upgrade guide](Migration.md) for help.
+
+## Usage
+
+ * [Creating a new instance](#creating-a-new-instance)
+ * [Registration (sign up)](#registration-sign-up)
+ * [Login (sign in)](#login-sign-in)
+ * [Email verification](#email-verification)
+ * [Keeping the user logged in](#keeping-the-user-logged-in)
+ * [Password reset (“forgot password”)](#password-reset-forgot-password)
+   * [Initiating the request](#step-1-of-3-initiating-the-request)
+   * [Verifying an attempt](#step-2-of-3-verifying-an-attempt)
+   * [Updating the password](#step-3-of-3-updating-the-password)
+ * [Changing the current user’s password](#changing-the-current-users-password)
+ * [Changing the current user’s email address](#changing-the-current-users-email-address)
+ * [Re-sending confirmation requests](#re-sending-confirmation-requests)
+ * [Logout](#logout)
+ * [Accessing user information](#accessing-user-information)
+   * [Login state](#login-state)
+   * [User ID](#user-id)
+   * [Email address](#email-address)
+   * [Display name](#display-name)
+   * [Status information](#status-information)
+   * [Checking whether the user was “remembered”](#checking-whether-the-user-was-remembered)
+   * [IP address](#ip-address)
+   * [Additional user information](#additional-user-information)
+ * [Reconfirming the user’s password](#reconfirming-the-users-password)
+ * [Roles (or groups)](#roles-or-groups)
+   * [Checking roles](#checking-roles)
+   * [Available roles](#available-roles)
+   * [Permissions (or access rights, privileges or capabilities)](#permissions-or-access-rights-privileges-or-capabilities)
+   * [Custom role names](#custom-role-names)
+ * [Enabling or disabling password resets](#enabling-or-disabling-password-resets)
+ * [Throttling or rate limiting](#throttling-or-rate-limiting)
+ * [Administration (managing users)](#administration-managing-users)
+   * [Creating new users](#creating-new-users)
+   * [Deleting users](#deleting-users)
+   * [Assigning roles to users](#assigning-roles-to-users)
+   * [Taking roles away from users](#taking-roles-away-from-users)
+   * [Checking roles](#checking-roles-1)
+   * [Impersonating users (logging in as user)](#impersonating-users-logging-in-as-user)
+   * [Changing a user’s password](#changing-a-users-password)
+ * [Cookies](#cookies)
+   * [Renaming the library’s cookies](#renaming-the-librarys-cookies)
+   * [Defining the domain scope for cookies](#defining-the-domain-scope-for-cookies)
+   * [Restricting the path where cookies are available](#restricting-the-path-where-cookies-are-available)
+   * [Controlling client-side script access to cookies](#controlling-client-side-script-access-to-cookies)
+   * [Configuring transport security for cookies](#configuring-transport-security-for-cookies)
+ * [Utilities](#utilities)
+   * [Creating a random string](#creating-a-random-string)
+   * [Creating a UUID v4 as per RFC 4122](#creating-a-uuid-v4-as-per-rfc-4122)
+ * [Reading and writing session data](#reading-and-writing-session-data)
+
+### Creating a new instance
+
+```php
+// $db = new \PDO('mysql:dbname=my-database;host=localhost;charset=utf8mb4', 'my-username', 'my-password');
+// or
+// $db = new \PDO('pgsql:dbname=my-database;host=localhost;port=5432', 'my-username', 'my-password');
+// or
+// $db = new \PDO('sqlite:../Databases/my-database.sqlite');
+
+// or
+
+// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('mysql:dbname=my-database;host=localhost;charset=utf8mb4', 'my-username', 'my-password'));
+// or
+// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('pgsql:dbname=my-database;host=localhost;port=5432', 'my-username', 'my-password'));
+// or
+// $db = \Delight\Db\PdoDatabase::fromDsn(new \Delight\Db\PdoDsn('sqlite:../Databases/my-database.sqlite'));
+
+$auth = new \Delight\Auth\Auth($db);
+```
+
+If you have an open `PDO` connection already, just re-use it. The database user (e.g. `my-username`) needs at least the privileges `SELECT`, `INSERT`, `UPDATE` and `DELETE` for the tables used by this library (or their parent database).
+
+If your web server is behind a proxy server and `$_SERVER['REMOTE_ADDR']` only contains the proxy’s IP address, you must pass the user’s real IP address to the constructor in the second argument, which is named `$ipAddress`. The default is the usual remote IP address received by PHP.
+
+Should your database tables for this library need a common prefix, e.g. `my_users` instead of `users` (and likewise for the other tables), pass the prefix (e.g. `my_`) as the third parameter to the constructor, which is named `$dbTablePrefix`. This is optional and the prefix is empty by default.
+
+During development, you may want to disable the request limiting or throttling performed by this library. To do so, pass `false` to the constructor as the fourth argument, which is named `$throttling`. The feature is enabled by default.
+
+During the lifetime of a session, some user data may be changed remotely, either by a client in another session or by an administrator. That means this information must be regularly resynchronized with its authoritative source in the database, which this library does automatically. By default, this happens every five minutes. If you want to change this interval, pass a custom interval in seconds to the constructor as the fifth argument, which is named `$sessionResyncInterval`.
+
+If all your database tables need a common database name, schema name, or other qualifier that must be specified explicitly, you can optionally pass that qualifier to the constructor as the sixth parameter, which is named `$dbSchema`.
+
+If you want to use a `PdoDatabase` instance (e.g. `$db`) independently as well, please refer to the [documentation of the database library](https://github.com/delight-im/PHP-DB).
+
+### Registration (sign up)
+
+```php
+try {
+    $userId = $auth->register($_POST['email'], $_POST['password'], $_POST['username'], function ($selector, $token) {
+        echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
+    });
+
+    echo 'We have signed up a new user with the ID ' . $userId;
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Invalid email address');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password');
+}
+catch (\Delight\Auth\UserAlreadyExistsException $e) {
+    die('User already exists');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+**Note:** The anonymous callback function is a [closure](https://www.php.net/manual/functions.anonymous.php). Thus, besides its own parameters, only [superglobals](https://www.php.net/manual/language.variables.superglobals.php) like `$_GET`, `$_POST`, `$_COOKIE` and `$_SERVER` are available inside. For any other variable from the parent scope, you need to explicitly make a copy available inside by adding a `use` clause after the parameter list.
+
+The username in the third parameter is optional. You can pass `null` there if you don’t want to manage usernames.
+
+If you want to enforce unique usernames, on the other hand, simply call `registerWithUniqueUsername` instead of `register`, and be prepared to catch the `DuplicateUsernameException`.
+
+**Note:** When accepting and managing usernames, you may want to exclude non-printing control characters and certain printable special characters, as in the character class `[\x00-\x1f\x7f\/:\\]`. In order to do so, you could wrap the call to `Auth#register` or `Auth#registerWithUniqueUsername` inside a conditional branch, for example by only accepting usernames when the following condition is satisfied:
+
+```php
+if (\preg_match('/[\x00-\x1f\x7f\/:\\\\]/', $username) === 0) {
+    // ...
+}
+```
+
+For email verification, you should build an URL with the selector and token and send it to the user, e.g.:
+
+```php
+$url = 'https://www.example.com/verify_email?selector=' . \urlencode($selector) . '&token=' . \urlencode($token);
+```
+
+If you don’t want to perform email verification, just omit the last parameter to `Auth#register`. The new user will be active immediately, then.
+
+Need to store additional user information? Read on [here](#additional-user-information).
+
+**Note:** When sending an email to the user, please note that the (optional) username, at this point, has not yet been confirmed as acceptable to the owner of the (new) email address. It could contain offensive or misleading language chosen by someone who is not actually the owner of the address.
+
+### Login (sign in)
+
+```php
+try {
+    $auth->login($_POST['email'], $_POST['password']);
+
+    echo 'User is logged in';
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Wrong email address');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Wrong password');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Email not verified');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+If you want to sign in with usernames on the other hand, either in addition to the login via email address or as a replacement, that’s possible as well. Simply call the method `loginWithUsername` instead of method `login`. Then, instead of catching `InvalidEmailException`, make sure to catch both `UnknownUsernameException` and `AmbiguousUsernameException`. You may also want to read the notes about the uniqueness of usernames in the section that explains how to [sign up new users](#registration-sign-up).
+
+### Email verification
+
+Extract the selector and token from the URL that the user clicked on in the verification email.
+
+```php
+try {
+    $auth->confirmEmail($_GET['selector'], $_GET['token']);
+
+    echo 'Email address has been verified';
+}
+catch (\Delight\Auth\InvalidSelectorTokenPairException $e) {
+    die('Invalid token');
+}
+catch (\Delight\Auth\TokenExpiredException $e) {
+    die('Token expired');
+}
+catch (\Delight\Auth\UserAlreadyExistsException $e) {
+    die('Email address already exists');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+If you want the user to be automatically signed in after successful confirmation, just call `confirmEmailAndSignIn` instead of `confirmEmail`. That alternative method also supports [persistent logins](#keeping-the-user-logged-in) via its optional third parameter.
+
+On success, the two methods `confirmEmail` and `confirmEmailAndSignIn` both return an array with the user’s new email address, which has just been verified, at index one. If the confirmation was for an address change instead of a simple address verification, the user’s old email address will be included in the array at index zero.
+
+### Keeping the user logged in
+
+The third parameter to the `Auth#login` and `Auth#confirmEmailAndSignIn` methods controls whether the login is persistent with a long-lived cookie. With such a persistent login, users may stay authenticated for a long time, even when the browser session has already been closed and the session cookies have expired. Typically, you’ll want to keep the user logged in for weeks or months with this feature, which is known as “remember me” or “keep me logged in”. Many users will find this more convenient, but it may be less secure if they leave their devices unattended.
+
+```php
+if ($_POST['remember'] == 1) {
+    // keep logged in for one year
+    $rememberDuration = (int) (60 * 60 * 24 * 365.25);
+}
+else {
+    // do not keep logged in after session ends
+    $rememberDuration = null;
+}
+
+// ...
+
+$auth->login($_POST['email'], $_POST['password'], $rememberDuration);
+
+// ...
+```
+
+*Without* the persistent login, which is the *default* behavior, a user will only stay logged in until they close their browser, or as long as configured via `session.cookie_lifetime` and `session.gc_maxlifetime` in PHP.
+
+Omit the third parameter or set it to `null` to disable the feature. Otherwise, you may ask the user whether they want to enable “remember me”. This is usually done with a checkbox in your user interface. Use the input from that checkbox to decide between `null` and a pre-defined duration in seconds here, e.g. `60 * 60 * 24 * 365.25` for one year.
+
+### Password reset (“forgot password”)
+
+#### Step 1 of 3: Initiating the request
+
+```php
+try {
+    $auth->forgotPassword($_POST['email'], function ($selector, $token) {
+        echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
+    });
+
+    echo 'Request has been generated';
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Invalid email address');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Email not verified');
+}
+catch (\Delight\Auth\ResetDisabledException $e) {
+    die('Password reset is disabled');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+**Note:** The anonymous callback function is a [closure](https://www.php.net/manual/functions.anonymous.php). Thus, besides its own parameters, only [superglobals](https://www.php.net/manual/language.variables.superglobals.php) like `$_GET`, `$_POST`, `$_COOKIE` and `$_SERVER` are available inside. For any other variable from the parent scope, you need to explicitly make a copy available inside by adding a `use` clause after the parameter list.
+
+You should build an URL with the selector and token and send it to the user, e.g.:
+
+```php
+$url = 'https://www.example.com/reset_password?selector=' . \urlencode($selector) . '&token=' . \urlencode($token);
+```
+
+If the default lifetime of the password reset requests does not work for you, you can use the third parameter of `Auth#forgotPassword` to specify a custom interval in seconds after which the requests should expire.
+
+#### Step 2 of 3: Verifying an attempt
+
+As the next step, users will click on the link that they received. Extract the selector and token from the URL.
+
+If the selector/token pair is valid, let the user choose a new password:
+
+```php
+try {
+    $auth->canResetPasswordOrThrow($_GET['selector'], $_GET['token']);
+
+    echo 'Put the selector into a "hidden" field (or keep it in the URL)';
+    echo 'Put the token into a "hidden" field (or keep it in the URL)';
+
+    echo 'Ask the user for their new password';
+}
+catch (\Delight\Auth\InvalidSelectorTokenPairException $e) {
+    die('Invalid token');
+}
+catch (\Delight\Auth\TokenExpiredException $e) {
+    die('Token expired');
+}
+catch (\Delight\Auth\ResetDisabledException $e) {
+    die('Password reset is disabled');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+Alternatively, if you don’t need any error messages but only want to check the validity, you can use the slightly simpler version:
+
+```php
+if ($auth->canResetPassword($_GET['selector'], $_GET['token'])) {
+    echo 'Put the selector into a "hidden" field (or keep it in the URL)';
+    echo 'Put the token into a "hidden" field (or keep it in the URL)';
+
+    echo 'Ask the user for their new password';
+}
+```
+
+#### Step 3 of 3: Updating the password
+
+Now when you have the new password for the user (and still have the other two pieces of information), you can reset the password:
+
+```php
+try {
+    $auth->resetPassword($_POST['selector'], $_POST['token'], $_POST['password']);
+
+    echo 'Password has been reset';
+}
+catch (\Delight\Auth\InvalidSelectorTokenPairException $e) {
+    die('Invalid token');
+}
+catch (\Delight\Auth\TokenExpiredException $e) {
+    die('Token expired');
+}
+catch (\Delight\Auth\ResetDisabledException $e) {
+    die('Password reset is disabled');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+Do you want to have the respective user signed in automatically when their password reset succeeds? Simply use `Auth#resetPasswordAndSignIn` instead of `Auth#resetPassword` to log in the user immediately.
+
+If you need the user’s ID or email address, e.g. for sending them a notification that their password has successfully been reset, just use the return value of `Auth#resetPassword`, which is an array containing two entries named `id` and `email`.
+
+### Changing the current user’s password
+
+If a user is currently logged in, they may change their password.
+
+```php
+try {
+    $auth->changePassword($_POST['oldPassword'], $_POST['newPassword']);
+
+    echo 'Password has been changed';
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('Not logged in');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password(s)');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+Asking the user for their current (and soon *old*) password and requiring it for verification is the recommended way to handle password changes. This is shown above.
+
+If you’re sure that you don’t need that confirmation, however, you may call `changePasswordWithoutOldPassword` instead of `changePassword` and drop the first parameter from that method call (which would otherwise contain the old password).
+
+In any case, after the user’s password has been changed, you should send an email to their account’s primary email address as an out-of-band notification informing the account owner about this critical change.
+
+### Changing the current user’s email address
+
+If a user is currently logged in, they may change their email address.
+
+```php
+try {
+    if ($auth->reconfirmPassword($_POST['password'])) {
+        $auth->changeEmail($_POST['newEmail'], function ($selector, $token) {
+            echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email to the *new* address)';
+        });
+
+        echo 'The change will take effect as soon as the new email address has been confirmed';
+    }
+    else {
+        echo 'We can\'t say if the user is who they claim to be';
+    }
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Invalid email address');
+}
+catch (\Delight\Auth\UserAlreadyExistsException $e) {
+    die('Email address already exists');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Account not verified');
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('Not logged in');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+**Note:** The anonymous callback function is a [closure](https://www.php.net/manual/functions.anonymous.php). Thus, besides its own parameters, only [superglobals](https://www.php.net/manual/language.variables.superglobals.php) like `$_GET`, `$_POST`, `$_COOKIE` and `$_SERVER` are available inside. For any other variable from the parent scope, you need to explicitly make a copy available inside by adding a `use` clause after the parameter list.
+
+For email verification, you should build an URL with the selector and token and send it to the user, e.g.:
+
+```php
+$url = 'https://www.example.com/verify_email?selector=' . \urlencode($selector) . '&token=' . \urlencode($token);
+```
+
+**Note:** When sending an email to the user, please note that the (optional) username, at this point, has not yet been confirmed as acceptable to the owner of the (new) email address. It could contain offensive or misleading language chosen by someone who is not actually the owner of the address.
+
+After the request to change the email address has been made, or even better, after the change has been confirmed by the user, you should send an email to their account’s *previous* email address as an out-of-band notification informing the account owner about this critical change.
+
+**Note:** Changes to a user’s email address take effect in the local session immediately, as expected. In other sessions (e.g. on other devices), the changes may need up to five minutes to take effect, though. This increases performance and usually poses no problem. If you want to change this behavior, nevertheless, simply decrease (or perhaps increase) the value that you pass to the [`Auth` constructor](#creating-a-new-instance) as the argument named `$sessionResyncInterval`.
+
+### Re-sending confirmation requests
+
+If an earlier confirmation request could not be delivered to the user, or if the user missed that request, or if they just don’t want to wait any longer, you may re-send an earlier request like this:
+
+```php
+try {
+    $auth->resendConfirmationForEmail($_POST['email'], function ($selector, $token) {
+        echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
+    });
+
+    echo 'The user may now respond to the confirmation request (usually by clicking a link)';
+}
+catch (\Delight\Auth\ConfirmationRequestNotFound $e) {
+    die('No earlier request found that could be re-sent');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('There have been too many requests -- try again later');
+}
+```
+
+If you want to specify the user by their ID instead of by their email address, this is possible as well:
+
+```php
+try {
+    $auth->resendConfirmationForUserId($_POST['userId'], function ($selector, $token) {
+        echo 'Send ' . $selector . ' and ' . $token . ' to the user (e.g. via email)';
+    });
+
+    echo 'The user may now respond to the confirmation request (usually by clicking a link)';
+}
+catch (\Delight\Auth\ConfirmationRequestNotFound $e) {
+    die('No earlier request found that could be re-sent');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('There have been too many requests -- try again later');
+}
+```
+
+**Note:** The anonymous callback function is a [closure](https://www.php.net/manual/functions.anonymous.php). Thus, besides its own parameters, only [superglobals](https://www.php.net/manual/language.variables.superglobals.php) like `$_GET`, `$_POST`, `$_COOKIE` and `$_SERVER` are available inside. For any other variable from the parent scope, you need to explicitly make a copy available inside by adding a `use` clause after the parameter list.
+
+Usually, you should build an URL with the selector and token and send it to the user, e.g. as follows:
+
+```php
+$url = 'https://www.example.com/verify_email?selector=' . \urlencode($selector) . '&token=' . \urlencode($token);
+```
+
+**Note:** When sending an email to the user, please note that the (optional) username, at this point, has not yet been confirmed as acceptable to the owner of the (new) email address. It could contain offensive or misleading language chosen by someone who is not actually the owner of the address.
+
+### Logout
+
+```php
+$auth->logOut();
+
+// or
+
+try {
+    $auth->logOutEverywhereElse();
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('Not logged in');
+}
+
+// or
+
+try {
+    $auth->logOutEverywhere();
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('Not logged in');
+}
+```
+
+Additionally, if you store custom information in the session as well, and if you want that information to be deleted, you can destroy the entire session by calling a second method:
+
+```php
+$auth->destroySession();
+```
+
+**Note:** Global logouts take effect in the local session immediately, as expected. In other sessions (e.g. on other devices), the changes may need up to five minutes to take effect, though. This increases performance and usually poses no problem. If you want to change this behavior, nevertheless, simply decrease (or perhaps increase) the value that you pass to the [`Auth` constructor](#creating-a-new-instance) as the argument named `$sessionResyncInterval`.
+
+### Accessing user information
+
+#### Login state
+
+```php
+if ($auth->isLoggedIn()) {
+    echo 'User is signed in';
+}
+else {
+    echo 'User is not signed in yet';
+}
+```
+
+A shorthand/alias for this method is `$auth->check()`.
+
+#### User ID
+
+```php
+$id = $auth->getUserId();
+```
+
+If the user is not currently signed in, this returns `null`.
+
+A shorthand/alias for this method is `$auth->id()`.
+
+#### Email address
+
+```php
+$email = $auth->getEmail();
+```
+
+If the user is not currently signed in, this returns `null`.
+
+#### Display name
+
+```php
+$username = $auth->getUsername();
+```
+
+Remember that usernames are optional and there is only a username if you supplied it during registration.
+
+If the user is not currently signed in, this returns `null`.
+
+#### Status information
+
+```php
+if ($auth->isNormal()) {
+    echo 'User is in default state';
+}
+
+if ($auth->isArchived()) {
+    echo 'User has been archived';
+}
+
+if ($auth->isBanned()) {
+    echo 'User has been banned';
+}
+
+if ($auth->isLocked()) {
+    echo 'User has been locked';
+}
+
+if ($auth->isPendingReview()) {
+    echo 'User is pending review';
+}
+
+if ($auth->isSuspended()) {
+    echo 'User has been suspended';
+}
+```
+
+#### Checking whether the user was “remembered”
+
+```php
+if ($auth->isRemembered()) {
+    echo 'User did not sign in but was logged in through their long-lived cookie';
+}
+else {
+    echo 'User signed in manually';
+}
+```
+
+If the user is not currently signed in, this returns `null`.
+
+#### IP address
+
+```php
+$ip = $auth->getIpAddress();
+```
+
+#### Additional user information
+
+In order to preserve this library’s suitability for all purposes as well as its full re-usability, it doesn’t come with additional bundled columns for user information. But you don’t have to do without additional user information, of course:
+
+Here’s how to use this library with your own tables for custom user information in a maintainable and re-usable way:
+
+ 1. Add any number of custom database tables where you store custom user information, e.g. a table named `profiles`.
+ 1. Whenever you call the `register` method (which returns the new user’s ID), add your own logic afterwards that fills your custom database tables.
+ 1. If you need the custom user information only rarely, you may just retrieve it as needed. If you need it more frequently, however, you’d probably want to have it in your session data. The following method is how you can load and access your data in a reliable way:
+
+    ```php
+    function getUserInfo(\Delight\Auth\Auth $auth) {
+        if (!$auth->isLoggedIn()) {
+            return null;
+        }
+
+        if (!isset($_SESSION['_internal_user_info'])) {
+            // TODO: load your custom user information and assign it to the session variable below
+            // $_SESSION['_internal_user_info'] = ...
+        }
+
+        return $_SESSION['_internal_user_info'];
+    }
+    ```
+
+### Reconfirming the user’s password
+
+Whenever you want to confirm the user’s identity again, e.g. before the user is allowed to perform some “dangerous” action, you should verify their password again to confirm that they actually are who they claim to be.
+
+For example, when a user has been remembered by a long-lived cookie and thus `Auth#isRemembered` returns `true`, this means that the user probably has not entered their password for quite some time anymore. You may want to reconfirm their password in that case.
+
+```php
+try {
+    if ($auth->reconfirmPassword($_POST['password'])) {
+        echo 'The user really seems to be who they claim to be';
+    }
+    else {
+        echo 'We can\'t say if the user is who they claim to be';
+    }
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('The user is not signed in');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+### Roles (or groups)
+
+Every user can have any number of roles, which you can use to implement authorization and to refine your access controls.
+
+Users may have no role at all (which they do by default), exactly one role, or any arbitrary combination of roles.
+
+#### Checking roles
+
+```php
+if ($auth->hasRole(\Delight\Auth\Role::SUPER_MODERATOR)) {
+    echo 'The user is a super moderator';
+}
+
+// or
+
+if ($auth->hasAnyRole(\Delight\Auth\Role::DEVELOPER, \Delight\Auth\Role::MANAGER)) {
+    echo 'The user is either a developer, or a manager, or both';
+}
+
+// or
+
+if ($auth->hasAllRoles(\Delight\Auth\Role::DEVELOPER, \Delight\Auth\Role::MANAGER)) {
+    echo 'The user is both a developer and a manager';
+}
+```
+
+While the method `hasRole` takes exactly one role as its argument, the two methods `hasAnyRole` and `hasAllRoles` can take any number of roles that you would like to check for.
+
+Alternatively, you can get a list of all the roles that have been assigned to the user:
+
+```php
+$auth->getRoles();
+```
+
+#### Available roles
+
+```php
+\Delight\Auth\Role::ADMIN;
+\Delight\Auth\Role::AUTHOR;
+\Delight\Auth\Role::COLLABORATOR;
+\Delight\Auth\Role::CONSULTANT;
+\Delight\Auth\Role::CONSUMER;
+\Delight\Auth\Role::CONTRIBUTOR;
+\Delight\Auth\Role::COORDINATOR;
+\Delight\Auth\Role::CREATOR;
+\Delight\Auth\Role::DEVELOPER;
+\Delight\Auth\Role::DIRECTOR;
+\Delight\Auth\Role::EDITOR;
+\Delight\Auth\Role::EMPLOYEE;
+\Delight\Auth\Role::MAINTAINER;
+\Delight\Auth\Role::MANAGER;
+\Delight\Auth\Role::MODERATOR;
+\Delight\Auth\Role::PUBLISHER;
+\Delight\Auth\Role::REVIEWER;
+\Delight\Auth\Role::SUBSCRIBER;
+\Delight\Auth\Role::SUPER_ADMIN;
+\Delight\Auth\Role::SUPER_EDITOR;
+\Delight\Auth\Role::SUPER_MODERATOR;
+\Delight\Auth\Role::TRANSLATOR;
+```
+
+You can use any of these roles and ignore those that you don’t need. The list above can also be retrieved programmatically, in one of three formats:
+
+```php
+\Delight\Auth\Role::getMap();
+// or
+\Delight\Auth\Role::getNames();
+// or
+\Delight\Auth\Role::getValues();
+```
+
+#### Permissions (or access rights, privileges or capabilities)
+
+The permissions of each user are encoded in the way that role requirements are specified throughout your code base. If those requirements are evaluated with a specific user’s set of roles, implicitly checked permissions are the result.
+
+For larger projects, it is often recommended to maintain the definition of permissions in a single place. You then don’t check for *roles* in your business logic, but you check for *individual permissions*. You could implement that concept as follows:
+
+```php
+function canEditArticle(\Delight\Auth\Auth $auth) {
+    return $auth->hasAnyRole(
+        \Delight\Auth\Role::MODERATOR,
+        \Delight\Auth\Role::SUPER_MODERATOR,
+        \Delight\Auth\Role::ADMIN,
+        \Delight\Auth\Role::SUPER_ADMIN
+    );
+}
+
+// ...
+
+if (canEditArticle($auth)) {
+    echo 'The user can edit articles here';
+}
+
+// ...
+
+if (canEditArticle($auth)) {
+    echo '... and here';
+}
+
+// ...
+
+if (canEditArticle($auth)) {
+    echo '... and here';
+}
+```
+
+As you can see, the permission of whether a certain user can edit an article is stored at a central location. This implementation has two major advantages:
+
+If you *want to know* which users can edit articles, you don’t have to check your business logic in various places, but you only have to look where the specific permission is defined. And if you want to *change* who can edit an article, you only have to do this in one single place as well, not throughout your whole code base.
+
+But this also comes with slightly more overhead when implementing the access restrictions for the first time, which may or may not be worth it for your project.
+
+#### Custom role names
+
+If the names of the included roles don’t work for you, you can alias any number of roles using your own identifiers, e.g. like this:
+
+```php
+namespace My\Namespace;
+
+final class MyRole {
+
+    const CUSTOMER_SERVICE_AGENT = \Delight\Auth\Role::REVIEWER;
+    const FINANCIAL_DIRECTOR = \Delight\Auth\Role::COORDINATOR;
+
+    private function __construct() {}
+
+}
+```
+
+The example above would allow you to use
+
+```php
+\My\Namespace\MyRole::CUSTOMER_SERVICE_AGENT;
+// and
+\My\Namespace\MyRole::FINANCIAL_DIRECTOR;
+```
+
+instead of
+
+```php
+\Delight\Auth\Role::REVIEWER;
+// and
+\Delight\Auth\Role::COORDINATOR;
+```
+
+Just remember *not* to alias a *single* included role to *multiple* roles with custom names.
+
+### Enabling or disabling password resets
+
+While password resets via email are a convenient feature that most users find helpful from time to time, the availability of this feature implies that accounts on your service are only ever as secure as the user’s associated email account.
+
+You may provide security-conscious (and experienced) users with the possibility to disable password resets for their accounts (and to enable them again later) for enhanced security:
+
+```php
+try {
+    if ($auth->reconfirmPassword($_POST['password'])) {
+        $auth->setPasswordResetEnabled($_POST['enabled'] == 1);
+
+        echo 'The setting has been changed';
+    }
+    else {
+        echo 'We can\'t say if the user is who they claim to be';
+    }
+}
+catch (\Delight\Auth\NotLoggedInException $e) {
+    die('The user is not signed in');
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    die('Too many requests');
+}
+```
+
+In order to check the current value of this setting, use the return value from
+
+```php
+$auth->isPasswordResetEnabled();
+```
+
+for the correct default option in your user interface. You don’t need to check this value for restrictions of the feature, which are enforced automatically.
+
+### Throttling or rate limiting
+
+All methods provided by this library are *automatically* protected against excessive numbers of requests from clients. If the need arises, you can (temporarily) disable this protection using the [`$throttling` parameter](#creating-a-new-instance) passed to the constructor.
+
+If you would like to throttle or rate limit *external* features or methods as well, e.g. those in your own code, you can make use of the built-in helper method for throttling and rate limiting:
+
+```php
+try {
+    // throttle the specified resource or feature to *3* requests per *60* seconds
+    $auth->throttle([ 'my-resource-name' ], 3, 60);
+
+    echo 'Do something with the resource or feature';
+}
+catch (\Delight\Auth\TooManyRequestsException $e) {
+    // operation cancelled
+
+    \http_response_code(429);
+    exit;
+}
+```
+
+If the protection of the resource or feature should additionally depend on another attribute, e.g. to track something separately per IP address, just add more data to the resource description, such as:
+
+```php
+[ 'my-resource-name', $_SERVER['REMOTE_ADDR'] ]
+// instead of
+// [ 'my-resource-name' ]
+```
+
+Allowing short bursts of activity during peak demand is possible by specifying a burst factor as the fourth argument. A value of `5`, for example, would permit temporary bursts of fivefold activity, compared to the generally accepted level.
+
+In some cases, you may just want to *simulate* the throttling or rate limiting. This lets you check whether an action would be permitted without actually modifying the activity tracker. To do so, simply pass `true` as the fifth argument.
+
+**Note:** When you disable throttling on the instance (using the [`$throttling` parameter](#creating-a-new-instance) passed to the constructor), this turns off both the automatic internal protection and the effect of any calls to `Auth#throttle` in your own application code – unless you also set the optional `$force` parameter to `true` in specific `Auth#throttle` calls.
+
+### Administration (managing users)
+
+The administrative interface is available via `$auth->admin()`. You can call various method on this interface, as documented below.
+
+Do not forget to implement secure access control before exposing access to this interface. For example, you may provide access to this interface to logged in users with the administrator role only, or use the interface in private scripts only.
+
+#### Creating new users
+
+```php
+try {
+    $userId = $auth->admin()->createUser($_POST['email'], $_POST['password'], $_POST['username']);
+
+    echo 'We have signed up a new user with the ID ' . $userId;
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Invalid email address');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password');
+}
+catch (\Delight\Auth\UserAlreadyExistsException $e) {
+    die('User already exists');
+}
+```
+
+The username in the third parameter is optional. You can pass `null` there if you don’t want to manage usernames.
+
+If you want to enforce unique usernames, on the other hand, simply call `createUserWithUniqueUsername` instead of `createUser`, and be prepared to catch the `DuplicateUsernameException`.
+
+#### Deleting users
+
+Deleting users by their ID:
+
+```php
+try {
+    $auth->admin()->deleteUserById($_POST['id']);
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown ID');
+}
+```
+
+Deleting users by their email address:
+
+```php
+try {
+    $auth->admin()->deleteUserByEmail($_POST['email']);
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Unknown email address');
+}
+```
+
+Deleting users by their username:
+
+```php
+try {
+    $auth->admin()->deleteUserByUsername($_POST['username']);
+}
+catch (\Delight\Auth\UnknownUsernameException $e) {
+    die('Unknown username');
+}
+catch (\Delight\Auth\AmbiguousUsernameException $e) {
+    die('Ambiguous username');
+}
+```
+
+#### Retrieving a list of registered users
+
+When fetching a list of all users, the requirements vary greatly between projects and use cases, and customization is common. For example, you might want to fetch different columns, join related tables, filter by certain criteria, change how results are sorted (in varying direction), and limit the number of results (while providing an offset).
+
+That’s why it’s easier to use a single custom SQL query. Start with the following:
+
+```sql
+SELECT id, email, username, status, verified, roles_mask, registered, last_login FROM users;
+```
+
+#### Assigning roles to users
+
+```php
+try {
+    $auth->admin()->addRoleForUserById($userId, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown user ID');
+}
+
+// or
+
+try {
+    $auth->admin()->addRoleForUserByEmail($userEmail, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Unknown email address');
+}
+
+// or
+
+try {
+    $auth->admin()->addRoleForUserByUsername($username, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\UnknownUsernameException $e) {
+    die('Unknown username');
+}
+catch (\Delight\Auth\AmbiguousUsernameException $e) {
+    die('Ambiguous username');
+}
+```
+
+**Note:** Changes to a user’s set of roles may need up to five minutes to take effect. This increases performance and usually poses no problem. If you want to change this behavior, nevertheless, simply decrease (or perhaps increase) the value that you pass to the [`Auth` constructor](#creating-a-new-instance) as the argument named `$sessionResyncInterval`.
+
+#### Taking roles away from users
+
+```php
+try {
+    $auth->admin()->removeRoleForUserById($userId, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown user ID');
+}
+
+// or
+
+try {
+    $auth->admin()->removeRoleForUserByEmail($userEmail, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Unknown email address');
+}
+
+// or
+
+try {
+    $auth->admin()->removeRoleForUserByUsername($username, \Delight\Auth\Role::ADMIN);
+}
+catch (\Delight\Auth\UnknownUsernameException $e) {
+    die('Unknown username');
+}
+catch (\Delight\Auth\AmbiguousUsernameException $e) {
+    die('Ambiguous username');
+}
+```
+
+**Note:** Changes to a user’s set of roles may need up to five minutes to take effect. This increases performance and usually poses no problem. If you want to change this behavior, nevertheless, simply decrease (or perhaps increase) the value that you pass to the [`Auth` constructor](#creating-a-new-instance) as the argument named `$sessionResyncInterval`.
+
+#### Checking roles
+
+```php
+try {
+    if ($auth->admin()->doesUserHaveRole($userId, \Delight\Auth\Role::ADMIN)) {
+        echo 'The specified user is an administrator';
+    }
+    else {
+        echo 'The specified user is not an administrator';
+    }
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown user ID');
+}
+```
+
+Alternatively, you can get a list of all the roles that have been assigned to the user:
+
+```php
+$auth->admin()->getRolesForUserById($userId);
+```
+
+#### Impersonating users (logging in as user)
+
+```php
+try {
+    $auth->admin()->logInAsUserById($_POST['id']);
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown ID');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Email address not verified');
+}
+
+// or
+
+try {
+    $auth->admin()->logInAsUserByEmail($_POST['email']);
+}
+catch (\Delight\Auth\InvalidEmailException $e) {
+    die('Unknown email address');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Email address not verified');
+}
+
+// or
+
+try {
+    $auth->admin()->logInAsUserByUsername($_POST['username']);
+}
+catch (\Delight\Auth\UnknownUsernameException $e) {
+    die('Unknown username');
+}
+catch (\Delight\Auth\AmbiguousUsernameException $e) {
+    die('Ambiguous username');
+}
+catch (\Delight\Auth\EmailNotVerifiedException $e) {
+    die('Email address not verified');
+}
+```
+
+#### Changing a user’s password
+
+```php
+try {
+    $auth->admin()->changePasswordForUserById($_POST['id'], $_POST['newPassword']);
+}
+catch (\Delight\Auth\UnknownIdException $e) {
+    die('Unknown ID');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password');
+}
+
+// or
+
+try {
+    $auth->admin()->changePasswordForUserByUsername($_POST['username'], $_POST['newPassword']);
+}
+catch (\Delight\Auth\UnknownUsernameException $e) {
+    die('Unknown username');
+}
+catch (\Delight\Auth\AmbiguousUsernameException $e) {
+    die('Ambiguous username');
+}
+catch (\Delight\Auth\InvalidPasswordException $e) {
+    die('Invalid password');
+}
+```
+
+### Cookies
+
+This library uses two cookies to keep state on the client: The first, whose name you can retrieve using
+
+```php
+\session_name();
+```
+
+is the general (mandatory) session cookie. The second (optional) cookie is only used for [persistent logins](#keeping-the-user-logged-in) and its name can be retrieved as follows:
+
+```php
+\Delight\Auth\Auth::createRememberCookieName();
+```
+
+#### Renaming the library’s cookies
+
+You can rename the session cookie used by this library through one of the following means, in order of recommendation:
+
+ * In the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`), find the line with the `session.name` directive and change its value to something like `session_v1`, as in:
+
+   ```
+   session.name = session_v1
+   ```
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\ini_set` to change `session.name` to something like `session_v1`, as in:
+
+   ```php
+   \ini_set('session.name', 'session_v1');
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\session_name` with an argument like `session_v1`, as in:
+
+   ```php
+   \session_name('session_v1');
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+The name of the cookie for [persistent logins](#keeping-the-user-logged-in) will change as well – automatically – following your change of the session cookie’s name.
+
+#### Defining the domain scope for cookies
+
+A cookie’s `domain` attribute controls which domain (and which subdomains) the cookie will be valid for, and thus where the user’s session and authentication state will be available.
+
+The recommended default is an empty string, which means that the cookie will only be valid for the *exact* current host, *excluding* any subdomains that may exist. You should only use a different value if you need to share cookies between different subdomains. Often, you’ll want to share cookies between the bare domain and the `www` subdomain, but you might also want to share them between any other set of subdomains.
+
+Whatever set of subdomains you choose, you should set the cookie’s attribute to the *most specific* domain name that still includes all your required subdomains. For example, to share cookies between `example.com` and `www.example.com`, you would set the attribute to `example.com`. But if you wanted to share cookies between `sub1.app.example.com` and `sub2.app.example.com`, you should set the attribute to `app.example.com`. Any explicitly specified domain name will always *include* all subdomains that may exist.
+
+You can change the attribute through one of the following means, in order of recommendation:
+
+ * In the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`), find the line with the `session.cookie_domain` directive and change its value as desired, e.g.:
+
+   ```
+   session.cookie_domain = example.com
+   ```
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\ini_set` to change the value of the `session.cookie_domain` directive as desired, e.g.:
+
+   ```php
+   \ini_set('session.cookie_domain', 'example.com');
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+#### Restricting the path where cookies are available
+
+A cookie’s `path` attribute controls which directories (and subdirectories) the cookie will be valid for, and thus where the user’s session and authentication state will be available.
+
+In most cases, you’ll want to make cookies available for all paths, i.e. any directory and file, starting in the root directory. That is what a value of `/` for the attribute does, which is also the recommended default. You should only change this attribute to a different value, e.g. `/path/to/subfolder`, if you want to restrict which directories your cookies will be available in, e.g. to host multiple applications side-by-side, in different directories, under the same domain name.
+
+You can change the attribute through one of the following means, in order of recommendation:
+
+ * In the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`), find the line with the `session.cookie_path` directive and change its value as desired, e.g.:
+
+   ```
+   session.cookie_path = /
+   ```
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\ini_set` to change the value of the `session.cookie_path` directive as desired, e.g.:
+
+   ```php
+   \ini_set('session.cookie_path', '/');
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+#### Controlling client-side script access to cookies
+
+Using the `httponly` attribute, you can control whether client-side scripts, i.e. JavaScript, should be able to access your cookies or not. For security reasons, it is best to *deny* script access to your cookies, which reduces the damage that successful XSS attacks against your application could do, for example.
+
+Thus, you should always set `httponly` to `1`, except for the rare cases where you really need access to your cookies from JavaScript and can’t find any better solution. In those cases, set the attribute to `0`, but be aware of the consequences.
+
+You can change the attribute through one of the following means, in order of recommendation:
+
+ * In the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`), find the line with the `session.cookie_httponly` directive and change its value as desired, e.g.:
+
+   ```
+   session.cookie_httponly = 1
+   ```
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\ini_set` to change the value of the `session.cookie_httponly` directive as desired, e.g.:
+
+   ```php
+   \ini_set('session.cookie_httponly', 1);
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+#### Configuring transport security for cookies
+
+Using the `secure` attribute, you can control whether cookies should be sent over *any* connection, including plain HTTP, or whether a secure connection, i.e. HTTPS (with SSL/TLS), should be required. The former (less secure) mode can be chosen by setting the attribute to `0`, and the latter (more secure) mode can be chosen by setting the attribute to `1`.
+
+Obviously, this solely depends on whether you are able to serve *all* pages exclusively via HTTPS. If you can, you should set the attribute to `1` and possibly combine it with HTTP redirects to the secure protocol and HTTP Strict Transport Security (HSTS). Otherwise, you may have to keep the attribute set to `0`.
+
+You can change the attribute through one of the following means, in order of recommendation:
+
+ * In the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`), find the line with the `session.cookie_secure` directive and change its value as desired, e.g.:
+
+   ```
+   session.cookie_secure = 1
+   ```
+
+ * As early as possible in your application, and before you create the `Auth` instance, call `\ini_set` to change the value of the `session.cookie_secure` directive as desired, e.g.:
+
+   ```php
+   \ini_set('session.cookie_secure', 1);
+   ```
+
+   For this to work, `session.auto_start` must be set to `0` in the [PHP configuration](https://www.php.net/manual/configuration.file.php) (`php.ini`).
+
+### Utilities
+
+#### Creating a random string
+
+```php
+$length = 24;
+$randomStr = \Delight\Auth\Auth::createRandomString($length);
+```
+
+#### Creating a UUID v4 as per RFC 4122
+
+```php
+$uuid = \Delight\Auth\Auth::createUuid();
+```
+
+### Reading and writing session data
+
+For detailed information on how to read and write session data conveniently, please refer to [the documentation of the session library](https://github.com/delight-im/PHP-Cookie#reading-and-writing-session-data), which is included by default.
+
+## Frequently asked questions
+
+### What about password hashing?
+
+Any password or authentication token is automatically hashed using the [“bcrypt”](https://en.wikipedia.org/wiki/Bcrypt) function, which is based on the [“Blowfish” cipher](https://en.wikipedia.org/wiki/Blowfish_(cipher)) and (still) considered one of the strongest password hash functions today. “bcrypt” is used with 1,024 iterations, i.e. a “cost” factor of 10. A random [“salt”](https://en.wikipedia.org/wiki/Salt_(cryptography)) is applied automatically as well.
+
+You can verify this configuration by looking at the hashes in your database table `users`. If the above is true with your setup, all password hashes in your `users` table should start with the prefix `$2$10$`, `$2a$10$` or `$2y$10$`.
+
+When new algorithms (such as [Argon2](https://en.wikipedia.org/wiki/Argon2)) may be introduced in the future, this library will automatically take care of “upgrading” your existing password hashes whenever a user signs in or changes their password.
+
+### How can I implement custom password requirements?
+
+Enforcing a minimum length for passwords is usually a good idea. Apart from that, you may want to look up whether a potential password is in some blacklist, which you could manage in a database or in a file, in order to prevent dictionary words or commonly used passwords from being used in your application.
+
+To allow for maximum flexibility and ease of use, this library has been designed so that it does *not* contain any further checks for password requirements itself, but instead allows you to wrap your own checks around the relevant calls to library methods. Example:
+
+```php
+function isPasswordAllowed($password) {
+    if (\strlen($password) < 8) {
+        return false;
+    }
+
+    $blacklist = [ 'password1', '123456', 'qwerty' ];
+
+    if (\in_array($password, $blacklist)) {
+        return false;
+    }
+
+    return true;
+}
+
+if (isPasswordAllowed($password)) {
+    $auth->register($email, $password);
+}
+```
+
+### Why are there problems when using other libraries that work with sessions?
+
+You might try loading this library first, and creating the `Auth` instance first, *before* loading the other libraries. Apart from that, there’s probably not much we can do here.
+
+### Why are other sites not able to frame or embed my site?
+
+If you want to let others include your site in a ``, `